C语言考试复习题
- 格式:docx
- 大小:23.59 KB
- 文档页数:6
C语言复习题
一、单项选择题(每题3分)
1.以下变量声明正确的是(D)
A: int i = 0;
int i = 5; B: int i = 0;
j = 5; C: int i = 0,
int j = 5; D: int i = 0;
{ int i = 5;}
2.下面代码的输出结果为(B)
int main(void)
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
A: 10,11,110 B: 10,12,120 C: 11,12,120 D: 11,11,110
3.下面代码运行后m的结果为(C)
int m = 6;
m = (m%3*4)?m/4:--m;
printf("%d",m);
A:1 B:2 C:5 D:6
4.下面代码运行后输出'*'的个数为(A)
for (int j = 5; j<=10; ++j) {
for (int i =0; i<10; i++) {
printf("*");
}
}
A:60 B:50 C:15 D:16
5.以下代码输出的结果为(D)
int m = 0;
for (int i = 0; i<5; i++) {
switch (i) {
case 0:m++;
case 1:m++;break;
case 2:m++;continue;
case 3:m++;break;
default:m++;continue;
}
m++;
}
printf("%d",m); A:12 B:11 C:10 D:9
6.以下代码运行的结果为(B)
int i = 1,m = 1;
for (; i<10; i++) {
if (i/2 == 2 || i%4==0) {
for (int j = 4; j < i; j++) {
m+=j;
}
}
}
printf("m = %d",m);
A: 26 B: 27 C: 28 D: 29
7. break关键字在哪一种语法结构中不能使用? (C)
A: for语句 B: switch语句 C: if语句 D: D. while语句
8.下列数组说明中,正确的(C)
A:
int array[][]={0}; B:
int array[3][]={0}; C:
int array[][4]={0}; D:
int array[][][5]={0};
9.设变量定义为int x, *p=&x;则&(*p)相当于(C)
A: *(&x) B: *p C: p D: x
10.下列选项中正确的语句组是(D)。
A: char s[8];
s={"lanou"}; B: char s[8];
s="lanou"; C: char * s;
s={"lanou"}; D: char * s;
s="lanou";
11.设 char 型变量 x 中的值为,则 表达式(2+x)^(~3)的二进制值是(D)
A: B: C: D:
12.如定义变量 int * p=NULL;int a = 6;运行会造成崩溃的语句是(B)
A: (p=&a)+1; B: *p = a; C: p = a; D: *(p = a)+1;
13.如有定义 int a[6] = {0};int * p1 = a;int * p2 = &a[6]; 则p2-p1的结果为(A)
A: 5 B: 6 C: 20; D: 24
14.如有定义int * p = malloc(15);p当int型数组使用,最多可以使用几个元素? (A)
A: 3 B: 4 C: 5; D:15
15.如有函数声明void function(const char * str1,char * str2);进行函数调用时,以下说法正确的是(A)
A: str1可传常量字符串 B: str2可传常量字符串 C: 都可以传常量字符串 D:都不可以传常量字符串
16.分析以下程序输出结果(D)
char * getString(int n)
{
static char string[255]="lanou";
sprintf(string+1, "iPhone%d",n);
return string;
}
int main(int argc, const char * argv[])
{
printf("%s\n",getString(5));
}
A: lanou B: iPhone C: iPhone5 D:liPhone5
17.有如下结构体定义
typedef struct student
{
char name[30];
int age;
float score;
}Student;
学生人数存储在变量n中,如需分配内存,如下语句正确的是(C)
A: Student
p[n]={0}; B: Student *
p=malloc(n); C: Student * p=NULL;
p =
malloc(n*sizeof(student)); D:Student*p[n]=
{0};
18.如果上题分配内存正确给最后一名学生的age赋值正确写法是(D)
A: p[n].age = 18; B: p[n-1]->age=18; C: (p+n)->age=18;
D:p[n-1].age=18;
19.有函数声明void function(double * (*p)());调用该函数传递参数,需要声明的函数形式为(D)
A: void
param(); B: void param(doublie *
d); C:doubile param(); D:doubile * param();
20.如有程序int a[3]={3,8,6};int * p = a;printf("%d,%d",++(*p),*(++p));输出结果为(B)
A: 4,3 B: 4,8 C:8,4 D:8,3
二、简答题(每题4分)
1.写一个求两个数最小值的宏
#define MINVALUE(A,B) ((A)<(B)?(A):(B))
2.定义一个3*4的二维数组,元素类型为字符指针 char * array[3][4] = {0};
3.定义一个函数指针变量,指向的函数声明为:返回值为字符串,参数为浮点型(float)指针.
char * (*p)(float *);
4.如需查找某一字符串,在另一字符串中的位置.请写出函数声明.
int getPostion(char * substring,char * string);
或
char * getPostion(char * substring,char * string);
5.有两个数组short m[3]={1,4,9}; short n[3] = {4,6,8};请用memcpy交换两个数组的值
short tmp[3] = {0};
memcpy(tmp, m,sizeof(m));
memcpy(m, n,sizeof(m));
memcpy(n, tmp,sizeof(m));
三、编程题(每题10分)
1.有两个数组 int a[5] = {1,4,7,3,2}; int b[6] = {3,9,2,8,0,6};找出两个数组中值相同的元素.并动态生成一个新数组保存
int a[5] = {1,4,7,3,2}; int b[6] = {3,9,2,8,0,6};
int * m = malloc(sizeof(b));
int index = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j< 6; j++) {
if (a[i] == b[j]) {
m[index] = a[i];
index++;
}
}
}
m = realloc(m, index*sizeof(int));
for (int i = 0 ; i
printf("%d ",m[i]);
}
free(m);
2.随机找出1到10之间的n个数,找到的数不能重复(注:n小于10,要求高性能)
int a[10] = {1,2,3,4,5,6,7,8,9,10};
//随机数个数
int n = 10;
//随时数下标
int postion = 0;
for (int i = 0 ; i< n; i++) {
//每次限机的下标递减9,8,7...
postion = arc4random()%(10-i);