1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include <stdio.h> int main() { int sum1,b,c,d,e,sum2; for(sum1=1000;sum1<10000;sum1++) { b=sum1%10; c=sum1%100/10; d=sum1/100%10; e=sum1/1000; if(b==c||c==d||d==e) { continue; } sum2=b*1000+c*100+d*10+e; if(sum1==4*sum2) { printf("原四位数为%d",sum1); } else { continue; } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include <stdio.h> int main() { long n,sum=0,m; printf("请输入一串数字"); scanf("%ld",&n); while(n>0) { m=n%10; n=n/10; sum+=m; } printf("%d ",sum); switch(sum) { case 1: printf("January "); break; case 2: printf("February "); break; case 3: printf("March "); break; case 4: printf("April "); break; case 5: printf("May "); break; case 6: printf("June "); break; case 7: printf("July "); break; case 8: printf("August "); break; case 9: printf("September "); break; case 10: printf("October "); break; case 11: printf("November "); break; case 12: printf("December "); 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 i,j,k,A,sum=0,a; printf("请输入一个不大于6的正整数A "); scanf("%d",&A); if(A>=1&&A<=6) { for(i=A;i<=A+3;i++) { for(j=A;j<=A+3;j++) { for(k=A;k<=A+3;k++) { if(i!=j&&i!=k&&j!=k) { sum=i*100+j*10+k; a++; printf("%4d",sum); if(a%6==0) { printf(" "); } } } } } } else { printf("error"); } return 0; }
综合小项目
自动出题器:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,b,d,result,g=0,i,y,s,x,z,q=0,answer,l=0; float accuracy1,accuracy2; char c,m; do{ for(i=1;i<=5;i++) { srand(time(NULL)); a=rand()%100+1; b=rand()%100+1; d=rand()%4+1; switch(d) { case 1:c='+'; result=a+b; break; case 2:c='-'; result=a-b; break; case 3:c='*'; result=a*b; break; case 4:c='/'; s=a/b; y=a%b; break; } printf("%d%c%d=? ",a,c,b); printf("请输入答案"); if(c=='/') { printf("请分别输出商和余数,用空格分开"); scanf("%d %d",&x,&z); q++; if(x==s&&z==y) { g++; l++; printf("答对了 "); continue; } else { printf("答错了,正确的答案是商为%d,余数为%d ",s,y); continue; } } scanf("%d",&answer); q++; if(answer==result) { g++; l++; printf("答对了 "); } else { printf("答错了,正确的答案是%d ",result); } if(i==5) { accuracy1=l/5.0*100; printf("本次一共做对了%d道题,正确率为%.2f%% ",l,accuracy1); printf("继续吗?Y or N "); scanf(" %c",&m); } } l=0; }while(m==121||m==89); accuracy2=(float)g/q*100; printf("一共做了%d道题,做对了%d道题,正确率%.2f%% !",q,g,accuracy2); 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,a,b,c; for(a=0;a<=9;a++) for(b=0;b<=9;b++) { switch(a) { case 0:A=6;break; case 1:A=2;break; case 2:A=5;break; case 3:A=5;break; case 4:A=4;break; case 5:A=5;break; case 6:A=6;break; case 7:A=3;break; case 8:A=7;break; case 9:A=6;break; } switch(b) { case 0:B=6;break; case 1:B=2;break; case 2:B=5;break; case 3:B=5;break; case 4:B=4;break; case 5:B=5;break; case 6:B=6;break; case 7:B=3;break; case 8:B=7;break; case 9:B=6;break; } c=a+b; switch(c) { case 0:C=6;break; case 1:C=2;break; case 2:C=5;break; case 3:C=5;break; case 4:C=4;break; case 5:C=5;break; case 6:C=6;break; case 7:C=3;break; case 8:C=7;break; case 9:C=6;break; } if(A+B+C==12&&a!=b&&a+b==c) { printf("%d+%d=%d ",a,b,c); } } return 0; }
实验总结:1.注意for语句的嵌套,注意大括号的位置,有时候程序问题往往就在大括号的位置。
2.注意使用switch语句的使用,变量的初值设定。
3..注意定义变量时,要注意分清定义的变量,避免混淆。
知识点总结:1.注意赋值和等于的区别。
2.循环嵌套时,外循环执行一次,内循环执行一回。