标题:[求助]写了一个计算加权平均分的程序,总是报错。大神啊~
只看楼主
医学唯我
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-7-20
结帖率:100%
已结贴  问题点数:20 回复次数:5 
[求助]写了一个计算加权平均分的程序,总是报错。大神啊~
我是利用结构体和全局变量来写的。不知道是不是结构体使用或是算法有问题,“显示已输入数据”和“计算平均分”两个小函数总是显示不正确。一下午都没弄对,希望有高手帮忙。先道声谢啦~

#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;
}
 
搜索更多相关主题的帖子: include 结构体 print 
2011-07-20 20:48
heimodao
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:88
专家分:172
注 册:2011-4-8
得分:0 
好长……LZ今天一申请ID就问这个,菜鸟不懂,帮你顶
2011-07-20 21:54
医学唯我
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-7-20
得分:0 
回复 2楼 heimodao
O(∩_∩)O~谢谢帮顶哟
2011-07-20 22:51
niitzz
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2011-7-20
得分:0 
在我的环境上运行是没有错误的呀
哥们可以把错误传上来看看
2011-07-20 23:21
医学唯我
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-7-20
得分:0 
回复 4楼 niitzz

最后面,显示时有问题,还有算平均分也有问题。能帮忙看看么?
2011-07-21 09:09
deng520126
Rank: 2
等 级:论坛游民
帖 子:17
专家分:46
注 册:2011-7-20
得分:20 
int i;
    char j;
不要,因为你定义了没使用;
int i,total_marks = 0;
改为:
int i;
float total_marks = 0;

 printf("您的加权平均分为:%.2d", ave_marks);
改为: printf("您的加权平均分为:%.2f", ave_marks);
2011-07-21 10:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-345755-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.363206 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved