下面程序的运行结果是哪一项: #include <stdio.h> main() {char a[]="morning",t; int i,j=0; for(i=1;i<7

下面程序的运行结果是哪一项: #include <stdio.h> main() {char a[]="morning",t; int i,j=0; for(i=1;i<7;i++) if(a[j]<a[i]) j=i; t=a[j];a[j]=a[7]; a[7]=a[j];puts(a); } (A)mogninr (B)mo (C)morning (D)mornin

我运算到for循环结束时,不知道for循环是不是这一部分(for(i=1;i<7;i++) if(a[j]<a[i]) j=i;),循环结束后我计算的结果是i=3,j=2,不知道正不正确,后面的几步就有点看不懂了。。。。。。求详细思路,谢谢

a这个数组共有7个字母,数组下标为从0到6。

但是作为字符串,还会有一个/0,也就是字符串结束符,这个结束符的下标为7,就是说a[7]就是结束符。

过程是这样的:

第一次循环:

i=1;j=0;

a[i] 为o,a[j]为m,

m小于o,所以把i的值赋给j,此时j=1

第二次循环:

i=2;j=1

a[i]为r a[j]为o

o小于r,所以把i的值赋给j,此时j=2

第三次循环:

i=3;j=2

a[i]为n a[j]为r

n不小于r,所以不赋值。

for循环小括号里第一个“;”

号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。

“;”号之间的条件表达式是一个关系表达式,其为循环的正式开端,当条件表达式成立时执行中间循环体。

执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号{}可以省略,执行完中间循环体后接着执行末尾循环体。

以上内容参考:百度百科-for循环

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-01-05
a这个数组共有7个字母,数组下标为从0到6。
但是作为字符串,还会有一个/0,也就是字符串结束符,这个结束符的下标为7,就是说a[7]就是结束符。
过程是这样的:
第一次循环:
i=1;j=0;
a[i] 为o,a[j]为m,
m小于o,所以把i的值赋给j,此时j=1
第二次循环:
i=2;j=1
a[i]为r a[j]为o
o小于r,所以把i的值赋给j,此时j=2
第三次循环:
i=3;j=2

a[i]为n a[j]为r

n不小于r,所以不赋值。
第四次循环
...
这样一直执行到最后,得到i=7,j=2。
此时把a[j]的值也就是r赋值给t,
然后把a[7]的值也就是字符串结束符赋值给a[j],就是原来r的位置。
再把a[j]现在的值赋值给a[7]
最后puts字符串的时候,到a[2]就发现字符串结束符了,所以puts就认为a这个字符串为mo
第2个回答  推荐于2018-02-28
B。

a这个数组共有7个字母,数组下标为从0到6。
但是作为字符串,还会有一个/0,也就是字符串结束符,这个结束符的下标为7,就是说a[7]就是结束符。
过程是这样的:
第一次循环:
i=1;j=0;
a[i] 为o,a[j]为m,
m小于o,所以把i的值赋给j,此时j=1
第二次循环:
i=2;j=1
a[i]为r a[j]为o
o小于r,所以把i的值赋给j,此时j=2
第三次循环:
i=3;j=2

a[i]为n a[j]为r

n不小于r,所以不赋值。
第四次循环
...
这样一直执行到最后,得到i=7,j=2。
此时把a[j]的值也就是r赋值给t,
然后把a[7]的值也就是字符串结束符赋值给a[j],就是原来r的位置。
再把a[j]现在的值赋值给a[7]
最后puts字符串的时候,到a[2]就发现字符串结束符了,所以puts就认为a这个字符串为mo本回答被提问者和网友采纳
相似回答