跳转语句_C语言知识点概要第三部分(语句)

c72008b046993b7242411cb8dcc5c344.png

图片来自于网络

C语言语句由“;”结束或者由“{}”界定。初学者在编写程序的过程中,经常要么忘记在语句结束位置加上“;”,或者在每一行末尾都加上“;”。由于单独一个“;”就是一个合法的空语句,没有语法错误,这种在不恰当位置添加的“;”是无法通过编译器检查出来的。

C语言常用语句分类如下图:

f8d47e3557ab761058636d5867af5456.png

37bcad64504a68445a65510f00105d78.png

表达式后面加上“;”就是表达式语句,比如:a=a*10; 就是赋值表达式语句。

b22b8105596261d306bd5134dd2a5f5c.png

在函数调用表达式后面加上“;”,就是函数调用语句。

函数调用语句一般形式:函数名(实参表列);

例如,若有char s[20];,则下面就是两个函数调用语句:

scanf("%s",s);gets(s);

fc35a27023f955ea96fd60a843a51b3c.png

单独一个“;”就是空语句。例如将一个串复制到另一个数组中:

char s[80],ss[20]={"Hello, world!"};int i,j;for(i=0,j=0;(s[i++]=s[j++])!='\0';i++,j++);

上面的for语句的循环体就是一个空语句,由于复制字符串的工作都在

for后面的“()”中完成了,所以循环体无需做任何任务,因此为了for语句的完整性,循环体就是一个空语句。

3f73316395f55e2899d0ca4d659f0da0.png

单独一个“;”就是空语句。例如将一个串复制到另一个数组中:

char s[80],ss[20]={"Hello, world!"};int i,j;for(i=0,j=0;(s[i++]=s[j++])!='\0';i++,j++);

上面的for语句的循环体就是一个空语句,由于复制字符串的工作都在for后面的“()”中完成了,所以循环体无需做任何任务,因此为了for语句的完整性,循环体就是一个空语句。

定义:由“{}”括起来的语句组就称为复合语句。

由于C语言的控制语句都要求在控制条件后面仅接一条语句,但通常情况下却需要多条语句才能完成需要处理的任务,因此需要使用复合语句。

C语言的复合语句还具有以下特点:

  1. 在复合语句中可以定义变量,这个变量是局部变量,只能在定义所在复合语句中使用。

  2. 复合语句中定义的变量可以与在函数声明部分定义的变量同名,但复合语句中的变量会屏蔽函数中的同名变量。

#includeint main(){  int a[]={1,2,3,4,5},i;  //左对齐方式输出数组元素,并且每个元素占6列  for(i=0;i<5;i++)    printf("%-6d",a[i]);  {    static int i;//定义具备静态变量i,系统自动将i初始化为0    int ave;    //求数组前三个元素的平均值    for(ave=0;i<3;i++)      ave+=a[i];    printf("\n\nave=%f\n\n",ave/3.0);    printf("复合语句中:\ni=%d\n\n",i);  }  printf("复合语句外:\ni=%d\n\n",i);  return 0;}

输出结果:

7d18bd39d600cb3d440377663c292c51.png

1a0589cb4cbf27e1c12a76af0e362495.png

#includeint main(){  float a[]={1,2,3,4,5};  int i;  //左对齐方式输出数组元素,并且每个元素占6列  for(i=0;i<5;i++)    printf("%-6.1f",a[i]);  return 0;}

从宏观上看,控制语句也是一条语句,因此C语言语句执行的顺序是按书写的顺序逐条执行的。如上面程序代码中,第4行到第9行总共4条语句,执行完int i; 后,将执行for循环语句;for循环语句执行完后将执行

return 0;语句。

从微观上看,程序执行到控制语句时,由控制语句决定接下来执行哪一条语句,例如上面的程序中的for语句,当i<5时,转到第8行执行,否则转到第9行执行。

对什么是一条语句的充分理解,有利于控制语句的编写和理解。

3d753ad199200d1e3f429870229a3b6b.png

  • 一般形式:

  if(表达式)

          语句;

  • 说明:

  1. 表达式的值为零就是假,非零就是真。

  2. if后面只能放置一条语句。

  3. 语句可以是任何合法的语句。

  • 常见问题:

int x=-10;if (x>0) ;         y=x+2; // if后面只能放置一条语句//第3行就是一个合法的单分支语句//因此第3行语句会在if语句执行结束后执行,不受x>0的控制
int x=-10;if (x=2)    printf(“y>0”);//错将赋值符号“=”当做等于号“==”
int x=-10;if (1<=x<=10)      y=x-1;//if后面表达式的计算是从左到右先计算1<=x,其结果再与10相比较

e28c6f01f0aaee8ec080e7f84c6c2237.png

  • 一般形式:

   if(表达式)

          语句1;

   else

          语句2;

  • 说明:

  1. 表达式的值为零就是假,非零就是真。

  2. if后面只能放置一条合法语句。

  3. else总是与上面的最靠近它的if配对,else不能单独使用。

常见问题:

#includeint main(){  int score=56;  if(score>=60)    if(score>=90)      printf("优秀\n");  else    printf("不及格,要重修。\n\n");  return 0;}

