注册 登录
编程论坛 C++教室

求指导!!求指导!!

约束小朋友 发布于 2013-05-28 15:42, 965 次点击
本人初次写随机函数,可是不知道为什么运行不了
又不能找出问题所在
望指出问题所在
和指导我如何修改问题
以下是本人写的程序


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    srand((int)time(NULL));
   int i,j,k,sum,shuru,r,f,answer;
   i=rand()%100;
   j=rand()%100;
   r=0;
   f=0;
    do{
       for(k=0;k<=10;k++){
       if(i%k==0)
          printf("%d+%d=",i,j);
      else if(i%k==1)
          printf("%d*%d=",i,j);
      else if(i%k==2)
          printf("%d/%d=",i,j);
      else
          printf("%d/%d=",i,j);
   }
   scanf("%d",&shuru);
  
   if(sum==i+j||sum==i*j||sum==i/j||sum==i-j)
      {
       printf("You are right\n");
       r++;
   }
   else  if(sum!=i+j||sum!=i*j||sum!=i/j||sum!=i-j)
      {
       printf("You are fault\n");
       f++;
   }
       printf("Are you contine?If you want to over please click the 0\nanswer:");
       scanf("%d",&answer);
      
         
      }while(answer==0);

   if(answer==0)
      {
          printf("你答对的题数为:%d\n你打错的题数为:%d\n",r,f);  
 }
}
11 回复
#2
ydown2013-05-28 16:15
sum未赋值.
k的初值为0,不能作为除数!
程序代码:
#include<iostream>
#include <ctime>
using namespace std;
void main()
{
    srand((int)time(NULL));
    int i,j,k,shuru,r,f,answer;

    r=0;
    f=0;
    do{
        i=rand()%100;
        j=rand()%100;
        k=rand()%4;
        switch(k)
        {
            case 0:cout<<i<<"+"<<j<<"=";break;
            case 1:cout<<i<<"-"<<j<<"=";break;
            case 2:cout<<i<<"*"<<j<<"=";break;
            case 3:cout<<i<<"/"<<j<<"=";break;
        }
        cin>>shuru;

        if(shuru==i+j||shuru==i*j||shuru==i/j||shuru==i-j)
        {
            cout<<"You are right\n";
            r++;
        }
        else
        {
            cout<<"You are fault\n";
            f++;
        }
        cout<<"Are you contine?If you want to over please click the 0\nanswer:";
        cin>>answer;
    }while(answer==0);
    cout<<"你答对的题数为:"<<r<<endl;
    cout<<"你打错的题数为:"<<f<<endl;
}

LZ将C++输入输出cout和cin替换成C的scanf和printf.
#include用你之前的.


[ 本帖最后由 ydown 于 2013-5-28 17:09 编辑 ]
#3
约束小朋友2013-05-28 20:21
回复 2楼 ydown
感谢之极
终于知道自己错在哪里了
#4
约束小朋友2013-05-28 20:42
回复 2楼 ydown
我按照你之前说的进行修改调整了
可是很奇怪的是,当我按下继续的指令之后出来的算式跟之前的算式是一模一样的
我想每次我按下继续指令时它出来的算式是不一样的
要怎么改才能达到这个要求呢?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    srand((int)time(NULL));
   int i,j,shuru,r,f,answer;
   i=rand()%100;
   j=rand()%100;
   r=0;
   f=0;
   
  
   do{
       {
       if(i%3==0)
          printf("%d+%d=",i,j);
      else if(i%3==1)
          printf("%d*%d=",i,j);
      else if(i%3==2)
          printf("%d/%d=",i,j);
      else
          printf("%d-%d=",i,j);
   }
   scanf("%d",&shuru);
  
   if(shuru==i+j||shuru==i*j||shuru==i/j||shuru==i-j)
      {
       printf("You are right\n");
       r++;
   }
   else  
      {
       printf("You are fault\n");
       f++;
   }
       printf("Are you contine?If you want to over please click the 0\nanswer:");
       scanf("%d",&answer);
      
         
      }while(answer!=0);

   if(answer==0)
      {
          printf("你答对的题数为:%d\n你打错的题数为:%d\n",r,f);  
 }
}
#5
ydown2013-05-28 20:50
把随机的,放入do循环里,让i,j变化。
#6
约束小朋友2013-05-28 21:04
回复 5楼 ydown
有点不懂的是
最后统计题数对错的那个运行出来的结果不对
那要怎么改
#7
约束小朋友2013-05-28 21:18
回复 5楼 ydown
所有问题都解决了
真心感谢你
#8
ydown2013-05-28 21:32
你的算法有很严重的问题,上班的时候没仔细看你的判断部分,刚刚检查自己写的就发现了,明天我去改改,你自己也去检查下,发现问题才能更好解决问题。需要添加k的状态,要不然只要算i+j,系统就会判正确。

