程序控制结构_第1页
程序控制结构_第2页
程序控制结构_第3页
程序控制结构_第4页
程序控制结构_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

会计学1程序控制结构C程序结构C程序源程序文件1源程序文件2源程序文件n预处理命令全局变量声明函数1函数n函数首部函数体局部变量声明执行语句第1页/共59页C语言语句概述语句:C语言中的语句是以“;”作为结束标志,负责完成一定的数据操作。

1)控制语句:完成一定的控制功能

2)函数调用语句:由一次函数调用加;构成

3)表达式语句:任何一个表达式加;构成

4)空语句:由一个分号;构成

5)复合语句:由{}将多条语句括起来构成第2页/共59页1.6数据的输入与输出1.6.1编译预处理1.6.2字符数据的I/O1.6.3格式输出函数1.6.4格式输入函数第3页/共59页1.6.1编译预处理C语言中规定:使用库函数时,应将函数对应的头文件通过预处理命令包含到本程序中。文件包含预处理命令格式:

#include"头文件名"或#include<头文件名>对于标准输入输出函数,对应的头文件为stdio.h则预处理命令为:

#include"stdio.h"或#include<stdio.h>第4页/共59页1.6.2字符数据的I/O1)字符输出函数:格式:putchar(字符表达式)功能:向终端(如显示器)输出一个字符2)字符输入函数:格式:getchar()功能:从终端(如键盘)输入一个字符到计算机例:charc1,c2='a';

c1=getchar();putchar('b');putchar(c1+1);putchar(c2);putchar(67);putchar('\n');第5页/共59页1.6.3格式输出函数功能:向终端输出若干任意类型的数据格式:printf(格式控制,输出表列)1)格式控制:双引号括起来的字符串,包含:格式说明:由%和控制字符组成,指定数据的输出格式普通字符:需原样输出的字符2)输出表列:需要输出的一些数据控制字符说明:d以十进制形式输出有符号整数s输出字符串o以8进制形式输出无符号整数f以小数形式输出单、双精度实数X,x以16进制形式输出无符号整数E,e以指数形式输出单、双精度实数u以十进制形式输出无符号整数G,g以f或e格式中的较短形式输出单、双精度实数c输出单个字符第6页/共59页整型数据输出格式符

整型数据输出格式符——d格式符:%d:按整型数据的实际长度输出%ld:用于输出长整型整数%md或%-md:数据输出至少m位,不足m位则左或右补空格例:inta=123,b=12345;longd=123456;

printf("%d,%4d,%4d,%ld",a,a,b,d);其他整型数据输出格式符——%o、%x、%u:例:unsignedinta=65535;intb=-2;

printf("\na=%d,%o,%x,%u",a,a,a,a);

printf("\nb=%d,%o,%x,%u",b,b,b,b);运行结果:a=-1,177777,ffff,65535b=-2,177776,fffe,65534第7页/共59页实型数据输出格式符

f格式符:%f:原样输出整数部分,输出6位小数%m.nf:至少输出m位数据,其中有n位小数%-m.nf:同上,数据不足m位时,右补空格例:floatf=123.456;

printf(“%f,%10f,%10.2f,%.2f,%-10.2f”,f,f,f,f,f);e格式符:%e:小数部分6位,指数部分5位(e:1位,符号:1位,指数:3位)%m.ne或%-m.ne:至少输出m位数据,其中有n位小数g格式符:%g:根据待输出数据大小,自动选择f或e格式符(选择输出宽度小的一种)来输出实数,且不输出无意义的0第8页/共59页字符型数据输出格式符

单个字符输出格式符——c格式符:%c、%mc

一个整数,其值在0~255范围内,也可按字符形式输出,将整数值作为ASCII码转换为相应的字符;一个字符数据也可用整数形式输出。例:charc=‘a’;inti=97;

printf("%c,%d",c,c);

printf("%c,%d",i,i);运行结果:a,97a,97字符串输出格式符%s——%ms、%-ms、%m.ns、%-m.ns例:printf("%3s,%7.2s","CHINA","CHINA");

printf("%.4s,%-5.3s","CHINA","CHINA");运行结果:CHINA,CH,CHIN,CHI第9页/共59页1.6.4格式输入函数功能:从终端输入若干任意类型的数据格式:scanf(格式控制,地址表列)1)格式控制:双引号括起来的字符串,包含:格式说明:由%和控制字符组成,指定数据的输入格式普通字符:需原样输入的字符2)地址表列:存放输入数据的变量地址输入数据时,数据间可以用空格、回车、Tab键作为间隔控制字符说明:d用以输入有符号的十进制整数c用以输入单个字符o用以输入无符号的8进制整数s用以输入字符串x用以输入无符号的16进制整数f,e用以输入实型数据(以小数形式或指数形式)u用以输入无符号的十进制整数第10页/共59页格式输入函数说明scanf()函数使用说明:1)地址序列应该是接受数据的变量地址,而非变量名2)在格式控制字符串中的普通字符,在输入时应原样输入3)格式控制符中可以使用修饰符:h、l、m、*4)%c格式符要求读入一个字符,不需用空格等字符作为间隔5)在输入数据时,数据输入结束的依据为:空格、回车、tab出现;按指定宽度结束;非法输入例:inta,b,c;floatd;charc1,c2,c3;

