(总分100,考试时间90分钟)
一、选择题
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。
- 下列叙述中正确的是( )。
A) 算法的效率只与问题的规模有关,而与数据的存储结构无关
B) 算法的时间复杂度是指执行算法所需要的计算工作量
C) 数据的逻辑结构与存储结构是一一对应的
D) 算法的时间复杂度与空间复杂度一定相关
- 栈和队列的共同点是( )。
A) 都是先进后出 B) 都是先进先出
C) 只允许在端点处插入和删除元素 D) 没有共同点
- 下列关于队列的叙述中正确的是( )。
A) 在队列中只能插入数据 B) 在队列中只能删除数据
C) 队列是先进先出的线性表 D) 队列是先进后出的线性表
- 下面概念中,不属于面向对象方法的是( )。
A) 对象 B) 继承 C) 类 D) 过程调用
- 软件是指( )。
A) 程序 B) 程序和文档
C) 算法加数据结构 D) 程序、数据与相关文档的完整集合
- 信息隐蔽的概念与下述哪一种概念直接相关( )。
A) 软件结构定义 B) 模块独立性 C) 模块类型划分 D) 模块耦合度
- 下列选项中,不属于模块间耦合的是( )。
A) 数据耦合 B) 标记耦合 C) 异构耦合 D) 公共耦合
- 对于现实世界中事物的特征,在实体---联系模型中使用( )。
A) 属性描述 B) 关键字描述 C) 二维表格描述 D) 实体描述
- 下列数据模型中,具有坚实理论基础的是( )。
A) 层次模型 B) 网状模型 C) 关系模型 D) 以上三个都是
- 关系表中的每一横行称为一个( )。
A) 元组 B) 字段 C) 属性 D) 码
- 用C语言编写的代码程序( )。
A) 可立即执行 B) 是一个源程序
C) 经过编译即可执行 D) 经过编译解释即可执行
- 以下叙述中正确的是( )。
A) 构成C程序的基本单位是函数 B) 可以在一个函数中定义另一个函数
C) main()函数必须放在其他函数之前 D) 函数定义的格式是K&R格式
- 以下叙述中正确的是( )。
A) C程序中的注释只能出现在程序的开始位置和语句的后面
B) C程序书写格式严格,要求一行内只能写一个语句
C) C程序书写格式自由,一个语句可以写在多行上
D) 用C语言编写的程序只能放在一个程序文件中
- 有以下程序:
#include <stdio.h>
main()
int x=1, y=2, z=3;
if (x>y)
if (y<z) printf("%d", ++z);
else printf("%d", ++y);
printf("%d\n", x++);
程序的运行结果是( )。
A) 331 B) 41 C) 2 D) 1
- 下列程序的运行结果是( )。
#include <stdio.h>
main()
int x=-9, y=5, z=8;
if(x<y)
if(y<0) z=0;
else z+=1;
printf("%d\n", z);
A) 6 B) 7 C) 8 D) 9
- 在嵌套使用if语句时,C语言规定else总是( )。
A) 和之前与其具有相同缩进位置的if配对
B) 和之前与其最近的if配对
C) 和之前与其最近的且不带else的if配对
D) 和之前的第一个if配对
- 有以下程序:
#include <stdio.h>
main()
char k; int i;
for(i=1; i<3; i++)
scanf("%c",&k);
switch(k)
case '0': printf("another\n");
case '1': printf("number\n");
程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是( )。
A) another
number
B) another
number
another
C) another
number
number
D) number
number
- 有以下程序:
#include <stdio.h>
main()
int i;
for(i=0; i<3; i++)
switch(i)
case 0: printf("%d", i);
case 2:printf("%d", i);
default: printf("%d", i);
程序运行后的输出结果是( )。
A) 022111 B) 021021 C) 000122 D) 012
- 以下选项中不属于字符常量的是( )。
A) 'C' B) "C" C) '\xCC' D) '\072'
- 有以下程序:
#include <stdio.h>
main()
char c1, c2, c3, c4, c5, c6;
scanf("%c%c%e%c", &c 1, &c2, &c3, &c4);
c5=getchar(); c6=getchar();
putchar(c1); putchar(c2);
printf("%c%c\n", c5, c6);
程序运行后,若从键盘输入(从第1列开始) :
123<回车>
45678<回车>
则输出结果是( )。
A) 1267 B) 1256 C) 1278 D) 1245
- 在C语言中,函数返回值的类型最终取决于( )。
A) 函数定义时在函数首部所说明的函数类型
B) return语句中表达式值的类型
C) 调用函数时主调函数所传递的实参类型
D) 函数定义时形参的类型
- 下面的函数调用语句中func函数的实参个数是( )。
func(f2(v1, v2), (v3, v4, v5), (v6, max(v7, v8) ) );
A) 3 B) 4 C) 5 D) 8
- 有以下程序:
#include <stdio.h>
void f(intv, intw)
int t;
t=v; v=w; w=t;
main()
int x=1, y=3, z=2;
if(x>y) f(x, y);
else if(y>z) f(y, z);
else f(x, z);
printf("%d, %d, %d\n", x, y, z);
执行后输出结果是( )。
A) 1, 2, 3 B) 3, 1, 2 C) 1, 3, 2 D) 2, 3, 1
- 设有以下定义和语句:
int a[3][2]=1, 2, 3, 4, 5, 6, *p[3];
p[0]=a[1];
则*(p[0]+1) 所代表的数组元素是()。
A) a[0][1] B) a[1][0] C) a[1][1] D) a[1][2]
- 若有定义:int a[2][3]; ,以下选项中对a数组元素正确引用的是( )。
A) a[2][1] B) a[2][3] C) a[0][3] D) a[1>2][!1]
- 下列程序的输出结果是( )。
#include<stdio. h>
#define N 3
#define M 3
void fun(int a[M][N])
printf("%d\n", *(a[1]+2) );
main()
int a[M][N];
int i, j,
for(i=0; i<M; i++)
for(j=0; j<N; j++)
a[i][j]=i+j-(i-j);
fun(a);
A) 3 B) 4 C) 5 D) 6
- 若有定义:int w[3][5];,则以下不能正确表示该数组元素的表达式是( )。
A) *(*w+3) B) *(w+1) [4] C) *(*(w+1) ) D) *(&w[0][0]+1)
- 下列程序执行后的输出结果是( )。
#include <stdio. h>
main()
int a[3][3],*p, i;
p=&a[0][0];
for(i=1; i<9; i++) p[i]=i+1;
printf("%d\n", a[1][2]);
A) 3 B) 6 C) 9 D) 随机数
- 有以下程序:
#include <stdio.h>
int fun(int(*s) [4], int n, int k)
int m, i;
m=s[0][k];
for(i=1; i<n; i++) if(s[i][k]>m) m=s[i][k];
return m;
main()
int a[4][4]=1, 2, 3, 4, 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
- 下面程序段的运行结果是( )。
char *p=" 123defgh";
p+=3;
printf("%d\n", strlen(strcpy(p, " ABCD") ) );
A) 8 B) 12 C) 4 D) 7
- 对下述程序的判断中,正确的是( )。
#include<stdio.h>
void main()
char*p, s[128];
p=s;
while(strcmp(s, "End") )
printf("Input a string:"); gets(s); p=s;
while(*p)
putchar(*p++);
A) 此程序循环接收字符串并输出,直到接收字符串"End"为止
B) 此程序循环接收字符串,接收到字符串"End"则输出,否则程序终止
C) 此程序循环接收字符串并输出,直到接收字符串"End"为止,但因代码有错误,程序不能正常工作
D) 此程序循环接收字符串并将其连接在一起,直到接收字符串"End"为止,输出连接在一起的字符串
- 阅读下列程序,当运行函数时,输入asd af aa z67,则输出为( )。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int fun (char *str)
inti, j=0;
for(i=0; str[i]!='\0'; i++)
if(str[i]!=' ') str[j++]=str[i];
str[j]='\0';
main()
char str[81];
int n;
printf("Input a string:");
gets(str);
puts(str);
fun(str);
printf("%s\n", str);
A) asdafaaz67 B) asd af aa z67 C) asd D) z67
- 在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则( )。
A) 称为函数的直接递归调用 B) 称为函数的间接递归调用
C) 称为函数的循环调用 D) C语言中不允许这样的递归调用
- 有以下程序:
#include <stdio.h>
int fun(int x[], int n)
static int sum=0, i;
for(i=0; i<n; i++) sum+=x[i];
return sum;
main()
int a[]=1, 2, 3, 4, 5, b[]=6, 7, 8, 9, s=0;
s=fun(a, 5) +fun(b, 4); printf("%d\n", s);
程序执行后的输出结果是( )。
A) 45 B) 50 C) 60 D) 55
- 以下程序的输出结果是( )。
#include<stdio.h>
int a[3][3]=(1, 2, 3, 4, 5, 6, 7, 8, 9), *p;
main()
p=(int*) malloc(sizeof(int) );
f(p, A);
printf(; % d\n", *p);
free(p);
f(int *s, int p[][3])
*s=p[1][1];
A) 1 B) 4 C) 7 D) 5
- 有以下程序:
struct STU
char name[10];
int num;
;
void f1(struct STU c)
struct STU b="LiSiGuo", 2042;
c=b;
void f2(struct STU *c)
structSTU b="SunDan", 2044;
*c=b;
main()
struct STU a="YangSan", 2041, b="WangYin", 2043;
f1(a); f2(&b); printf("%d, %d\n", a.num, b.num);
程序执行后的输出结果是( )。
A) 2041 2044 B) 2041 2043 C) 2042 2044 D) 2042 2043
- 设有如下说明:
typedef struct ST
long a; int b; char c[2]; NEW;
则下面叙述中正确的是( )
A) 以上的说明形式非法 B) ST是一个结构体类型
C) NEW是一个结构体类型 D) NEW是一个结构体变量
- 设有以下语句:
char x=3, y=6, z;
z=x^y<<2;
则z的二进制值是( )。
A) 00010100 B) 00011011 C) 00011100 D) 00011000
- 表达式0x13&0x17的值是( )。
A) 0x17 B) 0x13 C) 0xf8 D) 0xec
- 以下叙述中错误的是( )。
A) gets函数用于从终端读入字符串
B) getchar函数用于从磁盘文件读入字符
C) fputs函数用于把字符串输出到文件
D) fwrite函数用于以二进制形式输出数据到文件
二、程序填空题
给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h<
#include <ctype.h<
char *fun(char *s)
inti, j, k, n; char *p, *t;
n=strlen(s)+1;
t=(c har*)malloc (n*sizeof(char));
p=(char*)malloc(n*sizeof(char));
j=0; k=0;
for(i=0; i<n; i++)
if(isdigit(s[i]))
/******************found*******************/
p[ (1) ]=s[i]; j++;
else
t[k]=s[i]; k++;
/******************found*******************/
for(i=0; i< (2) ; i++)p[j+i]=t[i];
p[j+k]=0;
/******************found*******************/
return (3) ;
main()
char s[80];
printf("Please input:");
scanf("%s", s);
printf("\nThe result is: %s\n", fun(s));
三、程序改错题
- 给定程序中函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指的数组的尾部。例如,当a所指字符串中的内容为"abcdefg",b所指字符串中的内容为"1234"时,c所指数组中的内容应"a4b3c2dlefg";而当a所指字符串中的内容为"1234",b所指字符串的内容为"abcdefg"时,c所指数组中的内容应该为"lg2f3e4dcba"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <string.h>
void fun (char*a, char*, char *c)
inti, j; char ch;
i=0; j=strlen(b)-1;
/******************found*******************/
while(i>j)
ch=b[i]; b[i]=b[j]; b[j]=ch;
i++; j--;
while (*a|| *b)
/******************found*******************/
If(*a)
*c=*a; c++; a++;
if(*b)
*c=*b; c++; b++;
*c=0;
main()
char s1[100], s2[100], t[200];
printf("\nEnter s1 string:"); scanf("%s", s1);
printf("\nEnter s2 string:"); scanf("%s", s2);
fun(s1, s2, t);
printf("\nThe result is: %s\n", t);
四、程序设计题
- 函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。
注意:部分源程序给出如下。
请勿改动mam函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h>
#include <string.h>
void fun(char *s, char t[])
main()
char s[100], t[100];
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s, t);
printf("\nThe result is:%s\n", t);