1.C语言中空语句一般有哪些用途?
(1).纯粹消耗cpu时间,起到延时的作用
(2).为了程序的结构清楚,可读性好,以后扩充新功能方便。有些公司的编码规范要求,对于if/else语句等,如果分支不配对的话,需要用空语句进行配对,一些日企这么要求的比较多。
如 if(xxxx)
{
xxxx
}
else
{
;
}
2.在if语句中,使用布尔变量应注意什么?
不可将布尔变量直接与TRUE、FALSE或者1、0进行比较,根据定义,零值为假(FALSE),任何非零值都是真(TRUE),假设布尔变量名字为flag,它与零值比较的标准if语句为
if(flag)或者if(!flag)
小编推荐一个学C语言/C++的学习裙【 六二六,八七一,九一六 】邀请码凌云,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
3.if语句中,指针变量使用时该注意什么?
指针变量应用==或!=与NULL进行比较,指针变量的零值是空(NULL),假设指针变量名字是p,则应使用:
if(p==NULL)或if(p!=NULL)。
有时我们会看到if(NULL==p),这样的古怪形式,这是为了防止将其写成if(p=NULL),而有意将其颠倒,编译器认为if(p=NULL)是合法的,但会指出if(NULL=p)是错误的,因为NULL不能被赋值。
4.C语言中goto语句的使用以及需要注意的地方
goto语句是一种无条件转移语句,由于goto语句可以灵活跳转,如果不加限制,会破坏结构化设计风格,其次共同语句经常带来错误和隐患,它可能跳过了某些对象的构造,变量的初始化,重要的计算等语句。
void main(){
int a=2,b=3;
if(a
goto aa;
printf("hello");
aa:printf("s");
return 0;
}
改程序的执行结果为s
所有在goto aa这句之后直接跳转到aa:printf("s");
aa:为标记行。冒号切记不可省略。
反之如果代码这样子
void main(){
int a=2,b=3;
if(a>b)
goto aa;
printf("hello");
aa:printf("s");
return 0;
}
那么执行结果就是hellos
可以看到执行了 printf("hello"); aa:printf("s");
aa:将没有意义。
5.while语句与do-while语句的使用规则及区别
1). while语句
语法:
while(表达式)
{
循环体;
}
循环过程:
1.先判断表达式,是否为真,如果为真跳转到2,否则跳转到3
2.执行循环体,执行完毕,跳转到1
3.跳出循环
2). do-while语句
语法:
do{
循环体;
}while(表达式);
注意:这个while后面的小括号必须接;
循环过程:
1.先执行循环体,执行完毕跳转到2
2.判断表达式的结果是否为真,如果为真,跳转到1,否则跳转到3
3.跳出循环
3). do-while和while最大的区别:
do-while至少能执行1次循环体,但是while可能一次都不执行
二 while的注意事项
1.避免让循环的条件变成永真或者永假,不然的话可能没意义
2.千万不要在while后面加;
3.while循环后面的大括号可以省略,如果省略,只能影响离它最近的那句代码,并且,这句代码不可以是声明变量的
4.while语句块里面定义的变量,外面不能
tips:代码例子如下
#include
int main(int argc, const char * argv[]) {
//while
int i = 1,sum = 0;
while(i
{
sum += i;
i++;
}
printf("从1加到100的和为:%d\n",sum);
// do-while
char answer;
do{
printf("表演\n");
printf("满意吗?\n");
scanf("%c",&answer);
}while(answer != 'y');
return 0;
}
6.for语句的使用规则
c语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句.
for(表达式 1;表达式 2;表达式 3)语句
它的执行过程如下:
(1)先求表达式 1.
(2)求表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第三步 做若为
假(值为0),则结束循环,转到第5步.
(3)求解表达式3
(4)转回上面第(2)步骤继续执行;
(5)结束循环,执行for语句下面的一个语句;
for(循环变量赋初值;循环条件;循环变量增值)语句
如
for(i=1;i
它的执行相当于
i=1;
while(i
sum=sum+i;
i++;
}
显然,用for语句更简单、方便。
说明:
(1)for语句的一般形式中的"表达式1"可以省略,此时应在for语句之前给循环变量赋初值.注意省略表达式1时,其后的分号不能省略.如for(;i
(2)如果表达式2省略 即不判断循环条件,循环无终止地循环下去,也就是认为表达式2始终为真.
例如:for(i=1;;i++){.....};
相当于
i=1;
while(1)
{sum=sum+1;
i++;
}
(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束.如:
for(i=1;i
{sum=sum+1;
i++;
}
这个例子的循环增量没有放在表达式三的位置 而是作为循环体的一部分 其效果是一样的.
(4)可以省略表达式1和表达式3,只有表达式2 即只给循环条件.
如
for(;i
{
sum=sum+i;
i++;
}
这个相当于
whlie(i
{
sum=sum+i;
i++;
}
(5)三个表达式都可以省略,如:
for(;;)语句
相当于
while(1)语句
即不设初值 不判断条件(认为表达式2为真值)循环变量不增值,无终止的执行循环体.
(6)表达式1也可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式.如:
for(sum=0;i
{
sum=sum+i;
}
for(sum=0,i=0;i
{
sum=sum+i;
}
7.C语言的循环语句的效率问题
C语言中,for语句的使用频率最高,while其次 ,do语句很少用,在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少cpu跨切循环层的次数
低效率:长循环在最外层
高效率:长循环在最内层
注意,如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
8.c语言中break和continue的用法和区别
1.当它们用在循环语句的循环体时,break用于立即退出本层循环,而continue仅仅结束本次循环(本次循环体内不执行
continue语句后的其它语句,但下一次循环还会继续执行。
2. 如果有多层循环时,break只会跳出本层循环,不会跳出其他层的循环
3. break可用于switch语句,表示跳出整个switch语句块,而continue则不能单独的用于switch语句。但是continue可以用于循环内部的switch语句。
4. break和continue语句在循环内的switch语句中使用时,是有区别的。在这种情况下的break是指跳出switch语句块(switch语句块的代码仍然执行)。而这种情况下的continue是指结束本次循环(不在执行switch后面的代码),进行下一次循环
*/
/*
test1()的打印结果是 i = 0 i = 1 已经跳出循环
是因为break语句直接结束了本层的循环, 直接执行循环后边的语句
printf("已经跳出循环\n");
*/
void test1()
{
int i = 0;
for (i = 0; i < 5; i++)
{
if (i == 2)
{
break;
printf("我没有被打印出来!\n");
}
printf("i = %d\n", i);
}
printf("已经跳出循环\n");
}
/*
test2()的打印结果是 i = 0 i = 1 i = 3 i = 4
i = 2没有被打印,是因为continue 结束了那一次循环,继续了下一次循环
*/
void test2()
{
int i = 0;
for (i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
printf("我没有被打印出来!\n");
}
printf("i = %d\n", i);
}
}
/*
test3()是一个两层for循环,break语句只会跳出最近的一层循环,
第二层for循环继续执行
*/
void test3()
{
int i = 0;
int j = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j == 2)
{
break;
}
printf("Hello: %d\n", j);
}
printf("World: %d\n", i);
}
}
/*
在test4()中,break的作用只会跳出
switch()语句块,执行swith语句块后面的程序printf("Hello World!\n");
而不是跳出循环。
与test5()进行对比,continue是结束本次循环,进行下一次循环,
switch()语句块后边的内容不会被打印
*/
void test4()
{
int i = 0;
for (i = 0; i < 2; i++)
{
int j = 5;
switch (j)
{
case 4:
printf("你好 %d !!!\n", 4);
break;
case 5:
printf("你好 %d !!!\n", 5);
break;
case 6:
printf("你好 %d!!!\n", 6);
break;
}
printf("Hello World!\n");
}
}
/*
test5()中循环内部的switch语句中的continue是直接结束本次循环,
switch语句块后面的printf("Hello World!\n");将不会被执行。
9.switch语句的使用规则
C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示:
#include
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
if(a==1){
printf("Monday\n");
}else if(a==2){
printf("Tuesday\n");
}else if(a==3){
printf("Wednesday\n");
}else if(a==4){
printf("Thursday\n");
}else if(a==5){
printf("Friday\n");
}else if(a==6){
printf("Saturday\n");
}else if(a==7){
printf("Sunday\n");
}else{
printf("error\n");
}
return 0;
}
运行结果:
Input integer number:3
Wednesday
C语言还提供了另外一种多分支选择的语句——switch 语句,它的基本语法格式如下:
switch(表达式){
case 常量表达式1: 语句 1;
case 常量表达式2: 语句 2;
......
case 常量表达式n: 语句 n;
default: 语句 n+1;
}
小编推荐一个学C语言/C++的学习裙【 六二六,八七一,九一六 】邀请码凌云,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
它的执行过程是:首先计算“表达式”的值,然后从第一个 case 开始,与“常量表达式x”进行比较,如果与当前常量表达式的值不相等,那么就不执行冒号后边的语句 x,一旦发现和某个常量表达式的值相等了,那么它会执行之后所有的语句,如果直到最后一个“常量表达式 n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。
需要注意的是,当找到一个相等的 case 分支后,会执行该分支以及之后所有分支的语句。例如:
#include
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n");
case 2: printf("Tuesday\n");
case 3: printf("Wednesday\n");
case 4: printf("Thursday\n");
case 5: printf("Friday\n");
case 6: printf("Saturday\n");
case 7: printf("Sunday\n");
default:printf("error\n");
}
return 0;
}
运行结果:
Input integer number:4
Thursday
Friday
Saturday
Sunday
error
输入4,发现和第四个分支匹配,于是就执行第四个分支以及后面的所有分支。这显然不是我们想要的结果,我们希望只执行第四个分支,跳过后面的所有分支。
为了避免这种情况,C语言还提供了一个关键字 break,专门用于跳出switch语句。
switch 的分支语句一共有 n+1 种,而我们通常希望的都是选择其中的一个分支来执行,执行完后就结束整个 switch 语句,而继续执行 switch后面的语句,此时就可以通过在每个分支后加上 break 语句来实现了。如下:
switch (表达式){
case 常量表达式1: 语句1; break;
case 常量表达式2: 语句2; break;
......
case 常量表达式n: 语句n; break;
default: 语句n+1; break;
}
加了这个 break 语句后,一旦“常量表达式 x”与“表达式”的值相等了,那么就执行“语句 x”,执行完毕后,由于有了 break 则直接跳出 switch 语句,继续执行 switch 语句后面的程序了,这样就可以避免执行不必要的语句。
使用switch语句修改上面的代码:
#include
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
运行结果:
Input integer number:4
Thursday
10.for语句括号内省略各部分会出现的现象是什么
1.省略表达式1,即循环变量赋初值,表示不对其进行赋值,系统自动赋初值为0或\0
2.省略表达式2,循环条件,则不做其他处理便成为死循环
3.省略表达式3,不对循环变量进行操作,这时可在循环体中加入修改循环控制变量的语句