新书推荐:6.2 else if语句

本节必须掌握的知识点:

  示例代码二十

   代码分析

    汇编解析

if语句表达形式3

if(表达式1)

      statement1

else if(表达式2)

statement2

else if(表达式3)

statement3

……

else

  statementN

解析:

如果表达式1非0,则执行statement1,执行完退出语句;

如果表达式2非0,则执行statement2,执行完退出语句;

如果表达式3非0,则执行statement3,执行完退出语句;

如果表达式4非0,则执行statement4,执行完退出语句;

……

如果所有的表达式都不满足,则执行else对应的statement语句。

示例代码二十

6.2.1 示例二十

●第一步:分析需求,设计程序结构框架。

分析需求:某中学考试成绩分为ABCDE 5个等级,在[90,100]区间内的成绩为A,在[80,90)区间内的成绩为B,在[70,80)区间内的成绩为C,在[60,70)区间内的成绩为D,在[0,60)区间内的成绩为E。

设计程序结构框架:分支结构(if语句形式3)if/else if语句。

       ●第二步:数据定义,定义恰当的数据结构;

       int score;//定义一个int类型的整型局部变量。

       ●第三步:分析算法。

       根据条件表达式判断考试分数属于哪个等级。

       ●第四步:编写伪代码,即用我们自己的语言来编写程序。

       int main(void) {

    定义一个int类型整型变量num;

    调用printf函数打印一个提示信息"请输入一个整数:";

    调用scanf_s函数接收键盘输入一个整数,并存入变量num;

    if (score >= 90 && score <= 100)如果条件为真

        调用printf函数输出"您在A等级\n";

else if (score >= 80 && score < 90) 如果条件为真

        调用printf函数输出"您在B等级\n";

else if (score >= 70 && score < 80) 如果条件为真

        调用printf函数输出"您在C等级\n";

else if (score >= 60 && score < 70) 如果条件为真

        调用printf函数输出"您在D等级\n";

else 其他情形

        调用printf函数输出"您在E等级\n";

    system("pause");

    return 0;                                            

}

●第五步:画流程图,使用Visio、Excel或者其他绘图工具绘制算法流程和逻辑关系图;    

             

图6-3 示例二十流程图

●第六步:编写源程序,其实就是将我们的伪代码翻译成计算机语言;

/*

   根据学生考试分数,输出ABCDE 5个等级

*/

#include <stdio.h>

#include <stdlib.h>

int main(void) {

    int score = 0;

    printf("请输入您的成绩:");

    scanf_s("%d", &score);

    if (score >= 90 && score <= 100)

        printf("您在A等级\n");

    else if (score >= 80 && score < 90)

        printf("您在B等级\n");

    else if (score >= 70 && score < 80)                            

        printf("您在C等级\n");

    else if (score >= 60 && score < 70)                   

        printf("您在D等级\n");

    else

        printf("您在E等级\n");

    system("pause");

    return 0;

}

输出结果:

请输入您的成绩:91

您在A等级

       请输入您的成绩:81

您在B等级

请输入您的成绩:71

您在C等级

请输入您的成绩:61

您在D等级

请输入您的成绩:0

您在E等级

       ●第七步:调试程序,修复程序中可能出现的BUG;

参见反汇编代码。

●第八步:优化代码,尝试更好的设计方案,效率更高的算法,逻辑更为清晰简洁明了。

示例二十一中我们将改用if/else结构的简化形式switch结构。

6.2.2 代码分析                     

解析执行过程:

  1. 输入成绩,score = 71;虽然成绩通常不会是一个负整数,应该定义一个usigned int类型变量,这是对的。但是int类型可以表示的数据范围足够使用,所以这里并没有定义为usigned int类型,而是int类型也没什么问题。
  2. 执行表达式(score>=90 && score<=100),值为0,继续判断其他条件;
  3. 执行表达式(score>=80 && score<90),值为0,继续判断其他条件;

4、执行表达式(score>=70 && score<80),值为0,满足条件,执行对应的语句: printf("您在C等级\n"); 跳出if语句,不再判断其它if语句。

5、结束。

   【注意】为了增强程序的可读性强,我们通常会保留大括号,如下所示:

#include <stdio.h>

#include <windows.h>

int main(void)

