鱼C论坛

 找回密码
 立即注册
查看: 2592|回复: 13

C指针的一个程序。求解。

[复制链接]
发表于 2012-6-21 23:24:36 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>

  2. //程序实现查找不及格学生的学号和输出不及格学生的所有成绩。

  3. int main ()

  4. {
  5.     int score [][4] = {{60,61,62,63},{64,65,66,67},{68,69,70,71}};

  6.     int *search (int (*pointer)[4]);

  7.     int *p;

  8.     int i,j;

  9.     for (i = 0;i <= 2;i++)

  10.     {
  11.         p = search (score+i);

  12.             for (j = 0;j <= 3;j++)

  13.                 {
  14.                     printf ("%d\n",*(p+j));
  15.                 }

  16.     }

  17.     return 0;
  18. }

  19. int *search (int (*pointer)[4])

  20. {
  21.     int i;

  22.     for (i = 0;i <= 3;i++)

  23.         {
  24.             if (*(*pointer)+i < 60)
  25.                 {
  26.                     return *(pointer)+i;//返回的是指针型的数据啊。
  27.                 }
  28.         }

  29.     return NULL;

  30. }

  31. //编译也没错误,运行后会显示 sh: 1: syntax error: "(" unexpected   
  32. //怎么回事,求解。编译器是CB
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-22 04:57:02 | 显示全部楼层
你的 *p 指向哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-22 14:43:53 | 显示全部楼层
#include "stdafx.h"

int main ()

{

    int score [][4] = {{60,58,62,63},{64,65,55,67},{68,69,70,71}};



    int *search (int (*pointer)[4]);



    int *p;



    int i,j;



    for (i = 0;i <= 2;i++)



    {
                if(search (score+i))
                {
            p = search (score+i);

            for (j = 0;j <= 3;j++)
             {

                    printf ("%d\n",*(p+j));

              }

                }
                else
                        continue;





    }



    return 0;

}



int *search (int (*pointer)[4])



{

    int i;



    for (i = 0;i <= 3;i++)



        {

            if (*(*pointer+i) < 60)

                {

                    return *pointer;//返回的是指针型的数据啊。

                }

        }



    return NULL;

}
你的代码错误挺多的,我调试了下修改好了,能实现你要的功能。学号你没有设计好。。你自己想办法实现吧。还有打印的时候,再设计下输出四个就换行。。。你自己分析下你错误的原因根据我的代码。我改了两处。。。若要详解,就给我留言。。。LZ加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-22 14:45:25 | 显示全部楼层
我把你头文件改了,如果编译不通过,你就改回去#include<stdio.h>,只因为我建的cpp文件,你的是.c文件。。。这个没关系的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-22 17:35:39 | 显示全部楼层
先谢谢楼上,但我想知道我错哪了。学号就是main里面的i。。。{:2_28:} 代码写的不好。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-22 17:40:58 | 显示全部楼层
Tzdner_C    , 你的代码运行后。。。错误也一样。。。编译没错误,运行后会显示 sh: 1: syntax error: "(" unexpected
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-22 19:21:34 | 显示全部楼层

你用的什么编译器?我这边运行的没问题哦。。。我还把你成绩改了一下,你之前没有不及格的。。。我改了两个不及格,都打印出来了。。。。你好好看看跟我的代码是不是一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-22 19:35:47 | 显示全部楼层
#include "stdafx.h"

int main ()
{
    int score [][4] = {{60,58,62,63},{64,65,55,67},{68,69,70,71}};
    int *search (int (*pointer)[4]);
    int *p;
    int i,j;
    for (i = 0;i <= 2;i++)
    {
                if(search (score+i))  //这里我帮你做了个判断,因为你的那个函数里面便利数组的时候,若都及格了会返回NULL,然后p的值为NULL,后面继续*(p+j)肯定会报错。然后我这里做这个判断,P的值为NULL的时候会继续循环,而不会打印(*(p+j)).
                {
            p = search (score+i);

            for (j = 0;j <= 3;j++)
             {
                  printf ("%d\n",*(p+j));

             }
                }
                else
                        continue;
    }
    return 0;
}
int *search (int (*pointer)[4])
{
    int i;

    for (i = 0;i <= 3;i++)
    {
            if (*(*pointer+i) < 60)         //这里你之前写的是(*(*pointer)+i < 60).这里*pointer是指向成绩的指针int *类型,*(*pointer)已经是学生成绩了,所以你自己想想再+i是什么东东。

                        {
                    return *pointer;//返回的是指针型的数据啊。//这里你之前是*pointer+i.我改了,因为你要求的是,只要有一门不及格,就打印出这个学生的所有成绩,你+i返回的话,就会打印出从这个不及各的成绩开始后面的四门成绩,不合你的意思。
            }
    }
    return NULL;

}
我这次解释的够详细了,代码里面的注释,就是你问题所在。。。我执行了没有任何问题。。。你粘代码的时候粘合适哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-22 19:43:15 | 显示全部楼层
本帖最后由 programmer 于 2012-6-22 19:44 编辑

