山东科技大学第五章C程序结构及控制语句_第1页
山东科技大学第五章C程序结构及控制语句_第2页
山东科技大学第五章C程序结构及控制语句_第3页
山东科技大学第五章C程序结构及控制语句_第4页
山东科技大学第五章C程序结构及控制语句_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章C程序结构及控制语句学习内容C程序语句及编程风格

顺序结构

选择结构循环结构应用举例5.1C程序语句及编程风格一、C程序语句C语句可以分为五类:表达式语句;函数调用语句;控制语句;空语句;复合语句。表达式语句:由表达式加上分号组成。例如:x=y+z;

x+y;i++;说明:C语言中的任何一个表达式都可以构成语句。注意表达式与表达式语句的区别函数调用语句:由函数调用加上分号构成。例如:printf(“CProgram”);本质上,函数调用语句也属于表达式语句。控制语句:用于控制程序的流程。包括:if()…else… (条件语句)switch (多分支选择语句)for()… (循环语句)do…while() (循环语句)while()… (循环语句)break (终止执行switch或循环语句)continue (结束本次循环语句)goto (无条件转向语句)return (从函数返回语句)空语句:仅由一个分号组成。格式:;功能:不执行任何操作。复合语句:由两个或者两个以上的语句构成的语句。例如:{ x=y+1;a=b+c;

printf(“%d,%d”,x,a);}(1)复合语句必须用一对“{}”括起来。(2)复合语句中的最后一条语句不可省略“;”。二、C程序编程风格正确性:可靠性:规范化:可读性:灵活性:5.2顺序结构顺序执行。输入、计算、输出三步曲例5.1要求:输入三角形的三边长,求三角形面积。海伦公式:;s=(a+b+c)/2。#include<stdio.h>#include<math.h>voidmain(){floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("a=%f,b=%f,c=%f,s=%f\n",a,b,c,s);

printf("area=%7.2f\n",area);}例5.2要求:从键盘输入一个大写字母,要求改用小写字母输出。#include<stdio.h>voidmain(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}例5.3交换数据。对输入的两个变量a、b,交换它们的值并输出。#include<stdio.h>voidmain(){

int

a,b,c;

printf(“Pleaseinputtwointegers:”);

scanf(“%d%d”,&a,&b);

printf(“Beforeswapa=%db=%d\n”,a,b);c=a;a=b;b=c;

printf(“Afterswapa=%db=%d\n”,a,b);}输入a、b交换a、b输出a、b5.3选择结构C语言提供了两种分支结构控制语句:

if语句

switch语句if语句格式一格式1:if(表达式)

语句例如:if(a>b)max=a;例如:#include<stdio.h>main(){

intx;

scanf(“%d”,&x);if(x<60)

printf(“不及格!!!”);

printf(“x=%d”,x);}if语句格式二格式2:if(表达式)

语句1else

语句2例如:if(a>b)max=a;elsemax=b;例如:#include<stdio.h>main(){

intx;

scanf(“%d”,&x);if(x<60)

printf(“不及格!!!”);

else

printf(“x=%d”,x);}if语句的嵌套

如果if语句中的执行语句又是一个if语句,就构成了if语句嵌套的情形。格式:if(表达式) if语句或者:if(表达式)if语句

elseif语句例5.5从键盘输入一个数值x,求符号函数值。#include<stdio.h>voidmain(){floatx;

int

sgn;

scanf("%f",&x);if(x==0)sgn=0;else

if(x>0)sgn=1;elsesgn=-1;

printf("sgn(x)=%d",sgn);}嵌套的if语句if语句格式三格式3:if(表达式1)

语句1elseif(表达式2)

语句2elseif(表达式3)

语句3……elseif(表达式n)

语句nelse

语句n+1if语句说明if关键字之后均为带括弧的表达式。该表达式可以是任何表达式。只要表达式运算的结果为非0,就按“真”处理,执行相应的语句;否则按“假”处理,执行相应的语句。在if语句的第二、三种形式中,else子句必须与if配对使用。在if语句的三种形式中,所有的语句应为单个语句,如果在满足条件时执行多个语句,则必须把这多个语句用“{}”组成一个复合语句。但是在“}”之后不能加分号。在表达式中不要使用“if(a)”这样的语句。例5.7对于输入的0~100分之间的成绩,判定出A~E五个等级#include<stdio.h>main(){intn;scanf(“%d”,&n);if(n<60)

