C语言程序设计:第3章 程序设计结构_第1页
C语言程序设计:第3章 程序设计结构_第2页
C语言程序设计:第3章 程序设计结构_第3页
C语言程序设计:第3章 程序设计结构_第4页
C语言程序设计:第3章 程序设计结构_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计吉林大学珠海学院计算机系第3章

程序设计结构本章内容3.1顺序结构编程3.2选择结构程序设计3.3循环结构程序设计3.4break语句和continue语句3.5goto语句3.6程序实例基本概念C程序语句分为:控制语句函数调用语句表达式语句空语句复合语句一条完整的C程序语句必须以分号“;”结束基本概念控制语句

1.if-else

条件语句

2.for

循环语句

3.while 循环语句

4.do-while

循环语句

5.continue

结束本次循环语句

6.break

中止switch或循环语句

7.switch

多分支选择语句

8.goto

转向语句

9.return

返回语句基本概念函数调用语句由一个函数调用加一个分号构成一个语句printf(“ThisisaCstatement”);表达式语句由一个表达式加一个分号构成一个语句a=3.14159*r*r

;基本概念赋值语句由赋值表达式加分号构成一个语句a=100;

赋值表达式可以包含于条件表达式中,不是判断是否相等

if(a=b)t=a;//什么含义?

if(a==b)t=a;//什么含义?基本概念空语句只有一个分号的语句

;用来做流程的转向点用来作为循环语句中的循环体复合语句

用一对{}括起来的若干条语句{

z=x+y;t=z/100;printf(“%f”,t);

}基本概念结构化程序设计的基本思想是:任何程序都可以用三种基本结构来实现,即顺序结构、选择结构和循环结构顺序结构程序流程是按语句书写的顺序依次执行选择结构是根据给定条件进行判断,由判断的结果决定执行两条或多条路径中的一条循环结构是在给定条件成立的情况下反复执行某个程序段,该程序段称为循环体顺序结构程序设计例3.1:从键盘输入a、b的值,输出交换后的值#include<stdio.h>voidmain(){

int

a,b,temp;

printf("请输入ab的数值\n");

scanf("%d%d",&a,&b);

printf("a=%d,b=%d\n",a,b);

temp=a; a=b; b=temp;

printf("交换后ab的数值\n");

printf("a=%d,b=%d\n",a,b);}顺序结构程序设计例3.2:已知三角形三条边a、b、c,求面积#include<stdio.h>#include<math.h>voidmain(){ floata,b,c,s,area;

printf("请输入三条边abc的长度\n");

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

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

printf("s=%f,area=%f\n",s,area);}选择结构程序设计用if语句实现选择结构1.

简单分支语句2.双重分支语句3.

多重分支语句选择结构程序设计1.简单分支语句

if(表达式)<内嵌语句>;执行流程计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句语句表达式FT选择结构程序设计例3.3:输出两个整数中的最大数#include<stdio.h>voidmain(){

inta,b,max;

printf("inputtwonumbers:\n");

scanf("%d%d",&a,&b);max=a;if(max<b)max=b;

printf("max=%d\n",max);}选择结构程序设计2.双重分支语句if(表达式)内嵌语句1;else内嵌语句2;计算表达式的值,如果是一个非0值,就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句表达式语句1语句2TF选择结构程序设计例3.4:输出两个整数中的最大数#include<stdio.h>voidmain(){

inta,b;

printf("inputtwonumbers:\n");

scanf("%d%d",&a,&b);if(a>b)

printf("max=%d\n",a);else

printf("max=%d\n",b);}选择结构程序设计3.多重分支语句if(表达式1)内嵌语句1;elseif(表达式2)内嵌语句2;elseif(表达式3)内嵌语句3;……elseif(表达式n)内嵌语句n;else内嵌语句n+1;选择结构程序设计依次计算表达式i的值,非0时执行后面语句,全为0时,执行语句n+1无论执行完哪个语句分支,都转到后续语句表达式1F表达式2表达式3FTFTTF表达式n语句n语句n+1T语句3语句2语句1选择结构程序设计例3.5:判断输入字符的种类#include<stdio.h>voidmain(){charch;

