鱼C论坛

 找回密码
 立即注册
查看: 3770|回复: 12

C 定义二维数组,后输入坐标找到这个数并打印出来

[复制链接]
发表于 2013-12-23 22:37:04 | 显示全部楼层 |阅读模式
15鱼币
先定义 一个 二维数组,   假如是a[3][3]={1,2,3,4,5,6,7,8,9};     之后 在 输入一个坐标(), 把坐标上的数打印出来,   我只会用2个for循环全部打印出来,     求给点思路,  

还有 ,   就是  输入a[3][3]中的 任意一个数,   把他的坐标打印 出来;    这个直接给我个代码吧,实在想不出来思路,,


最佳答案

查看完整内容

#include int main() { int a[3][3]={1,2,3,4,5,6,7,8,9}; int i,j,n,m; scanf("%d",&n); for (i=0;i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-23 22:37:05 | 显示全部楼层


#include <stdio.h>

int main()
{
       
        int a[3][3]={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[0]+i)+j))此处的a[0]编译器认为是数值吧,所以前边加了个&
3.        if (n==*(a[i]+j))   a[i]是i行的首地址,+j是i行j列的地址
4.        if (n==(*(*a+i)+j))
5.        if (n==*(*(a+0)+i+j))
可能还有其他的  自己慢慢琢磨吧

评分

参与人数 1鱼币 +5 收起 理由
Ъγ:_小ツ雨oο + 5 谢谢mao哥 哈

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-23 23:17:26 | 显示全部楼层

#include <stdio.h>

int main()
{
       
        int a[3][3]={1,2,3,4,5,6,7,8,9};
        int (*p)[3];
       
        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));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-23 23:26:47 | 显示全部楼层
maomingkun 发表于 2013-12-23 23:17
#include

int main()

额, 要用2维指针 啊  好头疼 ,       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-24 13:23:10 | 显示全部楼层
Ъγ:_小ツ雨oο 发表于 2013-12-23 23:26
额, 要用2维指针 啊  好头疼 ,

那你想用什么方法啊?》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-24 18:33:37 | 显示全部楼层
maomingkun 发表于 2013-12-24 13:23
那你想用什么方法啊?》

我的第二问 呢 ,有答案没?:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-24 20:06:56 | 显示全部楼层
Ъγ:_小ツ雨oο 发表于 2013-12-24 18:33
我的第二问 呢 ,有答案没?

这个还不简单啊?用你输入的数和数组里边的每一个数比较,有相同的就输出坐标
代码如下:
#include <stdio.h>

int main()
{
       
        int a[3][3]={1,2,3,4,5,6,7,8,9};
        int (*p)[3],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("该数组中没有你要找的数!");
        }
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-24 20:10:19 | 显示全部楼层
1.
鱼币

先定义 一个 二维数组,   假如是a[3][3]={1,2,3,4,5,6,7,8,9};     之后 在 输入一个坐标(), 把坐标上的数打印出来,   我只会用2个for循环全部打印出来,     求给点思路,
#include <stdio.h>

int main(void) {
        int a[3][3]={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[x][y]);
        else
                printf("坐标非法\n");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-24 20:10:57 | 显示全部楼层
还有 ,   就是  输入a[3][3]中的 任意一个数,   把他的坐标打印 出来;    这个直接给我个代码吧,实在想不出来思路,,
#include <stdio.h>

int main(void) {
        int a[3][3]={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[x][y] ) {
                                printf("数字%d的坐标是(%d,%d)\n",data,x,y);
                                return 0;
                        }
                }
        printf("数字%d不在表格里\n",data);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-24 21:24:33 | 显示全部楼层
本帖最后由 Ъγ:_小ツ雨oο 于 2013-12-24 21:25 编辑
maomingkun 发表于 2013-12-24 20:06
这个还不简单啊?用你输入的数和数组里边的每一个数比较,有相同的就输出坐标
代码如下:
#include

5B5WY)K(0BY]F6Y382{4H(9.jpg 额,我回了   还有一个问题 ,在帮我解决一下吧 二维数组指针——02图.jpg   我的 理解   把 a换成 a[0] 或 *(a+0)或*a;  他们不都是表示第0行0列的地址吗?(书上的意思差不多也是这样的) 我感觉都是可以的,刻用编译器替换 了  一下就报错了  ,   这个是 怎么 回事啊?   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-24 23:03:54 | 显示全部楼层
Ъγ:_小ツ雨oο 发表于 2013-12-24 21:24
额,我回了   还有一个问题 ,在帮我解决一下吧  我的 理解   把 a换成 a[0] 或 *(a+0)或*a;  他们不都是 ...

对于int a[3][4];
a的类型是int[3][4];不是指针,所以sizeof(a) = 3* sizeof(int[4])
但是数组名非常容易退化为指针(指向数组首元素),所以,a常常退化为指针类型int(*)[4]。在我的记忆中,仅有sizeof运算符不会使数组名退化,其它所有情况,数组名都会退化为指针。

a[0]是数组a的第0个元素,它的类型是int[4],这也是一个数组,同上面所说,除了和sizeof运算符在一起外,这个数组都会退化为指向其首元素的指针,该指针类型为int*

*(a+0)这里,a是数组名,先退化为指针类型int(*)[4],该指针+0得到指针类型int(*)[4],对该指针解引用,得到类型int[4],这是个数组。除了和sizeof在一起,它会退化为指针,指针类型为int*

*a这里,a是数组名,先退化为指针类型int(*)[4],该指针解引用,得到类型int[4],这是个数组。除了和sizeof在一起,它会退化为指针,指针类型为int*

上面我对a,a[0],*(a+0)和*a的类型做了叙述。LZ的想法是不管类型,只管它们的值。确实,它们的值都是相同的,但类型不一定相同。而C语言中,不同类型的值不一定能相互替代,所以编译报错。其实,只要你知道自己在做什么,强制类型转换下就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-24 23:11:03 | 显示全部楼层
最后,建议楼主尽量先学会用程序解决问题,成为合格的程序员。指针是C语言中很难的一个东西,只要你知道它很难,尽量少用就是了,一样可以解决很多问题。个人认为初学者就是不可能完全掌握指针,声称掌握的基本都是在自欺欺人。与其如此,不如不要过于纠结在这上面,以能解决问题为重。将来随着你见的问题多了,自然可以完全了解指针。

评分

参与人数 1鱼币 +5 贡献 +5 收起 理由
Ъγ:_小ツ雨oο + 5 + 5 谢谢版主的详细解答和指导,版主鱼币很多了.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

我爱鱼C论坛 该用户已被删除
发表于 2015-2-19 21:04:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 17:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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