C语言基本语句

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)


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<b)
 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 <stdio.h>
int main(int argc, const char * argv[]) {
    //while
  int i = 1,sum = 0;
  while(i <= 100)
 
  {
    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<=100;i++)sum=sum+i;
它的执行相当于


i=1; 
while(i<=100){ 
sum=sum+i; 
i++; 
}
显然,用for语句更简单、方便。
说明:
(1)for语句的一般形式中的"表达式1"可以省略,此时应在for语句之前给循环变量赋初值.注意省略表达式1时,其后的分号不能省略.如for(;i<=100;i++){....};
(2)如果表达式2省略 即不判断循环条件,循环无终止地循环下去,也就是认为表达式2始终为真.
例如:for(i=1;;i++){.....};
相当于


i=1; 
while(1) 
{sum=sum+1; 
i++; 
}
(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束.如:


for(i=1;i<=100;) 
{sum=sum+1; 
i++; 
}
这个例子的循环增量没有放在表达式三的位置 而是作为循环体的一部分 其效果是一样的.
(4)可以省略表达式1和表达式3,只有表达式2 即只给循环条件.



for(;i<=100;) 

sum=sum+i; 
i++; 

这个相当于 
whlie(i<=100) 

sum=sum+i; 
i++; 
}
(5)三个表达式都可以省略,如:
for(;;)语句
相当于
while(1)语句
即不设初值 不判断条件(认为表达式2为真值)循环变量不增值,无终止的执行循环体.
(6)表达式1也可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式.如:


for(sum=0;i<=100;i++) 

sum=sum+i; 

for(sum=0,i=0;i<=100;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 <stdio.h>
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;
 }


它的执行过程是:首先计算“表达式”的值,然后从第一个 case 开始,与“常量表达式x”进行比较,如果与当前常量表达式的值不相等,那么就不执行冒号后边的语句 x,一旦发现和某个常量表达式的值相等了,那么它会执行之后所有的语句,如果直到最后一个“常量表达式 n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。


需要注意的是,当找到一个相等的 case 分支后,会执行该分支以及之后所有分支的语句。例如:

#include <stdio.h>
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 <stdio.h>
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,不对循环变量进行操作,这时可在循环体中加入修改循环控制变量的语句


  • 49
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值