我在确定启动此计划的位置和方法时遇到了很多麻烦。这是学校的任务,但我不希望有人为我做这件事。我只是想帮助启动并建立一个基础,所以我可以自己完成它。
作业是这样的:
一位教授写了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
我现在收到一条错误,指出我的头文件无法包含,因为无法找到它。我确保他们都在同一个文件夹/目录中。
答案 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);
}