| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 793 人关注过本帖
标题:各位大神,小弟刚学c语言,球大家帮看看这个程序错那了!!!
只看楼主 加入收藏
queifa
Rank: 1
等 级:新手上路
帖 子:25
专家分:9
注 册:2011-10-2
结帖率:85.71%
收藏
已结贴  问题点数:15 回复次数:9 
各位大神,小弟刚学c语言,球大家帮看看这个程序错那了!!!
#include <stdio.h>  
#define   N    2
 struct  student
        {       int num;
                 char  name[20];
                 int score[4];         };
main()
{
  int i,k,max;
  struct  student s[N];
  printf("Input data:\n");
  for(i=0;i<N;i++)
{  scanf("%d%s%d%d%d",&(s[i].num), s[i].name ,&(s[i].score[0]), &(s[i].score[1]),&(s[i].score[2]));
s[i].score[3]=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3;
}
printf("\nAverage:");
for(i=0;i<N;i++)
printf("%d", s[i].score[3]);
max =s[0].score[3];
k =0;
for (i=1;i<N;i++)
 if(s[i].score[3]>max)
   {    k = i;
    max = s[i].score[3];   }
 printf ("\n The top student :");
 printf ("%d,%s,%d, %d, %d,average:%d\n",s[k].name, s[k].score[0], s[k].score[1], s[k].score[2], s[k].score[3]);
}

注:我在vc环境中编译时没有报错,但运行时却不能把结果打在显示器上(只打出一部分数据);是不是我的vc不行啊。。。
希望大神说得详细些,谢谢谢谢谢谢谢谢谢谢。。。。。
搜索更多相关主题的帖子: include 学c语言 错那 
2011-10-30 09:59
queifa
Rank: 1
等 级:新手上路
帖 子:25
专家分:9
注 册:2011-10-2
收藏
得分:0 
怎么没人。。。
题目是:有5个学生,每个学生有3门课的成绩,从键盘输入学生的数据(包括学号 ,姓名,3门课程的成绩),计算出平均成绩,找出平均成绩最好的同学,输出到显示器
2011-10-30 10:07
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:8 
其实你能找到的,昨天刚好有人问过。  另外还有个大大的代码 我去找给你

程序代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

void input(struct student *  , int, int );
void output(struct student *, int );
void sort(struct student *, int );
void avg(struct student *,int , int);
void rank(struct student *,int,int *);
struct student
{
    float avg;
    float score[10];
    char name[10];
    int rank;
};

int main (void)
{
    struct student * pArr;
    int len,subject;
    int rankall=0;

    printf("Please enter the number of students:");
    scanf("%d", &len );
    printf("Please enter the number of subject:");
    scanf("%d", &subject);

    pArr = (struct student *) malloc(len * sizeof(struct student));
    input(pArr,len,subject);
    avg(pArr,len,subject);
    sort(pArr,len);
    rank(pArr,len,&rankall);
    output(pArr,len);

    free(pArr);
    system("pause");

    return 0;
}

void input (struct student * stutemp , int len, int sub)
{
    int i,j;

    for (i=0; i<len ; ++i)
    {
        printf("please input the student name:");
        scanf("%s",stutemp[i].name);
        for (j=0; j<sub; ++j)
        {
        printf("please input the student score[s:%d]:", j);
        scanf("%f", &stutemp[i].score[j]);
        }
    }

}

void  output (struct student * stutemp , int len)
{
    int i;

    for (i=0; i<len; ++i)
    {
        printf("-------------------------\n");
        printf("rank:%d\n", stutemp[i].rank);
        printf("name:%s\n", stutemp[i].name);
        printf("avg:%1f\n", stutemp[i].avg);
    }
}

void sort (struct student * stutemp , int len)
{
    struct student temp;
    int i,k;
    int j;
    for (i=0; i<len-1; ++i)
    {
        for (k=0; k<len-1-i; ++k)
        {
            if (stutemp[k].avg > stutemp[k+1].avg && stutemp[k].avg != stutemp[k+1].avg)
            {
                temp = stutemp[k];
                stutemp[k] = stutemp[k+1];
                stutemp[k+1] = temp;
            }
            else
            {
                for (j=0; j<=10; j++)
                    if (stutemp[k].name[j] > stutemp[k+1].name[j] && stutemp[k].name[j] != stutemp[k+1].name[j])
                    {
                        temp = stutemp[k];
                        stutemp[k] = stutemp[k+1];
                        stutemp[k+1] = temp;
                    }
                    else ;
            }
        }
    }
}

void avg(struct student * temp, int len , int subj)
{
    int i,j;
    float sum = 0;

    for (i=0; i<len; ++i)
    {
        for (j=0; j<subj; ++j)
        {
            sum = sum + temp[i].score[j];
        }
        temp[i].avg = sum / subj;
        sum = 0;
    }
}