printf(“E\n”);elseif(n<70)

printf(“D\n”);

elseif(n<80)

printf(“C\n”);elseif(n<90)

printf(“B\n”);else

printf(“A\n”);}课堂练习:阅读程序,写出程序的执行结果。1、#include<stdio.h>main(){intx=3,y=5;if(x=5)

printf(“hello\n”);else

printf(“word\n”);}2、#include<stdio.h>main(){inta=1;if(a=0)

printf(“hello\n”);else

printf(“word\n”);}3、做课后习题第4题选择结构—switch语句格式:switch(表达式){ case常量表达式1:语句1 case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1}switch(a){case1:printf(“Monday\n”);case2:printf(“Tuesday\n”);case3:printf(“Wednesday\n”);case4:printf(“Thursday\n”);case5:printf(“Friday\n”);case6:printf(“Saturday\n”);case7:printf(“Sunday\n”);default:printf(“error\n”);}N-S图示例说明:“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句。为了避免上述情况,C提供了break语句。在case后的各个常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用{}括起来。各个case和default子句的先后顺序可以变动,不影响程序的执行结果。default子句可以省略不用,此时当表达式的值与所有case后的常量表达式的值不同时,退出switch语句,继续执行后续程序。switch后面括号中的表达式只能是整型、字符型、枚举类型,case后的常量表达式的类型必须与之匹配。各个case之后是常量表达式,一定不要试图使用条件表达式或者逻辑表达式。例5.6计算器程序。从键盘接收两个运算数和四则运算符,计算并输出结果。#include<stdio.h>voidmain(){floata,b;charc;

printf("inputexpression:a+(-,*,/)b\n");

scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;

default:printf("inputerror\n");}}课堂练习:完成课后习题5.55.4循环结构循环条件:循环体:循环变量:C语言提供了三种循环控制语句。

while语句;

do-while语句;

for语句。while语句格式:while(表达式)

语句(1)while语句中的表达式一般是关系表达式或者逻辑表达式,只要值为真就可以继续执行循环体。(2)如果循环体包含一个以上的语句,必须用{}括起来构成复合语句。#include<stdio.h>voidmain(){intsum=0,n;n=0;//循环变量初始化while(n<=100){sum+=n;n+=2;//改变循环变量的值}printf("%d\n",sum);}do-while语句格式:do{

语句

}while(表达式);(1)do-while语句的表达式后必须加分号。(2)如果循环体由多个语句组成,也必须由{}括起来,组成一个复合语句。例求1~100之间所有偶数的和。#include<stdio.h>voidmain(){

intsum=0,n;n=0;//循环变量初始化

while(n<=100)//循环执行条件

{sum+=n;n+=2;//改变循环变量的值

}

printf("%d\n",sum);}#include<stdio.h>voidmain(){

intsum=0,n;n=0;//循环变量初始化do{sum+=n;n+=2;//改变循环变量的值

}while(n<=100);

printf("%d\n",sum);}例:重复判断用户输入的是否是一个偶数,直到输入0为止。#include<stdio.h>voidmain(){

intn;do{

printf(“请输入一个整数:");

scanf("%d",&n);if(n%2==0)printf(“%d是一个偶数!\n“,n);}while(n!=0);}for语句格式:for(表达式1;表达式2;表达式3)

语句说明:for语句的各个表达式均可省略,但是分号不可缺少。如果循环变量已经在for语句前赋初始值,那么表达式1可以省略。如果省略表达式2,一般在循环体中加入break语句来退出循环。若省略表达式3,应在循环体中修改循环变量,保证循环能结束。可以同时省略三个表达式中的任意2个或三个表达式全省略。循环体可以是空语句。表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其它表达式。表达式2一般是关系表达式或者逻辑表达式,但也可以是数值表达式或者字符表达式,只要其值为非零,就可以执行循环。表达式3一般是改变循环变量的赋值表达式,但也可以是与循环变量无关的其它表达式。表达式1和表达式3都可以是逗号表达式。例7求1~100之间所有偶数的和。#include<stdio.h>voidmain(){

