1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include<stdio.h> int main() { int a,b,c,d,x,y,i; for(i=1000;i<=9999;i++) { a=i/1000; b=i%1000/100; c=i%1000%100/10; d=i%10; if(a==b||a==c||a==d||b==c||b==d||c==d) { continue; } else { x=a; a=d; d=x; x=b; b=c; c=x; y=a*1000+b*100+c*10+d; if(i==4*y) { printf("%d ",i); } } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include<stdio.h> int main() { int i,a,sum=0; printf("输入任意一个多位的数字"); scanf("%d",&i); while(1) { if(i<10&&i>0) { sum=sum+i; break; } a=i%10; sum=sum+a; i=i/10; if(i<10&&i>0) { sum=sum+i; break; } } switch(sum) { case 12:printf("%d December ",sum);break; case 11:printf("%d November ",sum);break; case 10:printf("%d October ",sum);break; case 9:printf("%d September ",sum);break; case 8:printf("%d August ",sum);break; case 7:printf("%d July ",sum);break; case 6:printf("%d June ",sum);break; case 5:printf("%d May ",sum);break; case 4:printf("%d April ",sum);break; case 3:printf("%d March ",sum);break; case 2:printf("%d February ",sum);break; case 1:printf("%d January ",sum);break; default:printf("*** "); } return 0; }
3.给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:输入在一行中给出A。
输出格式:输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:2
输出样例:234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
#include<stdio.h> int main() { int a,b,c,d,i=0,sum=0; printf("输入一个不超过6的正整数A "); scanf("%d",&a); b=a; while(b<=a+3) { c=a; while(c<=a+3) { d=a; while(d<=a+3) { if(b!=c&&b!=d&&c!=d) { sum=b*100+c*10+d; printf("%3d",sum); i++; if(i!=6) printf(" "); if(i==6) { printf(" "); i=0; } } sum=0; d++; } c++; } b++; } return 0; }
4. 万年历、看商品猜价格、自动出题器、猜拳游戏。(完成个人选定的题目)
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a,b,yu,zy,result,answer,d,i=0,y=0,x=0,m=0; float lu,zonglu; char op,yn; srand(time(NULL)); while(i<=5) { a=rand()%100; b=rand()%100; d=rand()%4+1; switch(d) { case 1:op='+';result=a+b;break; case 2:op='-';result=a-b;break; case 3:op='*';result=a*b;break; case 4:op='/';result=a/b;zy=a%b;break; } if(d==4) { printf("%d%c%d=? ",a,op,b); printf("请输入商和余数,用空格分开 "); scanf("%d %d",&answer,&yu); if(answer==result&&yu==zy) { printf("回答正确 "); y++; x++; m++; } else { printf("回答错误,正确的答案是%d %d ",result,zy); x++; } } else { printf("%d%c%d=? ",a,op,b); printf("请输入答案 "); scanf("%d",&answer); if(answer==result) { printf("回答正确 "); y++; x++; m++; } else { printf("回答错误,正确的答案是%d ",result); x++; } } i++; if(i==5) { lu=m/5.0; printf("这次做对了%d道题,正确率为%.2f%%",m,lu*100); printf("继续吗? Y or N "); scanf(" %c",&yn); if(yn=='n') { zonglu=(float)y/x; printf("一共做了%d道题,做对了%d道题,正确率是%.2f%%",x,y,zonglu*100); break; } if(yn=='y') { i=0; m=0; } } } return 0; }
附加题
有16根火柴,可以拼出多少个形如“A+B=C”的等式,A、B、C是用火柴棍拼出的整数,且为一位数,输出该等式形式。
注意: 1. 加号与等号各自需要两根火柴棍 2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. 16根火柴棍必须全部用上
用火柴棍拼数字0-9的拼法如图所示:
#include<stdio.h> int main() { int a,b,c,x,y,z; for(a=0;a<=9;a++) { for(b=0;b<=9;b++) { switch(a) { case 0:x=6;break; case 1:x=2;break; case 2:x=5;break; case 3:x=5;break; case 4:x=4;break; case 5:x=5;break; case 6:x=6;break; case 7:x=3;break; case 8:x=7;break; case 9:x=6;break; } switch(b) { case 0:y=6;break; case 1:y=2;break; case 2:y=5;break; case 3:y=5;break; case 4:y=4;break; case 5:y=5;break; case 6:y=6;break; case 7:y=3;break; case 8:y=7;break; case 9:y=6;break; } c=a+b; switch(c) { case 0:z=6;break; case 1:z=2;break; case 2:z=5;break; case 3:z=5;break; case 4:z=4;break; case 5:z=5;break; case 6:z=6;break; case 7:z=3;break; case 8:z=7;break; case 9:z=6;break; } if(x+y+z==12&&x!=y) { printf("%d+%d=%d ",a,b,c); } } } return 0; }
实验总结:1.注意switch语句的使用,case后加 break
2.赋值是一个= 等于是两个==
3.利用时间产生随机数,注意多重嵌套的关系
4.交换数值用第三变量
知识点总结:1.对一个数去掉最后一位用/10,得到最后一位用%10
2.输入一串字符的经典用法:while((ch=getchar())!=' ')
3.无限循环中,利用循环体中加
break
语句跳出循环