| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1422 人关注过本帖
标题:求指教~ 两个没有很大差别的程序 一个可以运行,另一个就中断
只看楼主 加入收藏
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
程序代码:
int main()
{    
    char ch = '+';
    
    switch (ch)
    {
        case '+':
            printf("+\n");
            break;
        case '-':
            printf("-\n");
            break;
    }
    return 0;
}
2016-06-21 15:35
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 11楼 grmmylbs
是这样的 现在要求随机产生运算法则“+”“-”“*”“/”, 我想用0~4之间随机产生的数字来代替 运算法则 怎么办?
2016-06-21 15:39
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
昨天不是写给你代码了么
2016-06-21 15:42
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 13楼 grmmylbs
我不会用enum 那个  想用一个简单点的,因为作业老师可能当面问,没学过的最好少用。。。
2016-06-21 15:48
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
不用enum直接替换成0,1,2,3就行了。
2016-06-21 15:52
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 15楼 grmmylbs
那您帮我重新写一下那一段好吗?
2016-06-21 15:55
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:5 
回复 16楼 惧惧
是要弄计算器一类的吗?我这个有之前很早写的一段程序,给我家一年级儿子平时练习口算用的。你参考下,里面有随机生成四则运算的部分代码。程序其他地方有些现在看来不是很合适或者不是最优化的地方就先不管了,权当练习用的。
程序代码:
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <time.h> 
#include <windows.h>
// #define NUM 20                      //预先设置题目总数 
int main() 
{ 
    int i=0;
    int j;                         //控制出题的次数 
    int result=0;                  //计算题结果 
    int result1;                   //输入人计算的结果 
    int score;                    //最终得分 
    int a,b;                      //要随机运算的两个数值 
    int mode;                     //随机运算符 
    int t;                        //用来交换a与b的大小位置 
    int ag;                       //用来控制再次测验 
    int n;                     //显示倒计时
    int score1;                  //单题整分数     
    int num=0;                    //题目总数    
    int right1=0;                //记录对题数量,判断最终得分等级 
    int deficult=0;
//  score1=100/NUM;
    again:system("cls");   //again 用来输入总数出错时候再次输入,与goto一起用 
    fflush(stdin);         //清空缓存区数据
    printf("请输入测验题目的难度:\n\n");   //家长自主选择测试数量 
    printf("难度1:请输入10:测验10以内两数的加减法!\n\n");
    printf("难度2:请输入20:测验20以内两数的加减法!\n\n");
    printf("否则难度选择错误,请重新输入难度选择:10 或者 20.\n\n");
    scanf("%d",&deficult); 
    printf("\n");
    if(deficult!=10&&deficult!=20)        
        goto again;
    if(deficult==10)
        {
        system("cls");
        printf("已选择难度1,将进行10以内两数加减法测验。\n\n");
        }
    if(deficult==20)
        {
        system("cls");
        printf("已选择难度2,将进行20以内两数加减法测验。\n\n");
        }
    printf("请输入需要测验题目的总数:\n\n");   //家长自主选择测试数量 
    printf("请输入1-100之间的整数,否则出错,需重新输入!\n\n");
    scanf("%d",&num);  
    printf("\n");
    if(num>0&&num<=100)
    {
        while(num>0&&num<=100)
        {    
        score1=100/num;            //计算单题分数 
        {
        score=0;                           //再次测验初始得分归零
        right1=0;                           //再次测验初始对题数量归零    
        system("cls");                     //清屏 
    for(n=5;n>=0;n--)                    //打印5秒倒计时 
    {
        system("cls");              //清屏 
        if(100%num!=0)
            {
                printf("单题分数有小数,故单题分数取整数分计算.\n\n");
            }
            //    printf("每轮测试共%d题,每题%d分,总分100分,加油吧,孩子们!\n\n",NUM,score1);
            printf("每轮测试共%d题,每题%d分,总分100分,加油吧,孩子们!\n\n",num,score1);
            printf("小朋友准备好了吗?5秒之后进入答题时间!加油!\n\n");
            printf("\t%d",n);
            _sleep(1000);               //暂停1秒 
            
     }
        system("cls");                     //清屏
        printf("答题开始,请作答:\n\n");

 //        for(j=1;j<=NUM;j++)          //做20题
        for(j=1;j<=num;j++)          //做家长输入题目总数的题 
        {    
  //         system("cls");              //清屏  
             srand((unsigned)time(NULL));//用当前时间,设置种子 
             if(deficult==10)
             {
                 a = rand() % 10+1;  //生成一个0~20之间的随机数
                 b = rand() % 10+1;  //生成一个0~20之间的随机数    
              }
              if(deficult==20)
              {
                 a = 2*(rand() % 10+1);  //生成一个0~20之间的随机数
                 b = 2*(rand() % 10+1);  //生成一个0~20之间的随机数    
               }
     //  mode = rand() % 4;  //生成一个0~3之间的随机数,代表运算符,可四则运算 
         mode = rand() % 2;  //生成一个0~1之间的随机数,代表运算符,只能加减运算
         printf("第%d题:",j); 
         if(a>=b&&mode!=3)
             {
                 printf("%d ", a);   //打印算式
                 switch(mode)      //确定运算符
                {  
                case 0:   
                printf("+ ");   
                result= a + b;   //选择了+运算的正确答案
                break;  
                case 1:    
                printf("- ");   
                result= a - b;   //选择了-运算的正确答案
                break;  
                case 2:   
                printf("* ");   
                result= a * b;   //选择了*运算的正确答案
                break;  
                case 3:   
                printf("÷ ");   
                result= a / b;   //选择了/运算的正确答案
                break;  
                } 
                    printf("%d = ?\t请认真计算后输入答案,Enter确认\n\n", b); 
             }
          
          if(a>=b&&mode==3&&a%b==0)  //补充过滤小数运算后剩下的整数除法 
             {
                 printf("%d ", a);   //打印算式
                 switch(mode)        //确定运算符
                {  
                case 0:   
                printf("+ ");   
                result= a + b;   //选择了+运算的正确答案
                break;  
                case 1:    
                printf("- ");   
                result= a - b;   //选择了-运算的正确答案
                break;  
                case 2:   
                printf("* ");   
                result= a * b;   //选择了*运算的正确答案
                break;  
                case 3:   
                printf("÷ ");   
                result= a / b;   //选择了/运算的正确答案
                break;  
                } 
                    printf("%d = ?\t请认真计算后输入答案,Enter确认\n\n", b); 
             }
           
           if(mode==3&&a%b!=0)              //过滤小数运算 
             {
    //             printf("%d\n",a);
    //             printf("%d\n",b);     //查看出现小数运算时候的a、b值    
                a=b;
                printf("%d ", a);   //打印算式
                 switch(mode)         //确定运算符
                {  
                case 0:   
                printf("+ ");   
                result= a + b;   //选择了+运算的正确答案
                break;  
                case 1:    
                printf("- ");   
                result= a - b;   //选择了-运算的正确答案
                break;  
                case 2:   
                printf("* ");   
                result= a * b;   //选择了*运算的正确答案
                break;  
                case 3:   
                printf("÷ ");   
                result= a / b;   //选择了/运算的正确答案
                break;  
                } 
                    printf("%d = ?\t请认真计算后输入答案,Enter确认\n\n", b); 
             }
           
           if(a<b&&mode==1)          //过滤出现负数运算 
          { 
//            printf("%d\n",a);
//            printf("%d\n",b);      //查看此a<b然后交换运算是否有效执行 
              t=a;
              a=b;
              b=t;
              printf("%d ", a);   //打印算式
            switch(mode) //确定运算符
            {  
                case 0:   
                printf("+ ");   
                result= a + b;   //选择了+运算的正确答案
                break;  
                case 1:    
                printf("- ");   
                result= a - b;   //选择了-运算的正确答案
                break;  
                case 2:   
                printf("* ");   
                result= a * b;   //选择了*运算的正确答案
                break;  
                case 3:   
                printf("÷ ");   
                result= a / b;   //选择了/运算的正确答案
                break;  
                } 
                   printf("%d = ?\t请认真计算后输入答案,Enter确认\n\n", b); 
          }
         if(a<b&&mode!=1)              //允许小数加、乘、除以大数 
              {
                 printf("%d ", a);   //打印算式
                 switch(mode)       //确定运算符
                {  
                case 0:   
                printf("+ ");   
                result= a + b;   //选择了+运算的正确答案
                break;  
                case 1:    
                printf("- ");   
                result= a - b;   //选择了-运算的正确答案
                break;  
                case 2:   
                printf("* ");   
                result= a * b;   //选择了*运算的正确答案
                break;  
                case 3:   
                printf("÷ ");   
                result= a / b;   //选择了/运算的正确答案
                break;  
                  } 
                    printf("%d = ?\t请认真计算后输入答案,Enter确认\n\n", b); 
             }
//         if(mode==3&&b!=0&&a!=b)
//             printf("注意:本题涉及小数运算,暂请输入商的整数部分即可,不用四舍五入\n\n");
         if(mode==3&&b==0)
           {
               printf("注意:除数生成0,出错,Enter自动重新出题!");
            break;
           }
         printf("答:");
         scanf("%d", &result1); //输入答案
         fflush(stdin);         //清空缓存区数据 
         printf("\n");  
         if(result==result1) //与正确答案一致
        {   
            score+= score1;  //加分
            printf("Right   √\n\n");
        //    if(j<NUM)
            if(j<num)
            {
             right1++;
             printf("回答正确,加%d分,此时得分:%d 分,请继续解答下一题:\n\n",score1,score); 
             }
        //    if(j==NUM)        
            if(j==num)
            {
             right1++;
             if(right1==num)
             printf("回答正确,加%d分,测验完毕最后得分:100 分!\n\n",score1);    
             else
             printf("回答正确,加%d分,测验完毕最后得分:%d 分!\n\n",score1,score);
             }
        } 
        else 
        {  
            printf("Wrong    X \n\n");  
        //    if(j<NUM)
            if(j<num)
            printf("回答错误,正确答案为: %d  此时得分:%d 分,加油别灰心,继续回答下一题吧!\n\n",result,score);
        //     if(j==NUM)
             if(j==num)
             printf("回答错误,正确答案为: %d  测验完毕最后得分:%d 分!\n\n",result,score);
         }
        }                        // for循环的 
           printf("本次测验一共%d题,答对%d题。",num,right1);
        if(score<=70)
               printf("-_-|| 本次得分C等,奖励  ★  \n\n小朋友要更加努力学习哦\n\n");
        if(score>=80&&score<90)
               printf("^_^ 本次得分B等,奖励  ★★  \n\n小朋友要继续加油哦\n\n");
        if(score>=90)
               printf("本次得分A等,奖励  ★★★ \n\n小朋友要继续保持良好的学习习惯哦\n\n");
          printf("请输入1后Enter再次运算,或非1任意键按Enter退出\n\n");
         scanf("%d",&ag);                                        
         fflush(stdin);         //清空缓存区数据
         if(ag==1) goto again;
         else    break;
               } 
        }   
    }                 //第一个if的大括号 
        else
            goto again;
        return 0;
    }
        


[此贴子已经被作者于2016-6-21 16:11编辑过]

2016-06-21 16:09
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 17楼 wanglianyi1
啊 蟹蟹~~ 让我慢慢消化一下吧。。
2016-06-21 16:14
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 18楼 惧惧
不建议用goto这个跳转,程序长的时候不容易读。还有fflush(stdin);这个可移植性不好也不建议用。
其实产生两个数范围内的随机数有公式的:
如果要产生 m<=r<=n这个范围内的随机数r,可以:srand((unsigned)time(NULL)); r=rand()%(n-m+1)+m;
2016-06-21 16:21
快速回复:求指教~ 两个没有很大差别的程序 一个可以运行,另一个就中断
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028476 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved