1、国家二级 C语言机试(选择题)模拟试卷 68及答案与解析 一、选择题 1 若有以下定义: int x10, *pt=x; 则对 x数组元素的正确引用是 ( )。 ( A) pt+3 ( B) *&x10 ( C) *(pt+10) ( D) *(x+3) 2 若有以下程序: #include main( ) int i, s=0, t=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i 9; i+=2) s+=*(t+i); printf(“ d n“, s); 则程序执行后的输出结果是 ( )。 ( A) 20 ( B) 25 ( C) 45 ( D) 36 3 若有
2、以下程序: #include void fun(int *s, int nl int n2) int i, j, t; i=nl; j=n2; while(i main() int s12=l, 2, 3, 4, 4, 3, 2, 1, 1, l, 2, 3, c5=0, i; for(i=0; i void fun(int a, int n) int t, i, j; for(i=1; iaj) t=ai; ai=aj; aj=t; main( ) int e10: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, i; fun(c, 10); for(i=0; i main(
3、) int c6=10, 20, 30, 40, 50, 60, *P, *s; P=c; s=&c5; printf(“ d n“, s-P); 则程序运行后的输出结果是 ( )。 ( A) 5 ( B) 50 ( C) 6 ( D) 60 7 若有以下程序: #include main( ) int a3=0, i, j, k=2; for(i=0; i k; i+) for(j=0; j k; j+)aj=ai+1; printf(“ d n“, a1); 则程序运行后的输出结果是 ( )。 ( A) 0 ( B) 2 ( C) 1 ( D) 3 8 有以下程序: #include ma
4、in( ) int a5=2, 4, 6, 8, 10, *P, *k; P=a; k=&p; printf(“ d“, *(p+); printf(“ d n“, *k ); 程序运行后的输出结果是 ( )。 ( A) 4 6 ( B) 4 4 ( C) 2 2 ( D) 2 4 9 以下叙述中正确的是 ( )。 ( A)一条 语句只能定义一个数组 ( B)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 ( C)数组说明符的一对方括号中只能使用整型常量,而不能使用表达式 ( D)在引用数组元素时,下标表达式可以使用浮点数 10 以下叙述中正确的是 ( )。 ( A)数
5、组下标的下限是 1 ( B)数组下标的下限由数组中第一个非零元素的位置决定 ( C)数组下标的下限由数组中第一个被赋值元素的位置决定 ( D) char cl, c2, *c3, c440;是合法的变量定义语句 11 有以下程序: #include define N 4 void fun(int aN, int b) int i; for(i=0; i int fun(int (*s)4, int 11, int k) int m, i; m=s0k; for(i=1; i n; i+) if(sikm) m=sik; retum m; main( ) int a44=1, 2, 3, 4,
6、11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34; printf(“ d n“, fun(a, 4, 0); 程序的运行结果是 ( )。 ( A) 4 ( B) 34 ( C) 31 ( D) 32 13 有以下程序: #include main( ) int a44=1, 4, 3, 2, 8, 6, 5, 7, 3, 7, 2, 5, 4, 8, 6, 1; int i, j, k, t; for(i=0; iaki) t=aji; arji=aki; aki=t; *按列排序 * for(i=0; i 4; i+) printf(“ d, “,
7、 aii); 程序运行后的输出结果是 ( )。 ( A) 1, 6, 2, 1, ( B) 8, 7, 3, 1, ( C) 4, 7, 5, 2, ( D) 1, 6, 5, 7, 14 有以下程序: #include main( ) int i, t3: 9, 8, 7, 6, 5, 4, 3, 2, 1; for(i=0; i main( ) int aE44: 1, 4, 3, 2, 8, 6, 5, 7, 3, 7, 2, 5, 4, 8, 6, 1,i, k, t; for(i=0; i #include main( ) char P20=a, b, c, d, q=“abc“,
8、r=“abcde“; strcat(P, r); strcpy(P+strlen(q), q); printf(“ d n“, strlen(P); 程序运行后的输出结果是 ( )。 ( A) 11 ( B) 9 ( C) 6 ( D) 7 18 有以下程序 (strcat函数用以连接两个字符串 ): #include #include main( ) char a20=“ABCD 0EFG 0“, b=“UK“; strcat(a, b); printf(“ s n“, a); 程序运行后的输出结果是 ( )。 ( A) UK ( B) ABCDE OFG OUK ( C) ABCDIJK
9、( D) EFGIJK 19 有以下程序 段: char name20; int num; scanf(“name= s num= d“, name, &num); 当执行上述程序段,并从键盘输入: name=Lili num=1001后, name的值为 ( )。 ( A) name=Lib num=1001 ( B) name=Lili ( C) Lili num= ( D) Lili 20 有以下程序: #include main( ) char ch=“uvwxyz“, *pc; pc=ch; printf(“ c n“, *(pc+5); 程序运行后的输出结果是 ( )。 ( A)
10、z ( B) 0 ( C)元素 ch5的地址 ( D)字符 y的地址 21 有以下程序: include main( ) char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(8i=a &si =z) n+; printf(“ d n“, n); 程序运行后的输出结果是 ( )。 ( A) 10 7 ( B) 10 5 ( C) 5 5 ( D) 5 8 22 若有以下定义和语句: #include char sl10=“abcd! “, *s2=“ n123 “; pfintf(“ d d n“, strlen(s1), strlen(s2);
11、 则输出结果是 ( )。 ( A) Prphshn ( B) Prohsbn ( C) Progsbn ( D) Program 23 有以下程序: #include void funl(char*p) char *q; q=P; while(*q!= 0) (*q)+; q+; main( ) char a=“Program“, *p; P= a3; funl(P); printf(“ s n“, a); 程序执行后的输出结果是 ( )。 ( A) ab ( B) a*b ( C) *a*b ( D) a*b* 24 有以下程序: #include void fun(char *a, cha
12、r *b) while(*a=*)a+; while(*b=*a)b+; a+; main( ) char *s=“*a*b*“, t80; fun(s, t); puts(t); 程序的运行结果是 ( )。 ( A) S和 P都是指针变量 ( B) s数组中元素的个数和 P所指字符串长度相等 ( C)可以用 *P表示 s0 ( D)数组 s中的内容和指针变量 P中的内容相同 25 设有如下程序段: #include char s20=“Beijing“, *p; p=s; 则执行 P=s;语句后,以下叙述正确 的是 ( )。 ( A)输出字符 c的 ASCII码 ( B)程序出错 ( C)输
13、出字符 c ( D)输出字符 a的 ASCII码 26 有以下程序: #include main( ) char s=“abode“; s+=2: pnntf(“ d n“, s0); 执行后的结果是 ( )。 ( A) aaaacc, xy ( B) xy, laaaacc ( C) bcc, aabcc ( D) aabcc, bcc 27 有 以下程序: #include #include void fun(char , *s, int n) char , *t; int i, j; for(i=0; i n-1; i+) for(j=i+1; j n; j+) if(strlen(si
14、)strlen(s j) t=si; si=sj; sj=t; main( ) char *ss=“bcc“, “bbcc“, “xy“, “aaaacc“, “aabcc“; fun(ss, 5); printf(“ s, s n“, ss0, ss4); 程序的运行结果是 ( )。 ( A) aaaacc, xy ( B) xy, aaaacc ( C) bcc, aabcc ( D) aabcc, bcc 28 有以下程序: #include int fun(char P10) int n=0, i; for(i=0; i”后,将字符串 “Lili赋给字符数组 name,整数 “1001
15、”赋给变量 num。因此 D选项正确。 20 【正确答案】 A 【试题解析】 语句 pc=ch;使得指针变量指向字符数组 ch的首地址,即指向字符 “u”则 pc+5指向的是字符向后移动 5位,指向字符 “z”。所以输出的 *pc+5的值即为 z。因此 A选项正确。 21 【正确答案】 B 【试题解析】 程序首先给字符数组 s赋值为 “012xy”, for循环语句的功能是遍历字符串,通过 if条件语句对字符串中的小写字母计数,在字符串中小写字母为 2个,即 n=2。因此 B选项正确。 22 【正确答案】 C 【试题解析】 strlen函数的功能是返回字符串的长度,求字 符串长度时,遇到结束标
16、识 “ 0”为止,但是长度不包括结束标识。字符数组 s1的后 5个元素没有赋值,都为 “ 0”,即 “abcd!”后为 “ 0”。所以 strlen(s1)的值为 5。字符指针 s2所指向的字符串中, “ n”为转义字符换行符,表示 1个字符; “ ”也为转义字符,代表 “ ”,也是 1个字符,其后为字符串结束标识 “ 0”;所以 strlen(s2)的值也为5。因此 c选项正确。 23 【正确答案】 B 【试题解析】 (*q)+是 q所指的字符加 1, q+就是指针移到下一个字符。因此B选项正确。 24 【正确答案】 D 【试题解析】 在函数 fun(char*a, char*b)中, wh
17、ile(*a=*)a+的功能是:如果*a的内容为 “*”,则 a个 while循环;在 while(*b=*a); b+; a+; 中,把字符数组 a中的字符逐个赋给字符数组 b。所以在主函数中,执行 fun(s, t)语句后,字符数组 t中的内容为 “a*b*”。因此 D选项正确。 25 【正确答案】 C 【试题解析】 程序定义了字符数组 s和字符型指针变量 p,并且使得 p指向数组,执行 p=s;语句后, *p即表示 s0; s数组中元素的个数和 p所指字符串长度不相等,因为 s数组中元素的个数包括字符串结束标识 “ 0”,而 p所指字符串长度不包括 “ 0”; s是字符型数组, p是指针
18、变量;数组 s中的内容和指针变量 p中的内容不相同,数组中存放的是字符串,而指针变量 p存放的是数组的首地址。因此 C选项正确。 26 【正确答案】 B 【试题解析】 本题重点考查数组名的概念。在 C语言中,数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容。所以本题中的 s+=2;语句让数组名 s的内容加 2是错误的,编译无法通过。因此 B选项 正确。 27 【正确答案】 B 【试题解析】 函数 fun(chilr s, int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序,在主函数中执行 fun(ss, 5)语句后, *ss=“xy“, “bcc“,“bbcc“, “aab-cc“, “aaaacc“, ss0, ss4的输出结果为 xy, aaaacc。因此 B选项正确。 28 【正确答案】 B 【试题解析】 此程序是统计一周 7天中英文名称首字母为 “T”的个数。 Pi0是字符串的首字符一共有两个 “T”,所以 n=2。因此 B选项正确。