1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
代码;
#include<stdio.h> int main() { int a,b,c,d,i,e,s; for(i=1000;i<=9999;i++) { a=i%10; b=i/10%10; c=i/100%10; d=i/1000; if(a==b||a==c||a==d||b==c||b==d||c==d) { continue; } else { e=a*1000+b*100+c*10+d; s=e*4; if(s==i) { printf("%d\n",i); } } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
代码
#include <stdio.h> int main() { int a,s=0; printf("请输入一个正数a\n"); scanf("%d",&a); while(1) { if(a<=0) { printf("输入错误,请重新输入"); continue; } else { break; } } while(a>0) { s=s+(a%10); a=a/10; } switch(s) { case 1: printf("%d january\n",s);break; case 2: printf("%d february\n",s);break; case 3: printf("%d march\n",s);break; case 4: printf("%d april\n",s);break; case 5: printf("%d may\n",s);break; case 6: printf("%d june\n",s);break; case 7: printf("%d july\n",s);break; case 8: printf("%d august\n",s);break; case 9: printf("%d september\n",s);break; case 10: printf("%d october\n",s);break; case 11: printf("%d november\n",s);break; case 12: printf("%d december\n",s);break; default: printf("%d ***",s); } 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
此题可在pta网站注册提交测试。https://pta.patest.cn/pta/test/14/exam/4/question/796
#include<stdio.h> int main() { int a,b,c,d,s,i=0; printf("请输入一个不超过6的正整数\n"); scanf("%d",&a); if(a>6||a<=0) { printf("error"); } else { for(b=a;b<a+4;b++) { for(c=a;c<a+4;c++) { for(d=a;d<a+4;d++) { if(b!=c && b!=d && c!=d) { s=(b*100)+(c*10)+d; i++; if(i%6==0) { printf("%d\n",s); } else { printf("%d ",s); } } } } } } return 0; }
万年历
#include<stdio.h> #include<stdlib.h> int main() { int year,month,a,a1=0,b1,c1,d1,i1,j1,sum,sum1,sum2; while(a1!=1) { printf("请输入年份月份和日期,用空格隔开\n"); scanf("%d%d",&year,&month); if(month>12||month<1) { printf("输入错误,请重新输入\n"); continue; } else { a1=1; } } system("CLS"); for(i1=1900,sum1=0;i1<=year-1;i1++) { if((i1%4==0&&i1%100!=0)||(i1%400==0)) { sum1=sum1+366; } else { sum1=sum1+365; } } for(j1=1,sum2=0;j1<=month-1;j1++) { if(j1==1||j1==3||j1==5||j1==7||j1==8||j1==10||j1==12) { sum2=sum2+31; } else if(j1==4||j1==6||j1==9||j1==11) { sum2=sum2+30; } else { if((i1%4==0&&i1%100!=0)||(i1%400==0)) { sum2=sum2+29; } else { sum2=sum2+28; } } } sum=sum1+sum2+1; c1=sum%7; printf("%d年%d月\n",year,month); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n"); if(month==4||month==6||month==9||month==11) { a=30; } else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { a=31; } else if(((year%4==0&&year%100!=0)||(year%400==0))&&month==2) { a=29; } else { a=28; } for(d1=c1;d1>0;d1--) { printf(" "); } for(b1=1;b1<=a;b1++) { printf(" %-2d ",b1); if((b1+c1)%7==0) { printf("\n"); } } return 0; }
:
知识点总结:
1 考察for循环的使用,拆开一个整数的各个位置上的数字时用取余和除。
2 while语句的使用和switch case语句的嵌套,case语句结束后要加; 再加break;,不能遗漏“;”
3 for语句的使用和嵌套,for的执行情况是 内层执行一遍 外层执行一次。
实验总结:
1:用了一个for循环。要是想让一个长整数上的各个数字换位置,可以用到除法要商和取余要余数来配合调换。
2:while语句不太熟,后面输出月份的时候一直是if语句没难点。改成switch语句的时候要在switch下面加大括号。
3:for语句的嵌套,一开始最里面的for语句的if判断没弄好, 够六个换一行需要输出%d后再\n。