{

       int score = 0;

       printf("请输入您的成绩:");

加上了程序界定符“{” “}” ,这样增强代码的可读性

       scanf("%d",&score);

       if(score>=90 && score<=100)

       {

         printf("您在A等级\n");

       }

       else if(score>=80 && score<90)

       {

         printf("您在B等级\n");

       }

       else if(score>=70 && score<80)

       {

         printf("您在C等级\n");

       }

       else if(score>=60 && score<70)

       {

         printf("您在D等级\n");

       }

       else

       {

         printf("您在E等级\n");

       }

    system("pause");

    return 0;

}

6.2.3 汇编解析

汇编代码

;C标准库头文件和导入库

include vcIO.inc

.data      

score sdword  ?

.const    

szMsg1 db "请输入您的成绩:",0

szMsg2 db "%d",0

szMsg3 db "您在A等级",0dh,0ah,0

szMsg4 db "您在B等级",0dh,0ah,0

szMsg5 db "您在C等级",0dh,0ah,0

szMsg6 db "您在D等级",0dh,0ah,0

szMsg7 db "您在E等级",0dh,0ah,0

.code     

start:

       ;输入整数num

       invoke printf,offset szMsg1

       invoke scanf,offset szMsg2,ADDR score

       ;

       .if (score >= 90 && score <= 100)

              invoke printf,offset szMsg3

       .elseif (score >= 80 && score < 90)

              invoke printf,offset szMsg4

       .elseif (score >= 70 && score < 80)

              invoke printf,offset szMsg5        

       .elseif (score >= 60 && score < 70)

              invoke printf,offset szMsg6        

       .else

              invoke printf,offset szMsg7 

       .endif

       ;     

       invoke _getch

       ret                       

end start

       上述汇编代码使用了高级汇编伪指令.if/.elseif/.else,竟然与C语言的语法如此的相似,很难不让人怀疑,C语言的发明人是否借鉴了高级汇编的语法。当然我们也可以理解为什么有人会将C语言称为高级汇编语言了。

       为了彻底搞清楚计算机是如何实现这些分支结构的条件判断,我们还是看一看反汇编代码,了解计算机的具体实现过程。

反汇编代码

           int score = 0;

00B51952  mov         dword ptr [score],0 

    printf("请输入您的成绩:");

00B51959  push        offset string "\xc7\xeb\xca\xe4\xc8\xeb\xc4\xfa\xb5\xc4\xb3\xc9\xbc\xa8\xa3\xba" (0B57B30h) 

00B5195E  call        _printf (0B5104Bh) 

00B51963  add         esp,4 

    scanf_s("%d", &score);

00B51966  lea         eax,[score] 

00B51969  push        eax 

00B5196A  push        offset string "%d" (0B57B44h) 

00B5196F  call        _scanf_s (0B51154h) 

00B51974  add         esp,8 

    if (score >= 90 && score <= 100)

00B51977  cmp         dword ptr [score],5Ah ;比较score和90的大小

00B5197B  jl          main+72h (0B51992h)  ;如果score<90则跳转到下一个else if语句

00B5197D  cmp         dword ptr [score],64h ;比较score和100的大小

00B51981  jg          main+72h (0B51992h)   ;如果score>100则跳转到下一个else if语句

        printf("您在A等级\n") ;90<=score<=100则执行下面的printf语句

00B51983  push        offset string "\xc4\xfa\xd4\xdaA\xb5\xc8\xbc\xb6\n" (0B57B48h) 

00B51988  call        _printf (0B5104Bh) 

00B5198D  add         esp,4 

00B51990  jmp         main+0D0h (0B519F0h) 

    else if (score >= 80 && score < 90)

00B51992  cmp         dword ptr [score],50h 

00B51996  jl          main+8Dh (0B519ADh)  ;jl小于

00B51998  cmp         dword ptr [score],5Ah 

00B5199C  jge         main+8Dh (0B519ADh)  ;jg大于等于

        printf("您在B等级\n");

00B5199E  push        offset string "\xc4\xfa\xd4\xdaB\xb5\xc8\xbc\xb6\n" (0B57B58h) 

00B519A3  call        _printf (0B5104Bh) 

00B519A8  add         esp,4 

00B519AB  jmp         main+0D0h (0B519F0h) 

    else if (score >= 70 && score < 80)

00B519AD  cmp         dword ptr [score],46h 

00B519B1  jl          main+0A8h (0B519C8h) 

00B519B3  cmp         dword ptr [score],50h 

00B519B7  jge         main+0A8h (0B519C8h) 

        printf("您在C等级\n");

