| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:问下,这个怎样改错
只看楼主 加入收藏
紫禁
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-12-7
结帖率:100%
收藏
 问题点数:0 回复次数:3 
问下,这个怎样改错
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-12-13 20:05
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
语文后面的逗号错了。而且你的N定义的太小了。你可不可以不截图啊。
2011-12-13 20:09
紫禁
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-12-7
收藏
得分:0 
回复 2楼 laznrbfe
你好,我想问下,向下面这个截图,我想是各个数字对应每个文字,该怎样改,而且总分的代码怎样写,麻烦下,谢谢
程序代码:
/*
    随机生成M个同学3个科目的成绩,范围在40~100(含)
    统计每个同学的平均分和每个科目的平均分
    将同学按总分(平均分)由高到低排列
    输出特定格式的报表
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>

/*M必须大于1*/
#define M 5
#define N 5

void input(int scores[][3]);
void cal(int scores[][3], double avgR[], double avgC[]);
void sort(double avgR[], int idx[]);

int main(void)
{
    char *ke[N] = {"语文","数学","英语","平均分","总分"};
    char *names[M] = {"张三", "李四", "王五", "赵六", "田七"};
    int scores[M][3] = {0}, idx[M] = {0}, i, j;
    double avgR[M] = {0}, avgC[3] = {0};
    input(scores);
    cal(scores, avgR, avgC);
    sort(avgR, idx);
    for(j=0;j<N;j++)
    {
        printf("    %8s", ke[j]);
   
    }
    for (i = 0; i < M; i++)
    {
        printf("%8s", names[i]);
        for (j = 0; j < 3; j++)
        {
            printf("%4d  ", scores[i][j]);
        }
        printf("%5.1lf\n", avgR[i]);
    }

    return 0;
}

void input(int score[][3])
{
    int i, j;
    for (i = 0; i < M; i++)
        for (j = 0; j < 3; j++)
            score[i][j] = 40 + rand() % 61;
    return;
}
void cal(int scores[][3], double avgR[], double avgC[])
{
    int i, j;
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < 3; j++)
        {
            avgR[i] += scores[i][j];
            avgC[j] += scores[i][j];
        }
        avgR[i] /= 3;
    }
    for (j = 0; j < 3; j++)
        avgC[j] /= M;
    return;
}
void sort(double avgR[], int idx[])
{
    int i, j;
    for (i = 0; i < M; i++)
        idx[i] = i;
    for (i = 0; i < M - 1; i++)
    {
        for (j = i + 1; j < M; j++)
            if (avgR[i] < avgR[j])
                idx[i] = j, idx[j] = i;
    }
    return;
}               
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 紫禁 于 2011-12-13 20:33 编辑 ]
2011-12-13 20:22
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:0 
回复 3楼 紫禁
闲着无聊,帮楼主完善了下
其实就是个打印字符长度以及对齐问题,不多说了,看代码,测试通过
程序代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>

/*M必须大于1*/
#define M 5
#define N 5

void input(int scores[][3]);
void cal(int scores[][3], double avgR[], double avgC[]);
void sort(double avgR[], int idx[]);
void printstring(char *s, int n); //打印给定长度的字符串

int main(void)
{
    char *ke[N] = {"语文","数学","英语","平均分","总分"};
    char *names[M] = {"张三", "李四", "王五", "赵六", "田七"};
    int scores[M][3] = {0}, idx[M] = {0}, i, j;
    double avgR[M] = {0}, avgC[3] = {0};
    input(scores);
    cal(scores, avgR, avgC);
    sort(avgR, idx);
    for(j=0;j<N;j++)
    {
        if(j==0)
            printstring(" ",8);
        printstring(ke[j],8);
  
    }
    printf("\n");
    for (i = 0; i < M; i++)
    {
        printstring(names[i],8);
        for (j = 0; j < 3; j++)
        {
            printf("%3d     ", scores[i][j]); //3位数+5个空格
        }
        printf("%3.1lf    ", avgR[i]); //4位数+4个空格
        printf("%3.0f     \n", avgR[i]*3); //总分=平均分*3
    }
    getchar();
    return 0;
}

void input(int score[][3])
{
    int i, j;
    for (i = 0; i < M; i++)
        for (j = 0; j < 3; j++)
            score[i][j] = 40 + rand() % 61;
    return;
}
void cal(int scores[][3], double avgR[], double avgC[])
{
    int i, j;
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < 3; j++)
        {
            avgR[i] += scores[i][j];
            avgC[j] += scores[i][j];
        }
        avgR[i] /= 3;
    }
    for (j = 0; j < 3; j++)
        avgC[j] /= M;
    return;
}
void sort(double avgR[], int idx[])
{
    int i, j;
    for (i = 0; i < M; i++)
        idx[i] = i;
    for (i = 0; i < M - 1; i++)
    {
        for (j = i + 1; j < M; j++)
            if (avgR[i] < avgR[j])
                idx[i] = j, idx[j] = i;
    }
    return;
}               

void printstring(char *s, int n)
{
    int i=strlen(s),j;
    if(i<=n)
        {
            printf("%s",s);
            for(j=0;j<(n-i);j++)
                printf(" ");
        }
    else
        printf("%8s",s);
}

 
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 ggyy4k 于 2011-12-13 23:08 编辑 ]
2011-12-13 23:07
快速回复:问下,这个怎样改错
数据加载中...
 
   



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

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