a:
c):
((b
D.k=(a
20.有以下程序:
#include
main( )
{int i,j,m=1;
for(i=1;i<3;i++)
{for(j=3;j>0;j--)
{if(i*j>3)break;
m*=i+j;
}
)
printf("m=%d\n",m);
)
程序运行后的输出结果是( )。
A.m=6
B.m=2
C.m=4
D.m=3
21.有以下程序:
#include
main( )
{int a=1,b=2;
for(;a<8;a++){b+=a;a+=2;)
printf("%d,%d\n",a,b);
)
程序运行后的输出结果是( )。
A.9,18
B.8,11
C.7,11
D.10,14
22.有以下程序,其中k的初值为八进制数:
#include
main( )
{int k=011;
printf{"%d\n",k++};
}
程序运行后的输出结果是( )。
A.12
B.11
C.10
D.9
23.下列语句组中,正确的是( )。
A.char*s;s="Olympic";
B.char sE73;s="Olympic";
C.char*S;s={¨Olympic"};
D.char sET3;s={"Olympic"};
24.以下关于return语句的叙述中正确的是( )。
A.一个自定义函数中必须有一条return语句
B.一个白定义函数中可以根据不同情况设置多条return语句
C.定义成void类型的函数中可以有带返回值的return语句
D.没有return语句的自定义函数在执行结束时不能返回到调用处
25.下列选项中,能正确定义数组的语句是( )。
A.int num[0..2008];
B.int num [];
C.int N=2008;int num[N];
D.#define N 2008; int num[N];
26.有以下程序:
#include
void fun(char*C,int d)
{*c=*c+1,d=d+1;
printf(%"c%,c",*c,d);
}
main( )
{char b=’a’a=’A’;
fun(&b,a);printf(%"c,%c\n",b,a);
)
程序运行后的输出结果是( )。
A.b,B,b,A
B.b,B,B,A
C.a,B,B,a
D.a,B,a,B
27.若有定义"int(*pt)[3];",则下列说法正确的是( )。
A.定义了基类型为int的三个指针变量
B.定义了基类型为int的具有三个元素的指针数组pt
C.定义了一个名为*pt、具有三个元素的整型数组
D.定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组
28.设有定义"double a[10],*s=a;",以下能够代表数组元素a[3]的是( )。
A.(*s)[3]
B.*(s+3)
C.*s[3]
D.*s+3
29.有以下程序:
#include
main( )
{int a[5]={1,2,3,4,5),b[5]={0,2,1,3,o},i,s=0;
for(i=o;i<5;i++)s=s+a[b[i]];
printf(”%d\n”,s);
)
程序运行后的输出结果是( )。
A.6
B.10
C.11
D.15
30.有以下程序:
#include
main( )
{int b[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l;
for(i=0;i<3;i++)
for(j=1;j<=i;j++)t+=b[i][b[j][i]];
printf("%d\n",t);
)
程序运行后的输出结果是( )。
A.1
B.3
C.4
D.0
31.若有以下定义和语句:
char s [10]="abcd!
",*s2="\nl23\\";
Drintf("%d%d\n",strlen(sl),strlen(s2));
则输出结果是( )。
A.5 5
B.10 5
C.10 7
D.5 8
32.有以下程序:
#include
#define N 8
void fun(int*x,int i)
{*x=*(x+i);)
main( )
{ int a[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);
for(i=0;i
{printf("Ha",a[i]);}
printf("\n");
)
程序运行后的输出结果是( )。
A.1313
B.2234
C.3234
D.1234
33.有以下程序:
#include
int f(int t[],int n);
main( )
{int a[4]={1,2,3,4},s;
s=f(a,4);printf("%d\n",s);
int f(int t[],int n)
{if(n>0)return t[n-1]+f(t,n-1);
else return 0;
)
程序运行后的输出结果是( )。
A.4
B.10
C.14
D.6
34.有以下程序:
#include
int fun( )
{static int x=1;
X*=2;return X;
main( )
{int i,S=1;
for(i=1;i<=2;i++)s=fun( );
printf{¨%d\n",s);
)
程序运行后的输出结果是( )。
A.0
B.1
C.4
D.8
35.有以下程序:
#include
#define SUB(a)(a)-(a)
main( )
{int a=2,b=3,c=5,d;
d=SUB(a+b)*C;
printf("%d\n",d);
)
程序运行后的输出结果是( )。
A.0
B.-l2
C.-20
D.10
36.设有定义:
struet complex
{int real,unreal;)datal={1,8},data2;
则以下赋值语句中错误的是( )。
A.data2=datal;
B.data2={2,6};
C.data2.real=datal.real;
D.data2.real=datal.unreal;
37.有以下程序:
#include
#include
struct A
{int a;char b[10];double C;);
void f(struct A t);
main( )
{struct A a={"1001,"ZhangDa",l098,0};
f(a);printf("%d,%S,%6.1f\n",a.a,a.b,a.c);}
void f(struct A t)
{t.a=1002;strcpy(t.b,"ChangRon9");t.c=1202.0;}
程序运行后的输出结果是( )。
A.1001,ZhangDa,1098.0
B.1002,ChangRong,1202.0
C.1001,ChangRong,1098.0
D.1002,ZhangDa,1202.0
38.有以下定义和语句:
struct workers
{int num;char name[20];char C;
struct
(int day;int month;int year;)S;
};
struct workers w,*pw;
pw=&w;
能给w中year成员赋1980的语句是( )。
A.*pw.year=1980;
B.w.year=1980;
C.pw->year=1980
D.w.S.year=1980;
39.有以下程序:
#include
main( )
{int a=2,b=2,C=2;
print{("%d\n",a/b&c);
}
程序运行后的输出结果是( )。
A.0
B.1
C.2
D.3
40.有以下程序:
#include
main( )
{FILE*fp;char str[10];
fp=fopen("myfile,dat","");
{puts("abe",ip);fclose(fp);
fp=fopen("myfile.dat","a*");
fprintf(fp,"%d",28);
rewind(fp);
fscanf(fp,"%S",str);puts(str);
fclose(fp);
}
程序运行后的输出结果是( )。
A.abc
B.28c
C.abc28
D.内类型不一致而出错
二、基本操作题(共18分)
请补充main( )函数,该函数的功能是:
如果数组arr的前一个元素比后一个元素小,则把它保存在数组bb中并输出。
例如,若数组中的元素为:
“40,68,62,33,35,52,48,95,66,73”,则输出:
“40,33,35,48,66”。
注意:
部分源程序给出如下。
请勿改动函数( )main和其他函数中的任何内容,仅在main( )函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define M l0
void main( )
{
int i,n=0;
int arr[M]=(40,68,62,33,35,52,48,95,66,73);
int bb[M];
system("CLS");
for(i=0;i<【1】;i++)
if(arr[i]
【2】;
printf("\n***display bb***\n");
for(i=0;i
printf("bb[%d]=%2d",【3】);
}
三、程序改错题(共24分)
给定程序中,函数proc( )的功能是:
使数组中的元素的值缩小5倍。
请修改程序中的错误,使它能得出正确的结果。
注意:
不要改动main( )函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
float m[lO];
//****found****
int proc(void)
{
int j;
printf("In subfunc after calling\n");
for(j=0;j<10;j++)
{
//****found****
printf("%f",m[j]%5);
}
}
void main( )
{
int i;
printf("In main before calling\n");
for(i=0;i<10;i++)
{
m[i]=i+20;
printf("%f",m[i]);
}
proc( );
printf("\nln main after calling\n");
for(i=0;i<10;i++)
printf("%f",m[i]/5);
}
四、程序设计题(共18分)
学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc( ),其功能是:
按分数的高低排列学生的记录,高分在前。
注意:
部分源程序给出如下。
请勿改动main( )函数和其他函数中的任何内容,仅在函数proc( )的花括号中填入所编写的若干语句。
试题程序:
#include
#define M l6
typedef struct
{
char num[l0];
int S;
}
STREC:
void proc(STREC a[])
{
int i,j;
STREC t;
for(i=1;i
排序*/
for(j=0;j
if(a[j].s
的记录,高分在前*/
{t=a[j];a[j]=a[j+1];a[j+1]=t;)
}
void main( )
{
STREC stu[M]={{"GA005",85),{"GA003",76},
{"GA002",69},{"GA004",85),{"GA001",91),
{"GA007",72),{"GA008",64),{"GA006",87),
{"GA015",85),{"GA013",91),{"GA012",64),
{¨GA014",91),{"GA011",66),{"GA017",64},
{"GA018",64),{"GA016",72}};
int i;
proc(stu);
printf("The data after sorted:
\n");
for(i=0;i
{
if(i%4= =0)
//每行输出4个学生记录
printf("n");
printf("%s%4d",stu[i],num,stu[i].s);
}
printf("\n");
}
一、选择题
1.C。
【解析】-分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。
2.D。
【解析】数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。
数据的存储结构(也称数据的物理结构)是指数据的逻辑结构在计算机存储空间中的存放形式。
通常一种数据的逻辑结构根据需要可以表示成多种存储结构。
3.C。
【解析】编辑软件和浏览器属于工具软件,教务系统是应用软件。
4.A。
【解析】调试的目的是发现错误或导致程序失效的错误原因,并修改程序以修正错误。
调试是测试之后的活动。
5.D。
【解析】数据流程图是一种结构化分析描述模型,用来对系统的功能需求进行建模。
6.B。
【解析】开发阶段在开发初期分为需求分析、总体设计、详细设计3个阶段,在开发后期分为编码、测试两个子阶段。
7.C。
【解析】模式描述语言(Data Description Language,DDL)来描述、定义的,体现、反映了数据库系统的整体观。
8.D。
【解析】一个数据库由一个文件或文件集合组成。
这些文件中的信息可分解成一个个记录。
9.C。
【解析】E-R(Entity—Relationship)图为实体一联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
10.D。
【解析】选择是建立一个含有与原始关系相同列数的新表,但是行只包括那些满足某些特定标准的原始关系行。
11.B。
【解析】c语言程序是由主函数和若干子函数构成的,可以嵌套使用。
主函数调用子函数,子函数在定义时是并列的,子函数可相互调用或被多次调用。
12.B。
【解析】C语言中的变量必须在使用前定义,注释不记入程序,只是作为一种解释程序的标识,方便其他用户修改及查看。
13.D。
【解析】标识符主要由英文字母、数字和下划线构成,但开头字符一定是字母或下划线。
14.C。
【解析】运算符%要求两个运算对象都为整型。
C中a为double型,不符合要求。
15.C。
【解析】当程序调用9etchar时,程序就等着用户接键。
用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。
如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。
也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓)中区中的字符读完为后,才等待用户按键。
因此,程序中c的值为输入的第 一个回车符。
16.D。
【解析】C语言中没有逻辑类型。
17.A。
【解析】由于a= =l和a!
=1两者互斥,即总有一个为真,因此二者的或也必定为真。
18.B。
【解析】题中当a的值为l时,关系表达式a= =l的值为真,即1,因此程序将跳转到easel执行a++操作,与题干程序刚好相反。
19.c。
【解析】条件运算符(?
:
)是C语言中唯一的一个三目运算符,它是对第一个表达式做真/假检测,然后根据结果返回两个表达式中的一个作为运算的结果。
<表达式1>?
<表达式2>:
<表达式3>。
在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
20.A。
【解析】本题考查了多重for循环。
当(i*j)>3时,跳出循环,本题中i=1,j=3,i*J后值为3,所以执行下边语句:
m*=i+j,也可写成m=m*i+j,这时要注意优先级,所以m的值为6。
21.D。
【解析】第一次执行循环前,a=1,满足a<8,执行循环后,b=3,a=3。
执行完a++操作后,a=4。
由于a<8,执行第二次循环后,b=7,a=6,执行完a++操作后,a=7。
由于a<8,执行第三次循环后,b=14,a=9,执行完a++操作后a=10。
此时不满足a<8,跳出循环。
22.D。
【解析】八进制数k=011得十进制值为9,因此题中输出的是k的十进制值,输出完成后才执行 k++操作。
23.A。
【解析】给字符串数组赋值时,要先定义数组长度,然后再赋值。
可以只给部分元素赋初值,当( )中值的个数少于元素个数时,只给前面部分元素赋值。
数组的下标是从0开始的,所以s[7]代表从s[0