scanf("%d%d%d%f",&a,&b,&c,&d);scanf("a=%db=%dc=%d",&a,&b,&c);scanf("%d,%d,%d,%f",&a,&b,&c,&d);scanf("%c%c%c",&c1,&c2,&c3);第11页/共59页3.1顺序结构程序设计

在顺序结构程序中,各语句是按照位置的先后次序顺序执行的,且每条语句都会被执行到。数据输入(I)数据操作(P)数据输出(O)程序举例:例1:输入3个整数,求其和及平均数例2:输入参数A、B、C,求一元二次方程的根一个程序是对一定的数据进行处理,一般过程为:第12页/共59页3.1顺序结构程序设计例3-1:输入3个整数,求其和及平均数main(){inta,b,c,sum,average;printf("|nInput3Integer:");scanf("%d%d%d",&a,&b,&c);sum=a+b+c;average=sum/3;printf("\nSum=%d,Average=%d",sum,average);}(3_11)第13页/共59页3.1顺序结构程序设计例3-2:输入参数A、B、C,求一元二次方程的根#include“math.h”main(){floata,b,c,delta,x1,x2;printf("|n\nInputa,b,c:");scanf("%f%f%f",&a,&b,&c);delta=b*b-4*a*c;x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf("\nx1=%f,x2=%f",x1,x2);}(3_12)第14页/共59页3.2选择结构程序设计3.2.1if语句3.2.2switch语句第15页/共59页3.2.1if语句选择结构控制语句:表达式语句1语句2非00表达式语句非00形式2:

if(表达式1)语句1else语句2形式1:

