王盛帅 发表于 2020-2-21 19:51:14

变量指针做函数参数提问

题目:有三个同学的4门成绩,查找有一门以上课程不合格的学生,并输出其全部成绩
score={{65,57,70,60},{58,87,90,81},{90,99,100,98}}
应该只有第1,2位成绩,但所有的同学成绩都输入,如图

不知道问题出在了哪里?


代码如下:
#include<stdio.h>
int main()
{
      void search(float (* p),int n);
      float score={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
      search(score,3);
      return 0;
}
void search(float (* p),int n)
{
      int i,j,flag;
      for(j=0;j<n;j++)
      {
                flag=0;
                for(i=0;i<4;i++)
                        if(*(*(p+j)+i)<60)               flag=1;
                if (flag==1);
                {
                        printf("第%d的成绩:",j+1);
                        for(i=0;i<4;i++)
                              printf("%5.1f ",*(*(p+j)+i));      
                        printf("\n");      
                }
      }
}

最后的魁拔 发表于 2020-2-21 19:59:40

#include<stdio.h>
int main()
{
      void search(float (* p),int n);
      float score={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
      search(score,3);
      return 0;
}
void search(float (* p),int n)
{
      int i,j,flag;
      for(j=0;j<n;j++)
      {
                flag=0;
                for(i=0;i<4;i++)
                        if(*(*(p+j)+i)<60)
                  
                  {
                        flag=1;
                        if (flag==1);
                        {
                        printf("第%d的成绩:",j+1);
                        for(i=0;i<4;i++)
                              printf("%5.1f ",*(*(p+j)+i));      
                        printf("\n");      
                        }
                  }
                        
      }
}

major_lyu 发表于 2020-2-21 21:26:38

本帖最后由 major_lyu 于 2020-2-21 21:33 编辑

if(flag==1)后面的;去掉试试。
这个分号使得if语句结束了。后面大括号的代码与if(flag == 1)没关系了。
另外帮你优化了一下:

#include<stdio.h>
int main()
{
      void search(float (* p),int n);
      float score={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
      search(score,3);
      return 0;
}
void search(float (* p),int n)
{
      int i,j,flag;
      for(j=0;j<n;j++)
      {
                flag=0;
                for(i=0;i<4;i++)
                        if(*(*(p+j)+i)<60)               
                        {
                            flag=1;
                            break; //只要找到一个低于60分的成绩就可以跳出循环,不用接着把所有的成绩检查一遍
                        }
                if (flag==1)    //;
                {
                        printf("第%d的成绩:",j+1);
                        for(i=0;i<4;i++)
                              printf("%5.1f ",*(*(p+j)+i));      
                        printf("\n");      
                }
      }
}

王盛帅 发表于 2020-2-21 22:28:35

major_lyu 发表于 2020-2-21 21:26
if(flag==1)后面的;去掉试试。
这个分号使得if语句结束了。后面大括号的代码与if(flag == 1)没关系了。
...

说的太对了,这个才是最佳答案。

major_lyu 发表于 2020-2-21 22:30:36

王盛帅 发表于 2020-2-21 22:28
说的太对了,这个才是最佳答案。

哈哈哈,可是你还是把最佳给了别人!{:10_312:}

王盛帅 发表于 2020-2-22 13:30:51

major_lyu 发表于 2020-2-21 22:30
哈哈哈,可是你还是把最佳给了别人!

https://fishc.com.cn/forum.php?mod=viewthread&tid=157392&page=1#pid4388399
帮我看一下这个问题,这次不会手抖了。
页: [1]
查看完整版本: 变量指针做函数参数提问