C语言选择与循环控制结构常见习题与答案.docx
- 文档编号:28837207
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:19
- 大小:17.91KB
C语言选择与循环控制结构常见习题与答案.docx
《C语言选择与循环控制结构常见习题与答案.docx》由会员分享,可在线阅读,更多相关《C语言选择与循环控制结构常见习题与答案.docx(19页珍藏版)》请在冰豆网上搜索。
C语言选择与循环控制结构常见习题与答案
1.猜数字小游戏:
每次程序随机生成一个数字,用户输入数字进行猜测,十回合内猜出数据则胜利,否则失败,可重复游戏。
代码如下:
#include
#include
#include
intmain()
{
intmagic;
intguess;
intcount;
intret;
charreply;
srand(time(NULL));
do{
magic=rand()%100+1;//产生1到100之间的随机数//
count=0;
do{
do{
printf("Pleaseguessamagicnumber:
");
ret=scanf("%d",&guess);
if(ret!
=1)
{
while(getchar()!
='\n');
}
}while(ret!
=1||guess<1||guess>100);//如果输入不是1到100之间的数字则连续读取//
count=count+1;
if(guess>magic)
printf("Wrong!
Toobig!
\n");
elseif(guess printf("Wrong! Toosmall! \n"); else { printf("Right! \n"); printf("Thenumberis: %d\n",magic); } }while(guess! =magic&&count<10); if(magic==guess) printf("count=%d\n",count); if(magic! =guess) printf("Youlose! "); printf("Doyouwanttocontinue(Y/Nory/n)? \n"); scanf("%c",&reply); }while((reply=='y')||(reply=='Y')); return0; } 2.任意时间时钟时针与分针的夹角: 钟面上的时针和分针之间的夹角总是在0度~359度之间。 举例来说,在十二点的时候两针之间的夹角为0度,而在六点的时候夹角为180度,在三点的时候为90度。 本题要解决的是计算0: 00到12: 00之间任意一个时间的夹角。 输入: 要求输入必须为小时h分钟m的格式,如12h00m,5h43m等,其他形式的输入都不接收,如12,00或5h43等输入都不被接收,而且需要对“小时”和“分钟”进行数值有效判断(小时在[0,12],分钟在[0.60]之间),不满足以上要求时,需要重新输入。 在程序中首先打印: Pleaseinputtime(e.g: 5h43m),然后输入时间。 格式为: "Pleaseinputtime(e.g: 5h43m)\n" "%d%c%d%c" 输出: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。 格式为: "At%d: %02dtheangleis%.1fdegrees.\n" 如: 输入“12h00m”时,输出At12: 00theangleis0.0degrees. 输入“5h43m”时,输出At5: 43theangleis86.5degrees. 输入“5h5m”时,输出At5: 05theangleis122.5degrees. 代码如下: #include #include main() { inth,m,i=0; floatalpha=0; printf("Pleaseinputtime(e.g: 5h43m)\n"); scanf("%dh%dm",&h,&m); for(;i==0;) { if(h<12&&h>0&&m>0&&m<60) {i=1; alpha=fabs(30*h-5.5*m); if(m<10) printf("At%d: 0%dtheangleis%.1fdegrees.",h,m,alpha); else printf("At%d: %dtheangleis%.1fdegrees.",h,m,alpha); } else { printf("Pleaseinputtime(e.g: 5h43m)"); scanf("%dh%dm",&h,&m); } } } 3.十进制数字转二进制数字(二进制数字32位以内) 代码如下: #include intmain(void) { inti=0,n,a[32]; printf("Inputnumber: "); scanf("%d",&n); printf("numberofdecimalform: %d\n",n); while(n>0) { a[i]=n%2; i=i+1; n=n/2; } printf("it\'sbinaryform: ");//逆序输出// for(i--;i>=0;i--) { printf("%d",a[i]); } return0; } 4.判断是否为C标识: 首字符是否为下划线开头,其余字符是否为下划线或数字或字母 代码如下: #include #include intmain() { chara[80]; inti; gets(a); if(a[0]=='_'||(a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')){//判断首个字符应是否“下划线”或者“字母” for(i=1;a[i]! ='\0';i++){ if(a[i]=='_'||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||(a[i]>='0'&&a[i]<='9'))continue;//判断之后字符是否为“下划线”或“字母”或“数字” else{ printf("isnot\n"); break; } } if(a[i]=='\0')printf("is\n"); } elseprintf("Thisisnotaidentifier! \n"); return0; } 5.指数在2到50之间的梅森素数: 形如2的n次方-1的素数成为梅森素数 代码如下: #include #include #include intmain() { inti,j; intn=0; inta,b; for(i=2;i<=50;i++) { a=pow(2,i)-1; for(j=2;j<=a;j++) { if(a%j==0) break; } if(j==a) { printf("2^%d-1=%.0lf\n",i,(longdouble)a); n++; } else { continue; } } printf("指数n于[2,50]中梅森尼数共有%d个.",n); return0; } 6.奇偶归一猜想: 对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 输入正整数n,求这个数多少次能归一。 代码如下: #include #include #include intmain() { intn,m=0; longlonginta=1,b; printf("Inputn: "); scanf("%d",&n); do{ b=a; do{ if(b%2==1) b=3*b+1; else b=b/2; m++; }while(b! =1); if(m<=n) { m=0; a++; } }while(m<=n); printf("num=%lld,count=%d\n",a,m); return0; } 7.存款利率: 设capital为本金,rate是整存整取的存款年利率,n是储蓄的年份,deposit是第n年年底账户里的存款总额。 已知如下两种本利之和的计算方式: 1按复利方式计算的本利之和计算公式为: deposit=capital*(1+rate)n 2按普通计息方式计算本利之和的公式为: deposit=capital*(1+rate*n) 已知银行整存整取不同期限存款的年息利率为: 存期1年,利率为0.0225 存期2年,利率为0.0243 存期3年,利率为0.0270 存器5年,利率为0.0288 存期8年,利率为0.0300 若输入其他年份,则输出“Erroryear! ” 代码如下: #include #include intmain() {intyear; doublecapital,rate; charchoice; printf("Inputcapital,year: "); scanf("%lf,%d",&capital,&year); printf("Compoundinterest(Y/N)? "); scanf("%c",&choice); switch(choice) { case'y': case'Y': switch(year) { case1: rate=0.0225;printf("rate=%.4f,deposit=%.4f\n",rate,capital*pow((1+rate),year)); break; case2: rate=0.0243;printf("rate=%.4f,deposit=%.4f\n",rate,capital*pow((1+rate),year)); break; case3: rate=0.0270; printf("rate=%.4f,deposit=%.4f\n",rate,capital*pow((1+rate),year)); break; case5: rate=0.0288; printf("rate=%.4f,deposit=%.4f\n",rate,capital*pow((1+rate),year)); break; case8: rate=0.0300; printf("rate=%.4f,deposit=%.4f\n",rate,capital*pow((1+rate),year)); break; default: printf("Erroryear! \n"); } break; case'n': case'N': switch(year) { case1: rate=0.0225; printf("rate=%.4f,deposit=%.4f\n",rate,capital*(1+rate*year)); break; case2: rate=0.0243;printf("rate=%.4f,deposit=%.4f\n",rate,capital*(1+rate*year)); break; case3: rate=0.0270; printf("rate=%.4f,deposit=%.4f\n",rate,capital*(1+rate*year)); break; case5: rate=0.0288; printf("rate=%.4f,deposit=%.4f\n",rate,capital*(1+rate*year)); break; case8: rate=0.0300; printf("rate=%.4f,deposit=%.4f\n",rate,capital*(1+rate*year)); break; default: printf("Erroryear! \n"); } break; default: printf("Invalidchar! \n"); } return0; } 8.求sinx在误差eps内的估算值 代码如下: #include #include #include intmain() { doublex,eps; doublesinx,j=1; intn=1,m; printf("Enterx&eps: "); scanf("%lf%lf",&x,&eps); do{ j=1; for(m=1;m<=2*n-1;m++) { j=j*m; } sinx=sinx+pow(-1,n-1)*pow(x,2*n-1)/j; n++; }while(fabs(sinx-sin(x))>=eps); printf("sin(%f)=%f\n",x,sin(x)); if(x==0) n=1; printf("%d,sin(%f)=%f\n",n,x,sinx); return0; } 9.三天打鱼两天晒网: 假设一渔夫从1990年1月1日开始三天打鱼两天晒网,求任意一天,他在打鱼还是在晒网(考虑闰年) 代码如下: #include #include intmain() { inty,m,d; intsum=0; scanf("%4d-%2d-%2d",&y,&m,&d); if(y<1990) { printf("Invalidinput."); return0; } if((y%100! =0&&y%4==0)||(y%400==0)) { switch(m) { case1: case3: case5: case7: case8: case10: case12: if(d>31||d<1) { printf("Invalidinput."); return0; } break; case2: if(d>29||d<1) { printf("Invalidinput."); return0; } break; case4: case6: case9: case11: if(d>30||d<1) { printf("Invalidinput."); return0; } break; default: printf("Invalidinput."); return0; break; } } else { switch(m) { case1: case3: case5: case7: case8: case10: case12: if(d>31||d<1) { printf("Invalidinput."); return0; } break; case2: if(d>28||d<1) { printf("Invalidinput."); return0; } break; case4: case6: case9: case11: if(d>30||d<1) { printf("Invalidinput."); return0; } break; default: printf("Invalidinput."); return0; break; } } inti; if(y>1990) { for(i=1990;i { if((i%100! =0&&i%4==0)||(i%400==0)) { sum=sum+366; } else { sum=sum+365; } } } inti1; if(m>1) { for(i1=1;i1 { if((y%100! =0&&y%4==0)||(y%400==0)) { switch(i1) { case1: case3: case5: case7: case8: case10: case12: sum=sum+31; break; case2: sum=sum+29; break; case4: case6: case9: case11: sum=sum+30; break; } } else { switch(i1) { case1: case3: case5: case7: case8: case10: case12: sum=sum+31; break; case2: sum=sum+28; break; case4: case6: case9: case11: sum=sum+30; break; } } } } sum=sum+d; sum=sum%5; if(sum==0||sum==4) { printf("Heishavingarest."); } else { printf("Heisworking."); } return0; } 10.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 选择 循环 控制 结构 常见 习题 答案