已关闭。此问题需要更多focused。目前不接受回答。
**要改进此问题吗?**更新此问题,使其仅针对editing this post的一个问题。
4天前关闭。
Improve this question的
我刚刚完成了2个今天到期的C程序,但当我的教授检查我的工作时,他告诉我要在其中加入指针。我们还没有学习过指针,我真的很难弄清楚他的意思。我试图添加我通过在线教程学到的东西,但它只是导致多个错误,我就是不能让它工作。
我的第一个程序是一个学生记录。我想学生的名字,分数1,2,3,还有他们的最终成绩,并存储在一个文件中,但我不知道如何。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define max 3
void getscore(char *name, int *grade1, int *grade2, int *grade3);
void display();
float rate(float ave);
float average(int a, int b, int c);
float rating[max];
float ave[max];
char n[max][50];
int q1[max], q2[max], q3[max];
int main()
{
int i;
system("cls");
for(i = 0; i<max; i++){
system("cls");
printf("\t\tInput Student Record");
printf("\nStudent# %i", i+1);
getscore(n[i], &q1[i], &q2[i], &q3[i]);
ave[i] = average(q1[i], q2[i], q3[i]);
rating[i] = rate(ave[i]);
}
display();
getch(); //system("pause");
}
void getscore(char *name, int *grade1, int *grade2, int *grade3)
{
printf("\nStudent Name: ");
scanf("%s", name);
printf("\nQuiz Score#1: ");
scanf("%i", grade1);
printf("\nQuiz Score#2: ");
scanf("%i", grade2);
printf("\nQuiz Score#3: ");
scanf("%i", grade3);
}
float rate(float ave)
{
/*5.00 - 74 below
3.00 - 75 - 76
2.75 - 77 - 79
2.50 - 80 - 83
2.25 - 84 - 87
2.00 - 88 - 90
1.75 - 91 - 93
1.50 - 94 - 96
1.25 - 97 - 98
1.00 - 99 - 100
*/
if(ave >= 75 && ave <= 76)
return 3.00;
else if(ave >= 77 && ave <=79)
return 2.75;
else if(ave >= 80 && ave <= 83)
return 2.5;
else if(ave >=84 && ave <= 87)
return 2.25;
else if(ave >= 88 && ave <= 90)
return 2.00;
else if(ave > 91 && ave <= 93)
return 1.75;
else if(ave > 94 && ave <= 96)
return 1.50;
else if(ave > 97 && ave <= 98)
return 1.25;
else if(ave > 99 && ave <= 100)
return 1.00;
else
return 5.00;
}
float average(int a, int b, int c)
{
return (a+b+c) / 3;
}
void display()
{
int i;
printf("\nStudent Grade Record\n");
printf("\n\nNo. Name \t Quiz_1 \t Quiz_2 \t Quiz_3 \t Average \t Rating");
for(i=0; i < max; i++)
{
printf("\n%i.) %s \t\t%i \t\t%i \t\t%i \t\t%.2f \t\t%.2f", i+1, n[i], q1[i],
q2[i], q3[i], ave[i], rating[i]);
}
}
字符串
我试着添加一些我从youtube的在线教程中学到的东西,但结果只是一行又一行的错误。
1条答案
按热度按时间g2ieeal71#
1.不清楚您是希望
display()
输出像现在一样输出到stdout或写入文件时使用不同的格式。下面演示了如何通过传递FILE *
来显示并使用fprintf()
而不是打印来写入文件。如果您需要不同的格式,请为文件输出创建一个替代的display()
函数,并调用而不是.1.已将最大值字段加入至读取字串的函式。
1.删除了全局变量。这意味着现在必须将相关变量传递给
display()
。1.把
main()
移到底部。在这样的小例子中,这意味着你可以消除原型。1.删除了系统调用,以便我可以为您测试。
1.最小化变量的作用域。对于
for
循环,更喜欢通过循环来确定变量的作用域,而不是在循环之前(有时候你需要变量,但却不能)。1.你的费率函数有缺陷。例如,
rate(98.5) return 5
?我建议您使用平均值[0; 75[
的半开区间来解决此问题,[75; 77[
等。这使得范围是连续的,并且更容易看出你是否漏掉了什么。下一个观察是一个范围的结束是下一个范围的开始,所以你只需要存储它们。如果你返回,那么你就我不需要else
,所以组合后会是这样的。如果是ave > 100
,会发生什么?字符串
1.(未固定)首选双精度浮点数。
1.(未修正)考虑为一个学生创建一个结构体,其中包含您需要的所有信息。然后创建一个包含3个学生的数组。
1.(未修复)请考虑使用查找表和循环来消除修订后的
rate()
函数中的重复项:型
下面是生成的代码:
型