00B519B9  push        offset string "\xc4\xfa\xd4\xdaC\xb5\xc8\xbc\xb6\n" (0B57B68h) 

        printf("您在C等级\n");

00B519BE  call        _printf (0B5104Bh) 

00B519C3  add         esp,4 

00B519C6  jmp         main+0D0h (0B519F0h) 

    else if (score >= 60 && score < 70)

00B519C8  cmp         dword ptr [score],3Ch 

00B519CC  jl          main+0C3h (0B519E3h) 

00B519CE  cmp         dword ptr [score],46h 

00B519D2  jge         main+0C3h (0B519E3h) 

        printf("您在D等级\n");

00B519D4  push        offset string "\xc4\xfa\xd4\xdaD\xb5\xc8\xbc\xb6\n" (0B57B78h) 

00B519D9  call        _printf (0B5104Bh) 

00B519DE  add         esp,4 

00B519E1  jmp         main+0D0h (0B519F0h) 

    else

        printf("您在E等级\n");

00B519E3  push        offset string "\xc4\xfa\xd4\xdaE\xb5\xc8\xbc\xb6\n" (0B57B88h) 

00B519E8  call        _printf (0B5104Bh) 

00B519ED  add         esp,4 

       由上述反汇编代码可知,C语言的if/else if分支结构由一系列的cmp/jcc条件判断指令实现的。例如:

           if (score >= 90 && score <= 100)

00B51977  cmp         dword ptr [score],5Ah ;比较score和90的大小

00B5197B  jl          main+72h (0B51992h)  ;如果score<90则跳转到下一个else if语句

00B5197D  cmp         dword ptr [score],64h ;比较score和100的大小

00B51981  jg          main+72h (0B51992h)   ;如果score>100则跳转到下一个else if语句

        printf("您在A等级\n") ;90<=score<=100则执行下面的printf语句

00B51983  push        offset string "\xc4\xfa\xd4\xdaA\xb5\xc8\xbc\xb6\n" (0B57B48h) 

00B51988  call        _printf (0B5104Bh) 

00B5198D  add         esp,4 

00B51990  jmp         main+0D0h (0B519F0h) 

    else if (score >= 80 && score < 90)

00B51992  cmp         dword ptr [score],50h 

 

结论

C语言中的if/else if语句就是一系列CMP/JCC指令的连续判断,大大简化了代码。反汇编代码就是编译器将C语言翻译后的汇编代码。

实验三十六:跟踪调试示例程序

第一步:打开DtDebug调试器,将示例二十生成的MyProjectOne.exe程序拖入调试器。

第二步:按Ctrl+F9,进入程序入口地址,如图6-4所示。

图6-4 进入程序入口地址

       第三步:按F8,跳转到0x00c92380地址处,发现只有一个call语句,如图6-5所示。连续按3次F7或者直接选中call语句,点击鼠标右键,选中fllow跟随,进入call函数内部。

图6-5 F7单步步入函数内

       第四步:进入call函数内部,如果6-6所示,此函数内有两个call语句。先按F8单步步过测试一下,第一个call没有反应,执行完第二个call语句时,控制台窗口显示提示信息:

“请输入您的成绩:”。

图6-6 F8 call测试

 第五步:点击左上角工具栏

图标,重新来过,重复前面的1,2,3步,第4步至第二个call语句时,改用F7单步步入,如图6-7所示。

图6-7 F7单步步入第二个call函数   

图6-8 锁定程序代码段的真实开始地址处

第六步:继续按F8测试,直至控制台窗口出现提示信息“请输入您的成绩:”。锁定地址0x00c92172地址处的call语句(每次调试加载程序的地址会有不同),鼠标选中后按F2,这该地址处下软件断点。如图6-8所示。

第七步:再次重新加载调试程序,连续点击两次左上角工具栏

图标执行程序,在0x00c92172地址处断下。然后按F7单步步入。

第八步:继续按F8测试,锁定最后一个call语句输出提示信息。然后在地址0x00c92309地址处按F2下断点。如图6-9所示。

图6-9 锁定最终的入口函数

第九步:重新来过,连续执行至0x00c92309地址处,按F7单步步入,然后再按一次F7跳转到main函数内,如下所示:

建立堆栈框架

00C91920    55              PUSH EBP

00C91921    8BEC            MOV EBP,ESP

