1、2022-7-29第第第第第第3 3 3 3 3 3章章章章章章 程序结构程序结构程序结构程序结构程序结构程序结构 222022-7-29变量定义变量定义变量赋值变量赋值运算处理运算处理输出输出结果结果可用:可用:变量初始化变量初始化 赋值语句赋值语句 输入函数调用语句输入函数调用语句332022-7-29正确的交换方法:正确的交换方法:c=a;a=b;b=c;或者或者a=ab;b=ba;a=ab;442022-7-29main()int a,b,c;printf(ninput a,b:);scanf(%d,%d,&a,&b);printf(nbefore exchange:a=%d b=%d
2、n,a,b);c=a;a=b;b=c;printf(after exchange:a=%d b=%dn,a,b);程序运行情况如下:程序运行情况如下:input a,b:32,57 before exchange:a=32 b=57 after exchange:a=57 b=32 552022-7-29)cs)(bs)(as(sarea)cba(21s662022-7-29#include math.hmain()int a,b,c;float s,area;scanf(%d,%d,%d,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s
3、-c);printf(area=%8.3f n,area);程序运行情况如下:程序运行情况如下:3,4,5 area=6.000 772022-7-29内嵌语句,可为:内嵌语句,可为:赋值语句赋值语句 函数调用语句函数调用语句 控制语句控制语句 复合语句复合语句 空语句空语句可为算术、关系、逻辑、赋值可为算术、关系、逻辑、赋值等表达式等表达式882022-7-29 (x0)m+;(ab)c=a;a=b;b=c;表达式非表达式非0 T F 语句语句N-S结构图结构图语句语句流程图流程图NY表达式非表达式非0?992022-7-2910102022-7-29(x0)m+;m-;(ch=a&ch=A
4、&ch=A&ch=Z?ch+32:ch);putchar(n)16162022-7-29【例【例6】比较两个整数的关系。比较两个整数的关系。#include main()int x,y;printf(Enter integer X and Y:);scanf(%d%d,&x,&y);if(x!=y)if(x y)printf(XYn);else printf(XYn);else printf(X=Yn);有利于阅读程序有利于阅读程序17172022-7-29可以是各种形式的可以是各种形式的if语句语句可以是各种形式的可以是各种形式的if语句语句如果是简单如果是简单if语句,语句,必须用必须用“
5、”括起括起18182022-7-2919192022-7-2920202022-7-29定义变量定义变量x输入输入x的值的值 x是奇数是奇数 T F 输出输出“odd”x是是5的倍数的倍数 输出输出“even”T F是是5的倍数的倍数21212022-7-29main()int x;scanf(%d,&x);()printf(%d is an odd n,x);()printf(%d is the times of 5 n,x);printf(%d is an even n,x);22222022-7-2923232022-7-2924242022-7-2925252022-7-29switc
6、h(a)case 5:printf(&);case 2:printf(#);default:printf($);当当a等于等于5,输出:,输出:当当a等于等于2,输出:,输出:当当a是其他值,输出:是其他值,输出:26262022-7-29switch(a)case 2:printf(#);default:printf($);case 5:printf(&);break;break;break;27272022-7-2928282022-7-29#include stdio.hmain()float x=100,y=15,z;char op;op=getchar();switch(op)cas
7、e+:z=x+y;break;case-:z=x-y;break;case*:z=x*y;break;case/:z=x/y;break;default:z=0;if(int)z!=0)printf(%f%c%f=%fn,x,op,y,z);else printf(%c is not an operatorn,op);实型数通常不使用实型数通常不使用z=0或或z!=0的比较的比较 可用可用代替代替29292022-7-2930302022-7-29aacbbx2422,131312022-7-2932322022-7-29#include math.hmain()float a,b,c,d,x
8、1,x2,lp,ip;scanf(%f%f%f,&a,&b,&c);printf(the equation);if(fabs(a)1e-6)printf(is not quadratic);else d=b*b-4*a*c;if(fabs(d)1e-6)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(has two real roots:n);printf(x1=%8.4f,x2=%8.4fn,x1,x2);else lp=-b/(2*a);ip=sqrt(-d)/(2*a);printf(has two complex roots:n);pr
9、intf(x1=%8.4f+%8.4fin,lp,ip);printf(x2=%8.4f-%8.4fin,lp,ip);34342022-7-29设定标志变量设定标志变量,只要符合其中一个条件的就只要符合其中一个条件的就是闰年,令是闰年,令 ;否则令否则令 35352022-7-29定义变量定义变量year、leap 输入年份输入年份year T F leap=1 T F leap=1 leap=0 leap=1?T F 是闰年是闰年 不是闰年不是闰年36362022-7-29main()int year,leap;scanf(%d,&year);if(year%4=0&year%100!=0
10、)leap=1;else if(year%400=0)leap=1;else leap=0;if(leap=1)printf(%d is a leap year n,year);else printf(%d is not a leap year n,year);37372022-7-29n=1 n=100 n+38382022-7-2939392022-7-29当表达式为真当表达式为真 语句语句表 达 式 非表 达 式 非0?语句语句40402022-7-29思路:寻找思路:寻找加数加数与与求和求和的规律的规律 加数加数 从从1变到变到100,每循环一次,使,每循环一次,使i增增1,直到直到i
11、的值超过的值超过100。的的设为设为1。求和求和设变量设变量 存放和存放和,循环求,循环求,直至直至i超过超过100。41412022-7-29main()int i,sum;i=1;sum=0;while()sum=sum+i;i+;printf(sum=%dn,sum);程序输出结果:程序输出结果:sum=5050 i=1,sum=0 当当i=100 sum=sum+i i+输出输出sum42422022-7-29 while(i0n0)个个数,求其和数,求其和starti=1;sum=0;in sum=sum+k;i+;stop读入n读入k输出sumNY45452022-7-29 mai
12、n()int i,n,k,sum;i=1;sum=0;printf(Input n:);scanf(%d,&n);while(i=n)scanf(%d,&k);sum=sum+k;i+;printf(nsum is:%dn,sum);运行结果运行结果:Input n:612 34 2 11 9 5sum is:7346462022-7-2947472022-7-29 循环体循环体当表达式为真当表达式为真N-S结构图结构图NY循环体循环体表达式非表达式非0?流程图流程图main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(%dn,sum)
13、;48482022-7-2949492022-7-29注意:注意:当当i=10、i=11时查看结果时查看结果50502022-7-29定义定义m、n、rmnT F m和和n交换交换r=m%nm=nn=r 当当r!=0时时输出最大公约数输出最大公约数m51512022-7-29main()int m,n,r;scanf(%d,%d,&m,&n);if(mn)r=m;m=n;n=r;r=m%n;m=n;n=r;printf(%dn,m);52522022-7-29 starti=1;sum=0;sum=sum+k;i+;stop读入n读入k输出sumNYin例例 利用利用dodowhilewhil
14、e语句重做前语句重做前例。例。53532022-7-2954542022-7-29N-S结构图结构图for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句NY流程图流程图计算表达式计算表达式1 语句语句计算表达式计算表达式3表达式表达式2为真为真?main()int i,sum;sum=0;printf(sum=%dn,sum);55552022-7-29注意:在省略某个表达式时,应在适当位置进行循注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行环控制的必要操作,以保证循环的正确执行56562022-7-29;for(;i=100;i+)sum+=i
15、;for(i=1;i+)for(i=1;i=100;)for(;)57572022-7-2958582022-7-29思路:求阶乘与求累加的运算处理过程类似,只要思路:求阶乘与求累加的运算处理过程类似,只要将将“”变为变为“”。设置:设置:,初值为,初值为1,终值为,终值为n(n是循环控制终是循环控制终值,需要从键盘输入)值,需要从键盘输入),每次循环令,每次循环令p=p*i59592022-7-29main()int i,n;printf(Enter n:);scanf(%d,&n);for(i=1;i=n;i+)=;printf(p=n,p);60602022-7-2961612022-7
16、-29例例 计算计算1至至50中是中是7的倍数的数值之和的倍数的数值之和main()int i,sum=0;for(i=1;i=50;i+)if(i%7=0)sum+=i;printf(sum=%dn,sum);运行结果运行结果:sum=196 62622022-7-29#includestdio.hmain()int n=0;printf(input a string:n);for(;getchar()!=n;n+);/*空语句空语句*/printf(您共输入了您共输入了%d个字符个字符n,n);说明:说明:只要不是回车符就统计只要不是回车符就统计63632022-7-2964642022-
17、7-2965652022-7-2966662022-7-29后续语句后续语句 后续语句后续语句后续语句后续语句67672022-7-2968682022-7-29for(n=100;n=200;n+)n不能被不能被7整除整除 T F 终止本次循环终止本次循环 输出输出n 输出输出10个数个数 T F 换行换行69692022-7-29main()int n,j=0;for(n=100;n=200;n+)printf(%6d,n);printf(n j=%dn,j);70702022-7-2971712022-7-29 例例 把把100到到150之间的不能被之间的不能被3整除的数输出,要整除的数
18、输出,要求一行输出求一行输出10 个数。个数。main()int n,i=0;for(n=100;n=150;n+)if(n%3=0)continue;printf(%4d,n);i+;if(i%10=0)printf(n);72722022-7-29后续语句后续语句后续语句后续语句后续语句后续语句73732022-7-2974742022-7-29 例例 计算计算r=1到到r=10时的圆面积时的圆面积,直到面积直到面积area大于大于100为止。为止。#define PI 3.1415926 main()int r;float area;for(r=1;r100)break;printf(r
19、:%d area is:%fn,r,area);75752022-7-2976762022-7-29运行结果:运行结果:r:1 area is:3.1415930r:2 area is:12.566370r:3 area is:28.274334r:4 area is:50.265480r:5 area is:78.539818 77772022-7-29#include main()int i,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);外循环语句外循环语句内循环语句内循环语句78782022-7-2979792022-
20、7-2980802022-7-29思路:思路:Fibonacci数列的前几项是:数列的前几项是:1、1、2、3、5、8、13、21、34、。此数列的变化规律是:。此数列的变化规律是:81812022-7-29#define 20main()int i,f1,f2,f3;f1=f2=1;printf(n%8d%8d,f1,f2);for(i=3;i=;i+)f3=f1+f2;f1=f2;f2=f3;printf(%8d,f3);f1=1,f2=1并输出并输出for(i=3;i=20;i+)f3=f2+f1 f1=f2,f2=f3 输出输出f3 T F 换行换行82822022-7-2983832
21、022-7-29l分别用分别用尝试能否整除整数尝试能否整除整数。84842022-7-29#include math.hmain()int j,m,k;printf(Enter an integer number:);scanf(%d,&m);for(j=2;j+)printf(%d ,m);if()printf(YESn);else printf(NOn);输入一个数输入一个数mfor(j=2;j=m T F输出输出YES 输出输出NO85852022-7-2986862022-7-29#include math.hmain()int j,m,k;printf(Enter an intege
22、r number:);scanf(%d,&m);for(j=2;j+)printf(%d ,m);if()printf(YESn);else printf(NOn);87872022-7-29设设xn为一个接近为一个接近xa的近似根,过的近似根,过(xn,f(xn)点做切线,切线方程为:点做切线,切线方程为:)x(f)x(fxxnnn1nn1nnnxx)x(f)x(f即即:xnxn+1xy0f(x)(xn,f(xn)(xn+1,f(xn+1)xa 过过(xn,f(xn)点做切线,切线方程为:点做切线,切线方程为:)x(f)x(fxxnnn1nn1nnnxx)x(f)x(f即即:xnxn+1xy
23、0f(x)(xn,f(xn)(xn+1,f(xn+1)xa 89892022-7-2990902022-7-29#include math.hmain()float x,x0,f,f1;do f=2*x0*x0*x0+4*x0*x0-7*x0-6;f1=6*x0*x0+8*x0-7;while();printf(%fn,x);x赋初值赋初值x0=x计算计算f计算计算f1 计算计算x=x0-f/f1当当|x-x0|10-6时时输出输出x运行运行jc5_1391912022-7-29一个数的因子(除了这个数本身)之和一个数的因子(除了这个数本身)之和等于该数本身。等于该数本身。的的因子因子是是1、
24、2、3,因子和因子和 1+2+392922022-7-29main()int i,j,s;(i=2;i=10000;i+)s=0;(j=1;ji;j+)if(i%j=0)s+=j;if(i=s)printf(%6dn,s);for(i=2;i=10000;i+)s=0 for(j=1;ji;j+)i%j=0 T F s=s+j i=s T F i是完全数是完全数93932022-7-2994942022-7-29*95952022-7-29main()int i,j;for(j=1;j=i;j+)printf();for(j=1;j=8-(2*i-1);j+)printf(*);printf(n);for(i=1;i=4;i+)for(j=1;j=i;j+)输出一个空格输出一个空格 for(j=1;j=8-(2*i-1);j+)输出一个星号输出一个星号 换行换行96962022-7-29