李孟军开庭受审图:关于C语言的基础问题(4)

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 02:10:45
教材上说,定义一个二维浮点数组a[N][M]后若直接使用格式化输入函数scanf("%f",&a[i][j]);则编译不成功,只能使用一个中间变量scanf("%f",&t);
再令a[i][j]=t才行。(以上变量均有定义).但是如果a是二维整型数组的话就可以直接赋值:scanf("%d",&a[i][j]);这是为什么呢?
你不用常量,用变量试试?像这样:
int i,j;
scanf("%d%d",&i,&j);
scanf("%f",&a[i][j]);
这样行吗?

main()
{
int i,j;
float a[3][3];
clrscr();
scanf("%d%d",&i,&j);
scanf("%f",&a[i][j]);
printf("r=%f",a[i][j]);
}
你是说这样不行啊!!!
这样当然不行了啊,因为scanf函数是个编译函数,在编译时候必须给定物理地址,才能定位输入时候的单元地址,你用变量地址当然不能定位地址了啊,它将用一个空地址定位给scanf,所以不可以啊,而printf函数是属于后定位函数,它就可以这样应用的了。
如果你学过汇编语言,会用debug等调试工具,你就很容易搞懂这类问题了啊。
坏了,我需要赶紧上学去了,要不迟到了,还有几天就月考了,天天补课真烦,高三不好过啊!!!!!拜拜。

哈哈,不过你还是要给我加分的啊,否则你要扣掉10分的啊.

开个玩笑,大哥我也够辛苦的了,给点鼓励吧。谢谢啊。

不过楼下说的真的不对啊,我真的实验过的啊,而且用debug跟踪过的啊,可能我的功力不够啊,但楼下你给出一个成功的例子好让我们较量一下啊,我有点不服啊。你说的成功的例子,我用debug跟踪一下就会见分晓了啊。来点真格的吧楼下。

楼下你的代码我在tc 2.0环境下实验,根本不正确啊,你说说你的环境吧,如果是其它版本的c语言环境有可能正确的,因为不同版本的环境它的默认值是不同的啊,很正常啊,我们用的可都是tc 2.0 dos 版环境。

这个教材写错了,scanf中是可以直接用&a[i][j]的,编译也没有问题,我已经试过了。记住实践是检验真理的唯一标准,书上不一定都是对的。
下面是实验程序:(编译环境:linux gcc)
#include <stdio.h>

int main()
{
float a[3][3];
int i;
int j;
scanf("%d%d", &i, &j);
scanf("%f", &a[i][j]);
printf("%f\n", a[i][j]);
return 0;
}

程序运行结果:
2 2
2.5
2.500000

应该是可以的。以a[3][3]为例,&a[i][j]等同于a+3*i+j。

可以个屁,physics权威 说的对,国家二级考试的环境就是DOS环境,所以必须以DOS的tc 2.0环境为前提才能保证你在考试中取得好的成绩,当然,不否认其它环境下,有其它可能,但在国家二级考试中就是physics权威 说的对。确实用debug调试跟踪是一个空的指针。

输入二维数组要用两个for循环渗入。
main()
{
int n,m;
printf("Please enter number");
for(n=0;n>4;n++)
for("m=0;m>3;m++");
{
scanf("%d",&a[n][m]);
}
}