00C91923    81EC D0000000   SUB ESP,0D0

保护寄存器

00C91929    53              PUSH EBX

00C9192A    56              PUSH ESI

00C9192B    57              PUSH EDI

00C9192C    8DBD 30FFFFFF   LEA EDI,DWORD PTR SS:[EBP-D0]

初始化堆栈

00C91932    B9 34000000     MOV ECX,34

00C91937    B8 CCCCCCCC     MOV EAX,CCCCCCCC

00C9193C    F3:AB           REP STOS DWORD PTR ES:[EDI]

00C9193E    A1 04A0C900     MOV EAX,DWORD PTR DS:[C9A004]

00C91943    33C5            XOR EAX,EBP

00C91945    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX

00C91948    B9 03C0C900     MOV ECX,MyProjec.00C9C003

00C9194D    E8 CFF8FFFF     CALL MyProjec.00C91221

00C91952    C745 F4 0000000>MOV DWORD PTR SS:[EBP-C],0

以上00C9193E~00C91952地址处的代码为编译器添加的校验代码,此处不做介绍。

printf("请输入您的成绩:");

printf函数

00C91959    68 307BC900     PUSH MyProjec.00C97B30

00C9195E    E8 E8F6FFFF     CALL MyProjec.00C9104B

00C91963    83C4 04         ADD ESP,4

00C91966    8D45 F4         LEA EAX,DWORD PTR SS:[EBP-C]

scanf_s("%d", &score);

scanf函数

00C91969    50              PUSH EAX

00C9196A    68 447BC900     PUSH MyProjec.00C97B44 ; ASCII "%d"

00C9196F    E8 E0F7FFFF     CALL MyProjec.00C91154

00C91974    83C4 08         ADD ESP,8

if (score >= 90 && score <= 100)

00C91977    837D F4 5A      CMP DWORD PTR SS:[EBP-C],5A

If语句条件判断

00C9197B    7C 15           JL SHORT MyProjec.00C91992

00C9197D    837D F4 64      CMP DWORD PTR SS:[EBP-C],64

00C91981    7F 0F           JG SHORT MyProjec.00C91992

printf("您在A等级\n");

printf函数

00C91983    68 487BC900     PUSH MyProjec.00C97B48

00C91988    E8 BEF6FFFF     CALL MyProjec.00C9104B

00C9198D    83C4 04         ADD ESP,4

00C91990    EB 5E           JMP SHORT MyProjec.00C919F0

else if (score >= 80 && score < 90)

00C91992    837D F4 50      CMP DWORD PTR SS:[EBP-C],50

00C91996    7C 15           JL SHORT MyProjec.00C919AD

00C91998    837D F4 5A      CMP DWORD PTR SS:[EBP-C],5A

00C9199C    7D 0F           JGE SHORT MyProjec.00C919AD

printf("您在B等级\n");

00C9199E    68 587BC900     PUSH MyProjec.00C97B58

00C919A3    E8 A3F6FFFF     CALL MyProjec.00C9104B

00C919A8    83C4 04         ADD ESP,4

00C919AB    EB 43           JMP SHORT MyProjec.00C919F0

else if (score >= 70 && score < 80)

00C919AD    837D F4 46      CMP DWORD PTR SS:[EBP-C],46

00C919B1    7C 15           JL SHORT MyProjec.00C919C8

00C919B3    837D F4 50      CMP DWORD PTR SS:[EBP-C],50

00C919B7    7D 0F           JGE SHORT MyProjec.00C919C8

printf("您在C等级\n");

00C919B9    68 687BC900     PUSH MyProjec.00C97B68

00C919BE    E8 88F6FFFF     CALL MyProjec.00C9104B

00C919C3    83C4 04         ADD ESP,4

00C919C6    EB 28           JMP SHORT MyProjec.00C919F0

else if (score >= 60 && score < 70)

00C919C8    837D F4 3C      CMP DWORD PTR SS:[EBP-C],3C

00C919CC    7C 15           JL SHORT MyProjec.00C919E3

00C919CE    837D F4 46      CMP DWORD PTR SS:[EBP-C],46

00C919D2    7D 0F           JGE SHORT MyProjec.00C919E3

printf("您在D等级\n");

00C919D4    68 787BC900     PUSH MyProjec.00C97B78

00C919D9    E8 6DF6FFFF     CALL MyProjec.00C9104B

00C919DE    83C4 04         ADD ESP,4

