鱼C论坛

 找回密码
 立即注册
查看: 1521|回复: 5

[已解决]变量指针做函数参数提问

[复制链接]
发表于 2020-2-21 19:51:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:有三个同学的4门成绩,查找有一门以上课程不合格的学生,并输出其全部成绩
score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}}
应该只有第1,2位成绩,但所有的同学成绩都输入,如图
QQ截图20200221194928.png
不知道问题出在了哪里?


代码如下:
#include<stdio.h>
int main()
{
        void search(float (* p)[4],int n);
        float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
        search(score,3);
        return 0;
}
void search(float (* p)[4],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
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         void search(float (* p)[4],int n);
  5.         float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  6.         search(score,3);
  7.         return 0;
  8. }
  9. void search(float (* p)[4],int n)
  10. {
  11.         int i,j,flag;
  12.         for(j=0;j<n;j++)
  13.         {
  14.                 flag=0;
  15.                 for(i=0;i<4;i++)
  16.                         if(*(*(p+j)+i)<60)
  17.                     
  18.                     {
  19.                         flag=1;
  20.                         if (flag==1);
  21.                         {
  22.                         printf("第%d的成绩:",j+1);
  23.                         for(i=0;i<4;i++)
  24.                                 printf("%5.1f ",*(*(p+j)+i));        
  25.                         printf("\n");        
  26.                         }
  27.                     }
  28.                         
  29.         }
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-21 19:59:40 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         void search(float (* p)[4],int n);
  5.         float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  6.         search(score,3);
  7.         return 0;
  8. }
  9. void search(float (* p)[4],int n)
  10. {
  11.         int i,j,flag;
  12.         for(j=0;j<n;j++)
  13.         {
  14.                 flag=0;
  15.                 for(i=0;i<4;i++)
  16.                         if(*(*(p+j)+i)<60)
  17.                     
  18.                     {
  19.                         flag=1;
  20.                         if (flag==1);
  21.                         {
  22.                         printf("第%d的成绩:",j+1);
  23.                         for(i=0;i<4;i++)
  24.                                 printf("%5.1f ",*(*(p+j)+i));        
  25.                         printf("\n");        
  26.                         }
  27.                     }
  28.                         
  29.         }
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 21:26:38 | 显示全部楼层
本帖最后由 major_lyu 于 2020-2-21 21:33 编辑

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

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         void search(float (* p)[4],int n);
  5.         float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  6.         search(score,3);
  7.         return 0;
  8. }
  9. void search(float (* p)[4],int n)
  10. {
  11.         int i,j,flag;
  12.         for(j=0;j<n;j++)
  13.         {
  14.                 flag=0;
  15.                 for(i=0;i<4;i++)
  16.                         if(*(*(p+j)+i)<60)                 
  17.                         {
  18.                             flag=1;
  19.                             break; //只要找到一个低于60分的成绩就可以跳出循环,不用接着把所有的成绩检查一遍
  20.                         }
  21.                 if (flag==1)    //;
  22.                 {
  23.                         printf("第%d的成绩:",j+1);
  24.                         for(i=0;i<4;i++)
  25.                                 printf("%5.1f ",*(*(p+j)+i));        
  26.                         printf("\n");        
  27.                 }
  28.         }
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

说的太对了,这个才是最佳答案。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 22:30:36 | 显示全部楼层
王盛帅 发表于 2020-2-21 22:28
说的太对了,这个才是最佳答案。

哈哈哈,可是你还是把最佳给了别人!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 13:30:51 | 显示全部楼层
major_lyu 发表于 2020-2-21 22:30
哈哈哈,可是你还是把最佳给了别人!

https://fishc.com.cn/forum.php?m ... p;page=1#pid4388399
帮我看一下这个问题,这次不会手抖了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 03:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表