k;W;--W) printf("*");
【解析】问题所给出的程序段用goto语句构造一个循环控制结构,该循环结构的初值是让变量W的值为k的值,循环结束条件是W的情等于0,循环体是让变量W的值减1,并输出一个字符* 。上述循环控制过程用for循环可描述如下: for=(w=k;W!=0; W--) printh("*"); 或写成: for(w=k ;w;--w) printf("*"); 若用while语句,可描述如下: W=k; while(w--!=0)printf("*"); w++;/*在w等于0时,也执行了一次 w--,这里是对w最后减1的补尝*/ 或更直观地写成: W=k; while(w!=0){ w--;Printf("*");} 若用do-while语句,可描述如下: W=k; if(W) do{ w--; prinif("*"); } while(w); 若写成: W=k; do{ W--; printf("*"); } while(w!=0); 是不正确的,因为原代码当k的值为0时,不输出字符*,而上面的改写,当k的值为0时,将输出许许多多的字符*。所以解答应是C。 【参考答案】C
45. 若有下列说明,则数值为4的表达式是( ) int a[12]={ l,2,3,4,5,6,7,8,9,10,11,12 }; char c='a',d, g; A.a[g-c] B.a[4] C.a['d'-'c'] D.a['d'-c]
【解析】数组元素的下标自0开始顺序编号,值为4的元素是a[3]。所以只有下标表达式的值为3的才是正确的。下标表达式g-C中的的变量g和c的值是还未被设定的,其值不确定。a[4]的值为5,下标为4是不对的。'd'-'c'的值为1,a[l]的值是2,所以也是不对的。变量c的值为'a' ,'d'-c=3,所以正确解答是D。 【参考答案】D
46.设有定义:"char s[12]={"string"};" 则printf("%d\n",strlen(s));的输出是( ) A. 6 B. 7 C.11 D.12
【解析】在C语言中,字符串是指在有效字符之后有字符率结束标记符的字符列,并约定字符串的长度是指字符率中有效字符个数,不包括字符串的结束标记符。存放于字符数组s中的字符串是“string”,该字符串的长度为6,所以输出该字符串的长度应是6。正确的解答是A。 【参考答案】A
47.下列语句中,正确的是( ) A.char a[3][]={'abc",'1'}; B.char a[][3]={'abc','l'}; C.char a[3][]={'a',"1"}; D.char a[][3]={"a","1"};
【解析】如定义数组时有初始化,其最高维的长度可以省缺,由系统根据初始化时的初值个数确定,而其它维的长度是不可以缺省的。对二维字符数组的初始化,可以按行用字符串对其初始化,也可以按二维数组元素的存储顺序逐一用字符对其元素初始化。在供选择解答A.和C.中,有不是最高维的长度被缺省,所以是错误的。在供选择解答A.和B.中,还将字符串常量写作'abc',这也是错误的。只有D.,用字符率按行给二维字符数组初始化,这才是正确的。正确构解答是D。 【参考答案】D
48.合法的数组定义是( ) A.int a[]={"string"} B.int a[5]={0,1,2,3,4,5}; C.char a={"string"} D.char a[]={0,1,2,3,4,5};
【解析】A.错误的原因是整数数组不可以用字符串对其初始化。B.错误的原因是,数组初始化时,初始化指定的值的个数多于数组的元素个数。C.错误的原因是,能用字符串初始化的只;有字符指针变量,或字符数组。字符率不能对其它类型的变量初始化,包括字符变量。D是正确的,因为字符数组可以用小整数(作为字符的ASCII代码值)对其元素初始化。 【参考答案】D
49.语句"printf("%d\n"strlen("ats\nol2\1\\"));"的输出结果是( ) A.11 B.10 C. 9 D. 8
【解析】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符开头的转义字符。在字符串"abs\no12\11\\" 中,有三个转义字符,它们是 |