printf("请输入一个字符\n");

scanf("%c",&ch);if(ch>=‘0’&&ch<=‘9’)printf(“是数字\n"); elseif(ch>=‘a’&&ch<=‘z’)printf(“是小写字母\n");elseif(ch>=‘A’&&ch<=‘Z’)printf(“是大写字母\n");elseprintf(“是其他字符\n");}选择结构程序设计例3.6:输入年份,判别该年是否为闰年年份year为闰年的条件为①能够被4整除,但不能被100整除的年份②能够被400整除的年份设定标志变量leap,只要符合其中一个条件的就是闰年,令leap=1;否则令leap=0选择结构程序设计例3.5:判断输入字符的种类#include<stdio.h>voidmain(){

intyear,leap;

scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;

elseleap=0;

if(leap==1)

printf("%disaleapyear\n",year);else

printf("%disnotaleapyear\n",year);

}选择结构程序设计if语句的嵌套结构if(表达式)if(表达式1)内嵌语句1-1else内嵌语句1-2elseif(表达式2)内嵌语句2-1else内嵌语句2-2选择结构程序设计嵌套结构中,可能会出现许多if和else。原则上,else总是与它最近尚未配对的if配对在一个if嵌套结构中,if和else的个数可能不等。为使结构清晰,避免配对错误,编程人员应多用花括号来形成复合语句,以正确地表达自己的设计意图选择结构程序设计例3.7:输入两数并判断其大小关系#include<stdio.h>voidmain(){

intx,y;

printf("Enterintegerx,y:");

scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");else

printf("X==Y\n");}选择结构程序设计用switch语句实现选择结构switch(表达式){case常量值1:语句序列1;[break;]case常量值2:语句序列2;[break;]……case常量值n:语句序列n;[break;]default:语句序列n+1;[break;]}选择结构程序设计计算switch表达式的值,与case后的常量值比较,如果等于第i个值时,则执行case语句序列i;如果执行时没有遇到break语句,那就继续顺序执行case语句序列i+1、…、n、n+1,而不用再判别与常量值是否匹配;如果遇到break语句,则立即跳去执行switch的后续语句若与所有常量值都不相等,才执行default的语句序列n+1选择结构程序设计switchdefault表达式语句1Ybreak语句n+1N常量值1语句2Ybreak常量值2N语句3Ybreak常量值3N(后续语句)选择结构程序设计switch后的表达式必须用圆括号括住,取值只能是整型或字符型的各case后的常量必须是整数或字符常量,且要求是不相同default在语句里出现的位置没有要求,不会影响程序的执行结果【例3-9】编写一程序,当分别输入数字1、2、3、4、5时,分别输出first、second、third、fourth、fifth,当输入其他任意字符时,输出error。/*prog3-09*/#include<stdio.h>voidmain(){ charc; scanf("%c",&c); switch(c) { case'1':printf("first\n");break;//break用于跳出switch语句体

case'2':printf("second\n");break;

case'3':printf("third\n");break; case'4':printf("fourth\n");break; case'5':printf("fifth\n");break;

default:printf(“error\n”);//最后一个情况语句,可省略break

}}【例3-10】编写程序,输入一百分制成绩,对应输出等级A、B、C、D、E,90分以上为A,80分—89分为B,70分—79分为C,60分—69分为D,60分以下为E。#include<stdio.h>voidmain(){ int

score,k;

scanf("%d",&score); k=score/10;

switch(k) { case10: case9:printf("A\n");break; case8:printf("B\n");break; case7:printf("C\n");break; case6:printf("D\n");break;

default:printf("E\n");}}循环结构程序设计在一定的条件下,去重复执行一组语句,这样的语句结构称为循环结构,被重复执行的那组语句被称为循环体C语言中用于实现循环的语句有3种while循环语句do…while循环语句for循环语句

