| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2298 人关注过本帖
标题:我又有问题了。。。结构体数组。。。老师还说要用输入负数就结束,可我只能 ...
只看楼主 加入收藏
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
结帖率:91.67%
收藏
已结贴  问题点数:37 回复次数:20 
我又有问题了。。。结构体数组。。。老师还说要用输入负数就结束,可我只能二选一啊。就没写这步
就是总分那里怎么记录不了啊,上一个也是这么写的,就可以记录啊,why????
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct list
{
    int num;
    int name;
    int grade;
    double sum;
    double ave;
};
struct list stu[30];
int main()
{
    int i,n,y=0,x=0;
    printf("请输入学生人数:");
    scanf("%d",&n);
    for(i=0;i<n;++i)
    {
        printf("输入学生的学号:");
        scanf("%d",&stu[i].num);
        printf("输入学生的分数:");
        scanf("%d",&stu[i].grade);   
    }   
    printf("不及格名单:\n学号\t成绩\t\n");
    for (i=0;i<n;++i)
    {
        if(stu[i].grade<60)
        {
            printf("%d\t",stu[i].num);
            printf("%d\t\n",stu[i].grade);
            x++;        
        }
    }
      printf("不及格人数:%d\n",x);
      printf("----------------------------------------------------\n");
      for(i=0;i<n;++i)  
     {   
         stu[i].sum=0;
         stu[i].sum+=stu[i].grade;
         stu[i].ave+=stu[i].sum/n;
     }
    printf("高于均分名单:\n学号\t成绩\t\n");
    for(i=0;i<n;++i)
    {
        if(stu[i].grade>=stu[i].ave)
        {  
            ++y;
            printf("%d",stu[i].num);
            printf("%.2lf",stu[i].grade);
        }
    }
    printf("高于均分人数:%d\n",y);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: include double 结构体 记录 
2014-12-03 23:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
挤牙膏一样地。你整个程序的要求到底是怎样的?设计的数据结构是怎样的?

授人以渔,不授人以鱼。
2014-12-03 23:21
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
回复 2 楼 TonyDeng
你在啊!我刚去洗澡了,要断网了。。。
学生成绩统计 (一维数组) 从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩, 当输入成绩为负值时, 输入结束, 分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数, 并打印这些学生的名单;(3)以直方图方式统计各分数段的学生人数及所占的百分比。
形式如下:分段 人数 图形
<60 3(10%)***
60‐69 8(…) ********
70‐79 7(…) *******
80‐89 8(…) ********
>=90 4(…) ***

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-12-03 23:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
做一个给你看也没问题,但可不能让你复制黏贴了去交作业,第一老师肯定知道不是你自己写的,第二我绝对不用所谓的纯C语言写(让你没法照搬)。

授人以渔,不授人以鱼。
2014-12-03 23:42
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
回复 4 楼 TonyDeng
好狠啊!!!😂
我不照搬、就看看,我手机上的😎那你别写的太难了,我会看不懂滴!
那你写吧,我明天上午上完课十点多才能看~~~

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-12-03 23:59
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
我的表情居然发不出!!!(震惊)。  睡觉了!你明天写也行啊!反正你很快就写出了!!!好晚了

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-12-04 00:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
用vs2012写的,试试项目能不能打开,不要理会找不到项目,这个test5只是解决方案中的项目之一,其余的没打包放出来。

test5.zip (27.82 KB)

授人以渔,不授人以鱼。
2014-12-04 14:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:8 
主要代码如下,其余的小工具无关重要:

程序代码:
/*
http://bbs.bccn.net/thread-439538-1-1.html

题目:学生成绩统计 (一维数组) 从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩, 当输入成绩为负值时, 输入结束, 分别
实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数, 并打印这些学生的名单;
(3)以直方图方式统计各分数段的学生人数及所占的百分比。
形式如下:分段 人数 图形
<60 3(10%)***
60‐69 8(…) ********
70‐79 7(…) *******
80‐89 8(…) ********
>=90 4(…) ***
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "common.h"

// 学生信息结构
struct Student_Info
{
    int    ID;                  // 学号
    char   Name[20];            // 姓名(最多19个字符)
    double Score;               // 成绩
    int    Grade;               // 等级
};

// 统计项结构
struct Statistics_Item
{
    double low;                 // 统计段下限
    double high;                // 统计段上限
    size_t count;               // 人数
    double percentage;          // 百分比
};

// 全局数据
Student_Info Students[30];                      // 学生数组(最多不超过30人)
const double Qualify_Value = 60.0;              // 成绩合格线
Statistics_Item Statistics_Data[] =             // 统计结果数组
{
    {  0.0,  59.0, 0, 0.0 },
    { 60.0,  69.0, 0, 0.0 },
    { 70.0,  79.0, 0, 0.0 },
    { 80.0,  89.0, 0, 0.0 },
    { 90.0, 100.0, 0, 0.0 }
};

// 函数原型
void Show_StudentInfo(Student_Info student);    // 输出单个学生的明细信息
void List_Students(void);                       // 输出所有学生的明细资料
void Input_Data(const char* fileName);          // 输入学生数据
double Get_Average(void);                       // 求取平均成绩
size_t Statistics_Unqualified(void);            // 统计不合格学生人数并输出相关学生信息
void Statistics_GoodStudents(double average);   // 统计在平均成绩以上的学生
void Statistics(void);                          // 统计

// 程序主入口
int main(int argc, char* argv[])
{
    // 输入学生数据,如果有命令行参数,则从文本文件读入数据,否则从键盘输入
    Input_Data((argc > 1) ? argv[1] : NULL);
    List_Students();

    putchar('\n');
    Statistics_Unqualified();

    putchar('\n');
    Statistics_GoodStudents(Get_Average());

    putchar('\n');
    Statistics();

    Pause("\n按任意键继续...");
    return EXIT_SUCCESS;
}

void Show_StudentInfo(Student_Info student)
{
    printf_s("%4u   %-20s   %6.2f   %-4d\n", student.ID, student.Name, student.Score, student.Grade);
}

void List_Students(void)
{
    printf_s("%4s   %-20s   %6s   %4s\n", "学号", "姓名", "成绩", "等级");
    // 注:_countof()是宏,计算静态分配的数组的元素个数,在stdlib.h头中定义
    for (size_t index = 0; (index < _countof(Students)) && (Students[index].Score >= 0); ++index)
    {
        Show_StudentInfo(Students[index]);
    }
}

void Input_Data(const char* fileName)
{
    FILE* file = stdin;

    if (fileName != NULL)
    {
        errno_t errorCode = fopen_s(&file, fileName, "rt");
        if (errorCode != 0)
        {
            file = stdin;
        }
    }

    for (size_t index = 0; index < _countof(Students); ++index)
    {
        if (file == stdin)
        {
            // 从键盘输入数据
            printf_s("请输入第%2u个学生的数据(成绩为负数结束):\n", index + 1);
            do
            {
                printf_s("学号: ");
                fflush(stdin);
            } while(scanf_s("%d", &Students[index].ID) == 0);
            do
            {
                printf_s("姓名: ");
                fflush(stdin);
            } while(gets_s(Students[index].Name, _countof(Students[index].Name) - 1) == NULL);
            do
            {
                printf_s("成绩: ");
                fflush(stdin);
            } while(scanf_s("%lf", &Students[index].Score) == 0);
            if (Students[index].Score < 0)
            {
                // 当输入的成绩为负数时结束输入
                Students[index].ID = 0;
                Students[index].Name[0] = '\0';
                break;
            }
            putchar('\n');
        }
        else
        {
            // 从文本文件读入数据
            if ((fscanf_s(file, "%d %20s %lf", &Students[index].ID, Students[index].Name, 20, &Students[index].Score) != 3) || (Students[index].Score < 0))
            {
                Students[index].ID = 0;
                Students[index].Name[0] = '\0';
                break;
            }
        }
    }

    if (file != stdin)
    {
        fclose(file);
    }
}

size_t Statistics_Unqualified(void)
{
    size_t count = 0;

    printf_s("不合格学生:\n");
    for (size_t index = 0; (index < _countof(Students)) && (Students[index].Score >= 0); ++index)
    {
        if (Students[index].Score < Qualify_Value)
        {
            if (count == 0)
            {
                printf_s("%4s   %-20s   %6s   %4s\n", "学号", "姓名", "成绩", "等级");
            }
            ++count;
            Show_StudentInfo(Students[index]);
        }
    }
    printf_s("人数 = %u\n", count);

    return count;
}

double Get_Average(void)
{
    double sum = 0.0;
    size_t number = 0;

    for (size_t index = 0; (index < _countof(Students)) && (Students[index].Score >= 0); ++index)
    {
        sum += Students[index].Score;
        ++number;
    }

    return sum / number;
}

void Statistics_GoodStudents(double average)
{
    size_t count = 0;

    printf_s("成绩在平均分(%6.2f)以上的学生:\n", average);
    for (size_t index = 0; (index < _countof(Students)) && (Students[index].Score >= 0); ++index)
    {
        if (Students[index].Score >= average)
        {
            if (count == 0)
            {
                printf_s("%4s   %-20s   %6s   %4s\n", "学号", "姓名", "成绩", "等级");
            }
            ++count;
            Show_StudentInfo(Students[index]);
        }
    }
    printf_s("人数 = %u\n", count);
}

void Statistics(void)
{
    size_t total = 0;

    for (size_t i = 0; (i < _countof(Students)) && (Students[i].Score >= 0); ++i)
    {
        ++total;
        for (size_t j = 0; j < _countof(Statistics_Data); ++j)
        {
            if ((Students[i].Score >= Statistics_Data[j].low) && (Students[i].Score <= Statistics_Data[j].high))
            {
                ++Statistics_Data[j].count;
            }
        }
    }

    printf_s("%15s   %4s   图形\n", "分数", "人数");
    for (size_t i = 0; i < _countof(Statistics_Data); ++i)
    {
        printf_s("%6.2f - %6.2f  %4u   ", Statistics_Data[i].low, Statistics_Data[i].high, Statistics_Data[i].count);
        for (size_t j = 0; j < Statistics_Data[i].count; ++j)
        {
            putchar('*');
        }
        putchar('\n');
    }
}



授人以渔,不授人以鱼。
2014-12-04 14:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
这个帖,我教了你很多啦:如何建立自己的头、多模块编译、从磁盘文件读入数据提高输入效率及其与键盘输入的切换、命令行参数的使用、结构体数组的初始化……等等。如果你琢磨得透,想一想我为什么定义那些数据结构、以及如何使用的、为了将来的什么需要而这样做……以后自己勤加修改,逐步完善,比做什么题目都强。

你老师布置这个课题,是需要你逐步完成的,不可能一下子做出来,所以不要急。反复修改,不要做过就算,这是关键!

运行过之后,你会发现,原先定义的数据结构和用成绩为负结束的要求,是有不合理之处的。因为在输入成绩之前,你得先输入学生资料,到输入成绩为负,废了刚输入这笔记录的学生ID和姓名等,那是白劳动,而且也不该由成绩结束学生资料的录入。学生资料是应该另外建立数据表的,然后再根据现有学生来输入成绩,不是混在一起。再如,多个科目如何处理呢?你想得到这些,就会去想如何修改。

至于等级的问题,我不知道你的等级怎么评,所以没写上去,但只要你看懂了这个程序,增加等级进去完全不是什么问题,已经埋下了写入等级的入口了。


[ 本帖最后由 TonyDeng 于 2014-12-4 15:20 编辑 ]

授人以渔,不授人以鱼。
2014-12-04 15:03
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:0 
for(i=0;i<n;++i)  
     {   
         stu[i].sum=0;
         stu[i].sum+=stu[i].grade; //问题在这段: 一个.sum只累积了一个.grade  ,按题意,sum和ave不应该是结构体中的成员。
         stu[i].ave+=stu[i].sum/n;
     }
2014-12-04 15:05
快速回复:我又有问题了。。。结构体数组。。。老师还说要用输入负数就结束,可我 ...
数据加载中...
 
   



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

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