首页 > 代码库 > 第六次作业
第六次作业
实验1:有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include<stdio.h> int main() { int a,b,c,d,i,sum; for(i=1000;i<=9999;i++) { a=i/1000; b=i/100%10; c=i/10%10; d=i%10; sum=d*1000+c*100+b*10+a; if(i==sum*4&&a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&b!=d) { printf("%d",i); } } return 0; }
实验2:输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include<stdio.h> int main() { int number,a,sum=0; printf("请输入任意一个多位的数字。\n"); scanf("%d",&number); while(number<0) { printf("输入错误,请重新输入。\n"); scanf("%d",&number); } while(1) { if(number==0) { break; } a=number%10; sum=sum+a; number=number/10; } switch(sum) { case 1:printf("%d January",sum);break; case 2:printf("%d February",sum);break; case 3:printf("%d March",sum);break; case 4:printf("%d April",sum);break; case 5:printf("%d May",sum);break; case 6:printf("%d Jun",sum);break; case 7:printf("%d July",sum);break; case 8:printf("%d August",sum);break; case 9:printf("%d September",sum);break; case 10:printf("%d October",sum);break; case 11:printf("%d November",sum);break; case 12:printf("%d December",sum);break; default:printf("%d ***",sum);break; } 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 number,i,a,b,c,n,d; printf("输入一个不超过6的正整数。\n"); scanf("%d",&number); if(number<=0||number>6) { printf("输入错误,请重新输入。\n"); scanf("%d",&number); } n=number; for(i=1;i<=4;i++,n++) { d=1; for(a=n*100;a<=n*100+99;a++) { b=a%100/10; c=a%10; if((b==number||b==number+1||b==number+2||b==number+3)&&(c==number||c==number+1||c==number+2||c==number+3)&&b!=c&&c!=n&&b!=n) { printf("%d",a); if(d!=6) printf(" "); d++; } } printf("\n"); } return 0; }
实验4.:万年历
#include<stdio.h> #include<stdlib.h> int main() { int year,year1,month,sum,sum1,sum2,i,n,zong,h; printf("请输入年份个月份,用空格分开。\n"); scanf("%d%d",&year,&month); while(year<1900||month<1||month>12) { printf("数据错误,请重新输入。\n"); scanf("%d%d",&year,&month); } sum1=0; sum2=0; year1=year; for(year1=year1-1;year1>=1900;year1--) { if(year1%4==0&&year1%100!=0||year1%400==0) { sum1=sum1+366; } else { sum1=sum1+365; } } for(i=1;i<month;i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) { sum2=sum2+31; } else if(i==4||i==6||i==9||i==11) { sum2=sum2+30; } else if(i==2) { if(year%4==0&&year%100!=0||year%400==0) { sum2=sum2+29; } else { sum2=sum2+28; } } } sum=sum1+sum2; system("cls"); printf("%d年%d月\n",year,month); printf("星期日:星期一:星期二:星期三:星期四:星期五:星期六\n"); switch(sum%7) { /*1*/ case 0:printf("\t");h=2;break; case 1:printf("\t\t");h=3;break; case 2:printf("\t\t\t");h=4;break; case 3:printf("\t\t\t\t");h=5;break; case 4:printf("\t\t\t\t\t");h=6;break; case 5:printf("\t\t\t\t\t\t");h=7;break; case 6:h=1;break; } if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { zong=31; } else if(month==4||month==6||month==9||month==11) { zong=30; } else if(month==2) { if(year%4==0&&year%100!=0||year%400==0) { zong=29; } else { zong=28; } } for(n=1;n<=zong;n++,h++) { printf(" %2d ",n); if(h%7==0) { printf("\n"); } } 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++) for(c=0;c<=9;c++) { 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; } 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(c==a+b&&A+B+C==12&&a!=b) { printf("%d+%d=%d\n",a,b,c); } } return 0; }
知识点总结:
1.选择结构和循环结构中条件非零便是真。
2.用循环求倒序数:
sum=0;
while(a>0)
{
b=a%10;
sum=sum*10+b;
a=a/10;
}
3. 实数比较不用直接用!=或==,要用做差如if(fabs(a-1.2)<1e-6) 。
4.平方根函数:sqrt();清缓存函数:fflush(stdin);清屏函数:system("cls");
5.表达式1?表达式2:表达式3 (如果表达式一成立,执行表达式二,否则执行表达式三)
6.循环体,要找适合的情况,根据特点选择使用哪个更适合,在循环体中分清break,和continue的区别。
7.求阶乘时因数值可能过大,应定义为实数型,输出格式:%.0f 。
8.对一个数去掉最后一位/10,得到最后一位%10;
9.输入一串字符的经典用法:while((ch=getchar())!=‘\n‘);
试验总结:
1.循环嵌套时一定注意变量的使用,尽量不要在两个循环体中使用同一个变量,或者注意初赋值。
2.出现了优先级问题时,适当使用()解决。
3.一定不能将等于写成赋值。
第六次作业