if(表达式)语句第16页/共59页3.2.1if语句例3-3:输入3个整数,要求按由小到大的顺序输出main(){inta,b,c,t;scanf("%d%d%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("\nTheresultis:%d%d%d",a,b,c);}输入(I)操作(P)输出(O)(3_21)第17页/共59页3.2.1if语句if语句的嵌套:在if语句中又包含一个或多个if语句注意:if与else的配对问题。if(x>0)if(y>0)z=1;elsez=0;elsez=-1;if(x>0)if(y>0)z=1;elsez=0;elsez=-1;z=-1;if(x>0)if(y>0)z=1;elsez=0;z=-1;if(x>0)if(y>0)z=1;elsez=0;第18页/共59页3.2.1if语句例3-4:实现函数-1(x<0)y=0(x=0)1(x>0)程序段1:if(x<0)y=-1;elseif(x==0)y=0;elsey=1;程序段2:

if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;程序段3:y=-1;if(x!=0)if(x>0)y=1;elsey=0;程序段4:y=0;if(x>=0)if(x>0)y=1;elsey=-1;错误正确正确错误第19页/共59页3.2.2switch语句switch

语句形式:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2……case常量表达式n:语句ndefault:语句n+1}使用说明:表达式的类型常量表达式的值语句的执行条件default的相对位置语句执行顺序break语句:break;第20页/共59页3.2.2switch语句思考:本程序是否能完成题目要求?例3-5:百分制成绩转换为等级成绩main(){intscore,grade;scanf("%d",&score);switch(score/10){case10:case9: grade='A';case8: grade='B';case7: grade='C';case6: grade='D';default: grade='E';}printf("\nscore:%dgrade:%c",score,grade);}(3_22)第21页/共59页3.2.2switch语句例3-5:百分制成绩转换为等级成绩main(){intscore,grade;scanf("%d",&score);switch(score/10){case10:case9: grade='A'; break;case8: grade='B'; break;case7: grade='C'; break;case6: grade='D';break;default: grade='E';}printf("\nscore:%dgrade:%c",score,grade);}(3_23)第22页/共59页3.3循环结构程序设计3.3.1循环结构控制语句3.3.2跳转语句3.3.3嵌套循环3.3.4程序举例第23页/共59页3.3.1循环结构控制语句算法的基本结构控制:顺序、选择、循环例题:求s=1+2+3+4+5问题:C语言中当型循环结构如何实现?C语言中,当型循环结构的实现:while语句格式:while(表达式)语句while语句流程图:表达式语句0非0while语句第24页/共59页3.3.1循环结构控制语句例:求1+2+3+4+5main(){inti=1,s=0;while(i<=5){s=s+i;i++;}printf("s=%d",s);}3_31第25页/共59页3.3.1循环结构控制语句问题:C语言中直到型循环结构如何实现?C语言中,直到型循环结构的实现:do-while语句格式:do语句while(表达式);

do-while语句流程图:表达式语句非00do-while语句第26页/共59页3.3.1循环结构控制语句例:求1+2+3+4+5main(){inti=1,s=0;do{s=s+i;i++;}while(i<=5);

printf("s=%d",s);}3_32第27页/共59页3.3.1循环结构控制语句intk=900,s=0;while(k<100){s=k;k++;}printf("s=%d",s);分析如下两段程序:intk=900,s=0;do{s=k;k++;}while(k<100);

printf("s=%d",s);while语句与do-while语句区别:——表达式的判断时间第28页/共59页3.3.1循环结构控制语句·循环的控制:

死循环:循环语句无终止地循环执行

原则:在循环语句中应有使循环趋于结束的语句循环变量:在循环语句中控制循环的执行

循环条件、循环变量的初值、循环变量的增量inti=1,s=0;while(i<=5){s=s+i;i++;}printf("s=%d",s);第29页/共59页3.3.1循环结构控制语句循环结构控制语句:

while

语句:while(表达式)语句

do-while

语句:do语句while(表达式);for

语句:for(表达式1;表达式2;表达式3)语句循环语句流程图:表达式语句0非0while语句表达式语句非00do-while语句表达式2求解表达式1非00语句求解表达式3for语句第30页/共59页3.3.1循环结构控制语句·关于

for

语句:

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

for(循环变量赋初值;循环条件;循环变量的增量)语句main(){inti,s=0;for(i=1;

i<=5;i++)s=s+i;printf("s=%d",s);}3_33第31页/共59页3.3.1循环结构控制语句例3-6:求1+2+3+…+100inti=1,s=0;while(i<=100){s=i;i++;}printf("s=%d",s);inti=1,s=0;do{s=s+i;i++;}while(i<=100);printf("s=%d",s);inti,s=0;for(i=1;i<=100;i++)s=s+i;printf("s=%d",s);第32页/共59页for语句的使用举例for语句的灵活使用:——某些表达式可以省略

inti,s=0;for(i=1;i<=100;i++)s+=i;程序段1:

inti=1,s=0;for(;i<=100;i++)s+=i;程序段2:

inti=1,s=0;for(;i<=100;)s+=i++;程序段3:

inti,s;for(s=0,i=1;i<=100;i++)s+=i;程序段4:

inti,s;for(s=0,i=1;i<=100;s+=i,i++);程序段5:

inti,s;for(s=i=0;i<=100;s+=i++);第33页/共59页程序举例——题目分析例3-7:输入一个正整数,计算各位数字之和、平方和题目分析:

●输入:正整数x●处理:求正整数x的各位数字

问题:输入的正整数x为几位数?——未知方法:利用求余运算符%

循环次数:未知,可对正整数x每次除10,直到x为0●输出:运算结果输出数据类型正整数第34页/共59页程序举例main(){intx,y,s1,s2;scanf("%d",&x);s1=0;s2=0;while(x) /*相当于while(x!=0)*/{y=x%10;x=x/10;s1+=y;s2+=y*y;}printf("Sum1=%dSum2=%d\n",s1,s2);}例3-7:输入一个正整数,计算各位数字之和、平方和(3_34A)main(){intx,y,s1,s2;scanf("%d",&x);s1=0;s2=0;while(x){y=x%10;x=x/10;s1+=y;s2+=y*y;}printf("Sum1=%dSum2=%d\n",s1,s2);}第35页/共59页程序举例main(){intx,y,s1=0,s2=0;scanf("%d",&x);do{y=x%10;x=x/10;s1+=y;s2+=y*y;}while(x);printf("Sum1=%dSum2=%d\n",s1,s2);}例3-7:输入一个正整数,计算各位数字之和、平方和(3_34B)第36页/共59页程序举例main(){intx,y,s1=0,s2=0;scanf("%d",&x);for(;x;x=x/10){y=x%10; s1+=y; s2+=y*y;}printf("Sum1=%dSum2=%d\n",s1,s2);}例3-7:输入一个正整数,计算各位数字之和、平方和(3_34C)第37页/共59页3.3.1循环结构控制语句例3-8:输入一个正整数,判断它是否为素数Begin2=>i输入nn%i=>rr==0Endi=i+1i<=n-1YYNN输出“n是素数”输出“n非素数”第38页/共59页3.3.1循环结构控制语句思考:1)为了提高效率,循环条件是否可以改进?

