独家首发 名师解析2008二级C之选择题(2)
技术与开发
大家是不是觉得上期的选择题比较简单,丢分较少?毕竟那是选择题上半部分,选择题下半部分就相对难一些了,下半部分选择题考得如何?看了我们解析你就心中有数了(选择题全部答案请到http://www.cpcw.com/bzsoft下载)。
第27题:有定义语句:char s[10];,若要从终端给 s 输入 5 个字符,错误的输入语句是
A)gets(&s[0]); B)scanf("%s",s+1);
C)gets(s); D)scanf("%s",s[1]);
本题难度:中等
涉及知识:字符串输入
名师解析:此题考核字符串输入的含义,在C语言中对字符串的输入函数有:gets( )、scanf()等,在使用时必须给出存储的地址,即数组名或地址。D选项给出的是一个数组元素,不合语法。
第31题:有以下程序
#include
main()
{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)
c[s[i]]++;
for(i=1;i<5;i++)
printf("%d",c[i]);
printf("\n");
}
程序的运行结果是
A)1 2 3 4 B)2 3 4 4
C)4 3 3 2 D )1 1 2 3
本题难度:难
涉及知识:数组下标运算
名师解析:在试题中,定义语句中的c[5]={0}表示对c数组进行初始化,全部置0。第一个for循环对c数组元素进行遍历赋值(即用s数组元素的值来作下标,指定c数组元素的值进行自增运算),第二个for循环执行c数组元素输出。题中最容易出错的就是第一个for循环的运算,考生往往喜欢不算出来而是凭感觉得出答案,这样很容易出错。
第33题:有以下程序
#include
#include
void fun(char *s[ ],int n)
{ char *t; int i,j;
for(i=0;i for(j=i+1;j if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;} } main() { char *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"}; fun(ss,5); printf("%s,%s\n",ss[0],ss[4]); } 程序的运行结果是 A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc 本题难度:较难 涉及知识:字符串指针操作 名师解析:题中ss数组是一个指针数组,而每一个数组元素(即指针变量)又各指向一个字符串,这正是字符串指针的知识难点。在进行操作时,每个ss数组元素表示一个字符串。 fun函数是对ss数组元素按所指向的字符串长度进行从小到大排序。在这里,考生一定要区分数组元素操作与字符串操作。if(strlen(s[i])>strlen(s[j])) {t=s[i]; s[i]=s[j]; s[j]=t; } ,此语句中条件表达式部分为字符串长度函数应用比较,后面的语句段部分则用了数组元素值的交换(即ss数组中元素指向的变换)。明白这一点,就不难得出正确结果了。 第37题:有以下程序 #include main() { FILE *fp; int a[10]={1,2,3},i,n; fp=fopen("dl.dat","w"); for(i=0;i<3;i++) fprintf(fp,"%d",a[i]); fprintf(fp,"\n"); fclose(fp); fp=fopen("dl.dat","r"); fscanf(fp,"%d",&n); fclose(fp); printf("%d\n",n); } 程序的运行结果是 A)12300 B) 123 C) 1 D) 321 本题难度:较难 涉及知识:文件操作 名师解析:本题主要考核对文件读取与存入操作相关函数的掌握,是历年必出之题。题中fopen为打开文件的函数,使用时必须添加两个参数,第一个参数为文件名,第二个参数为打开方式(w为写入方式,r为读取方式)。所以代码中for循环是将a数组元素的值逐个存入文件中,然后fscanf函数再将文件中的数据以数值方式读出存入n变量,故得到n=123。 第27题答案:D 第31题答案:C 第33题答案:A 第37题答案:B 下期我们将解析填空题部分敬请关注!