C 定义二维数组,后输入坐标找到这个数并打印出来
先定义 一个 二维数组, 假如是a={1,2,3,4,5,6,7,8,9}; 之后 在 输入一个坐标(), 把坐标上的数打印出来, 我只会用2个for循环全部打印出来, 求给点思路,还有 , 就是输入a中的 任意一个数, 把他的坐标打印 出来; 这个直接给我个代码吧,实在想不出来思路,,
Ъγ:_小ツ雨oο 发表于 2013-12-24 21:24 static/image/common/back.gif
额,我回了 还有一个问题 ,在帮我解决一下吧我的 理解 把 a换成 a 或 *(a+0)或*a;他们不都是 ...
#include <stdio.h>
int main()
{
int a={1,2,3,4,5,6,7,8,9};
int i,j,n,m;
scanf("%d",&n);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (n==*(*(*(a+i)+j))
{
printf("%d在该数组中第%d行第%d列!\n",n,i,j);
m=1;//标志是否被找到
break;//找到的话跳出内层for循环
}
}
if (m==1)
{
break;//跳出外层for循环
}
}
if (m!=1)//没有找到该数
{
printf("该数组中没有你要找的数!");
}
}
if (n==*(*(*(a+i)+j))这个可以有以下几种写法:
1. if (n==*(*((a+0)+i)+j))
2. if (n==*(*(&a+i)+j))此处的a编译器认为是数值吧,所以前边加了个&
3. if (n==*(a+j)) a是i行的首地址,+j是i行j列的地址
4. if (n==(*(*a+i)+j))
5. if (n==*(*(a+0)+i+j))
可能还有其他的自己慢慢琢磨吧
#include <stdio.h>
int main()
{
int a={1,2,3,4,5,6,7,8,9};
int (*p);
int i,j;
p=a;
printf("i=");
scanf("%d",&i);
while(i<0 ||i>2)
{
printf("i=");
scanf("%d",&i);
}
printf("j=");
scanf("%d",&j);
while(j<0 ||j>2)
{
printf("j=");
scanf("%d",&j);
}
printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j));
}
maomingkun 发表于 2013-12-23 23:17 static/image/common/back.gif
#include
int main()
额, 要用2维指针 啊好头疼 , {:5_111:} Ъγ:_小ツ雨oο 发表于 2013-12-23 23:26 static/image/common/back.gif
额, 要用2维指针 啊好头疼 ,
那你想用什么方法啊?》 maomingkun 发表于 2013-12-24 13:23 static/image/common/back.gif
那你想用什么方法啊?》
我的第二问 呢 ,有答案没?:handshake Ъγ:_小ツ雨oο 发表于 2013-12-24 18:33 static/image/common/back.gif
我的第二问 呢 ,有答案没?
这个还不简单啊?用你输入的数和数组里边的每一个数比较,有相同的就输出坐标
代码如下:
#include <stdio.h>
int main()
{
int a={1,2,3,4,5,6,7,8,9};
int (*p),i,j,n,m;
p=a;
scanf("%d",&n);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (n==*(*(p+i)+j))
{
printf("%d在该数组中第%d行第%d列!\n",n,i,j);
m=1;//标志是否被找到
break;//找到的话跳出内层for循环
}
}
if (m==1)
{
break;//跳出外层for循环
}
}
if (m!=1)//没有找到该数
{
printf("该数组中没有你要找的数!");
}
}
1.
鱼币
先定义 一个 二维数组, 假如是a={1,2,3,4,5,6,7,8,9}; 之后 在 输入一个坐标(), 把坐标上的数打印出来, 我只会用2个for循环全部打印出来, 求给点思路,#include <stdio.h>
int main(void) {
int a={1,2,3,4,5,6,7,8,9};
int x,y;
printf("输入坐标:");
scanf("%d%d",&x,&y);
if( 0<=x&&x<=2&&0<=y&&y<=2 )
printf("坐标(%d,%d)出数字是:%d\n",x,y,a);
else
printf("坐标非法\n");
return 0;
} 还有 , 就是输入a中的 任意一个数, 把他的坐标打印 出来; 这个直接给我个代码吧,实在想不出来思路,,#include <stdio.h>
int main(void) {
int a={1,2,3,4,5,6,7,8,9};
int x,y,data;
printf("输入要查找的数:");
scanf("%d",&data);
for( x=0;x<3;++x )
for(y=0;y<3;++y) {
if( data == a ) {
printf("数字%d的坐标是(%d,%d)\n",data,x,y);
return 0;
}
}
printf("数字%d不在表格里\n",data);
return 0;
} 本帖最后由 Ъγ:_小ツ雨oο 于 2013-12-24 21:25 编辑
maomingkun 发表于 2013-12-24 20:06 static/image/common/back.gif
这个还不简单啊?用你输入的数和数组里边的每一个数比较,有相同的就输出坐标
代码如下:
#include
额,我回了 还有一个问题 ,在帮我解决一下吧我的 理解 把 a换成 a 或 *(a+0)或*a;他们不都是表示第0行0列的地址吗?(书上的意思差不多也是这样的) 我感觉都是可以的,刻用编译器替换 了一下就报错了, 这个是 怎么 回事啊?
Ъγ:_小ツ雨oο 发表于 2013-12-24 21:24 static/image/common/back.gif
额,我回了 还有一个问题 ,在帮我解决一下吧我的 理解 把 a换成 a 或 *(a+0)或*a;他们不都是 ...
对于int a;
a的类型是int;不是指针,所以sizeof(a) = 3* sizeof(int)
但是数组名非常容易退化为指针(指向数组首元素),所以,a常常退化为指针类型int(*)。在我的记忆中,仅有sizeof运算符不会使数组名退化,其它所有情况,数组名都会退化为指针。
a是数组a的第0个元素,它的类型是int,这也是一个数组,同上面所说,除了和sizeof运算符在一起外,这个数组都会退化为指向其首元素的指针,该指针类型为int*
*(a+0)这里,a是数组名,先退化为指针类型int(*),该指针+0得到指针类型int(*),对该指针解引用,得到类型int,这是个数组。除了和sizeof在一起,它会退化为指针,指针类型为int*
*a这里,a是数组名,先退化为指针类型int(*),该指针解引用,得到类型int,这是个数组。除了和sizeof在一起,它会退化为指针,指针类型为int*
上面我对a,a,*(a+0)和*a的类型做了叙述。LZ的想法是不管类型,只管它们的值。确实,它们的值都是相同的,但类型不一定相同。而C语言中,不同类型的值不一定能相互替代,所以编译报错。其实,只要你知道自己在做什么,强制类型转换下就可以了。 最后,建议楼主尽量先学会用程序解决问题,成为合格的程序员。指针是C语言中很难的一个东西,只要你知道它很难,尽量少用就是了,一样可以解决很多问题。个人认为初学者就是不可能完全掌握指针,声称掌握的基本都是在自欺欺人。与其如此,不如不要过于纠结在这上面,以能解决问题为重。将来随着你见的问题多了,自然可以完全了解指针。
页:
[1]