上面程序代码没有输出结果,尽管第8行与第五行对齐,但实际上else是与第6行的if配对的,因此此程序无法表达分数低于60分则输出“不及格,要重修。”

该程序需要修改为如下才正确:

#includeint main(){  int score=56;  if(score>=60)  {    if(score>=90)      printf("优秀\n");  }  else    printf("不及格,要重修。\n\n");  return 0;}

5c16fff744c84a5a995309fb68f2a85b.png

多分支结构有两种:

(1)if...else if语句

其本质就是在else后面嵌套一个双分支结构,关键点是要注意else是与上面最靠近它的if配对的。

if(表达式1)    语句1;  else    if(表达式2)      语句2;    else      if(表达式3)        语句3;      else        ...

(2)switch语句

switch语句是一个开关语句,对表达式e有要求,必须得到一个整数值,所以e可以是整数表达式、字符表达式、枚举类型值。

switch一般形式如下:

switch(e)  {     case c1 : 语句组1;     case c2 : 语句组2;     ……     case cn :  语句组n;    default :  语句组n+1; /*可缺省*/  }

switch语句特点:

  • 先计算e,然后将e值与c1、c2、...、cn比较,找到与其相等的ci,也既找到了程序执行的入口,从入口处开始执行,直到遇到break或者switch语句结束符“}”则执行结束。

  • default表示e没有找到任何ci入口时则从default开始执行,switch语句也可以不包含default语句。default语句的位置可以是“{}”中任意位置。

特别要注意的是对语句的理解,switch(e){语句组}是一个语句,可以嵌套在switch结构中。例如:

#includeint main(){  int a=0,b=0,x=0,y=1;    switch(a)    {     case 0: switch(x){//嵌套了一个switch语句         case 0:y++,b++;break;         case 1:y--,b--;break;               }//switch语句后没有break语句,将继续执行后面的语句   case 1: b++,y++;break;   case 2: b--;y--;break;     }     printf("b=%d,y=%d\n\n",b,y);   return 0;}

输出结果:7cfbd88b9c603003775e3b9ee37e8691.png

分析:a的值为0,从case 0后面的语句开始执行,遇到break才结束

switch语句。case 0后嵌套了一个switch语句,但该语句后面没有

break语句,因此执行switch(x){}语句后将继续执行“b++,y++;”语句。

fad259c0bae45a3bf4524c6b8f283dc4.png

一般形式:

while(表达式)   循环体语句

说明:

(1)循环体由一条语句构成:以“;”结束的简单语句或者“{}”括起来的复合语句。

(2)循环体内一定要有使循环结束的语句,否则构成死循环。

77a018a30f38d37de833b5a35034eb55.png

一般形式:

do 循环体语句while(表达式);

说明:

(1)循环体由一个语句构成:以“;”结束的简单语句或者“{}”括起来的复合语句。

(2)循环体内一定要有使循环结束的语句,否则构成死循环。

b8e1854c04f7fa620f9c69ce7074eef1.png

一般形式:

for(表达式1;表达式2;表达式3)     循环体语句

说明:

(1)循环体由一个语句构成:以“;”结束的简单语句或者“{}”括起来的复合语句。

(2)for()中的表达式都可以省略,但两个“;”不能省略。其中缺省表达式2时表示循环条件恒为真。

(3)一定要控制循环次数,使循环执行有限次数后结束,否则是死循环。

d479aab8e0b68d0def361262411186cd.png

break语句可以用来结束switch语句,同时也可以与if配合用来结束一重循环。

#includeint main(){  int i,j,sum=0;  for(i=1;i<10;i++)  {    for(j=2;j      if(i%j==0)        break;//结束内重for循环。    if(i==j)      sum+=i;  }  printf("sum=%d\n\n",sum);}

4a978cc3d06470638aab9c741d513236.png

continue语句用于结束本次循环,执行完continue后,continue后面的语句将不执行。

#includeint main(){  int i,sum=0;  for(i=1;i<=10;i++)  {    if(i%2==0)    {      continue;//执行continue后,直接执行for(i=1;i<=10;i++)中的i++      i=i+2;    }    else      sum+=i;  }  printf("sum=%d\n\n",sum);}

以上程序输出结果为:sum=25

d0a7bb2dbc035f952fd4f1d5b5e0eee6.png

用于函数中,目的是让函数返回一个值。函数中可以有多条return语句,但只会执行第一个return语句就结束函数调用。

587f3d67100731a7fa8e9f07a0786e13.png

goto语句充分体现了C语言的灵活性,它可以让程序跳转到goto后面的标号处开始执行,因此if+goto语句可以构建循环。

goto语句可以由循环体内跳转到循环体外,但不能由循环体外跳转到循环体内。

由于goto太过于灵活,一般不用。

//求1-10的和#includeint main(){  int i,sum=0;  i=1;loop:sum=sum+i;//loop为标号,符合标识符命名规则  i++;  if(i<=10)    goto loop;//跳转到标号为loop处开始执行  printf("sum=%d\n\n",sum);}
//用goto语句结束循环#includeint main(){  int i,sum=0;  i=1;  for(i=0;;i++)  {    if(i>10)      goto loop;//i>10则跳转到loop处执行    sum+=i;  }  loop:printf("sum=%d\n\n",sum);}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值