软件开发与创新实验2
原始代码来源: https://blog.csdn.net/vc333/article/details/125919082
原始代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
int i,j,myNum[7],count=0;
int lotteryNum[7];
for(i = 0; i < 7; i++)
{
lotteryNum[i] = rand() % 35 + 1;
for(j = 0; j < i; j++)
{
if(lotteryNum[i] == lotteryNum[j])
{
i--;
break;
}
}
}
for(i = 0; i < 7; i++)
scanf("%d",&myNum[i]);
for(i = 0; i < 7; i++)
{
for(j = 0; j < 7; j++)
{
if(lotteryNum[i] == myNum[j])
{
count++;
}
}
}
printf("count is %d\n",count);
switch(count)
{
case 7:
printf("特等奖!!\n");
break;
case 6:
printf("一等奖!!\n");
break;
case 5:
printf("二等奖!!\n");
break;
case 4:
printf("三等奖!!\n");
break;
default:
printf("重在参与!!\n");
}
printf("中奖号码:");
for(i = 0; i < 7; i++)
printf("%d ", lotteryNum[i]);
printf("\n");
printf("购买号码:");
for(i = 0; i < 7; i++)
printf("%d ", myNum[i]);
printf("\n");
printf("中奖个数%d个!!\n",count);
return 0;
}
在阅读后,我发现以下几个问题:
(1)中奖号码没有每次都进行随机
(2)用户输入部分没有引导与输入检测,输入字符,字母,超出选择范围或相同的数字没有报错
(3)如果用户输入同一个数字多次,且正好这个数字为中奖号码之一,count会重复计算,导致获得比实际更高的奖项,例如用户输入1 1 1 1 1 1 1,中奖号码为1 3 5 7 9 11 13,在实际情况下应该输出“重在参与”,但程序会输出“特等奖”
修改方案:
(1)加入随机数种子,保证每次中奖号码不同
(2)加入输入引导
(3)加入输入检测,在输入非法字符与重复字符时报错并结束程序
修改后代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
int i,j,myNum[7],count=0;
int lotteryNum[7];
srand((unsigned)time(NULL));
for(i = 0; i < 7; i++)
{
lotteryNum[i] = rand() % 35 + 1;
for(j = 0; j < i; j++)
{
if(lotteryNum[i] == lotteryNum[j])
{
i--;
break;
}
}
}
printf("请输入1~35内7个不同数字:");
for(i = 0; i < 7; i++)
scanf("%d",&myNum[i]);
for(i = 0; i < 7; i++)
{
for(j=0;j<i;j++)
{
if(myNum[i] == myNum[j])
{
printf("输入错误!");
return 0;
}
}
}
for(i = 0; i < 7; i++)
{
if(myNum[i]>35||myNum[i]<1)
{
printf("输入错误!");
return 0;
}
}
for(i = 0; i < 7; i++)
{
for(j = 0; j < 7; j++)
{
if(lotteryNum[i] == myNum[j])
{
count++;
}
}
}
printf("count is %d\n",count);
switch(count)
{
case 7:
printf("特等奖!!\n");
break;
case 6:
printf("一等奖!!\n");
break;
case 5:
printf("二等奖!!\n");
break;
case 4:
printf("三等奖!!\n");
break;
default:
printf("重在参与!!\n");
}
printf("中奖号码:");
for(i = 0; i < 7; i++)
printf("%d ", lotteryNum[i]);
printf("\n");
printf("购买号码:");
for(i = 0; i < 7; i++)
printf("%d ", myNum[i]);
printf("\n");
printf("中奖个数%d个!!\n",count);
return 0;
}
经过测试后,已解决上述发现问题。
浙公网安备 33010602011771号