C考试评分程序

时间:2014-12-04 07:20:14

标签: c macros struct io header

我在确定启动此计划的位置和方法时遇到了很多麻烦。这是学校的任务,但我希望有人为我做这件事。我只是想帮助启动并建立一个基础,所以我可以自己完成它。

作业是这样的:

一位教授写了20个问题真/假考试,并把它交给全班同学。您 有人被要求写一个评分这门考试的课程。但是,为了保留空间,答案是 每个提交都存储在一个20位二进制数字(表示为十进制)。例如,如果 存储的数字是729494,二进制当前是10110010000110010110.这意味着答案 是TFTTFFTFFFFTTFFTFTTF。每个正确的答案都值1分,每个错误答案都是 值得0分。假设每个学生都完成了考试(即没有省略答案)。

您的课程将输入学生姓名和答案的列表(例如:" Edwin Larson 568983"),程序将输出分数和 每个人的字母等级(例如:" Edwin Larson 65%D")。假设每个名称(包括第一个和最后一个)不能超过50个字符。 为了实现这一目标,您的程序必须具有以下功能。

文件输入/输出

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

结构和类型

由于考试答案存储在20位整数中,我们需要将答案存储在20位整数中。 为此,我们将使用位字段。为简单起见,我们将在结构中组织它。最低限度, 结构应该包含学生的名字,姓氏和存储答案的数字(用 20位)。将此结构定义为名为Student的新数据类型。

一旦我们计算得分,我们需要确定字母等级。为此,我们将定义 以下宏: •IS_A - 检查分数是否至少为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

我现在收到一条错误,指出我的头文件无法包含,因为无法找到它。我确保他们都在同一个文件夹/目录中。

3 个答案:

答案 0 :(得分:0)

首先编写宏和读取文件的主循环。

然后弄清楚如何找到他们正确的数量。

记住失败总是一种选择。

答案 1 :(得分:0)

在阅读文件时,重要的是计算行数以确定测试的数量。现在,您可以开始在文件中读取,操作和写入结果。

我的方法是。 getNrOfParticipants - &gt;并为每个参与者读取数据,操纵和写入结果。 - &GT;关闭outputfile。

答案 2 :(得分:0)

这里有一些代码可以帮助您将十进制转换为二进制。我很快写了它并在eclipse中测试了它。我会创建一个返回字符串的函数,以便您可以从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);
}