姐,我运行的时候真有错。。。编译器是Code::Blocks

if (*(*pointer+i) < 60)         //这里你之前写的是(*(*pointer)+i < 60).这里*pointer是指向成绩的指针int *类型,*(*pointer)已经是学生成绩了,所以你自己想想再+i是什么东东。

//*pointer是指向行,在外面加i是指向列的呀。我括号少写一个吧。

  1.             if (*((*pointer)+i) < 60)    //这我多加了个括号
  2.                 {
  3.                     return *(pointer)+i;//返回的是指针型的数据啊。
  4.                 }

  5.     return NULL;
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-23 01:16:05 | 显示全部楼层
  1. #include <stdio.h>


  2. //程序实现查找不及格学生的学号和输出不及格学生的所有成绩。


  3. int main ()


  4. {

  5.     int score [][4] = {{60,51,62,63},{64,65,66,67},{68,39,70,71}};


  6.     int *search (int (*pointer)[4]);


  7.     int *p;


  8.     int i,j;


  9.     for (i = 0;i <= 2;i++)


  10.     {

  11.         p = search (score+i);

  12.                 if(p==*(score+i))               
  13.                 {

  14.             for (j = 0;j <= 3;j++)


  15.                 {

  16.                     printf ("%4d",*(p+j));

  17.                 }
  18.                         printf("\n");
  19.                 }


  20.     }


  21.     return 0;

  22. }


  23. int *search (int (*pointer)[4])


  24. {

  25.     int i;


  26.     for (i = 0;i <= 3;i++)


  27.         {

  28.             if (*(*pointer+i) < 60)                //你的这里要是写成*(*pointer)+i 这样的话 就是判断每一行的第一个元素加上0-3 是否小于60 而不是判断每一行的每一个元素是否小于60 所以应该改为*(*pointer+i)

  29.                 {

  30.                     return *pointer;  //返回的是指针型的数据啊。 这里你要是返回 *pointer+i的地址的话 你想下 *pointer+i 是哪个地址 细细的想下 会想出来的

  31.                 }

  32.         }


  33.     return NULL;

  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-23 01:56:46 | 显示全部楼层
programmer 发表于 2012-6-22 19:43
姐,我运行的时候真有错。。。编译器是Code::Blocks

if (*(*pointer+i) < 60)         //这里你之前写的 ...

*(*pointer+i) <60... 里面的括号要不要无所谓。。。  我执行了没任问题,初学者,就用VC6.0算了,还要用 个CB。   还有逻辑错误,要学会自己调试,别老想着问人了,我调试的时候看着反汇编一步一步看下去的,你若还是有错误。。。我就真无语了。。。  代码已经没有任何问题。。。你可以随便找个人问,看我改过 的代码哪里还有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-23 07:57:09 | 显示全部楼层
Code  Blocks是集成开发环境,不含编译器,可以自己配置在CB里使用的编译器。嗯,剩下的你们继续。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-23 09:17:25 | 显示全部楼层

这里你要是返回 *pointer+i的地址的话 你想下 *pointer+i 是哪个地址 细细的想下 会想出来的      //返回的是列的。。。我懂了,谢谢哈{:2_28:}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-23 09:18:07 | 显示全部楼层
{:2_39:} 我也想用VC6。。。可系统不给力啊.....ubuntu 12.04 ......编译器是GCC。。。原来那个错误找到了。是路径和名字错了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-25 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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