全部问题 > 当前问题

数组的输出

我就是有点搞不懂那数组什么时候输出坐标,什么时候又输出数组里的数字。

#include <stdio.h>

#Include <math.h>

main()

{

  int a[101]={1,1},i;

  for(i=2;i<=sqrt(100);i++)

    if(a[i]==0)

      for(j=i+1;j<=100;j+=i)

      {

        a[j]=1;

      }

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

  {

    if(a[i]==0) printf("%5d",i);

  }

  printf("\n");

}

这个为什么输出坐标,而我们使用函数调用的时候返回的值又是数组里的函数?

水根 2015-11-14 13:00:56

共 30 个回答

嘿嘿大人 2015-11-14 13:27:14

你是说的下标吧?数组里面只有元素没有什么函数啊,你说的是元素吧?元素和下标的区别:例如有一个数组a,那么a【1】就是代表a数组里面的第一个元素,二那个中括号里面的1就是下标;

决定你要输出的是什么的需要看题目的要求,这道题是用筛法求取质数,所以数组里面的元素就只可能有0和1,所以将数组里面的元素作为if后面的条件作为判断是否是质数,将它们的下标作为要输出的目标,使满足if条件后的下标也就是质数进行输出;

另外程序段也是有问题的:

修改如下:

#include <stdio.h>


#include <math.h>


main()


{


  int a[101]={1,1},i,j;


  for(i=2;i<=sqrt(100);i++)


    if(a[i]==0)


      for(j=i+i;j<=100;j+=i)


      {


        a[j]=1;


      }


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


  {


    if(a[i]==0) printf("%5d",i);


  }


  printf("\n");


}


水根 2015-11-14 13:51:50

不是,我想请问的是为什么它会输出不同的数呢?数组里面的元素不是只有0和1吗?

水根 2015-11-14 13:53:57

对不起,问错了,我的意思是如何写才能确定要输出的是坐标还是元素?

嘿嘿大人 2015-11-14 17:46:39

回复 水根:因为输出的是数组的坐标,决定输出是坐标的是这个语句: if(a[i]==0) printf("%5d",i);

决定输出坐标的关键是 if(a[i]==0) printf("%5d",i);就是那个i,如果将它改为a【i】就变成了输出的是元素了

水根 2015-11-14 17:47:41

明白了,谢谢!

水根 2015-11-14 18:14:18

对了,还有就是有一点我还是没弄懂。

int fun(int a[],int n)

{

    int i=0,j=0;

a[j]=a[i];

i++;j++;

for(;i<n;i++)

{

if(a[j-1]!=a[i])

{

a[j]=a[i];j++;

}

}

return j;

}

main()

{

    int a[30]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},n=20;

    fun(a,n);

    for(i=0;i<n;i++)printf("%3d",a[i]); 

}

我想请问一下这个j的返回值到底是一个数组还是一个坐标?

嘿嘿大人 2015-11-14 18:31:29

只要是在中括号里面的都是下标,这个j自然也是下标了因为它是作为了下标的f(a[j-1]!=a[i])

水根 2015-11-14 18:41:11

那j的值是?

嘿嘿大人 2015-11-14 19:02:18

回复 水根:是下标啊

水根 2015-11-14 19:19:02

是下标的话为什么会返回后输出成数组呢?

嘿嘿大人 2015-11-14 19:22:26

回复 水根:那是因为主函数的printf("%3d",a[i]);红色部分是数组啊;

如果你想问为啥a数组变化了的话,那是因为这个函数调用时按地址传递,所以不需要返回数组也可以改变数组里面的值;

而且你这个源程序有错,而且不完整;

水根 2015-11-14 19:25:12

哦,这个是我节选的,不过只要明白了它的含义就好了,最重要的是学东西嘛

嘿嘿大人 2015-11-14 19:31:52

回复 水根:节选里面也有语法错误,主函数里面i变量没有定义,而且调用函数返回值在主函数中也没有得到体现,等于不要返回值一样的,由于这个调用函数是按地址传递,所以在调用函数中对数组元素进行的操作改变了主函数里面数组的值;所以这个函数输出的a数组是经过调用函数改变的那个数组

