| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1101 人关注过本帖
标题:与动态内存分布有关的编程题,求解!
只看楼主 加入收藏
Missm
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-6-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
与动态内存分布有关的编程题,求解!
编写一个C语言程序,输入n,然后输入n个学生信息,分别统计并输出男、女(sex=0女、 sex=1男)同学的平均成
绩.
要求:使用动态内存分配,输出整数值,若某性别学生没有则不输出,已知学生信息定义如下:
struct student
int num;
char name[20];
int sex;
float score;
(注意]输入n和每位字生的信息各占一行,输入的字生各项信思间用半角空格分隔;输出先女后男,每个性别占
-行 (若某各性别没有输入则不输出),,性别 和平均成绩之间用一一个半角空格分隔,输入输出格式如下所示(下例
内容前5行为输入,后两行为输出),格式错误算结果错误。
1张三166
2李四178
3小红065
4王五165
女65
男69
搜索更多相关主题的帖子: 输入 性别 内存 动态 输出 
2020-06-15 10:26
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:20 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

struct student
{
    int num;
    char name[20];
    int sex;
    float score;
};

int main()
{
    struct student* stu;
    int n, i, j = 0, first = 0,dot=0;
    int m;
    char str[256];
    float score[2];
    int num[2];
    memset(score, 0, sizeof(float) * 2);
    memset(num, 0, sizeof(int) * 2);

    printf("请输入学生个数:");
    scanf("%d", &n);
    getchar();

    stu = (struct student*)malloc(sizeof(struct student) * n);

    for(j=0;j<n;j++)
    {
        memset(str,0,256);
        fgets(str,256,stdin);
        first = 0;

        i = 0;
        while (str[i] != ';')
        {
            if (first == 0)
            {
                (stu + j)->num = str[i] - '0';
                first = 1;
            }
            else
                (stu + j)->num = (stu + j)->num * 10 + str[i]-'0';
            i++;
        }

        m = i+1;
        while (str[++i] != ';');
        memset((stu + j)->name, 0, 20);
        memcpy((stu + j)->name, &str[m],i-m);

        first = 0;
        while (str[++i] != ';')
        {
            if (first == 0)
            {
                (stu + j)->sex = str[i] - '0';
                first = 1;
            }
            else
                (stu + j)->sex  = (stu + j)->sex * 10 + str[i] - '0';
        }

        first = 0;
        dot = 0;
        while (str[++i] != ';')
        {
            if (first == 0)
            {
                (stu + j)->score = (float)(str[i] - '0');
                first = 1;
            }
            else
            {
                if (str[i] == '.')
                {
                    dot = 1;
                }
                else
                {
                    if (dot)
                    {
                        (stu + j)->score = (stu + j)->score+ (str[i] - '0')/(float)pow(10,dot++);
                    }
                    else
                    {
                        (stu + j)->score = (stu + j)->score * 10 + str[i] - '0';
                    }
                }
            }
        }

        printf("%d,%s,%d,%f\n", (stu + j)->num, (stu + j)->name, (stu + j)->sex, (stu + j)->score);
    }

    for (j = 0; j < n; j++)
    {
        if ((stu + j)->sex == 0)
        {
            score[0] += (stu + j)->score;
            num[0]++;
        }
        else
        {
            score[1] += (stu + j)->score;
            num[1]++;
        }
    }

    printf("女 %.2f\n", score[0] / num[0]);
    printf("男 %.2f\n", score[1] / num[1]);

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-06-15 14:28
快速回复:与动态内存分布有关的编程题,求解!
数据加载中...
 
   



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

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