(26)现有如下程序
#include "stdio.h"
int fun(int x)
{printf("x=%d\n",++x);}
main()
{fun(12+5);}
则程序的输出结果是
A)12
B)13
C)17
D)18
(27)现有如下程序段
#include "stdio.h"
int aa(int x,int y);
main()
{int a=24,b=16,c;
c=aa(a,b);
printf("%d\n",c);}
int aa(int x,int y)
{int w;
while(y)
{w=x%y;
x=y;
y=w;}
return x;}
则程序段的输出结果是
A)8
B)7
C)6
D)5
(28)下列说法错误的是
A)函数调用时,函数名必须与所调用的函数名字完全相同
B)实参的个数必须与形式参数的个数一致
C)实参可以是表达式,在类型上必须与形参一一对应匹配
D)C语言规定,函数必须先定义,后调用(函数的返回值类型为int或char时除外)
(29)函数的值通过return语句返回,下面关于return语句的形式描述错误的是
A)return表达式;
B)return(表达式);
C)一个return语句可以返回多个函数值
D)一个return语句只能返回一个函数值
(30)现有如下定义:int a,b,*p,*q;,则下列赋值语句错误的是
A)p=&a;
B)q=&b;
C)p=q;
D)p=a;
(31)现有如下程序段
#include "stdio.h"
int *fun(int *a,int *b)
{int c;
c=*a%*b;
return &c;}
main()
{int a=5,b=19,*c;
c=fun(&a,&b);
printf("%d\n",++*c);}
则程序段执行后的结果为
A)8
B)7
C)6
D)5
(32)现有int a,*b;,b=&a;,则下列运算错误的是
A)*&a
B)&*a
C)*&b
D)&*b
(33)现有如下程序段
#include "stdio.h"
main()
{ int k[30]={12,324,45,6,768,98,21,34,453,456};
int count=0,i=0;
while(k[i])
{ if(k[i]%2==0‖k[i]%5==0)count++;
i++; }
printf("%d,%d\n",count,i);}
则程序段的输出结果为
A)7,8
B)8,8
C)7,10
D)8,10
(34)现有如下定义语句
int*p,s[20],i;
p=s;
表示数组元素s[i]的表达式不正确的是
A)*(s+i)
B)*(p+i)
C)*(s=s+i)
D)*(p=p+i)
(35)阅读如下程序段,这个程序在编译的时候会有一个警告,下列关于这个警告叙述正确的是
#include "stdio.h"
#define N 10
int *fun(int a[N],int n)
{ int i,b[N];
for(i=0;i b[i]=a[i];
return(b);}
main()
{ int a[N]={12,34,45,5,6,34,4,655,2};
int *k;
k=fun(a[N],5);
printf("%d\n",*k);}
A)指针k没有指向任何对象而成为“无向指针”,所以这里会产生警告
B)return语句不应该有括号,所以在这里会有警告
C)return语句的返回值类型与指针k的基类型不一致,这里会产生警告
D)数组赋值的时候没有把数组全部都赋初值,所以在这里会有警告
(36)有如下定义语句:int aa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为
A)3,2
B)3,1
C)2,2
D)2,1
(37)现有如下程序段
#include "stdio.h"
main()
{int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};
int i=0,j=5;
printf("%d\n",*(&a[0][0]+2*i+j-2));}
则程序的输出结果为
A)21
B)78
C)23
D)28
(38)下列程序的输出结果是
#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 for(j=0;j a[i][j]=i+j-(i-j);
fun(a);}
A)3
B)4
C)5
D)6
(39)下列关于字符串的说法中错误的是
A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符′\0′作为字符串结束标志
B)′\0′作为标志占用存储空间,计入串的实际长度
C)在表示字符串常量的时候不需要人为在其末尾加入′\0′
D)在C语言中,字符串常量隐含处理成以′\0′结尾
(40)有下面程序段
#include "stdio.h"
#include "string.h"
main()
{char a[3][20]={{"china"},{"isa"},{"bigcountry!"}};
char k[100]={0},*p=k;
int i;
for(i=0;i<3;i++)
{ p=strcat(p,a[i]);}
i=strlen(p);
printf("%d\n",i);}
则程序段的输出结果是
A)18
B)19
C)20
D)21
(41)现有如下程序段
#include "stdio.h"
#include "string.h"
main()
{char a[]="acfijk";/*这里是有序的字符序列*/
char b[]="befijklqswz";/*这里是有序的字符序列*/
char c[80],*p;
int i=0,j=0,k=0;
while(a[i]!=′\0′ && b[j]!=′\0′)
{if(a[i] else if(a[i]>b[j])c[k++]=b[j++];
else {c[k++]=b[j++];
i++;}}
while(a[i]==′\0′ && b[j]!=′\0′)
c[k++]=b[j++];
while(a[i]!=′\0′ && b[j]==′\0′)
c[k++]=a[i++];
c[k]=′\0′;
puts(c);}
则输出结果是
A)acfijkbefijklqswz
B)abceffiijjkklqswz
C)befijklqswz acfijk
D)abcefijklqswz
(42)现在有如下程序
#include "stdio.h"
main()
{char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!=′\0′;i++)
if(s[i]!=′H′______)
s[j]=′\0′;
puts(s);}
这个程序段的功能是删除输入的字符串中字符′H′,则空线上应当添入的是
A)s[j++]=s[i];j++;
B)s[j]=s[i++];j++;
C)s[j++]=s[i];
D)s[j]=s[i];
(43)下列说法中错误的是
A)静态局部变量的初值是在编译时赋予的,在程序执行期间不再赋予初值
B)若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽
C)静态全局变量可以被其他的编辑单位所引用
D)所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语
句)时生成,退出其所在的函数体(或复合语句)时消失
(44)阅读下列程序段,则程序的输出结果为
#include "stdio.h"
#define M(X,Y)(X)*(Y)
#define N(X,Y)(X)/(Y)
main()
{int a=5,b=6,c=8,k;
k=N(M(a,b),c);
printf("%d\n",k);}
A)3
B)5
C)6
D)8
(45)若有以下定义和语句
struct a
{ int n,m;};
struct a st[3]={{1,20},{2,19},{3,21}};
struct a *p=st;
则以下错误的引用是
A)(p++)->n;
B)st[0].n;
C)(*p).n;
D)p=&st.m;
(46)假设有如下定义:struct a{int n;float k;}data,*p;若要使p指向data中的成员n,正确的赋值语句是
A)p=&data.n;
B)*p=data.n;
C)p=(struct a *)&data.n;
D)p=(struct a *)data.n;
(47)下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空
struct node{ float x;struct node *next;};
connect(struct node *t1, struct node *t2)
{ if(t1->next==NULL)t1->next=t2;
else connect(______ ,t2); }
要实现此功能则应该添入的选项是
A)t1.next
B)++t1.next
C)t1->next
D)++t1->next
(48)C语言结构体类型变量在程序运行期间
A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B)所有的成员一直驻留在内存中
C)只有最开始的成员驻留在内存中
D)部分成员驻留在内存中
(49)有下列运算符:~,&,<<,>>, |,^,则运算的优先顺序是
A)~,&, |,<<,>>,^
B)~,<<,>>,&, |,^
C)~,<<,>>,^, &,|
D)~,<<,>>,&,^, |
(50)最简单的交换排序方法是
A)快速排序 B)选择排序
C)堆排序 D)冒泡排序
二、填空题
(1)栈和队列通常采用的存储结构是 【1】 。
【命题目的】考查考生对数据结构基本知识的了解。
【解题要点】栈和队列都属于线性表,它们一般采用顺序存储结构,也可以对它们采用链式存储结构。
【考点链接】栈、数组、表采用的存储结构,各种存储结构的定义和区别。
(2)在程序设计阶段应该采取 【2】 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成程序。
【命题目的】让考生对程序设计有较深入的了解。
【考点链接】系统设计其他阶段的内容。
(3)软件结构是以 【3】 为基础而组成的一种控制层次结构。
【命题目的】考查考生对软件结构的了解。
【解题要点】采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解,模块化使得软件容易测试和调试,因而有利于提高软件的可靠性,也有利于软件的组织管理,大型程序可由不同的程序员编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的部分。
【考点链接】软件结构的定义,模块操作其他的所有特点。
(4)数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和 【4】 两个含义。
【命题目的】考查考生对数据库基本知识(数据独立性)的了解。
【解题要点】数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。数据独立性一般分为物理独立性与逻辑独立性两个含义。
【考点链接】在人工管理阶段,文件系统阶段和数据库管理阶段中数据独立性的特点。
(5)数据库保护分为:安全性控制、 【5】 、并发性控制和数据的恢复。
【命题目的】考查考生对数据库基本知识的了解。
【解题要点】安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库能恢复到正确的状态。
【考点链接】数据库的其他用途,如数据定义、数据操作和数据管理等。
(6)语句printf("%f\n",13.0*(1/5));的输出结果为 【6】 。
【命题目的】考查对于基本运算符的掌握情况。
【解题要点】/表示整除,1/5为0,0乘以任何数都得零,但是与浮点型相乘,要转化为浮点型,所以结果为0.000000。
【考点链接】在一个运算符的两边如果一个是字符型,一个是整型,则把字符型转换为整型之后再进行运算。
(7)阅读下面语句,则程序的执行结果是 【7】 。
#include "stdio.h"
main()
{ int a=-1,b=1,k;
if((++a<0)&&!(b--<=0))
printf("%d,%d\n",a,b);
else printf("%d,%d\n",b,a);}
【命题目的】考查对于if语句的掌握情况。
【解题要点】与运算两边的语句必须同时为真时,结果才为真,当执行完if((++a<0)&&!(b--<=0))时,a,b的值已经发生了变化。
【考点链接】++,--运算符。
(8)阅读下面语句,则执行后的输出结果为 【8】
#include "stdio.h"
main()
{char a,b;
for(a=′0′,b=′9′;a
printf("%c%c",a,b);
printf("\n");}
【命题目的】考查对于for循环的掌握情况。
【解题要点】for是C语言的关键字,其后的一对圆括号中通常含有三个表达式,各个表达式之间用分号隔开,这三个表达式可以是任意形式的表达式,通常主要用于for循环控制。
【考点链接】对字符型的运算实际上是对其ASCII码值的运算。
(9)阅读下面程序,则执行后程序的结果为 【9】
#include "stdio.h"
main()
{ int a=0,b=0;
while(a<15)a++;
while(b++<15);
printf("%d,%d\n",a,b);}
【命题目的】考查对于while循环的掌握情况。
【解题要点】while是C语言的关键字,while后一对圆括号中的表达式,可以是C语言中任意合法的表达式,由它来控制循环体是否执行。
【考点链接】在语法上要求循环体可以是一条简单可执行语句,并且还要注意循环控制表达式的判断条件。
(10)在使用putchar和getchar函数处理字符时,必须在程序的开头出现包含头文件的命令行是 【10】 。
【命题目的】考查对于基础知识的掌握情况。
【解题要点】使用putchar和getchar函数时,必须在程序的开头出现包含头文件#include "stdio.h"的命令行。
【考点链接】putchar的函数调用形式为:putchar(字符变量或字符常量);getchar函数的调用形式为:变量=getchar();getchar后的一对圆括号内没有参数,但这一对圆括号不可少。
(11)下列程序的输出结果是 【11】 , 【12】 。
#include
main()
{ float a=-1.3;b=1.3;
printf("%f,%f",fabs(a),fabs(b);}
【命题目的】主要考查math库函数。
【解题要点】本题是求浮点数的绝对值。
【考点链接】常用的math函数。
(12)设有以下定义和语句,则*(*(p+2)+1)的值为 【13】 。
int a[3][2]={10,20,30,40,50,60},(*p)[2];
p=a;
【命题目的】主要考查对于通过建立行指针来引用二维数组元素的掌握情况。
【解题要点】*(*(p+2)+1)相当于访问的是a[2][1]的值。
【考点链接】*(p[2]+1)、p[2][1]以及(*(p+2))[1]表达的含义都是a[2][1]的值。
(13)有下列程序,功能是把输入的十进制长整型数以十六进制的形式输出,完成程序
#include "stdio.h"
main()
{char b[17]={"0123456789ABCDEF"};
int c[50],d,i=0,base=16;
long n;
scanf("%ld",&n);
do{c[i]=nºse;i++;n= 【14】 ;}
while(n!=0);
for(--i;i>=0;--i)
{d= 【15】 ;printf("%c",b[d]);}
printf("H\n");}
【命题目的】考查字符串的实际运用的理解程度。
【解题要点】字符串的综合运用。
【考点链接】这是一种常用的十进制转换成十六进制的方法,应该掌握。
(14)现有如下程序段,则程序段的输出结果为 【16】 。
#include "stdio.h"
int fun()
{static int k;
return k;}
main()
{int m;
m=fun();
printf("%d\n",m);}
【命题目的】考查对于静态存储类的局部变量的掌握情况。
【解题要点】在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元。即使退出函数以后,下次再进入函数时,静态局部变量仍使用原来的存储单元,如未赋初值,则系统会自动赋值为0。
【考点链接】C语言中,有两种存储类别:一种是自动类;一种是静态类。局部变量既可以说明成自动类型;也可以说明成静态类型;而全局变量只能是静态类型。
(15)现有如下定义:struct aa{int a;float b;char c;}*p;现需用malloc函数动态的申请一个struct aa类型大小的空间(由p指向),则定义的语句为: 【17】 。
【命题目的】考查对于动态空间申请函数的掌握情况。
【解题要点】ANSI C标准规定malloc函数的返回值类型为void *,函数的调用形式为:malloc(size)要求size的类型为unsigned int。由于返回类型为void *,所以在调用函数时,必须利用强制转换将其转换为所需要的类型。
【考点链接】free函数的作用是释放申请的内存空间。
(16)有如图所示的双链表结构,请根据图示完成结构体的定义:

{ int data;
【18】 } node;
【命题目的】考查对于结构体对链表的定义掌握情况。
【解题要点】结构体对链表的定义。
(17)当调函数frend从磁盘文件中读取数据时,若函数数的返回时为5,则表明 【19】 ;若函数的返回值为0,则表明 【20】 。【命题目的】考查对于函数基本操作的掌握情况。
【解题要点】fread函数的调用形式为fread(buffer,size,cout,fp);其中buffer是数据块的指针,size表示每个数据块的字节数。count用来指定每读、写一次,输入\输出数据块的个数(每个数据块有size个字节)。fp是文件的指针。