第六次作业

一、实验内容   

1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。

1.1 代码:

 

#include <stdio.h>
int main ()
{
	int a,b,c,d,e,i;
	for(i=1000;i<=9999;i++)
	{
		a=i/1000;
		b=i%1000/100;
		c=i%100/10;
		d=i%10;
		e=d*1000+c*100+b*10+a;
		if(i==4*e)
		{
			printf("%d\n",i);
		}
	}
	return 0;
}

 

1.2 程序运行结果:

 

2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。

  样例: 输入123,    输出 6     June

            输入12345,输出 15   ***

2.1 代码:

#include <stdio.h>
int main ()
{
	long a,b,c,sum=0;
	printf("请输入一个多位数字\n");
	scanf("%ld",&a);
	if(a<9)
	{
		printf("error\n");
	}
	else
	{
		while(a>0)
		{
			b=a%10;
			a=a/10;
			sum=sum+b;
		}
		printf("%d\n",sum);
		switch(sum)
		{
			case 1: printf("January\n");break;
			case 2: printf("February\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;
			default : printf("***\n");
		}
	}
	return 0;
}

2.2 程序运行结果:

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

3.1 代码:

 

#include <stdio.h>
int main()
{
	int A,i,j,k,a,sum=0;
	printf("请输入一个不超过6的正整数\n");
	scanf("%d",&A);
	if(A<0||A>6)
	{
		printf("error");
	}
	else
	{
		for(i=A;i<=A+3;i++)
		{
			for(j=A;j<=A+3;j++)
			{
				for(k=A;k<=A+3;k++)
				{
					if(i!=j&&j!=k&&k!=i)
					{
						sum=i*100+j*10+k;
						a++;
						printf("%4d",sum);
						if(a%6==0)
						{
							printf("\n");
						}
					}
				}
			}
		}
	}
	return 0;
}

 

3.2 程序运行结果:

4.猜拳游戏

4.1 代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
	int player,computer,b=1,n,i=0,j=0,k=0;
	char a,y;
while (1)
	{
			srand(time(NULL));
			computer=rand()%3+1;
			printf("***猜拳游戏***\n");
			printf("第%d次对决,请做出你的选择:\n 1.石头 2.剪刀 3.布\n",b);
			scanf("%d",&player);
		while (player<1||player>3)
		{
			printf("输入错误,请重输\n");
			scanf("%d",&player);
		} 
		
		{
			if(computer==1) 
			{
				printf("电脑出了石头\n");
				switch(player)
				{
					case 1:printf("你出了石头\n 平局\n");i++;break;
					case 2:printf("你出了剪刀\n 你输了\n");j++;break;
					case 3:printf("你出了布\n 你赢了\n");k++;break;
				}
			}
			if(computer==2) 
			{
				printf("电脑出了剪刀\n");
				switch(player)
				{
					case 1:printf("你出了石头\n 你赢了\n");k++;break;
					case 2:printf("你出了剪刀\n 平局\n");i++;break;
					case 3:printf("你出了布\n 你输了\n");j++;break;
				}
			}
			if(computer==3) 
			{
				printf("电脑出了布\n");
				switch(player)
				{
					case 1:printf("你出了石头\n 你输了\n");j++;break;
					case 2:printf("你出了剪刀\n 你赢了\n");k++;break;
					case 3:printf("你出了布\n 平局\n");i++;break;
				}
			}
				printf("是否继续?按n退出,按其他键继续 \n");
				scanf(" %c",&a);
				if (a=='n')
				break;
		} 
				b++; 
	}
		if(j>k)
			{
				printf("共对战了%d局,你赢了%d局,电脑赢了%d局,打平%d局\n",b,k,j,i);
				printf("你输了\n");
			}
		else if(j<k)
			{
				printf("共对战了%d局,你赢了%d局,电脑赢了%d局,打平%d局\n",b,k,j,i);
				printf("你赢了\n");
			}
		else
			{
				printf("共对战了%d局,你赢了%d局,电脑赢了%d局,打平%d局\n",b,k,j,i);
				printf("平局\n");
			}
		exit (0);
		return 0;
}

4.2 程序运行结果:

 

附加题

  有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的拼法如图所示: 

 

二、知识点总结

1.switch语句后要有相应的break.

2.for循环和while循环要分开,注意两者的使用条件

 三、实验总结

1.注意运行的是否为副本,副本运行出的结果与源程序是不一样的。

2.记得要对程序进行合法性验证,给出错误数据的解决方法

3.注意穷举法的应用.

4.数据对齐时要注意空位.

 

 

 

posted on 2016-11-13 21:37  计科-XJ  阅读(351)  评论(1编辑  收藏  举报