单项选择题
1. 下列关于栈和队列的描述中,正确的是( )。
A: 栈是先进先出
B: 队列是先进后出
C: 队列允许在队头删除元素
D: 栈在栈顶删除元素
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。
2. 已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是( )。
A: ABCDE
B: ECABD
C: EACDB
D: CDEAB
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序遍历的首个元素为E,故排除A)和D)选项。由于中序遍历中,元素B在元素根结点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为B,故选项C)为正确选项,即该二叉树的前序遍历序列是EACDB。
3. 在数据流图中,带有箭头的线段表示的是( )。
A: 控制流
B: 数据流
C: 模块调用
D: 事件驱动
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。
4. 结构化程序设计的3种结构是( )。
A: 顺序结构,分支结构,跳转结构
B: 顺序结构,选择结构,循环结构
C: 分支结构,选择结构,循环结构
D: 分支结构,跳转结构,循环结构
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。
5. 下列方法中,不属于软件调试方法的是( )。
A: 回溯法
B: 强行排错法
C: 集成测试法
D: 原因排除法
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 软件调试主要采用以下三种方法:
强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。
回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。
原因排除法:原因排除法是通过演绎和归纳,以及二分法来实现。
6. 下列选项中,不属于模块间耦合的是( )。
A: 内容耦合
B: 异构耦合
C: 控制耦合
D: 数据耦合
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 耦合可以分为下列几种,它们之间的耦合度由高到低排列:
内容耦合——若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。
公共耦合——若一组模块都访问同一全局数据结构,则称为公共耦合。
外部耦合——若一组模块都访问同一全局数据项,则称为外部耦合。
控制耦合——若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。
标记耦合——若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。
数据耦合——若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。
非直接耦合——若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合性最强。
7. 下列特征中不是面向对象方法的主要特征的是( )。
A: 多态性
B: 标识惟一性
C: 封装性
D: 耦合性
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识惟一性、多态性、封装性、模块性、继承和多态性好。
8. 在数据库设计中,将E-R图转换成关系数据模型的过程属于( )。
A: 需求分析阶段
B: 概念设计阶段
C: 逻辑设计阶段
D: 物理设计阶段
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。它包括从E-R图向关系模式转换和逻辑模式规范化及调整、实现。
9. 在一棵二叉树上,第5层的结点数最多是( )。
A: 8
B: 9
C: 15
D: 16
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。
10. 下列有关数据库的描述,正确的是( )。
A: 数据库设计是指设计数据库管理系统
B: 数据库技术的根本目标是要解决数据共享的问题
C: 数据库是一个的系统,不需要操作系统的支持
D: 数据库系统中,数据的物理结构必须与逻辑结构一致
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的性,从而减少应用程序的开发和维护代价。
11. 以下关于C语言的叙述中正确的是( )。
A: 预处理命令通常位于函数体外面,但也可以位于函数体中间
B: C语言中的变量定义须在其他语句之前
C: 在C语言程序的书写中,一个语句必须单占一行
D: 一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 源程序中可以有预处理命令(include命令仅为其中的一种)。C语言中的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数。
12. 下列叙述中错误的是( )。
A: 用户所定义的标识符允许使用关键字
B: 用户所定义的标识符应尽量做到“见名知意”
C: 用户所定义的标识符必须以字母或下划线开头
D: 用户定义的标识符中,大、小写字母代表不同标识
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。
13. 下列选项中可作为C语言合法常量的是( )。
A: -80
B: -80
C: -8e1.0
D: -80.0e
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项B)中是以0开头,表示一个八进制数,而八进制数的取值范围是0~7,所以“-080”错误;在C语言中e后面的指数必须是整数,因此选项C)和D)也不正确。
14. 下列定义变量的语句中错误的是( )。
A: im_int;
B: double int_;
C: char For;
D: floa US$;
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: C语言规定,变量的标识符只能由字母、数字和下划线3种字符组成,且首字符必须为字母或下划线。在C语言中大写字母和小写字母被认为是两个不同的字符。选项A)定义的变量标识符int和选项B)定义的变量标识符int与C语言的关键字int是不同的,是正确的变量标识。选项C)定义的变量标识符For与C语言中的关键字for是两个不同的标识符,所以选项C)是正确的,而选项D)包含有特殊字符$,因而其不符合C语言的变量命名规定。
15. 下列关于函数的叙述中正确的是( )。
A: 每个函数都可以被其他函数调用(包括main函数)
B: 每个函数都可以被单独编译
C: 每个函数都可以单独运行
D: 在一个函数内部可以定义另一个函数
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 在C语言中,函数定义是平行的,函数不能嵌套定义,即函数之间没有从属关系。虽然函数之间可以相互调用,但main()函数不能被调用,选项A)错误;C程序从:main()函数开始执行,当main()数执行完毕时,整个程序就结束了。C程序的执行必须从main()函数开始,选项C)选项错误;函数不能嵌套定义,选项D)错误。
16. 当a=1、b=2、c=3、d=4时,执行下面程序段后,x的值是( )。
if(a〈 b)
if(c〈 d)x=1;
else
if(a〈 c)
if(b〈 d)x=2;
else x=3;
else x=6;
else x=7:
A: 1
B: 6
C: 3
D: 2
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查的是if-else语句。第一个if语句,先判断条件,发现a〈 b条件成立,执行下面的语句。第二个if语句,先判断条件,发现c〈 d条件成立,执行下面的语句x=1。
17. 以下程序的输出结果是( )。
#include〈 stdio.h 〉
main()
{ int a=4,b=3,c=2,d=1;
printf("%d",a〈 b?a:d〈 c?d:b);
}
A: 1
B: 3
C: 2
D: 4
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 条件表达式的格式为:"a?b:c",它的功能是:当a为真时,表达式的值等于b的值;当a为假时,表达式的值等于c的值。因为条件运算符的结合方向为“自右向左”。因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件表达式,再计算左边的条件表达式。
题中应先计算“d〈 c?d:b"的“d〈 c”关系表达式的值,因为d=1〈 c=2为真,所以取第一个表达式的值,即d的值作为整个表达式的值。接着计算“a〈 b?a:d”,a=4〈 b=3为假,取第二个表达式的值,即d的值作为整个表达式的值。
18. 有以下程序
#include 〈 stdio.h 〉
main()
{ int b[3][3]={0,1,2,0,1,2,0,1,2),i,j,t=0;
for(i=0;i〈 3;i++)
for(j=2j 〉=i;j--)t+=b[i][j];
printf("%d\n",t);
}
程序运行后的输出结果是( )。
A: 4
B: 3
C: 8
D: 9
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 这道题主要考查的是二维数组的有关知识。在两层for循环语句中,累加上三角元素,所以程序执行的过程为t=b[0][0]+b[0][1]+b[0][2]+b[1][1]+b[1][2]+b[2][2]=8。
19. 以下程序:
#include〈 stdio.h 〉
main()
{ char str[10];
scanf("%s",&str);
printf("%s\n",str);
}
运行上面的程序,输入字符串how are you,则程序的执行结果是( )。
A: how
B: how are you
C: h
D: howareyou
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 当从键盘输入how are you时,由于scanf输入函数的特点是遇到空格时结束读入字符,因此,该程序只将how这3个字符送到了字符数组str中,并在其后自动加上结束符“\0”。
20. 设x和y都是int类型,且x=1,y=2,则printf("%d%d",x,y,(x,y))的输出结果是( )。
A: 1 2
B: 1 2 2
C: 1,2
D: 输出值不确定
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查printf函数的格式和逗号表达式。printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。
本题中逗号表达式(x,y)只返回y的值。此时格式说明的个数是2,而输出项的个数是3,因此printf函数只输出前两项。
21. 以下程序的输出结果是( )。
#include〈 stdio.h 〉
main()
{ int a=8,b=6,m=1;
switch(a%4)
{ case 0;m++;
break;
case 1:m++;
switch(b%3)
{ default:m++;
case 0:m++;break;
}
}
printf("%d\n",m);)
A: 1
B: 2
C: 3
D: 4
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查switch语句。因为a=8,a%4=0,所以执行case 0后面的语句,将m加1,遇到break语句跳出switch。
22. 定义如下变量和数组:
int i,x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是( )。
for(i=0;i〈 3;i++)printf("%d",x[i][2-i]);
A: 159
B: 147
C: 357
D: 369
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题主要考查二维数组的使用。题中利用for循环来输出x数组中的指定元素:①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。
23. 有下列程序段:
typedef struct NODE
{ int num;struct NODE*next;
} OLD;
下列叙述中正确的是( )。
A: 以上的说明形式非法
B: NODE是一个结构体类型
C: OLD是一个结构体类型
D: OLD是一个结构体变量
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用使typedef定义了新的类型OLD结构,所以OLD为结构体类型。
24. 下列数组定义中错误的是( )。
A: int x[][3]={0};
B: int x[2][3]={{1,2),{3,4},{5,6}};
C: int X[][3]={{1,2,3),{4,5,6}};
D: int x[2][3]={1,2,3,4,5,6};
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项B)中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列的数字进行赋初值。所以出现了边界的越界溢出错误。
25. 以下叙述错误的是( )。
A: 变量的作用域取决于变量定义语句的位置
B: 全局变量可以在函数以外的任何部位进行定义
C: 局部变量的作用域可用于其他函数的调用
D: 一个变量说明为static存储类型是为了其他编译单元的引用
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。
26. 若定义函数int*func(),则函数func的返回值为( )。
A: 一个实数
B: 一个指向整型变量的指针
C: 一个指向整型函数的指针
D: 一个整型函数的入口地址
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查的是指针函数。指针函数定义的基本格式为:类型说明符*函数名()。其中, “类型说明符”表示返回的指针值所指向的数据类型。
27. 若有定义int a[5],*p=a;则正确引用数组元素的是( )。
A: *&a[5]
B: *a+2
C: *(p+5)
D: *(a+2)
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:①(p+n)与(a+n)表示数组元素a[n]的地址;②*(p+n)与*(a+n)表示数组元素a[n];③p[n]=*(p+n),都表示数组元素a[n]。选项A)、B)没有这种引用形式;选项C),*(p+5)是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D),*c(a+2)引用数组的第3个元素。
28. 以下对C语言中联合类型数据的正确叙述是( )。
A: 定义了联合变量后,即可引用该变量或该变量中的任意成员
B: 一个联合变量中可以同时存放其所有成员
C: 联合中的各个成员使用共同的存储区域
D: 在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 联合体的几个特点:①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。
29. 有以下函数定义:
int fun(double a,double b)
{return a*b;}
若以下选项中所用变量都已正确定义并赋值,错误的函数调用是( )。
A: if(fun(x,y)){……)
B: z=fun(fun(x,y),fun(x,y));
C: z=fun(fun(x,y)x,y);
D: fun(x,y);
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查函数调用时的参数传递。选项C)中第一个参数的表达式不正确,因此不能得到正确的结果。
30. 执行以下语句段后,xy的值是( )。
int*pt,xy;
xy=200;
pt=&xy;
xy=*pt+30;
A: 200
B: 170
C: 260
D: 230
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查指针的运用。通过pt=&xy,将pt指向xy所占的内存地址,而*pt是指针pt所指向内存单元中的内容,即200,所以最后xy的值为230。
31. 下述程序的输出结果是( )。
#include〈 stdio.h 〉
void main()
{ int a[20],*p[4];
int i,k=0;
for(i=0;i〈 20;i++)
a[i]=i;
for(i=0;i〈 4;i++)
p[i]=&a[i*i+1];
for(i=0;i〈 4;i++)
{ k=k+*p[i];}
printf("%d",k);
}
A: 10
B: 18
C: 6
D: 数组元素引用不合法,输出结果不定
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 第一个for循环,给数组a的20个元素分别赋值0~19;第二个for循环,给数组p赋值,p[0]=a[1]=1,p[1]=a[2]=2,p[2]=a[5]=5,p[3]=a[10]=10;第三个for循环,将数组p中元素的值进行累加,k=1+2+5+10=18。
32. 有以下程序:
#include〈 stdio.h 〉
#define N 8
void fun(int*x,int i)
{*x=*(x+i)+1;}
main()
{ int a[N]={1,2,3,4,5,6,7,8),i;
fun(a,2);
for(i=0;i〈 N/2;i++)
{printf("%d",a[i]);)
printf("\n");
}
程序运行后的输出结果是( )。
A: 1 3 1 3
B: 3 2 3 4
C: 4 2 3 4
D: 1 2 3 4
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 函数fun(int*x,int i)的功能是把数组元素x[i]的值加1赋给x[0]。所以在主函数中执行fun(a,2)后,数组元数a[0]的值等于4。然后在for循环语句中,输出数组a中的前4个元素的值,分别是4,2,3,4。
33. 下面程序的输出结果是( )。
#include〈 stdio.h 〉
main()
{ char a[]={´a´,´b´,´c´,´d´,´f´,´g´),*p;
p=a;
printf("%c\n",*p+4);
}
A: a
B: b
C: e
D: f
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: “*”号的优先级比“+”的优先级高,所以先执行“*p”;指针p指向的是数组的首地址,因此*p=a,再加4得´e´。
34. 下面函数的功能是( )。
sss(s,t)
char*s,*t;
{ while(*s);
while(*t)
*(s++)=*(t++);
return s;
}
A: 将字符串s复制到字符串t中
B: 比较两个字符串的大小
C: 求字符串的长度
D: 将字符串t续接到字符串S中
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查指针变量的运用。本题中的函数实质上是将字符串t续接到字符串s中。
35. 下列程序的运行结果是( )。
#include〈 stdio.h 〉
void sub(int*s,int*y)
{ static int m=4;
*y=s[m];
m--;
}
void main()
{ int a[]={1,2,3,4,5),k,x;
printf("\n");
for(k=0;k〈 =4;k++)
{ sub(a,&x);
printf("%d,",x);
}
}
A: 5,4,3,2,1,
B: 1,2,3,4,5,
C: 0,0,0,0,0,
D: 4,4,4,4,4,
参: A 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当main()函数中的for循环中语句sub(a,&x);执行时,sub函数中m的值依次是4,3,2,1,0;因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。
36. 设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是( )。
A: k=*q1*(*q2);
B: q1=k;
C: q1=q2;
D: k=*q1+*q2;
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查指针变量的赋值操作。选项A)是将指针q1和q2所指向的变量值相乘,然后赋给k;选项B)中,noat型数据和指针型数据之间不能进行赋值运算;选项C)中,是两个指针变量之间的赋值;选项D)中,是两个指针型变量所指向的两个int型数据相加。
37. 下列程序的输出结果为( )。
main()
{ union un
{ char*name;
int age;
int pay;
}s;
s.name="zhaoming":
s.age=32;
s.pay=3000;
printf("%d\n",s.age);
}
A: 32
B: 3000
C: 0
D: 不确定
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查的是联合体的有关概念。因为联合体是各个成员共享一段存储空间,此段存储空间最终存放的是最后存入的成员的值,所以题目中输出s.age实际上输出了最后存入的3000,因为3000已经把原来存入的s.age(32)的值覆盖。
38. 以下有关宏替换的叙述不正确的是( )。
A: 使用宏定义可以嵌套
B: 宏定义语句不进行语法检查
C: 双引号中出现的宏名不替换
D: 宏名必须用大写字母表示
参: D 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 本题考查宏替换的规则。宏替换有两类:简单的字符替换和带参数的宏替换。使用宏应注意:①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标示符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。
39. 有以下程序:
#include〈 stdio.h 〉
int b=3;
int fun(int*k)
{ b=*k+b;return(b);}
main()
{ int a,[10]={1,2,3,4,5,6,7,8},i;
for(i=2;i〈 4;i++){b=fun(&a[i])+b;printf("%d",b);)
printf("\n");
}
程序运行后的输出结果是( )。
A: 12 14
B: 12 32
C: 10 14
D: 10 20
参: B 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: i=2时,fun(&a[2])返回值是b=b+a[1]=3+3=6,b=b+b=6+6=12;i=3时,fun(&a[3])返回值是b=b+a[3]=12+4=16,b=b+b=16+16=32。
40. 已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是( )。
A: 一个整型变量,代表要读入的数据项总数
B: 一个文件指针,指向要读的文件
C: 一个指针,是指向的输入数据放在内存中的起始位置
D: 一个存储区,存放要读的数据项
参: C 题目分值: 1.0 分 您的答案: 得分: 0.0
详细解答: 数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。fread函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。
程序填空题
41. 函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include〈 stdio.h 〉
#define N 9
void fun(int a[],int n)
{ int i,t,p;
/**********found**********/
p=(n%2==0)?n/2:n/2+___1____;
for (i=0; i〈 n/2; i++)
{
t=a[i];
/**********found**********/
a[i]=a[p+___2___];
/**********found**********/
___3___=t;
}
}
main()
{ int b[N]={1,2,3,4,5,6,7,8,9},i;
printf("\nThe original data:\n");
for(i=0;i〈 N;i++) printf("%4d",b[i]);
printf("\n");
fun(b,N);
printf("\nThe data a fter moving:\n");
for(i=0;i〈 N;i++)printf("%4d",b[i]);
print f("\n");
}
参: (1)1
(2)i
(3)a[p+i] 题目分值: 1.0 分
您的答案:
详细解答: 第一空:“p=(n%2==0)?n/2:n/2+____1____;”和“a[i]=a[p+____2____];" “n%2==0”判断是否是偶数,a[i]和a[p+____2____]交换,如果n是偶数,a[0]和a[n/2]交换,如果n是奇数,那么a[0]和a[n/2+1]交换,依此类推,故n为偶数时a[i]和a[i+n/2]交换,n为奇数时a[i]和a[i+n/2+1]交换。因此如果n是奇数的话,p应该等于n/2+1,故第一空处应为“1”。
第二空:由上分析可知,a[i]和a[i+p]交换,故第二空应为“i”。
第三空:“t=a[i];a[i]=a[p+i];”,故第三处应该是把a[i]赋值给a[p+i],a[i]保存在t中,故第三空应为“a[p+i]”。
程序修改题
42. 给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当S中的数为:7654321时,t中的数为:2。
请改正程序中的错误,使它能得出正确的结果。________
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#inClude 〈 stdio.h 〉
/**********found**********/
Void fun(long s,long t)
{ long s1=10;
s/=10;
*t=s%10;
/**********found**********/
while(s〈 0)
{ s=s/100;
*t=s%10*s1+*t;
s1=s1*10;
}
}
main()
{ long s,t;
printf("\nPlease enter s:");scanf("%1d",&s);
fun(s,&t);
printf("There result is:%id\n",t);
}
参: (1)void fun(long s, long *t)
(2)while(s 〉0) 题目分值: 1.0 分
您的答案:
详细解答: (1)第一个标识下的形参t被定义为一个long型变量,而对应的主函数中的实参却是一个地址值。因此,t在函数定义中应该被定义为一个指针变量,即“void fun(long s, long t)”改为“void fun(long s,long*t)”。
(2)第二个标识下的while循环控制表达式“s〈 0”要求s小于0才进入循环。而s的值总是大于0,因此将“while(s〈 0)”改为“while(s 〉0)”。
程序设计题
43. 请编写一个函数void fun(char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。
其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为:Word。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include〈 stdio.h 〉
#include〈 string.h 〉
#defitie LEN 20
void fun(char a[],char b[],int n)
{
________
}
main()
{ char str1[LEN],Str2[LEN];
int n ;
void NONO ();
printf("Enter the string:\n");
gets(str1);
printf("Enter the position of the string deleted:¨);
scan f("%d¨, &n);
fun(str1, str2, n);
printf("The new string is:%s\n",Str2);
NONO();
}
void NONO ()
{/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
char str1[LEN], str2[LEN] ;
int i, n ;
FILE *rf, *wf;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0 ; i〈 10 ; i++) {
fscanf(rf, "%s %d", str1, &n);
fun(str1, str2, n);
fprintf(wf, "%s\n",Str2);
}
fclose(rf);
fclose(wf);
}
参: int p,m=0;
for(p=0;p〈 LEN;p++)
if(p!=n) //如果字符下标不满足题目要求的标志n
{
b[m]=a[p];
//原始串的字符赋值给新串b
m++:
}
b[m]=´\0´; //新串末尾加上结束符 题目分值: 1.0 分
您的答案:
详细解答: 进入fun函数,根据前面的分析:
通过循环,对字符串a中各字符逐个考查,若该字符串下标p不等于输入的标志位n,那么就顺序放到新串b中,否则就不存放。
最后,对所有字符处理完后,要注意的就是在新字符串b的末尾加上串结束符´\0´。