第七次作业
1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include <stdio.h> int main() { int a,c; for(a=1000;a<=9999;a++) { c=a%10*1000+(a/10)%10*100+(a%1000)/100*10+a/1000; if(a==4*c) { printf("%d\n",a); } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include <stdio.h> int main() { int a,sum=0,x,y; printf("请输入一个数字\n"); scanf("%d",&a); while(a>0) { x=a/10; y=a%10; sum=sum+y; a=x; } if(sum<=12&&sum>0) { switch(sum) { case 1 : printf("January\n"); 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; } } else { printf("\n***"); } 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,e,f; printf("请输入一个不大于6的正整数\n"); scanf("%d",&a); system("CLS"); printf("输入的数字为%d\n",a); if(a>6||a<0) { printf("输入的数字有误\n"); } else { for(b=a;b<=(a+3);b++) /*百位数定义*/ { for(c=a;c<=(a+3);c++) /*十位定义*/ { for(d=a;d<=(a+3);d++) /*个位定义*/ { if(b!=c&&c!=d&&b!=d) { e=b*100+c*10+d; printf("%d ",e); f++; if(f%6==0) { printf("\n"); } } } } } } return 0; }
万年历
#include <stdio.h> int main() { int year,month,day,a,b,c,sum,m,m2,sum2,q,t,x; printf("请输入年月,中间用空格分开\n"); while(a!=1) { scanf("%d%d",&year,&month); if((month<1||month>12)||year<1900) { printf("输入的时间有误,请重新输入\n"); continue; } else { break; } } system("CLS"); /*清屏*/ day=0; /*1900年到输入年数的天数*/ for(b=1900;b<=year;b++) { if((year%4==0&&year%100!=0)||(year%400==0)) /*闰年判断方法*/ { day=day+366; } else { day=day+365; } } sum2=0; /*多余月份天数,m代表月份2*/ for(m=1;m<=month-1;m++) { if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) { sum2=sum2+31; } else if(m==4||m==6||m==9||m==11) { sum2=sum2+30; } else if((year%4==0&&year%100!=0)||(year%400==0)) /*闰年二月份天数不同*/ { sum2=sum2+29; } else { sum2=sum2+28; } } sum=day+sum2; /*所有的天数*/ q=sum%7; /*计算月份中几号是星期几*/ printf("%d年%d月\n",year,m); if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) /*大月份天数*/ { m2=31; /*m2为月份天数*/ } else if(m==4||m==6||m==9||m==11) { m2=30; } else if(((year%4==0&&year%100!=0)||(year%400==0))&&month==2) /*闰年二月份天数*/ { m2=29; } else { m2=28; } printf("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n"); if(q==6) { for(t=1;t<=m2;t++) { printf("%d\t",t); if((q+t+1)%7==0) { printf("\n"); } } } else { for(x=0;x<=q;x++) { printf("\t"); } for(t=1;t<=m2;t++) { printf("%d\t",t); if((q+t+1)%7==0) { printf("\n"); } } } return 0; }
1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
#include <stdio.h> int isprime (int x); int main() { int d,f,k; for(k=2;k<=1000;k++) { if(isprime(k)==0) { printf("%03d ",k); f++; if(f%10==0) { printf("\n"); } } } printf("\n一共%d个素数",f); } int isprime (int x) { int y; for(y=2;y<=x-1;y++) { if(x%y==0) { return 1; } } return 0; }
2.求两个正整数的最大公约数和最小公倍数。用一个函数gcd(int a,int b)求最大公约数,另一个函数lcm(int a,int b)根据求出的最大公约数求最小公倍数。
#include <stdio.h> int gcd(int a,int b); /*最大公约数*/ int lcm(int a,int b); /*最小公倍数*/ int main() { int a,s,max,min; printf("请输入两个正整数\n"); scanf("%d %d",&a,&s); min=lcm(a,s); max=gcd(a,s); printf("最小公倍数为%d最大公约数为%d\n",min,max); return 0; } int gcd(int a,int b) { int d,f; for(d=1;d<=a&&d<=b;d++) { if(a%d==0&&b%d==0) { f=d; } } return f; } int lcm(int a,int b) { int g; g=a*b/gcd(a,b); return g; }
3.编写一个函数fun(double x)求表达式x2-5x+4的值,x作为参数传给函数。在主函数中调用该函数求下列式子的值:
y1= 22-5*2+4
y2= (x+15)2-5*(x+15)+4
y3= sin2x-5*sinx+4
求y3用数学函数 sin(x) 头文件math.h
求解y2和y3时需要输入x的值。
样例:
y1=-2, x=0.5时,y2=166.75,y3=1.832721
#include <stdio.h> #include <math.h> double fun(double x); int main() { float x,y1,y2,y3; printf("请输入x\n"); scanf("%f",&x); y1=fun(2); y2=fun(x+15); y3=fun(sin(x)); printf("%.2f\t%.3f\t%.3f",y1,y2,y3); return 0; } double fun(double x) { double y; y=x*x-5*x+4; return y; }
4.用函数实现:火柴棍等式问题
#include <stdio.h> int gun(int h); int main() { int a,b,d,f,g,h; for(a=0;a<=9;a++) { for(b=0;b<=9;b++) { for(d=0;d<=9;d++) { if(a+b==d&&gun(a)+gun(b)+gun(d)==12) { printf("%d+%d=%d\n",a,b,d); } } } } return 0; } int gun(int h) { int f; switch(h) { case 0: case 6: case 9:f=6;break; case 2: case 3: case 5:f=5;break; case 1:f=2;break; case 4:f=4;break; case 7:f=3;break; case 8:f=7;break; } return f; }
知识点总结
1、必要时可以用死循环,再用break语句跳出
2、“system(“CLS”)”代表:清屏
3、程序较长时用“/*....*/”标示
4、注意中间值的使用
5、函数不能镶嵌
6、一般情况下函数中不能出现输出语句
7、变量名与函数名不能相同
8、函数后面一定有括号
实验总结
1、程序不能直接写,应该有大概运行思路
2、嵌套语句的使用
3、注意用标示,防止长代码忘记代码目的。
4、返回值类型,一般默认为int 型