求c语言大佬解题

18题感觉答案错了15题需要详细解释30题懵
2024-11-25 06:20:23
推荐回答(2个)
回答1:

18题就是B 啊,你觉得其他三个答案里面,哪个是对的呢?
15题先做的do{k++;},再判断while(a>d++);,而且这个判断,应当是先判断while(a>d),再做d++。所以k++做完第6次以后(即k=6),判断语句不成立,程序中断。
30题我觉得应当是D啊。如果是C的话,把a[0][0]位于数组第一个位置代进去,得a[0][0]的位置L=0*m+0-1=-1,怎么看也不对嘛。

回答2:

如果有什么不同意见可以和我讨论

T15:  B:

a = 10, d = 5, k = 0;  do{k++} while(a>d++)

do while循环特点:先做后判断,也就是先执行k++,  

当++置于数的后面,则表明:先赋值(或使用)再自加1,

eg:int x = 1, y;      y = x++;    

                                                    y = x++执行过程:x的值先赋给y,再自加1

                                                    所以执行结果:x = 2; y = 1;

再看本题:

第一次循环:k++  =>   k = 1;  

a > d++ :  ++是后置的,所以d先与a比较,即10 > 5, 比较结果                                                           为真,会进行第二次循环,而d = 6;

第二次循环:k = 2; 10 > 6   ; d = 7 ;条件10 > 6判断为真,继续循环

……

第五次循环:k = 5; 10 > 9   ; d = 10 ;条件10 > 9判断为真,继续循环

第六次循环:k = 6;    10 > 10  ;   d = 11;条件10 > 10判断为假,结束循环

所以最后k的值为6;

T18:C, a[x][y]:  x<3,y<4,否则越界

T30:  B, 二维数组在内存中的存储是连续的,从一个元素即a[0][0],a[0][1],……,a[0][m-1],a[1][0]……a[1][m-1],a[2][0]……一直下去;a[0][0]的位置:0; a[0][1]的位置:1;……;a[1][0]的位置:m(因为一行有m个);…… ;a[i][j]的位置:前面有i行,i*m;a[i][j]处于当前行的第j+1个,所以i*m+j+1,但是开始位置为0 不是 1 ,所以i*m+j+1-1 = i*m+j;