循环结构程序设计while循环语句while(表达式)

内嵌语句;执行流程计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式值为0时结束循环,转去执行while后面的语句FTwhile表达式内嵌语句循环结构程序设计使用while循环语句时,要注意两个问题:一是在进入循环前,必须为控制循环的条件赋初值,否则无法检验条件是否成立二是在循环体中,应该含有修改循环条件的语句,否则就可能造成死循环

循环结构程序设计例:求sum=1+2+3+…+100#include<stdio.h>voidmain(){

inti=1,sum=0;while(i<=100){sum=sum+i;i++;}

printf("sum=%d\n",sum);}循环结构程序设计例:求sum=10!#include<stdio.h>voidmain(){

inti=1,sum=1;while(i<=10){sum=sum*i;i++;}

printf("sum=%d\n",sum);}循环结构程序设计例3.11:输出1~50间所有能被3整除的正整数通过num++遍历1~50所有正整数,通过num%3==0判断某数是否能被3整除增加控制变量i一是记录当前已输出的个数,由语句“i++;”来完成二是用来控制一行输出数据的个数,当它能够被7整除时,就输出一个回车换行符,由语句“if(i%7==0)

printf("\n");”来完成循环结构程序设计例3.11:输出1~50间所有能被3整除的正整数。#include<stdio.h>voidmain(){

inti=0,num=1;while(num<=50){if(num%3==0){

printf("%3d",num);i++; if(i%7==0)

printf("\n");}num++;}}循环结构程序设计do…while循环语句do{

内嵌语句;}while(表达式);先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为0结束循环,转去执行while下面的语句FT内嵌语句表达式do…while循环结构程序设计关于do…while语句的几点注意编写程序时,无论循环体是否为复合语句,最好都用花括号括起来

do…while语句要以分号结束,不能忽略不写while和do…while循环语句最大差别是:前者的循环体有可能一次也不做(如果进入循环时条件就为假);后者的循环体至少要做一次,因为它的判定条件被安排在了做完一次循环体之后循环结构程序设计例:求sum=1+2+3+…+100#include<stdio.h>voidmain(){

inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);

printf("sum=%d\n",sum);}循环结构程序设计例:π/4=1-1/3+1/5-1/7+…+1/n,求的近似值,精度要求为|1/n|<104关键是如何形成新项。级数各项分子都是1,分母由奇数组成,各项前的符号正负相间符号变量sign,该变量交替取1和-1两个值绝对值函数,整型abs(x),实型fabs(x)绝对值函数在头文件math.h里循环结构程序设计例3.12#include<stdio.h>#include<math.h>main(){floatpi=0.0,n=1.0;floatsign=1.0,item;do{item=sign/n;pi+=item;sign*=−1.0;n+=2;}while(fabs(item)>=1e−4);

printf("π=%f\n",4*pi);}循环结构程序设计for循环语句for(表达式1;表达式2;表达式3)

内嵌语句;计算表达式1,为循环变量赋初值再计算表达式2,如果其值为非0,则执行内嵌语句,并计算表达式3,以修改循环条件又计算表达式2,如果其值为非0,进入下一次循环,否则结束循环,执行后续语句循环结构程序设计NYfor计算表达式1内嵌语句计算表达式3表达式2为真?循环结构程序设计for语句注意事项表达式1、表达式2、和表达式3可以是任何类型的表达式,比方说可以是逗号表达式表达式1、表达式2、和表达式3都是任选项,可部分或全部省略,但间隔的分号是一个也不能省如果循环体部分包含多条语句,应该用花括号括起来构成复合语句循环结构程序设计例:求sum=1+2+3+…+100#include<stdio.h>voidmain(){

inti,sum=0;

for(i=1;i<=100;i=i+1){sum=sum+i;}

