C语言期中测试试题(AB组-2014)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

信管专业2014级《C语言程序设计》期中测试试题(AB组)注意:B组题目适用于偶数学号的同学。本次测试共5题,每题20分,共计100分,附加题选做。题1:使用getchar()函数从键盘上输入多个字符(以#作为输入结束),统计其中的字母、数字和其他字符的个数,运行效果如图所示。#includestdio.hvoidmain(){intzm=0,sz=0,other=0;charch;printf(输入多个字符(以#结束):);ch=getchar();while(ch!='#'){if(ch='A'&&ch='Z'||ch='a'&&ch='z')zm++;elseif(ch='0'&&ch='9')sz++;elseother++;ch=getchar();}printf(字母=%d,数字=%d,其他=%d\n,zm,sz,other);}题1:使用getchar()函数从键盘上输入多个字符(以#作为输入结束),将其中的字母和数字字符显示出来,运行效果如图所示。#includestdio.hvoidmain(){charch;printf(输入多个字符(以#结束):);ch=getchar();while(ch!='#'){if(ch='A'&&ch='Z'||ch='a'&&ch='z'||ch='0'&&ch='9')putchar(ch);ch=getchar();}printf(\n);}题2:从键盘上按照规定格式输入一个闭区间的上下限值,求这个区间内能被3或7整除的数的个数及和值。运行效果如图所示。#includestdio.hvoidmain(){intx,y,k,sum=0,count=0;printf(按照[x,y]格式输入数值区间:);scanf([%d,%d],&x,&y);for(k=x;k=y;k++)if(k%3==0||k%7==0){sum+=k;count++;}printf(count=%d,sum=%d\n,count,sum);}题2:从键盘上按照规定格式输入一个闭区间的上下限值,求这个区间内能被3整除或个位为3的数的个数与和值。运行效果如图所示。#includestdio.hvoidmain(){intx,y,k,sum=0,count=0;printf(按照[x,y]格式输入数值区间:);scanf([%d,%d],&x,&y);for(k=x;k=y;k++)if(k%3==0||k%10==3){sum+=k;count++;}printf(count=%d,sum=%d\n,count,sum);}题3:从键盘上输入一个大于100的整数x,试求[50,x]区间内最大的10个素数的和值。运行效果如图所示。#includestdio.h#includemath.hvoidmain(){intx,n,k,sum=0;printf(x=);scanf(%d,&x);for(n=0;n10&&x=50;x--){for(k=2;k=sqrt(x);k++)if(x%k==0)break;if(ksqrt(x)){sum+=x;n++;}}printf(sum=%d\n,sum);}题3:从键盘上输入一个小于100的整数x,试求[x,200]区间内最大的10个素数的和值。运行效果如图所示。#includestdio.h#includemath.hvoidmain(){intx,n,m,k,sum=0;printf(x=);scanf(%d,&x);m=200;for(n=0;n10&&m=x;m--){for(k=2;k=sqrt(m);k++)if(m%k==0)break;if(ksqrt(m)){sum+=m;n++;}}printf(sum=%d\n,sum);}题4:编写程序按照从键盘上输入的整数n(10n20)值显示由字母字符组成的图形,运行效果如图所示。#includestdio.hvoidmain(){intn,i,j;printf(n=);scanf(%d,&n);for(i=0;in;i++){for(j=0;ji;j++)printf(%3c,'');for(j=i;jn;j++)printf(%3c,'A'+j);printf(\n);}}题4:编写程序按照从键盘上输入的整数n(10n20)值显示由字母字符组成的图形,运行效果如图所示。#includestdio.hvoidmain(){intn,i,j;printf(n=);scanf(%d,&n);for(i=0;in;i++){for(j=0;ji;j++)printf(%3c,'');for(j=i;jn;j++)printf(%3c,'A'+i);printf(\n);}}题5:一个数若能被其各位数的和整除,则称该数为“因果数”,例如21能被3(2+1=3)整除,则21为一个“因果数”。从键盘上输入x,试求[x,10000]之间的“因果数”的个数。运行效果如图所示。#includestdio.hvoidmain(){intcount=0,k,m,x,s;printf(x=);scanf(%d,&x);for(k=x;k=10000;k++){m=k,s=0;while(m0){s=s+m%10;m/=10;}if(k%s==0)count++;}printf(count=%d\n,count);}题5:一个数若能其各位数按照递升方式排列,则称该数为“升阶数”,例如12、223、357都为“升阶数”,231就不是“升阶数”。从键盘上输入x,试求[x,10000]之间的“升阶数”的个数。运行效果如图所示。#includestdio.hvoidmain(){intcount=0,k,m,x,flag;printf(x=);scanf(%d,&x);for(k=x;k=10000;k++){m=k,flag=1;while(m0&&flag){if(m%10(m/10)%10)flag=0;m/=10;}if(flag)count++;}printf(count=%d\n,count);}附加题(每题10分):三色球问题(若一个口袋中放有20个球,其中有5个红的,6个白的和9个黑的,从键盘上输入n(8n18),问从中任取n个共有多少种不同的颜色搭配)。运行效果如图所示。#includestdio.hvoidmain(){intn,a,b,c,count=0;printf(n=);scanf(%d,&n);for(a=0;a=5;a++)//取红球的个数for(b=0;b=6;b++)//取白球的个数for(c=0;c=9;c++)//取黑球的个数if(a+b+c==n)count++;printf(count=%d\n,count);}附加题(每题10分):委派任务问题(某侦察队接到一项紧急任务,要求在A、B、C、D四个队员中尽可能多地挑若干人,但有以下限制条件:1)A和B两人中至少去一人;2)A和D不能一起去;3)B和C都去或都不去;4)B和D只能且必须去一人,问应当让哪几个人去呢?)试编写程序输出最佳方案。运行效果如图所示。#includestdio.hvoidmain(){inta,b,c,d,maxp=0,p[4]={0},t1,t2,t3,t4,k;//maxp表示可行方案中可去人数的最大值for(a=0;a=1;a++)//a=0表示A不去,a=1表示A去for(b=0;b=1;b++)//b=0表示B不去,b=1表示B去for(c=0;c=1;c++)//c=0表示C不去,c=1表示C去for(d=0;d=1;d++)//d=0表示D不去,d=1表示D去{t1=(a+b0);//限制条件(1)t2=(a+d2);//限制条件(2)t3=(b==c);//限制条件(3)t4=(b+d==1);//限制条件(4)if(t1&&t2&&t3&&t4&&(a+b+c+d)maxp){maxp=a+b+c+d;p[0]=a,p[1]=b,p[2]=c,p[3]=d;}}printf(共有%d人被选中,他们是:,maxp);for(k=0;k4;k++)if(p[k])printf(--maxp?%2c,:%2c\n,65+k);}

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功