第五节 循环结构应用举例-【单招零距离】计算机专业综合(下)

2025-04-23
| 2份
| 18页
| 91人阅读
| 0人下载

内容正文:

 (2)for(i=2;i<=m;i++)改为for(i=2;i<=m -1;i++)  (3)if(flag==0)改为if(flag==1)  3.for(i=2;i<=n;i++) {while(n! =i) if(n%i==0) {printf("%d∗",i); n=n/i; } elsebreak; } printf("%d",n);  4.#include"stdio.h" intmain() { inti,j; for(i=3;i>=1;i--) { for(j=1;j<=4-i;j++)   printf(""); for(j=1;j<=i∗2-1;j++)   printf("B"); printf(" "); } for(i=2;i<=3;i++) { for(j=1;j<=4-i;j++)   printf(""); for(j=1;j<=i∗2-1;j++)   printf("B"); printf(" "); } } 第5节 循环结构应用 【巩固练习】  1.#include"stdio.h" intmain() { longp=1,t=0; inti,x; doubles=0; scanf("%d",&x); for(i=1;i<=x;i++) { p=p∗i; t+=p; s=s+t∗1.0/(i∗i); } printf("s=%lf",s); }  2.#include"stdio.h" #include"math.h" intmain() { inti,j,k; for(i=-2;i<=2;i++) { for(j=1;j<=24+abs(i);j++)   printf(""); for(k=1;k<=3;k++) { for(j=abs(i)-2;j<=2-abs(i);j++)   printf("$"); if(k<=2)   for(j=1;j<=abs(i)∗2;j++) printf(""); } printf(" "); } }  3.#include"stdio.h" intmain() { intag,as,bg,bs,add1,add2,add,n=0; for(ag=0;ag<=9;ag++) for(as=1;as<=9;as++) for(bg=0;bg<=9;bg++) for(bs=1;bs<=9;bs++) if(ag==7||ag==9||as==7||as==7) if(bg==7||bg==9||bs==7||bs==7) { add1=ag+as∗10;add2=bg+bs∗10; add=add1+add2; n++; printf("%d+%d=%d\t",add1,add2,add); 􀅰02􀅰 单招零距离􀅰计算机专业综合􀅰下册 if(n%5==0)printf(" "); } }  4.①0 ②2 ③pow(x,2∗i-1)/jc ④j<=n  5.①m-1 ②m+1 ③next++ ④m  6.①mz<nz ②mz%nz ③mz  ④test1∗test2/g2或test1∗test2/mz 【拓展练习】  1.chari,j,k; for(i='x';i<='z';i++)   for(j='x';j<='z';j++) { if(i! =j)  for(k='x';k<='z';k++)   if(i! =k&&j! =k) { if(i! ='x'&&k! ='x'&&k! ='z')   printf("orderisa与%c\tb 与%c\tc与%c ",i,j,k); } }  2.#include"stdio.h" intmain() { ints,t,s1; scanf("%ld",&s); s1=s; t=s1%10; s1=s1/10; while(s1) { if(t>=s1%10) { t=s1%10; s1/=10; } else   break; } if(s1==0)printf("%d是升序数",s); elseprintf("%d是非升序数",s); }  3.①1 ②temp>10 ③temp%10∗quan ④10  4.①10 ②count++或count+=1等 ③0  ④k>max 【技能实践】  1.①65+(j%2? 0:1)②'A'+3  2.①for(i=0;i<20;i++)  ②for(j=2;j<beijian;j++)  ③}while(! flag||beijian<jian);  3.inti,a,b,c,min,max,gys,gbs; printf("请输入三个整数,用逗号隔开:"); scanf("%d,%d,%d",&a,&b,&c); min=a; if(b<min)min=b; if(c<min)min=c; max=a; if(b>max)max=b; if(c>max)max=c; for(i=min;i>=1;i--)   if(a%i==0&&b%i==0&&c%i==0) break; gys=i; for(i=max;i<=a∗b∗c;i++)   if(i%a==0&&i%b==0&&i%c==0) break; gbs=i; printf("最大公约数是:%d,最小公倍数是:% d",gys,gbs);  4.longnum,count=0,num1,num2,i,p; scanf("%ld",&num); num1=num; while(num1) { num1/=10; count+=1; } p=i=1; while(i<count) { i++;p∗=10; } num2=num; for(i=1;i<=(count-1)/2;i++) { num2=num2%p; p/=100; num2=num2/10; } printf("%ld,%ld",num,num2); 􀅰12􀅰 总复习方案􀅰参考答案 总复习方案·第五章循环结构程序设计 /米米米米米***米米*END*米米米**米米米*米 } 4.程序设计题:用双重循环输出如下图形: BBBBB BBB B BBB BBBBB #include <stdio.h> int main() { /*关共兴米米米米**米BEGIN米***米米米***米/ /**米兴米*米关*并*END米****并米关米米米/ 第五节循环结构应用举例 知识体系 ©Y© 循环次数 累加累乘 文本作图 穷举法 循环结构应用 递推法 素数 公约数公倍数 整数处理 ·109· 单招零距离·计算机专业综合·下册 知识梳理 ©⑤ 一、循环次数 典例精析 ©⊙ 【例1】写出下列程序的运行结果。 #include "stdio.h" int main() int i,j,s1,s2,s3,s4,k,t; s1=1;s2=2;s3=3;s4=4; for(i=1;i<=3;i++) {s1=s1+1; for(j=1;j<=i;j++) {for(k=1;k<=j;k++) {s2=s2+2; s3=s3+s4;s4=s3-s4;s3=s3-s4; } printf("s1=%d,s2=%d,s3=%d,s4=%d",s1,s2,s3,s4); 【分析】中层循环及内循环都受前其外循环变量的影响,所以还是用列表法列出循环次数。 i=1j=1k=1 G=1k=1 i=2 j=2 k=1 k=2 j=1 k=1 k=1 j=2 k=2 i=3 k=1 j=3 k=2 k=3 s1不难看出结果,s2=s2十2;受内循环控制,计10次,而s3=s3十s4;s4=s3一s4;s3=s3 一s4:实质上是加减法交换s3,s4两个变量,交换了10次,则等同没有交换。 【答案】程序运行结果为: s1=4,s2=22,s3=3,s4=4 二、累加累乘 【例2】求x=y/1!十y/2!+y/3!++y/n!y和n由键盘输入。 【分析】阶乘可以用循环来体现,同时用累加器对每次的阶乘(阶乘放到分母上,分子为y) ·110· 总复习方案·第五章循环结构程序设计 进行累加,但要注意累加时的数据类型。 【答案】 #include <stdio.h int main() int y,n,i,p=1; double sum=0; scanf("%d",&y); scanf("%d",&n); for(i=1;i<=n;i++) p=p*i; sum=sum+1.0/p y; } printf("sum=%lf",sum); } 三、文本作图 【例3】编程输出如下图形。 SSS SSSSS SSSSSSS 【分析】此图形一般用双重循环来控制输出,外循环控制行数,内循环控制列数,每行前 如有空格数的变化可以用另一个循环来控制,内循环输出一行后要换行,列表分析如下: 行数i 列数j 每行前空格数 1 1 心 2 3 2 3 5 1 4 7 0 i 2¥i-1 4-i 【答案】 #include "stdio.h" int main() int i,j; for(i=1;i<=4:i++) {for(Gj=1;j<=4-i;j++) printf(""); for(G=1;j<=2*i-1;j++) printf("s"); printf(" "); ·111· 单招零距离·计算机专业综合·下册 } } 【例4】编程输出如下图形。 $ $$$ $$$$$ $$$ $ 【分析】此为对称图形,可以借用数轴的思想来理解编程。 行数i(y轴坐标) 列数j(x轴坐标) 每行前空格数 -2 00 2 -1 -1~1 1 0 -2~2 0 1 -1~1 1 2 0~0 2 i abs(i)-2~2-abs(i) abs(i) 【答案】 #include "stdio.h" #include "math.h" int main() inti,j; for(i=-2:i<=2:i++) for(j=1;j<=24+abs(i);j++) printf("") for(j=abs(i)-2;j<=2-abs(i);j++) printf("$"); printf(" "); } 四、穷举法 【例5】一千元钱,想买一百只鸡,每只大公鸡价值50元钱,每只母鸡价值30元钱,每3 只小鸡价值10元钱,现有1000元想买100只鸡,问大公鸡、母鸡、小鸡各应买几只? 【分析】此为不定方程问题,一般用穷举法来解决。所谓穷举就是把可能性用循环列举出 来,符合要求的则输出。循环尽量缩小范围,否则耗费计算机执行时间。这里我们把co©k的范 围大致到19只,hen大致到33只,chick用chick=100一cock一hen;来表示,再符合1000元钱就 是我们要的。注意cock*50+hen*30+chick*10/3.0==1000表达式中3.0的含义。 【答案】 #include "stdio.h" ·112· 总复习方案·第五章循环结构程序设计 int main() int cock,hen,chick; for(cock=0;cock<=19;cock+) for(hen=0;hen<=33;hen++) chick=100-cock-hen; if(cock 50+hen 30+chick 10/3.0==1000) printf("cock=%d\then=%d\tchick=%d ",cock,hen,chick); } 【例6】2022年暑假,某歌星来到盐城花海开演唱会,有五位同学特别喜欢该歌星,买了 五张门票,这五位同学分别叫做小红、小玉、小明、小刚、小强,这五张门票有如下特点: 1)座位是挨着的,分别为1、2、3、4、5,演唱会门票有一张是靠边的(座位1为靠边): 2)小红是不喜欢坐边上的,但是小红想挨着小玉.; 3)小玉不想挨着小明,小明想挨着小刚,小刚不想挨着小强.: 假设小红为i、小玉为j、小明为k、小刚为P、小强为q,参考程序运行结果,为符合五个同 学的排列意愿。编程完成所求。 2 4 -5 2 3 【分析】小红为i、小玉为j、小明为k、小刚为p、小强为q; 五个变量肯定不能相等,则有: i!=j8&i!=k&&i!=p&&i!=q&&j!=k&&j!=p&&j!=q&&k!= p&.&.k!=q&.&p!=q 小红:i!=1&&(i==j+1li==j-1); 小玉:j!=k-1&8j!=k+1; 小明:k==p十1|k==p-1; 小刚:p!=q+1&&p!=q-1; 【答案】 #include "stdio.h" int main() int i,j,k,p,q; for(i=1;i<=5;i++) /小红 forj=1;j<=5;j++) /小玉 ·113· 单招零距离·计算机专业综合·下册 for(k=1:k<=5;k++) /小明 for(p=1;p<=5;p++) /1小刚 for(q=1;g<=5;q++) /小强 if(i!=j&&i!=k&&i!=p&&i!=q&&j!=k&&j!=p&&j!= q&&k!=p&&k!=q&&p!=q) if(i!=18.&(i==j+1|li==j-1) ifj!=k-1&&j!=k+1) if(k==p+1|Ik==p-1) if(p!=q+1&&p!=q-1) printf("小红-一%d小t小玉-一%d\t小明一一%d小t小刚一一%d八t小强-一%d t ",i,j,k,p,q); } 五、递推法 【例7】小猫第一天钓了若干条鱼,第一天吃了一半,不过瘾又多吃了一条。第二天又将 剩下的鱼吃掉一半,又多吃了一条。以后每天都吃前一天剩下的一半多一条。到第十天只剩 下两条鱼了,问:第一天一共钓了多少条鱼?编程求解。 【分析】此类问题为已知后面的,求前面的。由于变化规律一样,所以要找到递推式,用 循环往前推就能求解。 假设第二天为x2,第三天为x。则第二天吃了x2/2+1,剩余x2一(x/2+1)给第三天, 则有x3=x2一(x2/2十1),根据已知后面的,求前面的,则有x2=2*(x3+1);同理有: xg=2¥(x10+1); xg=2*(x9十1); X2=2*(x3十1); x1=2*(x2+1); 前推9次则得解。等效递推关系式x=2¥(x十1)加循环就行了。 【答案】 int x,i; x=2; for(i=9;i>=1;i--) x=(x十1)*2; printf("x=%d",x); } 【例8】编程求出下列表达式的值,x从键盘输入。 1+ 1 1 1+ 1 1+ 1 1+ 1+ 1+ ·114· 总复习方案·第五章循环结构程序设计 【分析】从表达式看,可以发现递推关系为1+1/x→x,再往上推6次,则能得最后的结果。 【答案】 #include "stdio.h" int main() int i; float x; scanf("f",&.x); for(i=1;i<=6:i++) x=1+1/x: printf("x=%f",x); } 六、素数 【例9】验证从键盘上输入的所有大于或等于4的偶数都可以分解为两个素数之和,只 要输出一对就行。 【分析】本题关键是把键盘输入的数×拆分成两个加数:s1,x一s1,再分别判断是否是素 数,如两个都是素数,则找到符合要求的两个素数之和;由于用do循环,所以s1从1开始,逐 步递增。 【答案】 #include "stdio.h" #include "math.h" int main() int i,sl,tl,t2,x; do {printf("请输入一个大于或等于4的偶数: "); scanf("%d",&x); }while(x<4||x%2!=0); s1=1; do {s1++; t1=1; for(i=2;i<=sqrt(s1);i++) f(s1%i==0) {t1=0: break; if(t1!=0) {t2=1; for(i=2;i<=sqrt(x-s1);i++) if((x-s1)%i==0) {t2=0; ·115· 单招零距离·计算机专业综合·下册 break; }while(t1==0||t2==0); printf("%d=%d++%d ",x,s1,x-s1); 七、公约数公倍数 【例10】用辗转相除法求输入的两个整数的最大公约数及最小公倍数。 【分析】用辗转相除法求两个整数的最大公约数,主要是掌握以下辗转式: y r=x%oy y r=x%y 最小公倍数等于两数的积除以这两个数的最大公约数。 【答案】 #include "stdio.h" int main() int m,n,r,x,y,temp; printf("请输入两个整数:"); scanf("%d%d",&m,&n); x=m;y=n;/用x,y求解最大公约数,防止丢掉原来的值m,n if(x<y)(temp=x;x=y;y=temp;} r=x%y; while(r!=0) {x=y; y=r; r=x%oy; printf("最大公约数是:%d,最小公倍数是:%d",y,m*n/y); 八、整数处理 【例11】编程求出整数n各位数之和,同时输出各位数字,之间用逗号隔开。如输入 12345,结果为: 5,4,3,2,1 S=15 【分析】因为不知道整数是多少位,所以不好直接用表达式来表示各位数;但可以不断用 求余10及整除10来从后向前求出各位数。另外最后如n剩一位数,则输出不带逗号。 【答案】 #include "stdio.h" int main() long n; ·116· 总复习方案·第五章循环结构程序设计 int s=0; printf("请输人一个整数:"); scanf("%ld",&.n); x=n;q=1; do {x=x/10:q=q*10; )while(x>>10); while(n!=0) {s+=n/q; if(n>10)printf("%d,",n/q); else printf("%d",n%10); n=n%qq/=10; printf(" s=%d",s); 【例12】编程判断一个整数是否是回文数。如12321则是回文数,1232则不是回文数。 【分析】要判断一个整数是否是回文数,只要把它的逆序数求出来,再与之判断是否相 等,如相等则是回文数。要求一个整数num的逆序数,只要从后向前取出各位数,再利用形如 s=s*10十num%10;这样的式子进行不断累加就行。 【答案】 #include "stdio.h" int main() long m=12321,s=0,num; num=m; while(num!=O) {s=s*10+num%10; num=num/10; if(s==m) printf("%d是回文数",m): else printf("%d不是回文数",m); 巩固练习 1.编程求下列计算式:x从键盘输入。 是+”+24+”+2+81++业+21+++ 22 32 x? #include"stdio.h" int main() ·117· 单招零距离·计算机专业综合·下册 { /**关米米关关米米END米米米米*米米*米/ } 2.用循环的嵌套编程输出如下图形。 s $ $ $$$ $$$$$$$$$$$$$$$ $$$ 5 #include "stdio.h" include "math.h" int main() { /柴**米米米0米米米*BEGIN米*米*米米米米米*米/ /关米关关关米关关关关米END米关*关关关米*米米米/ } 3.实验小学六班同学在计算两位数加两位数时,凡是有7或9在其中时,出错几率就高, 张老师为了多出一些这样的计算题,就请他的女儿贝贝编程把这样的题找出来,以便他能从中 抽取一些试题给学生训练,而且一行显示五题。假如是你,该怎样编程? include "stdio.h" int main() ¥BEGIN米**米/ ·118·

资源预览图

第五节 循环结构应用举例-【单招零距离】计算机专业综合(下)
1
第五节 循环结构应用举例-【单招零距离】计算机专业综合(下)
2
第五节 循环结构应用举例-【单招零距离】计算机专业综合(下)
3
第五节 循环结构应用举例-【单招零距离】计算机专业综合(下)
4
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。