我的最后一个定义函数为什么那个if总是为1啊 那个a不知道是不是指向了另外的地址啊

A_short 安徽三联学院 2017-11-13 09:36:13
#include<stdio.h>
#include<stdlib.h>

void ave(int (*p)[6],int n);
void find(int (*p)[6]);
void les(int (*p)[6]);
int main()
{
int a[4][6];
int i,j,n;
printf("请输入他们的学号和成绩:");
for(i=0;i<4;i++)
{
for(j=0;j<6;j++)
scanf("%d",&a[i][j]);
}
ave(a,1);
find(a);
les(a);
system("pause");
}
void ave(int (*p)[6],int n)
{
int b=0;
float t=0;
for(int i=0;i<4;i++)
b+=*(*(p+i)+n);
t=b/5;
printf("第一门的成绩为%.2f \n",t);
}
void find(int (*p)[6])
{
int t=0;
for(int i=0;i<4;i++)
{for(int j=1;j<6;j++)
{if(*(*(p+i)+j)<60)
t++;
}
while(t>=2)
{
for(int j=0;j<6;j++)
printf("%d ",*(*(p+i)+j));
putchar('\n');
t=0;
}
}
}
void les(int (*p)[6])
{
int a=0,i,j,q=0;
float w=0;
for(i=0;i<4;i++)
{
for(j=1;j<6;j++)
{
if(*(*(p+i)+j)>=85)
{q++;}
a+=(*(*p+i)+j);
}
w=a/5;
if(q==5||(w>=90))
{
printf("q=%d ",q);
printf("a=%d ",a);
printf("w=%f \n",w);
printf("这个学生是:%d \n",*(*(p+i)));
}
q=0;
a=0;
}
}
...全文
98 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
paschen 2017-11-14
建议单步跟踪你程序运行,观察变量变化情况,很容易分析出原因
  • 打赏
  • 举报
回复
赵4老师 2017-11-14
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
  • 打赏
  • 举报
回复
自信男孩 2017-11-14
问题出在les函数里的这句:
a+=(*(*p+i)+j);
注意,仔细分析这句代码; 是不是应该这样:
a += *(*(p+i)+j);
前面都写对了,到这儿写错了。 代码中变量名定义建议做到见名知意:
#include<stdio.h>
#include<stdlib.h>

void ave(int (*p)[6],int n);
void find(int (*p)[6]);
void les(int (*p)[6]);

void print_all_info(int (*arr)[6], int size);
int main()
{
    int a[4][6];
    int i,j,n;
    printf("请输入他们的学号和成绩:");
    for(i=0;i<4;i++)
    {
        for(j=0;j<6;j++)
            scanf("%d",&a[i][j]);
    }
    print_all_info(a, 4);
    ave(a,1);
    find(a);
    les(a);
    system("pause");

    return 0;
}

void print_all_info(int (*arr)[6], int size)
{
    int i, j;

    for (i = 0; i < size; i++) {
        for (j = 0; j < 6; j++)
            printf("%d  ", arr[i][j]);
        putchar(10);
    }
    putchar(10);

}
void ave(int (*p)[6],int n)
{
    int b=0;
    float t=0;
    for(int i=0;i<4;i++)
        b+=*(*(p+i)+n);
    t=b/5;
    printf("第一门的成绩为%.2f  \n",t);
}
void find(int (*p)[6])
{
    int t=0;
    for(int i=0;i<4;i++)
    {for(int j=1;j<6;j++)
        {if(*(*(p+i)+j)<60)
            t++;
        }
        while(t>=2)
        {
            for(int j=0;j<6;j++)
                printf("%d ",*(*(p+i)+j));
            putchar('\n');
            t=0;
        }
    }
}
void les(int (*p)[6])
{
    int sum = 0,cnt=0;
    float ave = 0;
    int i, j;

    for(i=0;i<4;i++)
    {
        for(j=1;j<6;j++)
        {
            if(*(*(p+i)+j)>=85)
            {
                cnt++;
            }
            sum += *(*(p+i)+j);
        }
        ave = sum/5;
        if(cnt >= 5||(ave>=90))
        {
            printf("cnt = %d ", cnt);
            printf("sum = %d ", sum);
            printf("ave = %.2f \n", ave);
            printf("这个学生是:%d \n",*(*(p+i)));
        }
        cnt = 0;
        sum=0;
    }
}
  • 打赏
  • 举报
回复
A_short 2017-11-13
输出为什么是这样
  • 打赏
  • 举报
回复
A_short 2017-11-13
最后一个函数的作用是输出平均成绩在90分以上的学号或者是每门成绩在85分以上的学号
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2017-11-13 09:36
社区公告
暂无公告