CC好难
今天,突然发现自己好水,努力奋斗好了几个小时(超过5个)的题目,别人原来轻易就能完成。自己好白痴啊!原来自己的编程,还是十分有待成熟和改进,我的致命伤就是只会用现在正在学的而忘却了以前好用的,熟悉的。
麻烦到我的题目是这个:
5-14.从键盘输入9个不同的整数,存入一个3行3列的二维数组中,找出每一列中的最大元素,并输出起行、列下标。
同学的解决方法是:
main()
{
int a[3][3];
int b[3]={0,0,0};
int i,j;
clrscr();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n");
}
printf("row\t line\n");
for(j=0;j<3;j++)
{
for(i=1;i<3;i++)
{
if(a[i-1][j]<a[i][j])
b[j]=i;
}
printf("%d\t %d\t %d\n",b[j],j,a[b[j]][j]);
}
getch();
}
他用了2个数组就完成了所有的操作,最令我吃惊的是居然用一个for(j=0;j<3;j++) { for(i=1;i<3;i++) { if(a[i-1][j]<a[i][j]) b[j]=i; }把我一直以来烦恼的东西全都搞定了,用一个简洁的方法把我即使用麻烦都极点都解决不了的问题全部一扫而空,我的天啊!
我的做法是:
main()
{
int a[3][3];
int b[3][3];
int c[3];
int d[3]={0,0,0};
int i,j,m;
clrscr();
printf("Please input 9 numbers to combine the matrix(3*3):\n");
for(i=0;i<3;i++)
{
printf("\n");
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
b[j][i]=a[i][j];
}
for(i=0;i<3;i++)
{
m=b[i][0];
for(j=1;j<3;j++)
if(b[i][j]>m)
{
m=b[i][j];
d[i]=j;
}
c[i]=m;}
printf("\n\nThe Matrix is:");
for(i=0;i<3;i++)
{
printf("\n\n");
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
}printf("\n\nThe result is:");
for(i=0;i<3;i++)
printf("%5d[%d][%d]",c[i],d[i],i );getch();
}
我的思路是因为开始我以为无法直接比较二维数组列的元素的大小,所以首先我把数组a[3][3]转置为b[3][3],再利用行比较。但问题来了,转来转去,转到最后,我的确是可以输出那个最大的元素,但元素的下标错了!现在上面的程序已经修正过来,都是经过同学的指点而成功的。问题就是我转来转去,转到最后我都不知道到底i是行还是j是行。更令我想不到的就是居然那个j(就是转置数组的行)要用一个数组来存放,否则就无法正确显示。还有一个致命伤就是那个用来存放j的数组要初始化,这个我做梦也不会想到。
虽然自己觉得自己的方法思路清晰,但做起来真的超级麻烦,用了2个二维数组,2个一维数组。如果不是解释一下,看到那么长的程序一定会看晕的~~~
天啊!怎么自己的思路会兜那么大一个圈子呢?
其实在一个双重循环中就可以完成全部操作啦.编程是熟能生巧,多写写就好了.
另外,c里面一定要给变量赋初值.否则该变量就是未被初始化的.自己写程序可能发现有时即使不初始化数组里面都是0.那是内存没有使用过的缘故.如果不给指针赋初值将导致严重后果…这是c的主要弊病之一.
xrspook 对 denmark 的回复: 2005-10-25 23:53:55
哎!
多谢指点!为什么老师上课的时候就从来不提醒,叫我们不要犯或者小心不要碰到这些小而严重的错误呢?!
不懂,完全懵了
我打算考个VB,但是到现在还没复习呢
xrspook 对 迷途电视剧 的回复: 2005-10-26 23:17:35
VB我就真的一窍不通了,java还知道个最基本的,但只会看一点点,不会写。
还是继续努力吧
:(
xrspook 对 迷途电视剧 的回复: 2005-10-31 13:14:47
我会的,尽力而为吧