形参和实参之间的传递分为按地址传递:特点是形参的改变会导致实参也跟着改变;通常形参是指针或者数组的就是按地址传递;

按值传递;除开按地址传递其他的都是按值传递,特点是在形参的改变不影响实参;

能理解?

水根 2015-11-14 19:37:19

信息量有点大,我消化一下

嘿嘿大人 2015-11-14 19:38:32

回复 水根:都应该是你学过的,不懂再问吧,嘿嘿

水根 2015-11-14 19:42:49

好,我这人是有点笨,学过的东西一拓展就容易卡壳。

水根 2015-11-14 19:46:25

#include <stdio.h>

#define    N    80

int  fun(int  a[], int  n)

{

int i=0,j=0;

a[j]=a[i];

i++;j++;

for(;i<n;i++)

{

if(a[j-1]!=a[i])

{

a[j]=a[i];j++;

}

}

return j;

}

main()

{  int  a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;void NONO ();

   printf("The original data :\n");

   for(i=0; i<n; i++)printf("%3d",a[i]);

   n=fun(a,n);

   printf("\n\nThe data after deleted :\n");

   for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");

   NONO();

}

void NONO ()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

  FILE *rf, *wf; int a[N], n, i, j ;

  rf = fopen("in.dat","r") ;

  wf = fopen("out.dat","w") ;

  for(i = 0 ; i < 5 ; i++) {

    fscanf(rf, "%d", &n) ;

    for(j = 0 ; j < n ; j++) fscanf(rf, "%d", &a[j]) ;

    n = fun(a, n) ;

    for(j = 0 ; j < n ; j++) fprintf(wf, "%4d", a[j]) ;

    fprintf(wf, "\n") ;

  }

  fclose(rf) ; fclose(wf) ;

}

这是那道题的原题,是编程题,我做完了后就是搞不懂返回的j到底是什么才拿来请教的。

嘿嘿大人 2015-11-14 19:46:27

回复 水根:不存在,只要你再回去看一遍应该会理解的,其实函数调用最重要的部分就是刚刚给你讲的那些,记住就可以了,很多同学都经常搞不懂的,慢慢来吧,时间很多的,努力吧,嘿嘿

最佳答案

嘿嘿大人 2015-11-14 19:55:33

回复 水根:主函数里面调用函数的语句就是n=fun(a,n);这个语句的意思就是将返回值赋值给n,也就等同于n=j;这样说能理解了么?

返回值就是将主函数中调用函数语句中的调用函数用返回值替代;

水根 2015-11-14 19:56:02

时间不多了,过不了多久就要等级考试了,我一直都是这样想的

水根 2015-11-14 19:56:39

明白了,谢谢!

嘿嘿大人 2015-11-14 20:01:34

回复 水根:学这个加上复习时间是很多的,我当时学这个就差不多一个月而已,所以不用担心时间,赶时间学的东西都记不住,慢慢学,一定要理解,加油吧,不用谢,嘿嘿

水根 2015-11-14 20:28:16

好,一起加油。

嘿嘿大人 2015-11-14 20:41:02

回复 水根:恩啊,嘿嘿,加油,嘿嘿

水根 2015-11-14 21:09:55

你学数组用了一个月?

水根 2015-11-14 23:15:03

对了,请问一下,什么是二维数组的周边元素?

嘿嘿大人 2015-11-15 10:07:51

回复 水根:我学c语言二级用了一个月= =

二维数组的周边元素就是把数组列出来,周边一圈就是二维数组的周边元素;比如下面的红色部分就是这个二维数组的周边元素

            1 2 3

            4 5 6

            7 8 9

水根 2015-11-15 21:33:20

哇,学霸前辈啊,好厉害啊

水根 2015-11-15 21:36:05

明白了,谢谢!

水根 2015-11-15 22:19:54

对了,我想请问一下什么叫主对角线?

问题来自: 质数