[ 本帖最后由 ydown 于 2013-5-28 21:37 编辑 ]
#9
ydown2013-05-28 22:13
程序代码:
#include<iostream>
#include <ctime>
using namespace std;
void main()
{
    srand((int)time(NULL));
    int i,j,k,shuru,r,f,answer;

    r=0;
    f=0;
    do{
        i=rand()%100;
        j=rand()%100;
        k=rand()%4;
        switch(k)
        {
            case 0:cout<<i<<"+"<<j<<"=";break;
            case 1:cout<<i<<"-"<<j<<"=";break;
            case 2:cout<<i<<"*"<<j<<"=";break;
            case 3:cout<<i<<"/"<<j<<"=";break;
        }
        cin>>shuru;

        if((k==0 && shuru==i+j)||(k==1 && shuru==i-j)||(k==2 && shuru==i*j)||(k==3 && shuru==i/j))   //判断正确算法修改处.

        
//之前这里的算法有严重的问题,无论题目是i*j,还是i-j,只要算对i+j系统也会判断正确的.现在已经修正并且调试无误了.

        {
            cout<<"You are right\n";
            r++;
        }
        else
        {
            cout<<"You are fault\n";
            f++;
        }
        cout<<"Are you contine?If you want to over please click the 0\nanswer:";
        cin>>answer;
    }while(answer==0);
    cout<<"你答对的题数为:"<<r<<endl;
    cout<<"你打错的题数为:"<<f<<endl;
}
#10
约束小朋友2013-05-28 22:22
回复 9楼 ydown
为什么判断哪里要加上K的值呢??我不懂
k的作用又是什么?
我都快抓狂了,写这个写了好几天了
我把程序现在是这样的
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    srand((int)time(NULL));
   int i,j,shuru,r,f,answer;
   r=0;
   f=0;
   do{
   i=rand()%100;
   j=rand()%100;
   
       {
       if(i%3==0)
          printf("%d+%d=",i,j);
      else if(i%3==1)
          printf("%d*%d=",i,j);
      else if(i%3==2)
          printf("%d/%d=",i,j);
      else
          printf("%d-%d=",i,j);
   }
   scanf("%d",&shuru);
  
   if(shuru==i+j||shuru==i*j||shuru==i/j||shuru==i-j)
      {
       printf("You are right\n");
       r++;
   }
   else  
      {
       printf("You are fault\n");
       f++;
   }
       printf("Are you contine?If you want to over please click the 0\nanswer:");
       scanf("%d",&answer);
      
         
      }while(answer!=0);

   if(answer==0)
      {
          printf("你答对的题数为:%d\n你打错的题数为:%d\n",r,f);  
 }
}
除了除法运算时有点问题,其他的都还可以
除法运算时,如果输入了小数点,它就像中了病毒一样
不停地运行

[ 本帖最后由 约束小朋友 于 2013-5-28 22:38 编辑 ]
#11
ydown2013-05-29 08:23
回复 10楼 约束小朋友
你现在写的程序有很大的问题:
1.do...while,缺少do.
2.用i%3来决定运算符,跟我k的作用是一样的,但是i%3,只有0,1,2,也就是说:有一种运算永远都不会出现(最后的else永远不会到).
3.程序是先产生 i+j,i-j,i*j,i/j算式,但是对输入的结构是统一判断的,要确定用户输入的结果的正确性,你就得先判断程序随机生成的是哪个算式,你才能让系统去判断.你用(shuru==i+j) || (shuru==i-j) || (shuru==i*j) || (shuru==i/j) 这样的写法是直接的逻辑错误,无论出什么题,你只做加法就可以拿分,举个例子,系统出题:2/1=?,你输入1,2,3,程序都会判为正确.  这就是k(也就是i%3)的作用,不只是用来生成"+ - * /",还要用来配合判断结果.
#12
约束小朋友2013-05-29 21:11
回复 11楼 ydown
前两个问题表示理解了
但是我好纠结那个逻辑问题
这方面的问题我不懂
请问要怎么写才够严谨呢
1