实验6
1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include <stdio.h> int main() { inta,b,c,d,i,sum=0; for(i=1000;i<=9999;i++) { a=i/1000; b=(i%1000)/100; c=(i%100)/10; d=i%10; if(a!=b&&b!=c&&c!=d) { sum=d*1000+c*100+b*10+a; } if(i==4*sum) { printf("%d",i); } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include <stdio.h> int main() { int a,b,sum=0; printf("输入一个多位数\n"); scanf("%d",&a); if(a<=9) { printf("数据错误\n"); } else { while(a>0) { b=a; sum=sum+b%10; a=b/10; } } if(sum<=12) { switch(sum) { case 1 : printf("january\n");break; case 2 : printf("februay\n");break; case 3 : printf("march\n");break; case 4 : printf("april\n");break; case 5 : printf("may\n");break; case 6 : printf("june\n");break; case 7 : printf("july\n");break; case 8 : printf("august\n");break; case 9 : printf("september\n");break; case 10 : printf("october\n");break; case 11 : printf("november\n");break; case 12 : printf("december\n");break; } } else { 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,e=0,A; printf("给定不超过6的正整数A:\n"); scanf("%d",&A); if(A<=0||A>6) { printf("数据错误,请重新输入:\n"); scanf("%d",&A); } else { for(a=A;a<A+4;a++) { for(b=A;b<A+4;b++) { for(c=A;c<A+4;c++) { if(a!=b&&b!=c&&c!=a) { d=a*100+b*10+c*1; printf("%d",d); e++; if(e%6==0) { printf("\n"); } else if(e%6!=0) { printf(" "); } } } } } } return 0; }
综合小项目:猜拳小游戏
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a,b,c=0,d=0,e=0,f=1; char x; srand(time(NULL)); do { a=rand()%3+1; printf("第%d次对决,请选择:1:石头,2:剪刀,3:布\n",f); scanf("%d",&b); if(a<0||a>3) { printf("数据错误,重新输入\n"); } else if(a==b) { c++; f++; printf("平局\n"); } else if(a==1&&b==2||a==2&&b==3||a==3&&b==1) { d++; f++; printf("你输了\n"); } else if(a==1&&b==3||a==2&&b==1||a==3&&b==2) { e++; f++; printf("你赢了\n"); } printf("是否继续下一轮?Y(y)orN(n)\n"); scanf(" %c",&x); } while(x=='Y'||x=='y'); printf("对决次数%d,平局%d次,电脑得分%d,用户得分%d\n",f-1,c,d,e); return 0; }
二:知识点总结
顺序结构
1:使用变量要先声明后使用,格式化输入函数scanf,由%和格式字符组成,对变量取地址符
2:scanf函数中的“格式控制串”,后面应当是变量地址,而不是变量名
3:赋值运算符不表示相等
4:在程序语句中使用较为复杂的语句,尽量使用括号来保证准确的计算顺序
5:实型数据中的 float类型的用%f,double 用%lf
选择结构
1:if..else语句,if...else if,在判断时还要注意运算符的优先级,
2:实现if else的正确匹配要加大括号,单独出现时叫做空语句,程序执行不产生任何动作 if()后面不加;
3:switch case break语句误丢break,case后面跟的一定是常量,case后面误丢空格
4:字符型数据要用单引号括起来,字符型数据的输入和输出,putchar()输出函数,getchar()输入函数
5:随机函数rand(),利用函数time()获得系统时间,用系统时间做随机种子
循环结构
1:for语句,while语句,do while语句
2:for(赋初值;循环条件;循环变量增值)
3:求和时sum的初始值为0,求乘时sum的初值为1
4:无限循环 while(1)
{
循环体
}
5:break语句结束整个循环过程
6:continue语句只能用于循环语句
7:学会使用while((ch=getchar())!='\n')
三:实验总结
1:sum的值搞错误,未给sum赋初值
2:do...while语句的循环条件没有搞清楚,导致运行出错