void rank(struct student * stutemp ,int len , int * rankall)
{
    int i;
    for (i=len-1; i>=0; --i)
    {
        if (stutemp[i].avg == stutemp[i-1].avg)
        {
            *rankall = *rankall +1;
            stutemp[i].rank = *rankall;
            stutemp[i-1].rank = *rankall;
            printf("i = %d, len = %d , rank = %d , [%d].avg = [%d].avg True\n",i,len,*rankall,i,i-1);
        }
        else if ( -1 != i-1 )  //避免出现比较 [-1]的情况
        {
            *rankall = *rankall +1;
            stutemp[i-1].rank = *rankall;
            printf("i = %d, len = %d , rank = %d , [%d].avg = [%d].avg False\n",i,len,*rankall,i,i-1);
        }
    }
    return ;
}



[ 本帖最后由 随风飘荡 于 2011-10-30 10:25 编辑 ]
2011-10-30 10:22
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
Beyondyf大大的代码:
程序代码:
#include<stdio.h>
#include<string.h>
struct student
{
    char name[11];
    double avg_score;
}ss[100];
int cmp(const void * a, const void * b)
{
    struct student * pa, * pb;
    pa = (struct student *)a;
    pb = (struct student *)b;
    return (pa->avg_score == pb->avg_score) ? strcmp(a, b) : pb->avg_score - pa->avg_score;
}
int main()
{
    int t, n, m, i, j, score;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d", &n, &m);
        for(i = 0; i < n; i++)
        {
            scanf("%s", ss[i].name);
            for(ss[i].avg_score = 0, j = 0; j < m; j++)
            {
                scanf("%d", &score);
                ss[i].avg_score += score;
            }
            ss[i].avg_score /= m;
        }
        qsort(ss, n, sizeof(struct student), cmp);
        for(i = 0; i < n; i++)
            printf("%d %s %.1lf\n", i + 1, ss[i].name, ss[i].avg_score);
        //printf("\n"); //题目里没提到,但一般这类题这里应该要求加一个空行
    }
    return 0;
}

2011-10-30 10:24
queifa
Rank: 1
等 级:新手上路
帖 子:25
专家分:9
注 册:2011-10-2
收藏
得分:0 
好长啊。。。。但是我的那个代码是错在哪里了呢,请说说号码?
2011-10-30 10:35
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
看的我好晕
程序代码:
#include <stdio.h> 

#define   N    2
struct  student
        {       int num;
                 char  name[20];
                 int score[4];         };
main()
{
  int i,k,max;
  struct  student s[N];
  printf("Input data:\n");
  for(i=0;i<N;i++)
{  scanf("%d%s%d%d%d",&(s[i].num), s[i].name ,&(s[i].score[0]), &(s[i].score[1]),&(s[i].score[2]));  //这样输入也太危险了
s[i].score[3]=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3;
}
printf("\nAverage:");
for(i=0;i<N;i++)
printf("%d", s[i].score[3]);
max =s[0].score[3];
k =0;
for (i=1;i<N;i++)
if(s[i].score[3]>max)
   {    k = i;
    max = s[i].score[3];   }
printf ("\n The top student :");
printf ("%d,%s,%d, %d, %d,average:%d\n",s[k].name, s[k].score[0], s[k].score[1], s[k].score[2], s[k].score[3]);  //用%d输出字符串数组了 %s输出整形变量= =
}


[ 本帖最后由 随风飘荡 于 2011-10-30 10:38 编辑 ]
2011-10-30 10:36
queifa
Rank: 1
等 级:新手上路
帖 子:25
专家分:9
注 册:2011-10-2
收藏
得分:0 
为什么这样属危险啊“{  scanf("%d%s%d%d%d",&(s[i].num), s[i].name ,&(s[i].score[0]), &(s[i].score[1]),&(s[i].score[2]));  //这样输入也太危险了
s[i].score[3]=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3;
  要不大神给个qq在那上面聊。。。再次拜谢。。。。
2011-10-30 10:45
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
我刚学的,不过好像经常能看到有说scanf不要这么写而已。这样可读性也不好了


[ 本帖最后由 随风飘荡 于 2011-10-30 10:59 编辑 ]
2011-10-30 10:58
queifa
Rank: 1
等 级:新手上路
帖 子:25
专家分:9
注 册:2011-10-2
收藏
得分:0 
哦,那谢谢了。。。。。
2011-10-30 11:01
xxyisi
Rank: 2
等 级:论坛游民
帖 子:16
专家分:42
注 册:2011-10-28
收藏
得分:8 
最后一行输出的时候少了学号的参数,平均分单独定义为double型或者float型比较好哦。

printf ("%d,%s,%d, %d, %d,average:%d\n",!!!!!!!  s[k].name, s[k].score[0], s[k].score[1], s[k].score[2], s[k].score[3]);
2011-10-30 11:24
快速回复:各位大神,小弟刚学c语言,球大家帮看看这个程序错那了!!!
数据加载中...
 
   



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

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