00C919E1    EB 0D           JMP SHORT MyProjec.00C919F0

printf("您在E等级\n");

00C919E3    68 887BC900     PUSH MyProjec.00C97B88

00C919E8    E8 5EF6FFFF     CALL MyProjec.00C9104B

00C919ED    83C4 04         ADD ESP,4

system("pause");

00C919F0    8BF4            MOV ESI,ESP

00C919F2    68 987BC900     PUSH MyProjec.00C97B98             ; ASCII "pause"

00C919F7    FF15 68B1C900   CALL NEAR DWORD PTR DS:[C9B168]   ; ucrtbase.system

00C919FD    83C4 04         ADD ESP,4

练习

1、2月14号情人节,男孩为了表白自己心爱的女生,买了一束花,女生收到花后,询问男生花的价格,如果花的价格大于999元,女生回复同意交往;如果花的价格大于等于99元且小于999元,女生回复我们可以做朋友;如果花的价格大于50元且小于99元,女生回复我们改天再约吧!其它价格,女生则直接挂电话。题目要求:必须有题目分析步骤、流程图、请用C语言中if语句写出来。

2、请写出来下面的汇编对应的C语言代码。

00401010   push        ebp

00401011   mov         ebp,esp

00401013   sub         esp,44h

00401016   push        ebx

00401017   push        esi

00401018   push        edi

00401019   lea         edi,[ebp-44h]

0040101C   mov         ecx,11h

00401021   mov         eax,0CCCCCCCCh

00401026   rep stos    dword ptr [edi]

00401028   mov         dword ptr [ebp-4],0

0040102F   push  offset string