intsum=0,n;for(n=0;n<=100;n+=2)sum+=n;

printf("%d",sum);}例5.4

判断键盘上输入字符的类别,统计其中字母、数字、其它字符的个数并输出。#include<stdio.h>#include<string.h>voidmain(){charInStr[80];unsignedinti;

intNumOfData=0;

intNumOfChar=0;

intNumOfOther=0;

printf("inputastring:");

gets(InStr);for(i=0;i<strlen(InStr);i++){if(InStr[i]>='0'&&InStr[i]<='9')

NumOfData++;elseif((InStr[i]>='a'&&InStr[i]<='z')||(InStr[i]>='A'&&InStr[i]<='Z'))

NumOfChar++;else

NumOfOther++;}

printf(“%d,%d,%d.\n",

NumOfData,NumOfChar,NumOfOther);}跳转语句

goto语句称为无条件转向语句。格式:goto语句标号;例如:

gotolabel;(1)语句标号用标识符表示,命名规则与变量名的命名规则相同。(2)一般而言,goto语句有两种用途:与if语句一起构成循环,这是goto语句最常用的用途。从多层循环中跳出。

#include<stdio.h>voidmain(){

intsum=0,n;n=0;//循环变量初始化lm:sum+=n;n+=2;//改变循环变量的值if(n<=10)gotolm;

printf("%d\n",sum);}

break语句格式:break;功能:用于跳出switch结构,和从循环体内中途跳出循环体,即提前结束循环,执行循环下面的语句。说明:(1)在循环语句中,break语句一般与if语句一起使用。(2)break语句不能用于循环语句和switch语句之外的其它任何语句之中。举例:例8计算半径r=1到r=10的圆面积,直到圆面积大于100为止。#definePI3.1415926#include<stdio.h>voidmain(){floatarea;intr;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;

printf(“%f\n”,area);}}

continue语句格式:continue;功能:跳过循环体中剩余的语句而强制执行下一次循环,即结束本次循环,跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。说明:continue语句只能用在循环语句中,且一般都是与if语句一起使用。举例:例9把100~200之间的不能被3整除的数输出。#include<stdio.h>voidmain(){

intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%5d”,n);}}循环嵌套

当一个循环体内又包含另一个完整的循环体时,称为循环嵌套。其中被嵌套的循环称为外层循环,在其它循环体中嵌套的循环为内层循环,或者内嵌循环。如果内嵌循环的循环体内又有一个完整的循环结构,则构成了多层嵌套。

C语言提供的三种循环控制语句可以互相嵌套,也可以自己嵌套。例10输出如下图形:***************#include<stdio.h>voidmain(){

int

i,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)

printf("*");

printf("\n");}}例12百钱买百鸡问题“百钱买百鸡”是我国古代的著名数学题。问题是这样描述的:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?解法1:假设i、j、k分别代表公鸡、母鸡和小鸡的数目,注意到一百文钱最多可以买33只公鸡、50只母鸡和300只小鸡,所以0<=i<=33,0<=j<=50,0<=k<=300。#include<stdio.h>voidmain(){

int

i,j,k;for(i=0;i<=33;i++)for(j=0;j<=50;j++)for(k=0;k<=300;k++) if(3*i+2*j+k/3==100&&i+j+k==100&&k%3==0)

printf("公鸡%d只,母鸡%d只,小鸡%d只。\n",i,j,k);}解法2:在第一种实现方法里面,i、j、k构成了三重循环,if语句总共需要被判断33×50×300=495000次。上个程序完全可以变为二重循环,因为i、j、k都是整数,当i、j的值被确定后,k=100-i-j。#include<stdio.h>voidmain(){

int

i,j,k;for(i=0;i<=33;i++)for(j=0;j<=50;j++){k=100-i-j;if(3*i+2*j+k/3==100&&k%3==0)

printf("公鸡%d只,母鸡%d只,小鸡%d只。\n",i,j,k);}}一只猴子原有若干个桃子,第一天吃掉总数的一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第十天准备吃的时候发现只剩下一个桃子。求这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论