printf("sum=%d\n",sum);}循环结构程序设计例:求sum=1*2+3*4+5*6+…+99*100#include<stdio.h>voidmain(){inti,j;longintsum=0;

for(i=1,j=2;i<=100;i+=2,j+=2){sum=sum+i*j;}

printf("sum=%d\n",sum);}循环结构程序设计几种循环语句的比较while语句用于循环次数不定的情况do-while语句用于至少要运行一次的情况for语句用于要赋初值或循环次数固定的情况循环结构程序设计熟悉几个循环语句while((c=getchar())!='\n')count=count+1;count为计数器,作用是统计输入字符的个数for(n=0;n<26;n++)printf("%c",n+'A');作用是输出26个大写字母for(sum=0,i=1;i<=100;sum=sum+i,i+=2);作用是计算100以内的奇数和循环结构程序设计如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套。通常把里面的循环称为内循环,外面的循环称为外循环循环结构程序设计例:打印九九乘法表#include<stdio.h>voidmain(){

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

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

printf("%d×%d=%2d",i,j,i*j);}

printf("\n");}}循环结构程序设计有如下三种语句实现跳转:goto语句break语句continue语句在循环语句的循环体中使用,可以进行循环流程控制在结构化程序设计中一般不主张使用goto语句循环结构程序设计break语句break;在switch多分支选择结构中,当某个case后的语句执行完、遇到break时,就跳出switch结构在循环结构中:若遇到break,就立即结束整个循环,跳到该循环的后续语句处执行循环结构程序设计后续语句…break;…YN表达式?后续语句…break;…表达式?YNwhile语句do-while语句后续语句计算表达式3计算表达式1…break;…表达式2?YNfor语句循环结构程序设计例:输出100-200之间的素数#include<stdio.h>#include<math.h>voidmain(){

intn,i,k;for(n=101;n<=200;n+=2){k=sqrt(n);

for(i=2;i<=k;i++)

{if(n%i==0)break;}

if(i>k)printf("%4d\n",n);}} 循环结构程序设计continue语句continue;在循环结构里遇到它时,就跳过循环体中它后面的其他语句(如果有的话),提前结束本次循环,去判断循环控制条件,以决定是否进入下一次循环循环结构程序设计后续语句…continue;…YN表达式?后续语句…continue;…表达式?YNwhile语句do-while语句后续语句计算表达式3计算表达式1…continue;…表达式2?YNfor语句循环结构程序设计例:输出100-200之间的不能被3整除的整数#include<stdio.h>voidmain(){

intn;for(n=100;n<=200;n++){

if(n%3==0)continue;

printf(“%d\n”,n);}} 循环结构程序设计exit()函数包含在文件<stdlib.h>voidexit(intstatus);

终止整个程序的执行,强制返回操作系统参数status为int型,status的值传给调用进程(一般为操作系统)。按照惯例,当status的值为0或为宏常量EXIT_SUCCESS时,表示程序正常退出;当status的值为非0或为宏常量EXIT_FAILURE时,表示程序出现某种错误后退出循环结构程序设计例3.18:打印大小可变的菱形图案,下面菱形的大小size=7

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡循环结构程序设计菱形的大小size其实就是中间行中*号的个数,也是整个菱形的行数,其值必须是奇数如何确定每行中*号的个数经分析当行数i<=

(size+1)/2时,该行上的*号个数为n=2*i-1,否则n=2*(size-i+1)-1如何确定每行显示的第一个*号的位置,也就是显示第一个*号之前应显示多少个空格经分析显示空格数应为m=(size-n)/2循环结构程序设计例3.17:输出100-200之间不能被3整除的数#include<stdio.h>#include<stdlib.h>voidmain(){

inti,j,k,m,n,size;

scanf(“%d”,&size);//输入大小

if(size<=0||size%2==0){

printf("thesizeiserror!\n");exit(0);//程序结束

}for(i=1;i<=size;i++)//控制行数

