[求助]写了一个计算加权平均分的程序,总是报错。大神啊~
我是利用结构体和全局变量来写的。不知道是不是结构体使用或是算法有问题,“显示已输入数据”和“计算平均分”两个小函数总是显示不正确。一下午都没弄对,希望有高手帮忙。先道声谢啦~#include"stdio.h"
#include "ctype.h"
#define NAME_LEN 999
#define MAX_PRO 999
int num_parts = 0;
float total_hours = 0,ave_marks = 0;
struct{
char pro_name[NAME_LEN+1];
float cre_hour;
float marks;
}project[MAX_PRO];
void sum_credit_hour(void);
void GPA(void);
void print(void);
int read_line(char str[], int);
int main()
{
char code;
printf("This program is edited by Zhong Yue.\n"
"if you want to make your life more convinent,please ask him to get more.\n\n");
for(;;){
printf("操作码:\ni 写入科目及学分\ng 显示平均学分\np 显示已输入的数据\nq 退出程序");
printf("\n请输入操作码: ");
scanf(" %c", &code);
while (getchar() != '\n')
;
switch (code){
case'i':sum_credit_hour();break;
case'g':GPA();break;
case'p':print();break;
case'q':goto L;break;
default:printf("非法的输入码!");
}
printf("\n");
}
L: ;
return 0;
}
/*这个函数的功能是写入科目名称及学分数并计算已输入的总学分数
这个函数使用了结构体变量*/
void sum_credit_hour(void)
{
int i;
char j;
printf("请输入学科名称:");
read_line(project[num_parts].pro_name, NAME_LEN);
printf("请输入学科学分数:");
scanf("%f", &project[num_parts].cre_hour);
printf("请输入您的成绩:");
scanf("%f", &project[num_parts].marks);
total_hours += project[num_parts].cre_hour;
num_parts++;
}
/*这个函数的功能是计算并显示加权平均分
这个函数使用了结构体变量*/
void GPA(void)
{
int i,total_marks = 0;
for(i = 0;i < num_parts; i++){
total_marks += project[i].marks * project[i].cre_hour;
}
ave_marks = total_marks / total_hours;
printf("您的加权平均分为:%.2d", ave_marks);
}
/*这个函数的功能是显示已输入的数据
这个函数使用了结构体变量*/
void print(void)
{
int i;
printf("学科 学分数 "
"成绩\n");
for(i = 0;i < num_parts; i++)
printf("%-10s %-16d%8d\n", project[i].pro_name,
project[i].cre_hour,project[i].marks);
}
int read_line(char str[], int n)
{
int ch, i = 0;
while (isspace(ch = getchar()))
;
while (ch != '\n' && ch != EOF) {
if (i < n)
str[i++] = ch;
ch = getchar();
}
str[i] = '\0';
return i;
}