标题:C语言新手,求大神指导
只看楼主
Rxsi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-7-19
结帖率:50%
已结贴  问题点数:20 回复次数:4 
C语言新手,求大神指导
# include <stdio.h>
double average(int, int, int, int);
void check(int (*)[],char(*)[]);
void check1(int (*)[], char(*)[]);
void main()
{
    printf("input the name and grades :\n");
    char name[4][10];
    int grades[4][5];
    int (*p)[5] = grades;
    char(*t)[10] = name;
    for (int i = 0; i < 4; i++)
    {
        scanf("%s", *(name + i));
        for (int j = 0; j < 4; j++)
            scanf("%d", *(grades + i) + j);
    }
    printf("the chart is:\n");
    for (int i = 0; i < 1; i++)
    {
        printf("%s ", *(name + i));
        for (int j = 0; j < 4; j++)
            printf("%d ", *(*(grades + i) + j));
        printf("\n");
    }
    double a;
    a = average(grades[0][0], grades[1][0], grades[2][0], grades[3][0]);
    printf("the average grades is: %.2lf\n", a);
    check(p,t);
    check1(p, t);
   
    return 0;
}
double average(int a, int b, int c, int d)
{
    double e;
    e = (a + b + c + d) / 4;
    return e;
   
}
void check(int (*p)[5],char (*t)[10])
{
    int i;
    int num=0;
    printf("the unqualified students are :\n");
    for (i = 0; i < 4; i++)
    {
        num = 0;
        for (int j = 0; j < 5; j++)
        {
            if (*(*(p + i) + j) < 60)
                num++;
            if (num == 2)
            {
                printf("%s : ", *(t + i));
                printf("%d %d %d %d  ", *(*(p + i)), *(*(p + i) + 1), *(*(p + i) + 2), *(*(p + i) + 3));
                printf("average : %.2lf ", average(*(*(p + i)), *(*(p + i) + 1), *(*(p + i) + 2), *(*(p + i) + 3)));
                printf("\n");
            }
        }
    }
}
void check1(int (*p)[5], char(*t)[10])
{
    int i, j;
    double b = 0;
    printf("the great students are:\n");
    for (i = 0; i < 4; i++)
    {
        b = average(*(*(p + i)), *(*(p + i) + 1), *(*(p + i) + 2), *(*(p + i) + 3), *(*(p + i) + 4));
        if (b >= 90)
            printf("%s ", *(t + i));
        if (b<90 && *(*(p + i)) >= 85 && *(*(p + i) + 1) >= 85 && *(*(p + i) + 2) >= 85 && *(*(p + i) + 3) >= 85 && *(*(p + i) + 4) >= 85)
            printf("%s  ", *(t + i));
    }
}
写了这个程序,前面都没有错,但是后面if (b<90 && *(*(p + i)) >= 85 && *(*(p + i) + 1) >= 85 && *(*(p + i) + 2) >= 85 && *(*(p + i) + 3) >= 85 && *(*(p + i) + 4) >= 85),这一段没办法判别.本段语句我想实现的是,单输入的数值都大于85时,输出该同学名字.请问为什么实现???
搜索更多相关主题的帖子: average include double C语言 
2016-09-06 23:40
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
void check(int (*)[],char(*)[]);这两句声明有问题,括号内应表明大小。
 void check1(int (*)[], char(*)[]);
 b = average(*(*(p + i)), *(*(p + i) + 1), *(*(p + i) + 2), *(*(p + i) + 3), *(*(p + i) + 4));
这一行实参有5个,比形参多一个。
2016-09-07 07:14
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
得分:10 
1、函数声明:int paixu(int *p1,int *p2);
   注意后边有个分号,所谓声明就是先知会一声,告诉编译器有这么个函数。函数返回类型和参数类型都要标全!!声明中还有一点很有意思,它可以只标注参数的类型,而省写参数名字,就是这样int paixu(int *,int *)  。因为编译器看声明时只看参数的类型。
2、另外:你的main函数用的void,最后还来个return 0;你确定你的编译器没有提警告或错误吗?
3、最大的问题在于你的error: too many arguments to function `average';你的函数average参数数量不对,形参和实参数量不一致;你编译就通过不了吧

[此贴子已经被作者于2016-9-7 08:48编辑过]

2016-09-07 08:44
Rxsi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-7-19
得分:0 
回复 2楼 ehszt
谢谢指点,我用VS2015编译的,竟然没有给我报错...形参和实参数量不一致.
2016-09-07 10:27
Rxsi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-7-19
得分:0 
回复 3楼 wanglianyi1
谢谢指点,我用VS2015编译的,竟然没有给我报错...形参和实参数量不一致.我用return 0,他也没有报错,我下次注意,谢谢指点.
2016-09-07 10:28



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




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

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