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; }
发现如下问题:
提示“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吗?划算吗?
考虑到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; }