资源描述
高级语言程序设计(C)模拟题四
1.以下有4组用户标识符,
中合法的一组是()。
B) 4d DO Size
D) WORD void define
一、选择题(本题共20道小题,每题2分,共40分。)
A) For -sub Case
C) f2_G3 IF abc答 案:C
由字母、数字、下划线组成,第一个字符必须是字母或
解析:标识符的命名规则:
者下划线,标示符的命名不能同C语言的关键字相同。
pp=p;
2. 若有下面的程序片段: int a[12] = {0}, *p[3], **pp, i; for(i=0; i<3; i++) p[i]则必击数];组元素的错误引用是
A) pp[0] [1]B) a[10] C) p[3] [1] D) *(*(p+2)+2)
答案:C
解析:A. pp[0俵示p[0]的地址,而pp[0]也为一个指针,它和pp用法相同,故pp[0][1则表示a[1]的地址,正确。
B. 正确。
C. 数组p的最大下标为2,错误。
D. *(*(p+2)+2) 表示 a[10],正确。
3. 若要求在if后-对圆括号式表示a不等于0的关系,则能正确表示这一关系的表达
为
A) a<>0B) !a
C) a=0D) a
答案:D
解析:对i(a )而言,如果a的值不为0,则if语句括号中表达式的值不为0,if为真,选D。
4. 若已定义:
int a[ ] = {0,1,2,3,4,5,6,7,8,9],*p=a,i;
其中0< i< 9,则对a数组元素不正确的引用上
A) a[p-a] B) *(&a[i]) C) p[i] D) a[10]答案: D 解析:
A. a[p-a]表示 a[0],正确。
B. *(&a[i]) 表示 a[i],正确。
C. p[i]表示 &a[i],正确。
D. a数组最大下标为9,错误。
5. 以下程序的输出结果是
int main()
{ int x=10 for(i=0 ;
printf("%d
,y=10 , I;
x>8 ; y=++i)
,%d " , x--, y);
A) 10 1 9 2 B) 9 8 7 6 C) 10 9 9 0 D) 10 答案1D
解析:
第 遍循 x=10,y=10, x>8,输出 10 10 后,x=9, y=1.
第二遍循乂=9>8,输出9 1后x=8, y=2。
第三遍循x=8,不满足条件,循环结束,无输出。
6.下面程序的输出是 void prtv(int *x) printf("%d\n", ++*x);} int main() { int a=25;prtv(&a); return; 0
A) 23B) 24
C) 25D) 26
答案:D
解析:主函数传递给prtv函数的x值为25,在print中,先对x自增,再输出x值为26。
7. 下面能正确进行字符串赋值操作的语句是
A)char s[5] = {"ABCDE"}; B)char s[5] = {'A/、/B/、/C/、/D/、/E'};
C) char *s;s="ABCDEF"; D)char *s; scanf("%s",s);
答案: C 解析:
A. {}中的'"/也作为字符串中的一个字符,故右侧字符串长度为7>5,越界,错误。
B. 右侧字符的分割符应使用‘,',而不是‘、',错误。
C. 正确。
D. s是一个字符串常量,应在定义同时初始化且不能通过scanf函数或任何其他方式修改其值,错误。
8. 设x,y,z,均为int型变量,则执行以下语句后,t的值为x=y=z=1;t=++x||++y&&++z;
A)不定值B)2 C)1 D)0答案:C
解析:||和&&运算符的优先级高于赋值运算符『所以t为一个逻辑值,其只能为0或1,又表达式 ++x||++y&&++z 为真,故 t=1。
9. 设p1和p2是指向同一个int型 一维数组的指针变量,k为int型变量,则不能正确执行的语句是
A) k=*p1+*p2;
B) p2=k;
C) p1=p2;
D) k=*p1 *(*p2);
答案: B
解析:B中不能将一个整形变量的值赋给一个指针变量,应改为 p=&k或者*p=k。
10. 请读程序 :#include<stdio.h> #define SUB(X,Y) (X)*Y int mpinOint a=3, b=4;
printf("%d", SUB(a++, b++)); return 0
)上面程序的输出结果是
A) 12B) 15
C) 16D) 20
答案: A
解析:print函数中输出的内容等价于(a++)*b++,由于自增运算符优先级高于*,所以又等价于(a++)*(b++),应先输出a*b,后进行自增运算。
11. sizeof(float) 的结果是:
A) 4
B) 6
C) 8
d)不确定
答案:D
解析:sizeof操作符用来测定数据类型位长,但在不同的系统中,同一数据类型的位长并不一定相同,故不确定,选D。
12. 若执行下面的程序时从键盘上输入3和4,则输出是
int main()
(
int a,b,s;
scanf("%d %d",&a,&b);
s=a;
if(a<b)s=b;
s=s*s;
printf("%d\n",s);
return 0
A) 14 B) 16 C) 18 D) 20
答案: B
解析:scanf 输入 a=3,b=4,s=a=3,a<b,if条件成立, s=b=4 , s=s*s=16 , 输出s=16,
选B。
13. 以下程序的输出结果是
# include <stdio.h>
int main()
{printf("%d\n",NULL);
return 0
A)不确定的(因变量无定义)B ) 0 C )-1 D)1
答案: B
解析:NULL实际上为系统定义的一个符号常量,它的值就为0,所以输出0,选B。
14. 读程序:
#include<stdio.h>
f(char *s)
(
char *p=s;
while( *p!='\0') p++; return(p-s);
}int main()
{ printf("%d\n",f("ABCDEF"));
return 0
}上面程序的输出结果是
A) 3B) 6C) 8 D) 0
答案:B
解析:'\0'为字符串结束标志,t函数的作用实际为统计参数字符串的长度并返回给主函数,所以输出结果为字符串长度6,选B。
在下列叙述中,正确的一条
以下语句是正确的:
char c[] =
一维数组的定义可采用下列格
下面的语句定义了一个二维数
组下两个语句中的a[3][4]的含义相同:
答案:A
解析:C语言数组可以在定义时用字符串赋初值,故答案为 A。其他项均不符合C
语言关于
数组的定义格式。
15.
A)
B)
C)
D)
)。
ab ;
int a(10);
float a[3,4];
:int a[3][4]; a[3][4]=1;
16.
A)
B)
C)
D)
答案:
解析:
A。
;则不能通过scan f语句正确给输入项读入数据的程序段是
,p);
scanf("%ld" , p);
若有说明:long *p,a;
*p=&a ; scanf("%ld"
p=(long *)malloc(8)
scanf("%ld" , p=&a);
scanf("%ld" , &a);
A
A中*p=&a ;赋值语句错误,应改为p=&a ;,才可以将p指针指向变量a,选
若已定义:int a⑼*p=a ;并在以后的语句中未改变p的值,不能表示a[1]地址
17.
的表达式是
A) p+1 B) a+1 C) a++ D) ++答案:C解析:a为常量指针,不能修改其值,故不能使用自增运算符,选C。
18.下面程序的输出是
int main()
( enum team {my,your=4,his,her=his+10};printf("%d %d %d %d\n",my,your,his,her);
return 0;
C) 0 4 5 15 D) 1 4 5 15
A) 0 1 2 3 B) 0 4 0 10
答案: C
解析:枚举元素my没有赋初值系统自动赋值为0,同理,枚举元素his没有赋初
枚举元素赋值规则,系his的值赋为它前面的your的值+1 ,选C。
统将
'以下程序输出结果
19-是
int main()
,m);
int m=5;
if(m++>5)printf("%d\n"
,m--);
else printf("%d\nreturn 0;
A)7B)6 C)5 D)4
答:B
解:主函数第二行中i条件先判断m>5不成然后有 m=m++=6 ,再执行 else语
析,先输出m=6,再立自减为5,选B。句,
中使
20.以下程序运行后,输出结果是int d=1; fun(int p)
(int d=5; d+=p++; printf("%d" d);
int main()
(int a=3; fun(a);
d+=a++;
printf("%d\n" ,d);
return 0;
A)84 B)99 C)95 D)44 答案:A
解析:主函数调用fun的同时,将实参a的值3传递给形参p,fun函数中,p=3,d+=p++ ;语句可以拆分为d=d+p ; p++ ;所以d=8,输出8。子函数调用结束回到主函数中,fun函数中对形参p的值的修改不能改变实参a的值仍为3, d=d+a=4,输出4,选A。
二、填空题(本大题共7小题,每题2分,共14分。)
1. 在C语言中,一个函数的函数体一般包括一和 。
答案:声明部分执行部分
解析:函数结构构成规则。在C语言中,一个函数的函数体一般包括声明部分和执行部分。
2. 在C语言中,不同级运算符之间运算次序存在-—的区别,同级运算符之间运
算次序存在的规则。
答案:先后结合性
解析:不同级的运算符由优先级规定运算次序;同级的运算符的运算顺序由结合性决定。
3. 欲将字符串S1复制到字符串S2中,其语句是
答案:strcpy(s2,s1解析:本题考查库函数strcpy的调用。
4. 结构化程序设计中的三种基本结构是答案:顺序选择循环
5. 表达式x=x+1表示成增量表达式为
解析:自增表达式单独使用 ++x 和 x++ 等价。
时案:x++或++x
6. 定义 int a[]= (1, 2, 3, 4, 5, 6), *p = a ;表达式(* + + p ) + +
的值是 答案: 3
解析:++p表示a [1]的地址,*++p表示a [1]的值,(* + + p ) + +则表示a[1]++
7. C语言中,二维数组在内存中的存放方式为按-优先存放
答案:行
解析:C语言规则是二维数组以行优先方式存放在内存空间。
三、判断题(本大题共7小题,每题2分,共14分。)
1. 虽然goto语句能提高程序运行效率,但为防止程序结构混乱应该禁用(答案:错解析:goto语句应该是慎用而非禁用。
2. 条件表达式可以取代if语句,或者用if语句取代条件表达式()答案:错解析:if语句可由花括号包含多条执行语句,这是条件表达式所不能实现的,因此二者不能相互替换
3. 在C程序中对用到的所有数据都必须指定其数据类型()
答案:错解析:声明变量必须指定数据类型,用#define声明常量不用指定数据类型,只需指定常量名。
4. 可以对字符型数组进行整体输入、输出()
答案:错
解析:字符型数组无法整体进行输入,只能逐个输入输出。
5. 函数中的静态变量在函数每次调用时,都会重新设置初值()答案:错
解析:函数中的静态变量只在函数第一次被调用时设置初值,之后会自动保存为上次调用结束后的值。
6. 实参和与其对应的形参共占用一个存储单元()
答案:错
解析:实参形参各分单元。
7. 一个实型变量的值肯定是精确的()
答案:错
解析:实型变量的精度是有限的,并不精确,而整型变量的值则是精确的。
四、程序分析题(用列表法列出关键变量在运行过程中的值)
(本题共3道小题,每题4分,共12分。)
1. 下面程序的运行结果是____ 。
#include <stdio.h>int main ()
{ int n5 ;
char c[6]
do
abcd”;
c[i] = c[i 1];
}while( i>0);
puts( c);
puts
aabcd
解析:i=5,c[5]=c[4] =
i=4,c[4]=c[3] =
i=3,c[3]=c[2] =
i=2,c[2]=c[1] =
\0'
d';
i=1,c[1]=c[0] =
i=0,不满足条件
循环结束,输出 ” aabcd
2. 以下程序的执行结果是# include< stdio.l?
int main()
i, s = 0;
(
int a[3][3]={1, 2,3,4,5,6,7,8,9},
for( i = 0; i<= 2; i ++)
s = s + a[i][i;
printK" s = %d\n ",s);
答案:s=15
解析:将for循环拆分来看:
i=0 时,s=0+a[0][0]=0+1=1i=1 时,s=1+a[1][1]=1+5=6i=2 时,s=5+a[2][2]=6+9=15i=3时,循环结束。
输 s=15.
3.给出下列函数程序完成的功能void prnt(int n, int ^ian[t ]i);for(i=1; i<=n; i++)
{
printf("%6d”, aa[i]); if(!(i%5)) printf("\n");
} printf("\n"); return 0;
若变量n中的值为24,则prnt函数共输出行,最后一行有个数
答案: 5 4
解析:print函数的功能是依次输出形参数组中的数组元素,并且每输出5个后换行。
五、编程题(本大题共2小题,每题10分,共20分)
1.从键盘输入一个一维数组,将这个数组逆序输出。
答案
#define N 5int main()
{ int a[N] = {9,6,5,4,1},i,temp;
printf("\n original array:\n");
for(i=0;i<N;i++)
printf("%4d”,a[i]);
for(i=0;i<N/2;i++) {temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf("\n sorted array:\n");
for(i=0;i<N;i++)
printf("%4d”,a[i]);
}
解析:程序主体包括三个部分:输入数组元素;实现数组元素的逆序;输出数组元素。输入数组元素:通过一个for循环,利用scanf函数依次输入数组元素。
O2实现数组元素的逆序:通过一个for循环,将数组前一半元素和后一半元素逐个交换。
a[i]=a[N-i-1]
03输出数组元素:通过for循环,利用print函数逐个输出数组元素。
2.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为:
as,则应输出6。
答案:
#include "stdio.h"
#include "string.h"
#include "conio.h"
int fun(char *str,char *substr)
( int i,n=0,s=strlen(str);
for(i=0;i<s;i++)
if((str[i]==substr[0])&&(str[i+1]==substr[1]))
n++;
return n;
}
int main()
char str[81],substr[3];
int n; clrscr();
printf("enter 1:");
gets(str);
printf("enter 2:");
gets(substr);
puts (str);
puts(substr);
n=fun(str,substr); printf("n=%d\n",n);
}
解析:我们可以将程序拆分成几个部分:首先利用gets函数写入两个字符串,然后通过子函数实现统计功能,再将统计值输出。在子函数中,通过一个for循环遍历主串元素,并依次比较每一个主串元素以及它后一个元素是否均与字串两个元素对应相等,如果是,则计数器加1,最终遍历结束后将计数器的值返回给主函数。
展开阅读全文