1.若有下列说明,则数值为4的表达式是( )
int a[12]={ l,2,3,4,5,6,7,8,9,10,11,12 };
char c= a ,d, g;
①a[g-c] ②a[4]
③a[ d - c ] ④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,所以正确解答是④。
2.设有定义: char s[12]={ string }; 则printf( %d\n ,strlen(s));的输出是( )
① 6 ② 7
③11 ④ 12
解 在C语言中,字符串是指在有效字符之后有字符率结束标记符的字符列,并约定字符串的长度是指字符率中有效字符个数,不包括字符串的结束标记符。存放于字符数组s中的字符串是 string ,该字符串的长度为6,所以输出该字符串的长度应是6.正确的解答是①。
3.下列语句中,正确的是( )
① char a[3][]={ abc , 1 }; ② char a[][3]={ abc , l };
③char a[3][]={ a , 1 }; ④char a[][3]={ a , 1 };
解 如定义数组时有初始化,其最高维的长度可以省缺,由系统根据初始化时的初值个数确定,而其它维的长度是不可以缺省的。对二维字符数组的初始化,可以按行用字符串对其初始化,也可以按二维数组元素的存储顺序逐一用字符对其元素初始化。在供选择解答①和③中,有不是最高维的长度被缺省,所以是错误的。在供选择解答①和②中,还将字符串常量写作 abc ,这也是错误的。只有④,用字符率按行给二维字符数组初始化,这才是正确的。正确构解答是④。
4.合法的数组定义是( )
①int a[]={ string } ②int a[5]={0,1,2,3,4,5};
③char a={ string } ④char a[]={0,1,2,3,4,5};
解 ①错误的原因是整数数组不可以用字符串对其初始化。②错误的原因是,数组初始化时,初始化指定的值的个数多于数组的元素个数。③错误的原因是,能用字符串初始化的只;有字符指针变量,或字符数组。字符率不能对其它类型的变量初始化,包括字符变量。④是正确的,因为字符数组可以用小整数(作为字符的ASCII代码值)对其元素初始化。
5.语句 printf( %d\n strlen( ats\nol2\1\\ )); 的输出结果是( )
①11 ②10 ③ 9 ④ 8
解 字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符开头的转义字符。在字符串 abs\no12\11\\ 中,有三个转义字符,它们是\n、\1、\\,所以该字符串的有效字符个数是9.所以正确的回答是③。