软件开发与创新实验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;

}     

经过测试后,已解决上述发现问题。

posted @ 2023-03-05 18:06  鸽某  阅读(57)  评论(0)    收藏  举报