首页 > 代码库 > C语言程序设计(翁恺)--第三周课件中的三个遗留点

C语言程序设计(翁恺)--第三周课件中的三个遗留点

刚刚写完第二周遗留点,下面写第三周的

 

第三周:判断

1.if和else后面也可以没有{}而是一条语句。如果if后不带{},但是后面跟了两条语句,并且后面还有else语句,那么程序会怎么执行?

在Dev C++中输入如下代码,进行编译

#include "stdio.h"int main(){    int a=0;    scanf("%d",&a);    if(a>0)        a+=1;        printf("a=%d",a);    else        print("a=%d",a);    return 0;}

发现如下问题:

image

提示“9    2 [Error] ‘else‘ without a previous ‘if‘

意思是else找不到对应的if了,说明if后面的第二个语句printf使得编译器认为这个if已经结束,它是一个不带else的if语句,所以后面直接输入else会使编译器报错。

 

2./* */是注释,编译器不管其中的内容。但是有没有想过编译器会把它替换成什么呢?是一个空格?还是不留痕迹?可以写代码来测试你用的编译器吗?

在Dev C++中输入如下代码,进行编译

#include "stdio.h"int main(){    int/*sdfd*/b;    //编译通过    in/*sdff*/t a;   //编译出错,提示[Error] unknown type name ‘in‘和[Error] expected ‘=‘, ‘,‘, ‘;‘,                      //‘asm‘ or ‘__attribute__‘ before ‘a‘    return 0;}

发现第一条语句编译通过了,而第二条语句编译出错了,提示“[Error] unknown type name ‘in‘和[Error] expected ‘=‘, ‘,‘, ‘;‘,‘asm‘ or ‘__attribute__‘ before ‘a‘”,由这两个结果判断,/**/在编译的时候被编译器替换成了空格

 

3.分段函数可以用switch-case吗?划算吗?

clipboard

考虑到x=0和x>0是同一个函数f(x)=2*x;那么可以将type分成0/1两种情况来使用switch-case语句,感觉不划算,而且如果分段增加的话就不一定能通过这个方法实现了

代码如下:

#include "stdio.h"int main(){    int type;    double x,f;    scanf("%lf",&x);    type=(x<0);    switch(type)    {        case 0:            f=2*x;            break;        default:            f=-1;            break;    }    printf("%f",f);    return 0;}

C语言程序设计(翁恺)--第三周课件中的三个遗留点