{n=(i<=(size+1)/2)?i:(size-i+1);n=2*n-1; //每行"*"个数

m=(size-n)/2;//在"*"之前应打印空格数

for(k=1;k<=m;k++){printf("");}for(j=1;j<=n;j++){printf("*");}

printf("\n");

}}#include<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){ inti,j,k,m,n,size;//m表示空格个数,n表示*个数scanf("%d",&size); //输入大小

if(size<=0||size%2==0) { printf("thesizeiserror!\n"); exit(0); //size大小不合法,程序结束

}for(i=1;i<=size;i++) //控制行数

{ m=abs((size+1)/2-i); //m表示第i行*前面要先打m个空格

n=size-2*m; //n表示*个数

for(k=1;k<=m;k++){printf("");} for(j=1;j<=n;j++){printf("*");}

printf("\n");}}循环结构程序设计例:计算用户输入的两正整数之间的所有整数中0,1,2,…,9数码的个数问题关键是要计算某整数中包含的各个数码的个数,必须对该整数进行分解,求得所包含的各个数码,其方法可以通过每次除以10取余数得到,然后再对商进行同样的处理,直到商为0时为止。对所得到的数码进行计数,可采用switch语句来实现循环结构程序设计例3.1:计算用户输入的两正整数之间的所有整数中0,1,2,…,9数码的个数#include<stdio.h>#include<stdlib.h>voidmain(){

intnum1,num2;

intn,s,r;

intcount0=0,count1=0,count2=0;

intcount3=0,count4=0,count5=0;

intcount6=0,count7=0,count8=0,count9=0;

scanf("%d%d",&num1,&num2);if(num1<0||num2<0||num1>num2){

printf("inputerror!\n");exit(0);}for(n=num1;n<=num2;n++){s=n;do{r=s%10;循环结构程序设计例3.1:计算用户输入的两正整数之间的所有整数中0,1,2,…,9数码的个数switch(r){case0:count0++;break;case1:count1++;break;case2:count2++;break;case3:count3++;break;case4:count4++;break;case5:count5++;break;case6:count6++;break;case7:count7++;break;case8:count8++;break;case9:count9++;break;}

s=s/10;}while(s!=0);}//forprintf("0:%-4d1:%-4d2:%-4d\n”,count0,count1,count2);printf(“3:%-4d4:%-4d5:%-4d\n”,count3,count4,count5);printf(“6:%-4d7:%-4d\n”,count6,count7);printf(“8:%-4d9:%-4d\n”,count8,count9);}本章小结本章主要讨论了循环结构程序设计的有关方法,重点介绍了while语句、do-while语句及for语句。

for语句主要适用于循环次数确定的循环结构循环次数及控制条件要在循环过程中才能确定的循环可用while或do-while语句三种循环语句可以相互嵌套组成多重循环,循环之间可以并列但不能交叉三种循环结构可以相互转换可用转移语句把流程转出循环体外,但不能从外面转向循环体内本章小结在循环程序中应避免出现死循环,即应保证循环控制变量的值在运行过程中可以得到修改,并使循环条件逐步变为假,从而结束循环

break、continue语句都可用于流程控制。其中,break语句用于退出switch或所在本层循环结构;continue语句用于结束本次循环,继续执行下一次循环;当需要结束程序运行时,可以调用exit()函数来实现1.结构化程序设计中,程序的三种基本控制结构是()A)过程函数子程序B)递归递推循环C)调用返回转移D)顺序选择循环答案:D2.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是(D)if(x>y)z=x;x=y;y=z;A)201010B)102030C)1010

10 D)203030答案:D3.C语言对嵌套if

语句的规定是:else总是与()配对。A)其之前最近的ifB)第一个ifC)缩进位置相同的ifD)其之前最近的且尚未配对的if答案:D4.若执行以下程序时从键盘上输入3和4,则输出结果是()#include<stdio.h>voidmain(){

int

a,b,s;

scanf("%d%d"

温馨提示

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

评论

0/150

提交评论