JBTALKS.CC

标题: 随机选题cprogram帮忙 [打印本页]

作者: angelineang    时间: 2012-3-4 09:46 PM
标题: 随机选题cprogram帮忙
我想要把我的quiz 设为random,我用了srand()和rand()但是我不懂怎样把他们放进去题目中,真的很乱,有谁可以帮忙吗?
srand ( time(NULL) );
for (int i=0;i<=10;i++);
{
question= rand () %20 + 1;
printf("\n%d",i+1);
作者: mywebdevteam    时间: 2012-3-5 08:46 AM
你有几个问题?
作者: mywebdevteam    时间: 2012-3-5 08:47 AM
你用PHP还是ASP.NET?
作者: leon_lcl    时间: 2012-3-5 10:16 AM
回复 1# angelineang
可以试试看array,或io text file
记得random出来的号码要compare之前的,不然问题会重复
作者: Super-Tomato    时间: 2012-3-5 11:31 AM
我想要把我的quiz 设为random,我用了srand()和rand()但是我不懂怎样把他们放进去题目中,真的很乱,有谁可以帮忙吗?
srand ( time(NULL) );
for (int i=0;i<=10;i++);
{
question= rand () %20 + 1;
printf("\n%d",i+1);
angelineang 发表于 2012-3-4 09:46 PM



你的 coding 只有一小部分,無法明白放進題目的意思
作者: Super-Tomato    时间: 2012-3-5 11:33 AM
你用PHP还是ASP.NET?
mywebdevteam 发表于 2012-3-5 08:47 AM



樓主標題不是已經寫了是 C 嗎?
作者: mywebdevteam    时间: 2012-3-5 11:52 AM
回复 6# Super-Tomato


   
可以用c来做网站吗?
作者: angelineang    时间: 2012-3-7 03:13 AM
回复 2# mywebdevteam


    我有20个问题要选4个
作者: angelineang    时间: 2012-3-7 03:14 AM
回复 5# Super-Tomato


    #include<stdio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include <string.h>

void quiz(void);
void quizquestion1(void);
void quizquestion2(void);
void quizquestion3(void);
void quizquestion4(void);
void quizquestion5(void);
void quizquestion6(void);
void quizquestion7(void);
void quizquestion8(void);
void quizquestion9(void);
void quizquestion10(void);
void quizquestion11(void);
void quizquestion12(void);
void quizquestion13(void);
void quizquestion14(void);
void quizquestion15(void);
void quizquestion16(void);
void quizquestion17(void);
void quizquestion18(void);
void quizquestion19(void);
void quizquestion20(void);



{

char answer;
char quizback,choice,score=0;
int question;




system("cls");
          
printf("\n\nThis is a CHEMISTRY QUIZ\n");
printf("**********************\n\n");
printf("Do you want to start now(Y/N) ");
scanf_s("%c",&choice);

if(choice=='y')

{


//
system("cls");

printf("\n+++++++++++++++++++++++++++++++++\n");
printf("+WELCOME TO CHEMISTRY QUIZ WORLD+\n");
printf("+++++++++++++++++++++++++++++++++\n");
                                       
printf("\t*****************************************************************************************\n");
printf("\t*   Welcome to CHEMY's CHEMISTRY QUIZ... Are you ready???Let's go! Wish you good luck!  *\n");
printf("\t*****************************************************************************************\n");

//Q1
void quizquestion1(void)
{
srand(time(NULL));
quizquestion1=rand()%20+1;


switch (quizquestion1)
{void quizquestion1()
{
bool quizquestion1 = true;
while(quizquestion1)
{
switch(quizquestion1)
{
case 1:quizquestion1 = false;break;
case 2:quizquestion1 = false;break;
case 3:quizquestion1 = false;break;
case 4:quizquestion1 = false;break;
case 5:quizquestion1 = false;break;
case 6:quizquestion1 = false;break;
case 7:quizquestion1 = false;break;
case 8:quizquestion1 = false;break;
case 9:quizquestion1 = false;break;
case 11:quizquestion1 = false;break;
case 12:quizquestion1 = false;break;
case 13:quizquestion1 = false;break;
case 14:quizquestion1 = false;break;
case 15:quizquestion1 = false;break;
case 16:quizquestion1 = false;break;
case 17:quizquestion1 = false;break;
case 18:quizquestion1 = false;break;
case 19:quizquestion1 = false;break;
case 20:quizquestion1 = false;break;
}
}
}

//Q2
void quizquestion2(void)
srand(time(NULL));
quizquestion2=rand()%20+1;

switch (quizquestion2)
{void quizquestion2()
{
bool quizquestion2 = true;
while(quizquestion2)
{
switch(quizquestion2)
{
case 1:quizquestion2 = false;break;
case 2:quizquestion2 = false;break;
case 3:quizquestion2 = false;break;
case 4:quizquestion2 = false;break;
case 5:quizquestion2 = false;break;
case 6:quizquestion2 = false;break;
case 7:quizquestion2 = false;break;
case 8:quizquestion2 = false;break;
case 9:quizquestion2 = false;break;
case 11:quizquestion2 = false;break;
case 12:quizquestion2 = false;break;
case 13:quizquestion2 = false;break;
case 14:quizquestion2 = false;break;
case 15:quizquestion2 = false;break;
case 16:quizquestion2 = false;break;
case 17:quizquestion2 = false;break;
case 18:quizquestion2 = false;break;
case 19:quizquestion2 = false;break;
case 20:quizquestion2 = false;break;
}
}
}
接下去都是一样的重复10次,可是好像没有用的感觉
作者: angelineang    时间: 2012-3-7 03:17 AM
回复 4# leon_lcl


    如果我是用while或if else的呢?
好像我rand出来的号码是2的话就写
if
(quizquestion=2);
quizquestion2();//我在这边是call function的//
作者: leon_lcl    时间: 2012-3-7 08:48 AM
回复 10# angelineang

case 1:quizquestion2 = false;break;
case 2:quizquestion2 = false;break;
case 3:quizquestion2 = false;break;
case 4:quizquestion2 = false;break;
case 5:quizquestion2 = false;break;
case 6:quizquestion2 = false;break;
case 7:quizquestion2 = false;break;
case 8:quizquestion2 = false;break;
case 9:quizquestion2 = false;break;
case 11:quizquestion2 = false;break;
case 12:quizquestion2 = false;break;
case 13:quizquestion2 = false;break;
case 14:quizquestion2 = false;break;
case 15:quizquestion2 = false;break;
case 16:quizquestion2 = false;break;
case 17:quizquestion2 = false;break;
case 18:quizquestion2 = false;break;
case 19:quizquestion2 = false;break;
case 20:quizquestion2 = false;break;


这个case 1 到case 20是你20个quiz的问题?
如果是的话,不要重复,你只需要两个function, 一个是generate random number,一个是quizquestion。
generate random number了就pass random number去 quizquestion, 然后looping 4次.
你的问题是直接出来四题,然后才给user回答,还是一个问题,一个答案?
作者: mywebdevteam    时间: 2012-3-7 09:28 AM
你用ARRAY来做更快,CODE更少
作者: 宅男-兜着走    时间: 2012-3-7 02:04 PM
这个是学校的红题。

解决方法很多, 最简单的是用 loop 20 次。
generate random,print 问题, 记录分数, loop 完 print result。
settle, 然后还能洗澡打下电动看看漫画才睡觉。

不超过 10 行能解决。
作者: angelineang    时间: 2012-3-7 07:02 PM
回复 13# 宅男-兜着走


    可是我不懂要怎样link去我的问题
for (int i=0;i<=10;i++);
{
question= rand () %20 + 1;
printf("\n%d",i+1);
我又怕会重复出来一样的题目
我是要一题出来,回答一题,计分,然后下一题在回答
作者: angelineang    时间: 2012-3-7 07:03 PM
回复 12# mywebdevteam


    我就是不懂怎样做嘛!TT
作者: angelineang    时间: 2012-3-7 07:04 PM
回复 11# leon_lcl


    我是要出来一次回答一题,我不懂要怎样pass,我很blur
作者: Super-Tomato    时间: 2012-3-7 08:09 PM
本帖最后由 Super-Tomato 于 2012-3-7 08:30 PM 编辑
回复  Super-Tomato


    #include
#include
#include
#include
#include
#include
#include
...
angelineang 发表于 2012-3-7 03:14 AM


你這樣的寫法,如果是 100 題的話,不就浪費時間了嗎?

這裡給你寫個簡單的例子參考,要怎麽優化就看你自己有沒有用心去研究以下這段了

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define SIZE 5

  5. typedef void (*Question)(void);

  6. void q1(void) { printf( "This is question 1" ); }
  7. void q2(void) { printf( "This is question 2" ); }
  8. void q3(void) { printf( "This is question 3" ); }
  9. void q4(void) { printf( "This is question 4" ); }
  10. void q5(void) { printf( "This is question 5" ); }

  11. void randomize(Question *funcs)
  12. {
  13.     Question temp;
  14.     int i, j;

  15.     srand( time(NULL) );
  16.     for( i=0; i<SIZE; i++ )
  17.     {
  18.         for( j=0; j<i; j++)
  19.         {
  20.             if( rand() % 2 )
  21.             {
  22.                 temp = funcs[j];
  23.                 funcs[j] = funcs[j+1];
  24.                 funcs[j+1] = temp;
  25.             }
  26.         }
  27.     }
  28. }

  29. int main()
  30. {
  31.     int i = 0;
  32.     char choice;
  33.     Question funcs[SIZE] = {&q1, &q2, &q3, &q4, &q5};

  34.     randomize( funcs );  //亂數且不重復排列

  35.     printf("\n\nThis is a CHEMISTRY QUIZ\n");
  36.     printf("**********************\n\n");
  37.     printf("Do you want to start now(Y/N) ");
  38.     scanf("%c", &choice);

  39.     if( tolower( choice ) == 'y' )
  40.     {
  41.         for( i=0; i<SIZE; i++ )
  42.         {
  43.             funcs[i]();  //呼叫自定函數
  44.             printf( "\n" );
  45.         }
  46.     }

  47.     memset(&funcs, NULL, SIZE);  //釋放資源

  48.     return 0;
  49. }
复制代码

作者: mywebdevteam    时间: 2012-3-7 08:37 PM
我很想帮你,但是懒惰开VS2010,用4个VARIABLE记录每一个问题的ID...
作者: mywebdevteam    时间: 2012-3-7 09:02 PM
我不懂这个有没有错,但如果是我就这样做
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. void getquestion(int random);
  5. void main (void){
  6.         array question[] = new array();
  7.         for(int i=0;i<4;i++){
  8.                 int random;
  9.                 int pass=0;
  10.                 do{
  11.                         random = rand() % 20 + 1;
  12.                         for(int ii=0;ii<4;ii++){
  13.                                 if(question[ii] == random){pass=1;}
  14.                         }
  15.                 }while(pass>=1);
  16.                 getquestion(random);
  17. }
  18. void getquestion(int random){
  19.         switch(random){
  20.         case 1:

  21.                 break;
  22.         case 2:

  23.                 break;
  24. }
复制代码

作者: angelineang    时间: 2012-3-7 10:10 PM
回复 18# mywebdevteam

不明白你的意思啊!TT
作者: 宅男-兜着走    时间: 2012-3-8 01:09 AM
本帖最后由 宅男-兜着走 于 2012-3-8 01:24 AM 编辑
回复  宅男-兜着走


    可是我不懂要怎样link去我的问题
for (int i=0;i
angelineang 发表于 2012-3-7 07:02 PM



我看到tomato 的不知道怎么改   有点高深。  memset(&funcs, NULL, SIZE); 这句放下去compile 不到。
19 楼的哪位写的不知道是什么, 貌似还没写完。

我先道歉下, 10 句内做不到, 如果问题不能重复。
(也许能, 但是我做不到)。


**** 我爬了贴才发现到, 你的题目到底是什么 ??

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define SIZE 20

  4. int quests[SIZE];

  5. int getQuest(){
  6.         int question=rand () % SIZE + 1;
  7.         int i=0;
  8.         for(i=0; i < sizeof(quests) ; i++){

  9.                         if(quests[i] == question)
  10.                                 return getQuest();  //如果号码重复, 再找过。
  11.                
  12.         }
  13.         return question;

  14. }

  15. int main()
  16. {
  17.      char choice;
  18.      int i,input;
  19.      int wrong = 0;
  20.      int right = 0;

  21.          printf("\n\nThis is a SAMPLE PROGRAM THAT ASK 20 STUPID QUESTIONS\n");
  22.     printf("**********************\n\n");
  23.     printf("Do you want to start now(Y/N) ");
  24.     scanf("%c", &choice);     
  25.    
  26.      if( tolower( choice ) == 'y' )
  27.     {

  28.     for(i=1; i <= SIZE; i++){
  29.          quests[i]= getQuest();
  30.          
  31.          printf("This is question %d\n", i);
  32.          scanf("%d", &input);

  33.         if(input != quests[i]){
  34.                 wrong++;
  35.                 printf("You guest wrong.\n");
  36.         }else{
  37.                 right++;
  38.                 printf("You got it.\n");
  39.         }

  40.     }   
  41. }
  42.        
  43.          printf("Too bad, game is over you have %d answer right, %d are wrong\n",right, wrong);


  44.     return 0;
  45. }
复制代码

作者: mywebdevteam    时间: 2012-3-8 10:33 AM
忘记写多一行。。。

Question[] = random;

就是把出过的题目记在ARRAY里面,每次LOAD问题就CHECK问题出过了吗,出过了就会一直LOOP,没有的话会LOAD问题
作者: Super-Tomato    时间: 2012-3-8 01:58 PM
我看到tomato 的不知道怎么改   有点高深。  memset(&funcs, NULL, SIZE); 这句放下去compile 不 ...
宅男-兜着走 发表于 2012-3-8 01:09 AM



memset 在 linux 下是出現沒有 memset 這個函數的訊息吧? 如果是這樣的話把 string 這個 header 給 include 進去就 ok 了
至於你的 coding 在 random 方面不太適合這個方式,建議使用 bubble sort 的方式是最快最有效的,目前你這個方式如果有 100 個或更多都要列出的話,越後面的排列會循環在 getQuest 的時間越長。
作者: 宅男-兜着走    时间: 2012-3-8 02:01 PM
memset 在 linux 下是出現沒有 memset 這個函數的訊息吧? 如果是這樣的話把 string 這個 header 給  ...
Super-Tomato 发表于 2012-3-8 01:58 PM


   哦,
    == ...可是  要特地写个 sort method   累下。
作者: Super-Tomato    时间: 2012-3-8 02:11 PM
哦,
    == ...可是  要特地写个 sort method   累下。
宅男-兜着走 发表于 2012-3-8 02:01 PM



不用特地寫個 method,以你目前的 getQuest 稍微修改一下就可以了
作者: 宅男-兜着走    时间: 2012-3-8 08:37 PM
不用特地寫個 method,以你目前的 getQuest 稍微修改一下就可以了
Super-Tomato 发表于 2012-3-8 02:11 PM



    看到了你的代码。
    我承认我对sorting 不是很熟。
    因为很少用到( 有现成的 )。


    多谢指导啦~




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5