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

时间:2022-03-23 03:21:53

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

第三周:判断

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

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

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

发现如下问题:

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

提示“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 ;
}

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

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

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

考虑到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<);
switch(type)
{
case :
f=*x;
break;
default:
f=-;
break;
}
printf("%f",f);
return ;
}