"\xc7\xeb\xca\xe4\xc8\xeb\xc4\xfa\xb5\xc4\xb3\xc9\xbc\xa8\xa3\xba" (004240

00401034   call        printf (00401290)

00401039   add         esp,4

0040103C   lea         eax,[ebp-4]

0040103F   push        eax

00401040   push        offset string "%d" (00424074)

00401045   call        scanf (00401230)

0040104A   add         esp,8

0040104D   cmp         dword ptr [ebp-4],5Ah

00401051   jg          main+4Fh (0040105f)

00401053   cmp         dword ptr [ebp-4],64h

00401057   jne         main+5Eh (0040106e)

00401059   cmp         dword ptr [ebp-4],64h

0040105D   jge         main+5Eh (0040106e)

0040105F  push       offset string "\xc4\xfa\xd4\xdaA\xb5\xc8\xbc\xb6\n" (00424064)

00401064   call        printf (00401290)

00401069   add         esp,4

0040106C   jmp         main+0CEh (004010de)

0040106E   cmp         dword ptr [ebp-4],50h

00401072   jg          main+70h (00401080)

00401074   cmp         dword ptr [ebp-4],5Ah

00401078   jne         main+7Fh (0040108f)

0040107A   cmp         dword ptr [ebp-4],5Ah

0040107E   jge         main+7Fh (0040108f)

00401080 push        offset string "\xc4\xfa\xd4\xdaB\xb5\xc8\xbc\xb6\n" (00424054)

00401085   call        printf (00401290)

0040108A   add         esp,4

0040108D   jmp         main+0CEh (004010de)

0040108F   cmp         dword ptr [ebp-4],46h

00401093   jg          main+91h (004010a1)

00401095   cmp         dword ptr [ebp-4],50h

00401099   jne         main+0A0h (004010b0)

0040109B   cmp         dword ptr [ebp-4],50h

0040109F   jge         main+0A0h (004010b0)

004010A1  push       offset string "\xc4\xfa\xd4\xdaC\xb5\xc8\xbc\xb6\n" (00424044)

004010A6   call        printf (00401290)

004010AB   add         esp,4

004010AE   jmp         main+0CEh (004010de)

004010B0   cmp         dword ptr [ebp-4],3Ch

004010B4   jg          main+0B2h (004010c2)

004010B6   cmp         dword ptr [ebp-4],46h

004010BA   jne         main+0C1h (004010d1)

004010BC   cmp         dword ptr [ebp-4],46h

004010C0   jge         main+0C1h (004010d1)

004010C2  push       offset string "\xc4\xfa\xd4\xdaD\xb5\xc8\xbc\xb6\n" (00424034)

004010C7   call        printf (00401290)

004010CC   add         esp,4

004010CF   jmp         main+0CEh (004010de)

004010D1  push       offset string "\xc4\xfa\xd4\xdaE\xb5\xc8\xbc\xb6\n" (00424024)

004010D6   call        printf (00401290)

004010DB   add         esp,4

004010DE   push        offset string "pause" (0042401c)

004010E3   call        system (00401120)

004010E8   add         esp,4

004010EB   xor         eax,eax

3、任意输入三个实数,将a、b、c三个数看作三个线段,判断a、b、c能否构成三角形。题目要求:必须有题目分析步骤、流程图、代码。额外要求:自己写的代码务必切到反汇编窗口,并理解每句代码对应的汇编。

4、编写一段程序,输入两个整数值,如何后者是前者的约数,则显示“B是A的约数”。

如果不是,则显示“B不是A的约数”。

5、判断输入的值是否为0。

6、判断输入的整数的个位数是否为5?

7、判断输入的整数是负数、正数还是0?

8、输入一个整数,并显示它的绝对值。

9、判断输入两个整数的大小。

本文摘自编程达人《汇编的角度——C语言》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/636261.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进化计算引领深度学习新纪元

《进化深度学习》介绍了进化计算(EC)&#xff0c;并为你提供了一套实用的技术工具&#xff0c;你可以在整个深度学习过程中应用这些技术。本书提供了遗传算法和进化计算方法在网络拓扑、生成模型、强化学习等方面的应用。通过交互式的Colab notebook使你有机会在探索过程中进行…

手机端如何访问本地vue+vite项目,实现实时调试?

一、应用场景 h5&#xff08;vuevite&#xff09;嵌入app后&#xff0c;出现某种问题时&#xff0c;需要每次发布坏境后&#xff0c;才能才看效果&#xff0c;这种来回很耗时间&#xff0c;本文章在于解决手机端直接访问本地启动应用项目&#xff0c;无需重复发布坏境 二、实…

服务器数据恢复—同友存储raid5阵列上层虚拟机数据恢复案例

服务器数据恢复环境&#xff1a; 某市教育局同友存储&#xff0c;存储中有一组由数块磁盘组建的raid5阵列&#xff0c;存储空间划分若干lun。每个lun中有若干台虚拟机&#xff0c;其中有数台linux操作系统的虚拟机为重要数据。 存储结构&#xff1a; 服务器故障&#xff1a; r…

【C语言】结构体内存对齐:热门面试话题

&#x1f525;引言 书接上文&#xff0c;我们了解关于结构体的基本知识&#xff0c;这篇将深入剖析结构体中一个重要的知识点:内存对齐 关于内存对齐是属于热门面试话题&#xff0c;对此单独放在一篇来分享 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记…

selenium 爬取今日头条

由于今日头条网页是动态渲染&#xff0c;再加上各种token再验证&#xff0c;因此直接通过API接口获取数据难度很大&#xff0c;本文使用selenium来实现新闻内容爬取。 selenium核心代码 知识点&#xff1a; 代码中加了很多的异常处理&#xff0c;保证错误后重试&#xff0c;…

kyuubi/spark3的catalog 多个数据源配置

在使用kyuubi 的时候&#xff0c;有多个集群&#xff0c;老集群上是hive2,新集群hive3 ,想通过一个网关访问多个集群&#xff0c;或者通过jdbc访问mysql&#xff0c;oracle的数据&#xff0c;这样不用来回数据导入导出。spark 支持跨库访问数据&#xff0c;在spark 中提供两种方…

软件设计师备考笔记(九):数据库技术基础

文章目录 一、基本概念二、数据模型&#xff08;一&#xff09;基本概念&#xff08;二&#xff09;E-R模型&#xff08;三&#xff09;数据模型 三、关系代数&#xff08;一&#xff09;关系数据库的基本概念&#xff08;二&#xff09;五种基本的关系代数运算&#xff08;三&…

日处理100吨污水处理设备安装需要多久

日处理100吨污水处理设备的安装时间取决于多种因素&#xff0c;包括设备的复杂性、安装地点的条件、所需的基础设施建设、以及安装团队的经验和效率等。以下是一个大致的安装时间框架和相关的考虑因素&#xff1a; 前期准备&#xff1a; 现场勘查和设计&#xff1a;1-2周&#…

创新力作 焕新首发丨捷顺科技·捷曜系列智慧停车新品全新上市

2024捷顺科技智慧停车全家族新品全面上市 全新外观、全新特性、全新体验 新控制机、新道闸、新超眸相机... 每款新品都有哪些功能亮点 带您一探究竟

DOS学习-目录与文件应用操作经典案例-xcopy

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 xcopy命令是DOS系统中一个强大的文件和目录复制工具&…

变电站设备状态识别无人值守巡检系统

变电站设备状态识别无人值守巡检系统基于智能视频分析技术和深度学习技术&#xff0c;变电站设备状态识别无人值守巡检系统通过现场已经装好的监控摄像机实时对变电站的设备状态进行监测识别&#xff0c;例如&#xff0c;对隔离开关的分合状态进行实时检测、识别开关柜刀闸的位…

医疗废水处理一体化设备维护成本有哪些

医疗废水处理一体化设备的维护成本主要包括以下几个方面&#xff1a; 能源消耗&#xff1a; 包括电力、燃气或其他能源的消耗&#xff0c;用于驱动设备运行&#xff0c;如泵、风机、加热器等。 化学品费用&#xff1a; 用于消毒、中和、沉淀等化学处理的药剂费用&#xff0…

计网期末复习指南:万字总结计算机网络体系结构 | 计算机网络的组成、类别、性能

目录 一.互联网的发展阶段 二.计算机网络的类别 三.互联网的组成 ▐ 网络边缘部分 客户/服务器方式&#xff08;C/S方式&#xff09; 对等方式&#xff08;P2P方式&#xff09; ▐ 网络核心部分 电路交换 报文交换 分组交换 四.计算机网络的性能 ▐ 速率 ▐ 带宽 …

javascript 防抖 节流

在前端开发中&#xff0c;性能优化是提升用户体验的关键环节。防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;作为两种常见的优化技术&#xff0c;能够有效管理和控制频繁触发的事件&#xff0c;减少不必要的计算和资源消耗。无论是在处理用户输…

2024电工杯B题保姆级分析完整思路+代码+数据教学

2024电工杯B题保姆级分析完整思路代码数据教学 B题题目&#xff1a;大学生平衡膳食食谱的优化设计及评价 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 总体分析&#xff1a; 题目要求对两份一日膳食食谱进行营养分析和调整&#xff0c;然后设计优化的平衡膳…

Webpack源码泄露到Vue快速入门

前言 1.webpack 源码泄露 1.1漏洞简介 1.2存在泄露的站点 1.3 如何判断是否存在漏洞 方法1: 方法2: 1.4.如何将js.map文件还原为项目文件 1. 4.1查看npm版本 1.4.2 安装reverse-sourcemap 1. 4.3.检查是否安装 ​1. 4.4 使用reverse-sourcemap进行js.map文件还原操作…

RedisTemplate操作Redis, 看这一篇文章就够了

文章目录 1. String 命令1.1 添加缓存1.2 设置过期时间(单独设置)1.3 获取缓存值1.4 删除key1.5 顺序递增1.6 顺序递减1.7 常用的 2. Hash命令2.1 添加缓存2.2 设置过期时间(单独设置)2.3 添加一个Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根据key提取value值2.7 获…

展厅设计对企业有哪些作用

1、增强品牌形象 企业展厅对于增强企业品牌形象、提升企业的知名度和市场竞争力具有显著作用和意义。展厅作为企业对外的窗口&#xff0c;是客户和访客了解企业的第一印象。通过独特的设计风格和精心的展示布局&#xff0c;企业可以将自身的核心价值和文化理念巧妙地融入到展厅…

工程机械租赁平台数字化平台系统油耗与排放管理创新与应用

在快速发展的城市建设和基础设施项目中&#xff0c;工程机械扮演着举足轻重的角色。随着工程规模的扩大和施工技术的不断进步&#xff0c;工程机械租赁平台应运而生&#xff0c;为建设项目提供了灵活高效的解决方案。然而&#xff0c;随着租赁机械数量的增加&#xff0c;如何有…

调试时JSON库一直提示 PDB找不到 使用需要对象文件来进行调试的 /DEBUG:Fastlink生成的

最近调试时一直提示上面的提示框&#xff0c;很是烦躁。 为什么会出现这个错误呢&#xff0c;我一直使用的是/DEBUG。出现原因没有找出来&#xff0c;理论上市使用了/DEBUG:Fastlink这个模式才会出&#xff0c;但是就是一直在报这个错误。 /DEBUG&#xff08;生成调试信息&am…