2)若改用do-while语句实现,如何编写?例3-8:输入正整数,判断是否为素数(用while语句实现)main(){intn,i,r=1;scanf("%d",&n);i=2;while(i<n&&r!=0){r=n%i;i++;}if(r!=0)printf("n=%d:Yes!",n);elseprintf("n=%d:No!",n);}(3_35A)第39页/共59页3.3.1循环结构控制语句思考:1)为了提高效率,循环条件是否可以改进?

2)若改用for

语句实现,如何编写?例3-8:输入正整数,判断是否为素数(用do-while语句实现)main(){intn,i,r=1;scanf("%d",&n);i=2;

do{r=n%i;i++;}while(i<=n/2&&r!=0);if(r!=0)printf("n=%d:Yes!",n);elseprintf("n=%d:No!",n);}(3_35B)第40页/共59页3.3.1循环结构控制语句例3-8:输入正整数,判断是否为素数(用for语句实现)#include"math.h"main(){intn,i,r=1;scanf("%d",&n);for(i=2,r=n%i;i<=sqrt(n)&&r!=0;i++)r=n%i;if(r!=0)printf("n=%d:Yes!",n);elseprintf("n=%d:No!",n);}(3_35C)第41页/共59页3.3.2跳转语句break语句:作用:跳出循环,提前结束循环语句的执行形式:break;使用:(1)循环语句中;(2)switch语句中continue语句:作用:提前结束本次循环,接着执行下一次循环判断形式:continue;使用:循环语句中goto语句:作用:从当前位置转去执行指定位置的语句形式:goto语句标号;使用:限制使用,最好不使用跳转语句通常与选择语句配合使用第42页/共59页3.3.2跳转语句例3-8:输入正整数,判断是否为素数(用for语句实现)#include"math.h"main(){intn,i,k;scanf("%d",&n);k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i<=k)printf("n=%d:No!",n);elseprintf("n=%d:Yes!",n);}(3_36.c)第43页/共59页3.3.3嵌套循环循环的嵌套(多重循环):在循环语句中包含循环语句例3-9:反复输入正整数,判断是否为素数,直到输入0为止思考:while语句是否可以用for语句实现?main(){intn,i,k;scanf("%d",&n);while(n!=0){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k)printf("n=%d:Yes!",n);elseprintf("n=%d:No!",n);scanf("%d",&n);}}main(){intn,i,k;scanf("%d",&n);while(n!=0){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k)printf("n=%d:Yes!",n);elseprintf("n=%d:No!",n);scanf("%d",&n);}}(3_37A)第44页/共59页3.3.3嵌套循环例3-9:反复输入正整数,判断是否为素数,直到输入0为止main(){intn,i,k;for(

;

;

){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k)printf("n=%d:Yes!",n);elseprintf("n=%d:No!",n);}}scanf("%d",&n)n!=0scanf("%d",&n)(3_37B)第45页/共59页3.4程序举例(1)例3-10:求100~200间的全部素数#include"math.h"main(){intn,i,k;for(n=101;n<=200;n++){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k)printf("%6d",n);}}(3_41)第46页/共59页3.4程序举例(2)main(){intn,i,s;for(n=1;n<1000;n++){s=1;for(i=2;i<=n/2;i++)if(n%i==0)s+=i;if(n==s){printf("\n%ditsfactorsare1",n);for(i=2;i<=n/2;i++)if(n%i==0)printf(",%d",i);}}}例3-11:找出1000以内所有的“完数”(3_42)第47页/共59页3.4程序举例(3)——题目分析例3-12:用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一项的绝对值小于10-6为止题目分析:

●输入:无●处理:累加求和,求n个数据(实数类型)之和

实现方法:可用循环实现,循环n次,每次加入一个数据项

通项形式:

(-1)k+1(1/(2k-1))

循环次数:未知,可按所加入数据项的值决定循环是否执行●输出:运算结果输出数据类型float第48页/共59页3.4程序举例(3)——源程序main(){floatpi=0.0,t=1.0;intn=1,k=1;while(t>1e-6){pi=pi+k*t; n=n+2;t=1.0/n; k=-k;}pi=4*pi;printf(“\npi=%10.6f”,pi);}例3-12:用π≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一项的绝对值小于10-6为止(3_43)第49页/共59页3.4程序举例(4)——题目分析例3-13:打印出所有的水仙花数(所谓水仙花数,是指一个3位数,其各位数字的立方和等于该数本身)题目分析:

●输入:无●处理:逐个判断所有3位数(即100~999)

实现方法:

1.可用循环实现,逐个判断所有3位数是否水仙花数

(每次循环判断一个三位数)2.判断过程:关键是如何取得各位数字●输出:所有水仙花数输出数据

温馨提示

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

评论

0/150

提交评论