收藏 分销(赏)

企业C程序的流程设计模板.doc

上传人:a199****6536 文档编号:2952999 上传时间:2024-06-12 格式:DOC 页数:20 大小:58.54KB 下载积分:10 金币
下载 相关 举报
企业C程序的流程设计模板.doc_第1页
第1页 / 共20页
企业C程序的流程设计模板.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
n 目前文文件修改密码:8362839 n 更多数据请访问精品数据网(.....) 第三章 C程序步骤设计 一、教学目标和要求 掌握次序、选择、循环三类程序步骤控制语句,和转移语句,能够正确使用它们编程。 二、关键和难点: if语句中条件表示式,if语句中if-else匹配关系,if语句嵌套;switch语句控制步骤,switch语句嵌套;三种循环语句格式和功效,循环嵌套使用;转移语句使用。 三、教学内容 第一节 算法 1、算法概念 为处理某一个问题而采取方法和步骤,就称为算法。 2、算法性质 ①有穷性:一个算法应包含有限操作步骤 ②一个初始:此动作序列只有一个初始动作 ③确定性:算法中每一个步骤全部应该是确定性,仅有一个后继动作。 ④有一个或多个输出:序列终止表示问题得到解答或问题没有解答,没有输出算法是没有意义。 第二节 选择型程序设计 1、if 语句形式 ①if(条件表示式) 语句 ②if(条件表示式) 语句1 else 语句 2 注意: ①if语句中条件表示式通常为逻辑表示式或关系表示式,但也能够是任意数值类型(包含整型、实型、字符型、指针类型),例以下列语句也是正当。 if(‘a’) printf(“%d” ,’a’); ②在if语句中,分号是语句结束标志。 ③在if和else后面能够只含一个内嵌操作语句,也能够有多个操作语句,此时用花括号将多个语句括起来成为一个复合语句。 例1:以下不正确if语句形式是( )。 A)if(x>y&&x!=y); B)if(x==y) x+=y; C)if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y); D)if(x<y) {x++;y++;}; 答案:C 详解:scanf(“%d”,&x)末尾应加分号,因为分号是语句不可缺乏部分。 例2:已知int x=10,y=20,z=30;以下语句实施后x,y,z值是( )。 if(x>y) z=x;x=y;y=z; 答案:x,y,z值分别是:20 30 30 详解:在此语句中,条件x>y为假,所以只实施x=y;y=z;两条语句。 例3、以下不正确语句是( ) A)if(x>y); B)if(x=y)&&(x!=0) x+=y; C)if(x!=y) scanf(“%d”,&x); D)if(x<y){x++;y++}; 答案:D 详解:分号是语句结束标志,y++末尾无分号,所以y++不是正当语句。 2、if 嵌套 if(条件1) if(条件2) 语句1 else 语句2 else if(条件3) 语句3 else 语句4 例4:以下程序输出结果是( ) main( ) { int a=100,x=10,y=20,ok1=5,ok2=0; if(x<y) if(y!=10) if (!ok1) a=1; else if(ok2) a=10; printf(“%d\n”,a); } 答案:100 详解:把10、20、5、0分别给变数x、y、ok1、ok2赋值,实施条件语句后a值没有改变,所以a值仍是原值100。 3、switch结构 switch语句是多分支选择语句,其形式以下: switch(表示式) { case 常量表示式1:语句1 case 常量表示式2:语句2 ………… default:语句n+1 } 注意: 1、switch后面括号内“表示式”,能够是整型表示式或字符型表示式,也能够枚举型数据。 2、当表示式值和某一个case后面常量表示式值相等时,就实施此case后面语句,若全部case中常量表示式值全部没有和表示式值匹配,就实施default后面语句。 3、每一个case常量表示式值必需互不相同,不然就会出现相互矛盾现象。 4、实施完一个case后面语句后,步骤控制转移到下一个case继续实施,直到碰到break语句或实施完为止。 5、default能够放在case语句后面,也能够放在case语句前面。 例5:运输企业对用户计算运费,距离越远,每公里运费越低。设每公里每吨货物基础运费为p,货物重为w,距离为s,折扣为d,则总运费f计算公式为f=p*w*s(1-d),编写程序。公里数s和折扣率d标准以下:(此程序可用if……else来完成,也能够用switch来完成)。 s<250km d=0 250≤s<500 d=0.05 500≤s<1000 d=0.075 1000≤s< d=0.1 ≤s<3000 d=0.15 3000≤s d=0.2 main() { int s; float p,w,d,f; printf(“请输入每公里每吨货物基础运费”); scanf(“%f”,&p); printf(“请输入货物重”); scanf(“%f”,&w); printf(“请输入公里数”); scanf(“%f”,&s); switch((int)(s/250)) { case 0: d=0; break; case 1: d=0.05; break; case 2: case 3: d=0.075; break; case 4: case 5: case 6: case 7: d=0.1; break; case 8: case 9: case 10: case 11: d=0.15; break; default: d=0.2; } f=p*w*s(1-d); printf(“基础运费是:%f”,f); } 详解: 1、多个case可共享一组实施语句,必需写成以下形式: case 4: case 5: case 6: case 7: d=0.1; break; case后面只能有一个常量,把上式改写成case 4,5,6,7: d=0.1; break;形式是错误。 2、switch后面括号内“表示式”必需是整型表示式或字符型表示式,也能够是枚举型数据,对于swith来说,关键是把原始数据转换为易表示形式。 例6:请读以程序写出程序输出结果。 #include<stdio h> main( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++;break; case 1: b++;break; } case 2: a++;b++;break; } printf(“a=%d,b=%d”,a,b); } 答案:a=2,b=1 详解:此程序是switch嵌套结构,在此程序中break跳出内层switch结构,接着实施外层switchcase 2后语句。 例7:写出下面程序运行结果是( ) main() { int i; for(i=1;i<=5;i++) switch(i%5) { case 0: printf(“*”); break; case 1: printf(“#”); break; default: printf(“\n”); case 2: printf(“&”); } } 答案:#& & &* 详解:default可放在case语句前面,也能够放在case语句后面,当i%5不等于0,1,2时,将实施default后语句printf(“\n”);实施完成后没有break,将继续实施case 2后语句printf(“&”); 第三节 循环型程序设计 1、while语句 while语句用来实现”当型”循环结构,其通常形式以下: while(条件表示式) 循环体语句 例8:设有程序段: int k=10; while(k=0) k=k-1; 循环体实施( )次。 答案:0 答案解析:在此程序while结构中,条件表示式k=0结果永远为0即为假,所以循环实施次数为0。 例9:下面程序段运行结果是( ) x=y=0; while(x<15) y++,x+=++y; printf(“%d,%d”,y,x); 答案:8,20 例10、设有程序段 t=0; while(printf(“*”)) { t++; if(t>3) break; } 循环实施( )次 答案:4 答案解析:while结构中条件表示式printf(“*”)值为输出数据个数,在此例中,printf(“*”)结果为1,即为真。 2、do-while语句 do-while语句特点是先实施循环体,然后判定循环条件是否成立,其通常形式为: do{ 循环体语句 }while(条件表示式); 例11、若有以下语句 int x=3; do {printf(“%d\n”,x-=2);} while(--x); 则上面程序段输出结果是( )。 答案:1 例12、以下程序段循环实施几次。 x=-1; do { x=x*x;} while(!x); 答案:1 例13、下面程序运行结果是( ) main( ) { int y=10; do{y--;} while(--y); printf(“%d\n”,y--); } 答案:0 3、for语句 C语言中for语句使用最为灵活,不仅能够用于循环次数已经确定情况,而且能够用于循环次数不确定而只给出循环结束条件情况,它完全能够替换while语句,其通常形式为: for(表示式1;表示式2;表示式2) 语句 说明: ①for语句通常形式中“表示式1”能够省略,此时应for语句之前给循环变量赋初值。注意省略表示式1时,其后分号不能省略。 ②假如表示式2省略,即不判定循环条件,循环无终止地进行下去。 ③表示式3也能够省略,但此时程序设计者应另外设法确保循环正常结束。 ④能够省略表示式1和表示式3,只有表示式2,即只给循环条件,在这种情况下,完全等同于while语句。 ⑤3个表示式全部可省略,如:for( ; ; ) 语句,相当于while(1) 语句,即不设初值,不判定条件(认为表示式2为真值),循环变量不增值。无终止地实施循环体。 ⑥表示式1能够是设置循环变量初值赋值表示式,也能够是和循环变量无关其它表示式。for(sum=0;i<=100;i++) sum=sum+i; ⑦表示式通常是关系表示式(如i<=100)或逻辑表示式(如a<b && x<y),但也能够是数值表示式或字符表示式,只要其值为非零,就实施循环体。 例14、若i为整型变量,则以下循环实施次数是( )。 for( i=2 ;i!=0 ; ) printf(“%d”,i--); 答案:2 例15、以下不是无限循环语句是( ) A)for(y=0,x=1;x>++y;x=i++) i=x; B)for(;;x++=i) C)while(1){x++;} D)for(i=10;;i--) sum+=i; 答案:A 例16、实施语句for( i=1 ; i++<4 ; ); 后变数i值是( ) 答案:4 例17、下面程序段功效是计算1000!末尾含有多少个零。请填空。 for(k=0,i=5;i<=1000;i+=5) {m=i; while( ) {k++;m=m/5;} } 答案:m%5!=0 4、break和continue 在break语句能够使步骤跳出switch结构,继续实施switch语句下面一个语句。实际上,break语句还能够用来从循环体内跳出循环体,即提升结束循环,接着实施循环下面语句。break语句通常形式为:break; continue语句只结束此次循环,而不是终止整个循环实施。continue语句通常形式为:continue; 例18、下列程序运行结果是( )。 main( ) { int i,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) { if(j%2) continue; x++;} x++; } printf(“x=%d\n”,x); } 答案: 例19、下面程序运行结果是( ) main( ) { int k=0;char c=’A’; do {switch(c++) case ‘A’:k++;break; case ‘B’:k--; case ‘C’:k+=2;break; case ‘D’:k=k%2;continue; case ‘E’:k=k*10;break; default:k=k/3; } k++; }while(c<‘G’); printf(“k=%d\n”,k); 答案: 5、循环嵌套 一个循环体中又包含另一个完整循环结构称为循环嵌套。内嵌循环中还可嵌套循环,这就是多层循环。 6、举例: ①求和问题 例20、s=1+2+…………..+100 例21、s=1!+2!+………… +100! 例22、e=1+1/1!+1/2!+1/3!+…… 正确到10-6 例23、s=1-1/3!+1/5!-1/7!+……. 正确到10-6 #include “math.h” main( ) { long t; double s; for(s=0,t=1,i=0;fabs(1/t)>=1e-6;i++) { t=(-1)*t*i; s=s+1/t; } printf(“%lf”,s); } 例24、有一分数序列:2/1,3/2,5/3,8/5,13/6,21/13,……. 求出这个数列前20项之和 main() { int s=0, f1=1,f2=2; for(I=1;I<=20;I++) { s=s+f2/f1; f2=f1+f2; f1=f2-f1; } printf(“%d”,s); } 例25、打印九九表 main( ) {int i,j; for(i=1;i<=9;i++) { for(j=1;j<=9;j++) printf(“%2d*%2d=%2d”,i,j,i*j); printf(“\n”); } } 例26、打印出下列图形  * * *       * * * * *  * main( ) { int i,j; for(i=1;i<=5;i++) { for(j=1;j<=5+fabs(i-3);j++) printf(“ ”); for(j=1;j<=5-2*fabs(i-3);j++) printf(“*”); printf(“\n”); } } 例27、打印出下列图形 * ***       ***** ***   * 例28、兔子繁殖问题 main( ) { int i,f1,f2,f3; for(i=3;i<=12;i++) { f3=f1+f2; f1=f2; f2=f3; } printf(“%d”,f3); } 例29、求最大条约数、最小公倍数。 main( ) {int r,u,v,m,n; scanf(“%d,%d”,&m,&n); m=u;n=v; if(u<v) {r=u;u=v;v=r;} while(u!=0) {r=u%v;u=v;v=r;} printf(“最大条约数是:%d,最小公倍数是”,v,m*n/v); } 例30、sn=a+aa+aaa+aa…a,从键盘输入a及n后,求sn 方法一: main() {int n,a; long s; scnaf(“%d%d”,&n,&a); for(i=1;i<=n;i++) s=s*10+i*a; printf(“%ld”,s); } 方法二: main() {int n,a; long s,t=0; scnaf(“%d%d”,&n,&a); for(i=1;i<=n;i++) {t=t*10+a s=s+t; } printf(“%ld”,s); } 例31、给出一个不多于5位正整数,要求①求出它是几位数②分别打印出每一位数③逆序打印此数据。 main( ) {long a; int i=0;s=0; printf(“它每一位数:”); While(a!=0) { i=i+1; x=a%10; a=a/10; s=s*10+x; printf(“%d ”,x); } printf(“\n”); printf(“它是%d位数\n”,i); printf(“它逆序是%d\n”,s); } 例32、输出1—100之间每位数乘积大于每位数和数 main() { int n,k=1,s=0,m; for(n=1;n<=100;n++) {k=1;s=0; m=n; while(m!=0) { k=k+m%10; s=s+m%10; m=m/10; } if(k>s) printf(“%d”,n); } } 例33、猴子吃桃问题,猴子第一天摘下若干桃子,立即吃了二分之一,还不过瘾又多吃了一个,第二天又将剩下桃子吃掉二分之一,又多吃了一个,以后天天全部吃前一天剩下半多一个,到第10天,再吃桃时只剩下一个桃子,求第一天共摘下多少了桃。 main() {int i,s=1; for(i=9;i<=1;i--) s=2*s+1; printf(“第一天共摘下%d个桃子”,s); } 例34、准备客票:某铁路在线共有10个车站,问需要准备多个车票。 main() {int i,j,s=0; for(I=1;I<=9;I++) for(j=I+1;j<=10;j++) s=s+1; printf(“需要准备%d”,2*s); } 例35、有1020个西瓜,第一天卖二分之一多两个,以后天天卖剩下二分之一多两个,问几天以后能卖完。 main( ) { int day=0,s=1020; while(s<=0) {s=s/2-2; day++; } printf(“%d”,day); } 例36、从三个红球、五个白球、六个黑球中任意取出八个球,且其中必需有白球,输出全部可能方案。 main() {int red,white,black; for(white=1;white<=5;white++) for(red=0;red<=3;red++) for(black=0;black<=6;black++) if(white+red+black==8) printf(“%d个红球,%d个白球,%d个黑球”,red,white,black); } 例37、二分迭代法 二分迭代法思想是:先取f(x)=0两个粗略解x1和x2。若f(x1)和f(x2)符号相反,则方程f(x)=0在区间(x1,x2)中最少有一个根。 While(fabs(x1-x2)>=1e-6) { x3=(x1+x2)/2; if(f(x3)*f(x2)>0) x2=x3; else x1=x3; } 例38、牛顿切线法求a平方根。 x=√a x2=a 结构函数 f(x)=x2-a x2=x1-f(x1)/f’(x1) double sq-root(double a) {double x; x=a; while(fabs(x*x)-a>=1e-6) x=(x+a/x)*0 5; return(x); } 例39、求积分用梯形法求sin(x)*cos(x)定积分,设上限a、下限b分别为0,1.2。积分区间分割数n=100. S=h/2[f(a)+f(b)]+h(f(a+h)+f(a+2h)+………..+f(b)) main( ) { int i,n=100; double h,s,a=0,b=1.2; s=0.5*(sin(a)*cos(a)+sin(b)*cos(b)); for(i=1;i<=n;i++) s=s+sin(a+i*h)*cos(a+i*h); printf(“%lf”,s); } 例40、验证一个数是否为素数 main( ) {int n,I,flag=1; scnaf(“%d”,&n); for(i=2;i<=sqrt(n);i++) if(n%i==0) {flag=0;break;} if(flag==1) printf(“%d是素数。”,n); else printf(“%d不是素数。”,n); } 例41、输入一个数,输出这个数质因子乘积形式。比如输入72后,输出:72=2*2*2*3*3。 main() { int n,i=2,flag=0; scanf(“%d”,&n); printf(“%d=”,n); while(n!=1) { if(n%i==0) {if(flag==0) {printf(“%d”,i);flag=1;} else {printf(“*%d”,i);} n=n/i; } else i=i+1 } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服