Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言考试评分程序_C_Macros_Struct_Io_Header - Fatal编程技术网

C语言考试评分程序

C语言考试评分程序,c,macros,struct,io,header,C,Macros,Struct,Io,Header,我很难弄清楚在哪里以及如何启动这个程序。这是学校的作业,但我不想让别人替我做。我只是想帮助启动它,并建立一个基金会,这样我就可以自己完成。 任务如下: 一位教授写了一份有20道题的真假试题,交给全班学生。你 我被要求写一个给这次考试打分的程序。然而,为了保留空间,答案是 每次提交都以20位二进制数(以十进制表示)存储。例如,如果 存储的数字是729494,二进制等价物是1011001000010110。这意味着答案 是TFTFTFFFFFTTFFTFTF。每个正确答案得1分,每个错误答案得1分

我很难弄清楚在哪里以及如何启动这个程序。这是学校的作业,但我不想让别人替我做。我只是想帮助启动它,并建立一个基金会,这样我就可以自己完成。 任务如下:

一位教授写了一份有20道题的真假试题,交给全班学生。你 我被要求写一个给这次考试打分的程序。然而,为了保留空间,答案是 每次提交都以20位二进制数(以十进制表示)存储。例如,如果 存储的数字是729494,二进制等价物是1011001000010110。这意味着答案 是TFTFTFFFFFTTFFTFTF。每个正确答案得1分,每个错误答案得1分 值0分。假设每个学生都完成了考试(即没有遗漏答案)

您的程序将输入学生姓名和答案列表(例如:“Edwin Larson 568983”),程序将输出分数和答案 每个人的字母等级(例如:“Edwin Larson 65%D”)。假设每个名称(第一个和最后一个)不能超过50个字符。 要使此功能正常运行,您的程序必须具有以下功能

文件输入/输出

所有输入都来自文本文件,而不是让用户直接输入。第一个值 阅读将是考试的答案。所有其他行将包含学生的名字、姓氏和姓名 代表他/她考试答案的数字。应要求用户输入文件的名称。 如果找不到文件,用户应继续输入文件名,直到找到有效的输入文件 进入。提供了一个示例输入文件。 输出也应该用文件完成。程序的结果应写入文件。使 项目更简单,您可以一次写一个分数,而不是读取整个输入文件,然后 写入输出文件。应要求用户输入文件名。请注意,该文件没有 不必存在。如果不存在,C将自动创建该文件。输出应该是学生的 姓名、分数(百分比)和字母等级

结构和类型

由于考试答案存储在20位整数中,因此我们需要将答案存储在20位整数中。 为此,我们将使用位字段。为了使事情变得简单,我们将把它组织在一个结构中。至少 结构应该包含学生的名字、姓氏和存储答案的数字(带有 20位)。将此结构定义为名为Student的新数据类型

计算分数后,我们需要确定字母等级。为了实现这一点,我们将定义 以下宏: •是否检查分数是否至少为90分。 •IS_B-检查分数是否在80到89之间。 •IS_C-检查分数是否在70到79之间。 •IS_D-检查分数是否在60到69之间。 如果这些宏都没有返回true,那么学生在考试中会得到F

头文件

结构和宏应放在单独的头文件中。主C程序将需要 包括此头文件

#ifndef Header_H
#define Header_H

#define IS_A(x) ((x) >= (90))
#define IS_B(x) ((x) >= (80) && (x) <= (89))
#define IS_C(x) ((x) >= (70) && (x) <= (79))
#define IS_D(x) ((x) >= (60) && (x) <= (69))
#define IS_F(x) ((x) <= (59))

typedef struct
{
    char first[25];
    char last[25];
    unsigned int grade;

}Student;

#endif
#ifndef头
#定义标题
#定义为A(x)((x)>=(90))

#定义IS_B(x)((x)>=(80)和(x)=(70)和(x)=(60)和(x)从写入宏和读取文件的主循环开始

然后想办法找出他们有多少是对的


请记住,失败始终是一个选项。

读取文件时,计算行数以确定参加测试的行数非常重要。现在,您可以开始读取、操作并将结果写入文件


我的建议是.getNrOfParticipants->并为每个参与者读取数据,操作和写入结果。->关闭outputfile。

以下是一些代码,可以帮助您将十进制转换为二进制。我快速编写了它,并在eclipse中进行了测试。我将创建一个返回字符串的函数,以便您可以从主函数调用它。I

#include<stdio.h>

void binary(int dec)
{
    int a[20];
    int i=0;
    while(dec > 0)
    {
        a[i]=dec%2;
        i++;
        dec=dec/2;
    }
    int j = i;
    for(j=i-1;j>=0;j--)
        printf("%d",a[j]);
}

int main()
{
    int grade;
    printf("Enter a number:");

    scanf("%d",&grade);

    printf("Binary number of %d is ", grade);
    binary(grade);
}
#包括
无效二进制(int-dec)
{
INTA[20];
int i=0;
而(12月>0日)
{
a[i]=12月%2日;
i++;
dec=dec/2;
}
int j=i;
对于(j=i-1;j>=0;j--)
printf(“%d”,a[j]);
}
int main()
{
国际等级;
printf(“输入一个数字:”);
scanf(“%d”、&grade);
printf(“二进制数为%d”,等级);
二进制(等级);
}

嗯,有太多的事情要做,我真的不知道从哪里开始或尝试什么。我不知所措。我尝试将文件中的名称和数字读入数组,但内存或其他方面存在问题,因为数组打印的内容与读取的内容相差甚远。你需要理解,并且。充分理解这一点你应该能够轻松地为一个学生编写代码。对于更多的学生,可以使用google for IO redirection或C语言的文件IO。“我尝试将文件中的名称和数字读入数组”这是一个很好的开始,但你应该只有一个数组,一个结构数组(使用名为student的新数据类型)。因此,将您对学生结构的定义、声明结构数组的代码以及解析输入文件并填充结构数组的代码添加到问题中。宏需要使用
=