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);