qq_31750507 2016-07-05 06:35 采纳率: 52.6%
浏览 1341

C语言小学计算出题程序,三个linker error求解释!

题目要求
图片说明
.h文件的代码如下

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_id_NUM 10 
#define test_NUM 10
typedef struct student
{
    char ID[MAX_id_NUM];
    int score;
    int time;
}student;// 定义student结构存储学生ID与对应成绩 

typedef struct problem
{
    int t;//区分类型||1==乘法||2==除法||3==加法||4==减法 
    int n1;//第一个运算数 
    int n2;//第二个运算数 
    int c_A;//正确答案 
    int u_A;//学生输入的答案 
}problem;//定义problem结构存储问题与答案 
student user;//全局变量user保存当前登录学生的ID与成绩 
int quit=1;//退出的标识,当 quit==1时程序运行循环,quit==0时退出循环程序结束 
void menu();//菜单函数,调出主要选择页面 
int test();//算数测试函数 
void W_file();//将成绩写入文档 
int random1();//生成1~4的随机数 
int random2(int i);//生成 0~99的随机数 
int random3(int i);//生成0~10的随机数 
int random4(int i);//生成0~49的随机数 
void check();//查询函数,调出文档全部信息  

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include"head.h"
int type=1;
problem T[10]; //10道题 10个信封 
int score=0;  //分数从0开始记 
    void funcA()
    {   
    int i=0,j=0;    
    for(i=0;i<10000;i++)        
                          for(j=0;j<10000;j++)      
                                                {
    int test() //产生随机数 
{
    int i,flag=1;  //类型:加减乘除 标志 

    int num1,num2,num3=100,num4;

    for(i=0;i<test_NUM;i++)
    {
        type=random1();  //随机函数 随机产生1234 
        flag=1; //
        switch(type)
        {
            case 1: //乘法 
                while(flag)
                {
                    num1=random3(1);
                    num2=random3(9);
                    num3=num1*num2;
                    if(num3<=99&&num3>=0)flag=0; //跳出WHILE循环 
                }
                printf("%d * %d=",num1,num2);
                scanf("%d",&num4);
                if(num3==num4)score+=10;


                    T[i].t=1;
                    T[i].n1=num1;
                    T[i].n2=num2; 
                    T[i].c_A=num3;  //正确回答 
                    T[i].u_A=num4;  //你的回答 

                break;
            case 2:
                while(flag)
                {
                    num1=random2(1);
                    num2=random3(9);
                    if(num2==0)continue;
                    num3=num1/num2;
                    if(num3<=99&&num3>=0)flag=0;
                }
                printf("%d / %d=",num1,num2);
                scanf("%d",&num4);
                if(num3==num4)score+=10;

                    T[i].t=2;
                    T[i].n1=num1;
                    T[i].n2=num2; 
                    T[i].c_A=num3;
                    T[i].u_A=num4;

                break;
            case 3:
                while(flag)
                {
                    num1=random2(1);
                    num2=random2(9);
                    num3=num1+num2;
                    if(num3<=99&&num3>=0)flag=0;
                }
                printf("%d + %d=",num1,num2);
                scanf("%d",&num4);
                if(num3==num4)score+=10;


                    T[i].t=3;
                    T[i].n1=num1;
                    T[i].n2=num2; 
                    T[i].c_A=num3;
                    T[i].u_A=num4;

                break;
            default:
                while(flag)
                {
                    num1=random2(2);
                    num2=random4(1);
                    num3=num1-num2;
                    if(num3<=99&&num3>=0)flag=0;
                }
                printf("%d - %d=",num1,num2);
                scanf("%d",&num4);
                if(num3==num4)score+=10;


                    T[i].t=4;
                    T[i].n1=num1;
                    T[i].n2=num2; 
                    T[i].c_A=num3;
                    T[i].u_A=num4;

                break;

        }
    }   }
    }
int main()
{
    int i=0;  //计数 
    int error;   //判断是否有错(id) 不符合标准=1 
    quit=1;  //继续运行  
    char ID_NUM[MAX_id_NUM];  //临时存放ID 
    clock_t start,finish;   
    double duration;
    printf("[*****Welcome into MathTest system!*****]\n");
    while(quit) //不断循环  =0时循环停止 
    {
        user.score=0; //查看分数 
        i=0;  //确保是0 
        error=0 ;
        printf("Please input your ID:");
        fflush(stdin);  //清空缓存 准备输入时 防止干扰 
        gets(ID_NUM);  //输入字符串 
        while(ID_NUM[i]!='\0')  //判断循环 ID是否正确   =\0时是结尾 
        {
            if(i<2)
            {
                if(ID_NUM[i]>'Z'||ID_NUM[i]<'A')  //反面 不在A-Z 错误 
                {
                    error=1;
                    break;
                }
                i++;
            }
            else 
            {
                if(ID_NUM[i]<'0'||ID_NUM[i]>'9')
                {
                    error=1;
                    break;
                }
                i++;
            }

        } 
        if(error==1||i!=6)  //出现错误或个数错误 
        {
            printf("error!\n") ;
            continue;   //跳出本次循环 下次循环继续 重新输入ID 
        }
        strcpy(user.ID,ID_NUM); //复制函数 临时文件存储 
        menu(); //菜单函数 选择4个选项 
    }
    printf("funcA() START!!\n");    
    start=clock();  
    funcA();    
    finish=clock(); 
    printf("funcA() END!!\n");  
    duration=(double)(finish-start)/CLOCKS_PER_SEC; 
    printf("%.0f 毫秒\n",duration*1000);  
    return 0; 
}
int menu()
{
    int in;  //
    while(1) //不断循环 
    {
        printf("(1)Start a test\n(2)Check score\n(3)Exit\n(4)New log(ID) into\n");
          scanf("%d",&in);
        switch(in)  //多重选择判断 
        {
            case 1:
                user.score=test(); //test函数返回分数 
                W_file(); //调用函数形成文件 
                break;
            case 2:
                check();
                break; //跳出WHILE 
            case 3:
                quit=0; //退出 
                printf("Thanks for your using!\nSee you next time.\n" );
                return;  // 跳出MENU 
            case 4:
                return;
            default:
                printf("error!\n"); //输入其他 
                break;
        }
    }

}




    printf("Prob.      |Correct Answ.|Ur Answ.\n");
    for(i=0;i<test_NUM;i++)
    {
        type=T[i].t;
        switch(type)  //格式化输出 
        {
            case 1:
                printf("%3d  *%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); 
                break;
            case 2:
                printf("%3d  /%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); 
                break;
            case 3:
                printf("%3d  +%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); 
                break;
            default:
                printf("%3d  -%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); 
                break;
        }
    }
    getch();//return score;

}
void W_file()  //
{
    FILE *fp;
    if ((fp = fopen("score.txt", "a+")) == NULL) {
        printf("File not found!\n");
        return;
    }
    fprintf(fp,"%s %d\n",user.ID,user.score);
    fclose(fp);
}
int random1()
{
    srand(time(0));
    return (rand()%4+1);
}
int random2(int i)
{
    srand(time(0)+i);
    return (rand()%100);
}
int random3(int i)
{
    srand(time(0)+i);
    return (rand()%11);
}
int random4(int i)
{
    srand(time(0)+i);
    return (rand()%50);
}
void check() //反馈信息 
{
    char ID[6];
    int score;
    FILE *fp;
    if ((fp = fopen("score.txt", "r+")) == NULL) {
        printf("File not found!\n");
        return;
    }
    fscanf(fp,"%s %d",ID,&score);  //调用文件 
    while(!feof(fp))
    {
        printf("ID:%s|Score:%d\n",ID,score);
        fscanf(fp,"%s %d",ID,&score);
    }
    fclose(fp);
}


  • 写回答

5条回答 默认 最新

  • engineer-yang 2016-07-05 07:04
    关注

    #include"head.h" 代码?

    评论

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!