2014-12-04 43 views
0

我在确定在哪里以及如何启动此程序时遇到了很多问题。这是一个学校的任务,但我不要希望有人为我做。我只是想帮助开始并建立一个基础,以便我可以自己完成。C中的考试评分程序

的分配是这样的:

一位教授写了20问题真/假考试,并把它交给了类的所有学生。你已经被要求编写一个分数考试的程序。但是,为了保留空间,每个提交的答案均以20位二进制数(以十进制表示)存储。例如,如果 存储的编号是729494,则二进制等效值为10110010000110010110。这表示答案 为TFTTFFTFFFFTTFFTFTTF。每个正确的答案值1分,每个不正确的答案是 值得0分。假设每个学生完成了考试(即没有遗漏的答案)。

您的程序将输入学生姓名和答案列表(例如:“Edwin Larson 568983”),并且该程序将输出分数和 每个人的字母等级(例如:“Edwin Larson 65%D “)。假设每个名字(首字母和最后一个)不能超过50个字符。 为了使这项工作,您的程序必须具有以下功能。

文件输入/输出

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

结构体和类型

由于考试答案被存储在一个20位的整数,我们需要存储在一个20位整数的答案。 为此,我们将使用一个位域。为了简单起见,我们将把它组织在一个结构体中。至少, 该结构应该包含学生的名字,姓氏和存储答案的编号(使用012位数字来表示 )。将此结构定义为名为Student的新数据类型。

一旦我们计算分数,我们需要确定字母等级。为此,我们将定义 以下宏: •IS_A - 检查得分是否至少为90。 •IS_B - 检查分数是否在80到89之间。 •IS_C - 检查分数是否在70和79之间。 •IS_D - 检查分数是否在60和69之间。 如果这些宏中没有一个返回真,那么学生在考试中获得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 

我现在得到一个错误,说明我的头文件不能被包含,因为它找不到。我确定他们都在同一个文件夹/目录中。

+0

那么,有太多的事情要做,我真的不知道从哪里开始或尝试什么。我不知所措。我尝试将文件中的名称和数字读入数组,但是存在内存或其他问题,因为数组甚至没有打印出与所读数据完全相同的内容。 – Sean 2014-12-04 07:44:11

+0

你需要了解[如何读取第n位,xor操作](http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/),以及[宏检查范围](http://www.java2s.com/Code/C/Macro-Preprocessor/UseMacrotochecktheintrange.htm)。通过对此的了解,您应该可以轻松地为1名学生编写代码。对于更多学生,Google for IO重定向或FILE IO C。 – 2014-12-04 07:49:35

+0

*“我尝试将文件中的名称和数字读入数组中”*这是一个好的开始,但您应该只有一个数组,结构(使用称为Student的新数据类型)。因此,在问题中添加Student结构的定义,声明结构数组的代码以及解析输入文件并填充结构数组的代码。 – user3386109 2014-12-04 08:01:46

回答

0

通过写宏和主循环读取文件的开始。

然后弄清楚如何找到他们多少恢复正常。

记住失败总是一个选项。

0

当读取文件的重要算上线,以确定有多少参加考试的次数。现在您可以开始读取,操作并将结果写入文件。

我的问题是。 getNrOfParticipants - >并为每个参与者读取数据,操作和写入结果。 - >关闭输出文件。

0

下面是一些代码,以帮助您与十进制转换为二进制。我很快就写下了它,并在日食中进行了测试。我会创建一个返回字符串的函数,以便您可以从main调用它。我

#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); 
}