新
搜索感兴趣的课程
评价课程
课程分享
微信提醒课程进度
扫码下载APP
期末试卷
本次得分为:68.00/80.00, 本次测试的提交时间为:2018-07-14。
1
单选(3分)
关于函数指针,以下说法错误的是:
得分/总分
-
A.
通过函数指针调用函数的时候不能传递参数
3.00/3.00
-
B.
函数指针可以作为参数传给一个函数
-
C.
通过函数指针可以调用一个函数
-
D.
函数的名字就是函数的指针值,可以赋给函数指针变量
正确答案:A你选对了
2
单选(3分)
若定义
- char s[2][3]={“ab”, “cd”}, *p=(char *)s;
那么下列表达式语法正确,并且其值与 s[1][1]相等的表达式(并非一定与其等价)是得分/总分
-
A.
- *(p+3)
-
B.
- *(p+4)
3.00/3.00
-
C.
- *s+2
-
D.
- p[1][1]
正确答案:B你选对了
3
单选(3分)
要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确实现此功能的函数是
得分/总分
-
A.
- void funa(int *x , int *y)
- {
- int t = *x;
- *x = *y;
- *y = t;
- }
-
B.
- void funa(int x , int y)
- {
- int t;
- t=x;x=y;y=t;
- }
-
C.
- void funa(int *x , int *y)
- {
- int *p;
- *p=*x;*x=*y;*y=*p;
- }
0.00/3.00
-
D.
- int funa(int *x , int *y)
- {
- *x=*y;*y=*x;
- }
正确答案:A你错选为C
4
单选(3分)
对于如下定义:
- int k,a[10],*p=a;
哪个表达式是不正确的
得分/总分
-
A.
p++
-
B.
p[0]=k
-
C.
a++
3.00/3.00
-
D.
*p++=2
正确答案:C你选对了
5
单选(3分)
下列描述不正确的是
得分/总分
-
A.
全局变量定义在函数外部
-
B.
静态本地变量分配在全局变量所在的地方
0.00/3.00
-
C.
全局变量定义在函数内部
-
D.
本地变量定义在函数内部
正确答案:C你错选为B
6
单选(3分)
有如下定义:
- int x[]={1,2,3},*p=x,y;
则
- y=*p++;
相当于_____得分/总分
-
A.
y=x[0], p++
-
B.
y=2, p=x+1
-
C.
y=*(p+1), p=p+1
0.00/3.00
-
D.
y=2, p=&x[1]
正确答案:A你错选为C
7
单选(3分)
若声明函数
int* func(void);
则函数fun的返回值为:
得分/总分
-
A.
一个整数
-
B.
一个整型函数的入口地址
-
C.
一个指向整型变量的指针
3.00/3.00
-
D.
一个指向整型函数的指针
正确答案:C你选对了
8
单选(3分)
关于#include,以下说法正确的是
得分/总分
-
A.
#include <xx>是错误的,因为没有了.h后缀
-
B.
#include <stdio.h>就把stdio库引入到了程序中
0.00/3.00
-
C.
#include "xx.h"只在当前目录搜索xx.h
-
D.
#include <xx.h>只在编译器被指定的目录中搜索xx.h
正确答案:D你错选为B
9
单选(3分)
与
- while( *s++ = *t++ );
等价的程序段是得分/总分
-
A.
- while ( *t )
- *s++ = *t++;
-
B.
- do {
- *s++ = *t++;
- } while ( *t );
-
C.
- do {
- *s = *t++;
- } while ( *s++ );
3.00/3.00
-
D.
- while ( *s )
- *s++ = *t++;
正确答案:C你选对了
10
单选(3分)
有以下结构体说明和变量定义,指针p、q、r依次指向一个链表中的三个连续结点。
- struct node
- {
- int data
- struct node *next ;
- } *p, *q, *r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是
得分/总分
-
A.
- q->next=r->next; r->next=q; p->next=r;
-
B.
- r->next=q; q->next=r->next; p->next=r;
3.00/3.00
-
C.
- p->next=r; q->next=r->next; r->next=q;
-
D.
- q->next=r->next; p->next=r; r->next=q;
正确答案:B你选对了
11
单选(3分)
有以下程序
- void WriteStr(char *fn,char *str)
- {
- FILE *fp;
- fp=fopen(fn,"w");
- fprintf(fp, "%s", str);
- fclose(fp);
- }
- int main()
- {
- WriteStr("t1.dat","start");
- WriteStr("t1.dat","end");
- return 0;
- }
程序运行后,文件t1.dat中的内容是
得分/总分
-
A.
end
3.00/3.00
-
B.
startend
-
C.
endrt
-
D.
start
正确答案:A你选对了
12
单选(3分)
在一个链表中,要把s所指的一个结点插入到p所指的一个结点后面去,正确的语句是:
得分/总分
-
A.
- s->next=p¬->next; p=s;
-
B.
- s->next=p->next; p->next=s;
3.00/3.00
-
C.
- s->next=p; p->next=s;
-
D.
- p->next=s; s->next=p;
正确答案:B你选对了
13
单选(3分)
以下哪个函数是不正确的(与能否被编译无关)?
得分/总分
-
A.
- int* f(int *p)
- {
- int i;
- return &i;
- }
3.00/3.00
-
B.
- int* f(int *p)
- {
- return NULL;
- }
-
C.
- int* f(int *p)
- {
- return (int*)malloc(sizeof(int));
- }
-
D.
- int* f(int *p)
- {
- return p;
- }
正确答案:A你选对了
14
单选(3分)
执行下列代码后变量t的值是_____.
- #define fun(a) 4*a;
- int t;
- t=fun(1+2);
得分/总分
-
A.
12
-
B.
6
3.00/3.00
-
C.
8
-
D.
10
正确答案:B你选对了
15
单选(3分)
给定函数原型如下:
- int* f(int *p);
而变量定义如下:
- int i;
得分/总分
-
A.
- *f(&i) = 6;
-
B.
- f(&i);
-
C.
- f(&(i+6));
3.00/3.00
-
D.
- int* p = f(&i);
正确答案:C你选对了
16
单选(3分)
有以下代码片段:
- struct {
- union {
- char a,b;
- int c;
- } d;
- int e[5];
- } f, *p = &f;
那么,下列语句哪个是能被编译的:
得分/总分
-
A.
- p.d.a = '*';
-
B.
- p->d->c = 20;
-
C.
- p->e[3] = 10;
3.00/3.00
-
D.
- p->b = ' ';
正确答案:C你选对了
17
单选(3分)
有函数原型为
- void f(int, int *);
,主函数中有变量定义:
- int a=2, *p=&a;
则下列函数调用正确的是得分/总分
-
A.
- f(p,a);
-
B.
- f(a, &p);
-
C.
- f(a, *p);
-
D.
- f(a, p);
3.00/3.00
正确答案:D你选对了
18
单选(3分)
若定义
- int k, a[10], *p=a;
那么下面表达式不能被编译的是_______.
得分/总分
-
A.
- p[0] = k;
-
B.
- a[0] = k;
-
C.
- p++;
-
D.
- a++;
3.00/3.00
正确答案:D你选对了
19
单选(3分)
用typedef来定义一个函数指针类型PunPtr,它表示的是指向形如void func(int x)的函数,以下正确的表达是:
得分/总分
-
A.
typedef FunPtr fun(int x);
-
B.
typedef void (*FunPtr)( );
-
C.
typedef void FunPtr(int x);
-
D.
typedef void (*FunPtr)(int);
3.00/3.00
正确答案:D你选对了
20
单选(3分)
在课程的图形库中,关于printf的问题,以下说法正确的是:
得分/总分
-
A.
如果调用了InitConsole()函数,printf会显示在专门的终端窗口上,否则不会输出任何东西。
3.00/3.00
-
B.
printf会自动打开一个文本窗口显示内容
-
C.
printf会在图形窗口的当前位置显示内容
-
D.
printf不会输出任何东西
正确答案:A你选对了
21
填空(2分)
表达式
- !!”2010-01-27”
的值为(以1表示真,0表示假)得分/总分
2.00/2.00
正确答案:1
22
填空(2分)
下列程序段的输出是_______。
- #define DF(a,b) (a+2*b)
- int s=5;
- int k= DF(s+1,s-3);
- printf("%d",k);
得分/总分
2.00/2.00
正确答案:13
23
填空(2分)
以下代码段的输出是:
- int x, y, z, w;
- void p(int *y, int x)
- {
- static int w;
- *y++; x++; w = x+*--y;
- printf("%d#%d#%d#%d#",x,*y,z,w);
- }
- int main(void)
- {
- int x, y, z, w;
- x=y=z=w=1;
- do{
- static int x;
- p(&x, y);
- printf("%d#%d#%d#%d#",x,y,z,w);
- } while(0);
- return 0;
- }
得分/总分
2.00/2.00
正确答案:2#0#0#2#0#1#1#1#
24
填空(2分)
假设sizeof(int)的值为4,对数组定义:
- int a[3][6];
则sizeof( a[0] )的值为______。
得分/总分
2.00/2.00
正确答案:24
25
填空(2分)
写出表示“当 x 的取值在 [-10, 0] 的范围内,结果为真,否则为假”的C语言表达式,注意不要任何空格
得分/总分
2.00/2.00
正确答案:x>=-10&&x<=0 或 x<=0&&x>=-10 或 !(x<-10||x>0)
26
填空(2分)
若
- int a = 6, b = 0, c = 3
,则表达式
- a && b || b - c
的结果是(以1表示真,0表示假)得分/总分
2.00/2.00
正确答案:1
27
填空(2分)
以下代码段的输出是:
- char a[20]="cehiknqtw";
- char *s="fbla",*p;
- int i, j;
- for(p=s; *p; p++) {
- j=0;
- while (*p>=a[j] && a[j]!='\0') j++;
- for(i=strlen(a); i>=j; i--) a[i+1] = a[i];
- a[j]=*p;
- }
- printf("%s", a);
得分/总分
2.00/2.00
正确答案:abcefhiklnqtw
28
填空(2分)
根据下面的定义,F0(3+4)的输出结果是_______(注意没有空格)
- #define F1(var) printf("var=%d", var)
- #define F0(var) F1(var * var)
得分/总分
2.00/2.00
正确答案:var=19
29
填空(2分)
程序T1的代码如下,则运行T1 abc bcd cde aed的输出结果是_______.
- int main(int argc, char** argv)
- {
- while(**argv++!='a');
- printf("%s", *argv);
- return 0;
- }
得分/总分
2.00/2.00
正确答案:bcd
30
填空(2分)
以下代码的输出是 :
- void swap( int *pa, int *pb )
- {
- int pt;
- pt = *pa, *pa = *pb, *pb = *pa;
- }
- int main(void)
- {
- int x=1, y=2;
- f(&x, &y);
- printf("%d%d", x, y);
- }
得分/总分
2.00/2.00
正确答案:22