本节从近期考试真题中,节选有代表性的4套真题。这些真题都给出了参考答案,其中的程序填空题、程序修改题、程序设计题还给出了提示与分析。
真题1
一、选择题
请在【答题】界面上单击【开始作答】按钮,启动选择题测试程序,按照题目上的内容进行答题。
A.算法程序的长度 B.算法程序中的指令条数
C.算法程序所占的存储空间 D.算法执行过程中所需要的存储空间
2.下列叙述中正确的是()。
A.一个逻辑数据结构只能有一种存储结构
C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
3.下列关于类、对象、属性和方法的叙述中,错误的是()。
A.类是对一类具有相同的属性和方法对象的描述
B.属性用于描述对象的状态
C.方法用于表示对象的行为
D.基于同一个类产生的两个对象不可以分别设置自己的属性值
4.在软件开发中,需求分析阶段产生的主要文档是()。
A.数据字典 B.详细设计说明书
C.数据流图说明书 D.软件需求规格说明书
5.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和()。
A.编码设计 B.测试阶段 C.运行阶段 D.物理设计
6.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。
A.并 B.交 C.投影 D.除
7.下列叙述中,正确的是()。
A.软件交付使用后还需要进行维护
B.软件一旦交付使用就不需要再进行维护
C.软件交付使用后其生命周期就结束
D.软件维护是指修复程序中被破坏的指令
8.设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。
A.7 B.8 C.9 D.10
9.设R是一个2元关系,有3个元组,S是一个3元关系,有3个元祖。如T=R×S,则T的元祖个数为()。
A.6 B.8 C.9 D.12
10.下列选项中,不属于数据库管理的是()。
A.数据库的建立 B.数据库的调整
C.数据库的监控 D.数据库的校对
11.对于一个正常运行的C程序,下列叙述中正确的是()。
A.程序的执行总是从main函数开始,在main函数结束
B.程序的执行总是从程序的第一个函数开始,在main函数结束
C.程序的执行总是从main函数开始,在程序的最后一个函数中结束
D.程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
12.以下选项中与if(a==1)a++;else a=b;语句功能不同的语句是()。
13.以下不合法的用户标识符是()。
A.804zhang B._hh C.yy614 D.If
14.已知char a;int b;float c;double d;则表达式a-b+c-d结果为()型。
A.double B.float C.int D.char
15.假设有语句sizeof(double),则它是()。
C.一种函数调用 D.一种函数定义
16.若变量都已正确说明,则以下程序段输出结果为()。
A.***a=3 B.###b=3 C.***a=3##b=5 D.全部错误
17.若有以下定义(设int类型变量占2个字节)int i=8,j=9;则以下语句:printf("i=%%d,j=%%%d\n",i,j);输出的结果是()。
A.i=8,j=9 B.i=%d,j=%8 C.i=%d,j=%d D.8,9
18.设a和b均为int型变量,且a=6,b=11,则能使值为3的表达式是()。
A.b%(a%4) B.b%(a-a%5) C.b%a-a%5 D.(b%a)-(a%4)
19.有关return语句说法不正确的是()。
A.系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义时,返回值的类型说明可以省略。
B.当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数。
C.当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”或“空类型”。
D.函数的返回值类型必须与return语句中的表达式值的类型一致,但C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型。20.有以下程序:
程序的输出结果是()。
A.62 B.63 C.23 D.36
21.在下列选项中,没有构成死循环的程序段是()。
22.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()。
A.函数调用可以作为独立的语句存在
B.函数调用可以作为一个函数的实参
C.函数调用可以出现在表达式中
D.函数调用可以作为一个函数的形参
23.以下程序的输出结果是()。
A.2,2 B.1,3 C.3,2 D.3,1
24.有以下程序:
程序运行时,输入的值在哪个范围才会有输出结果()。
A.不等于5的整数 B.大于0且不等于5的整数
C.大于0或等于5的整数 D.小于5的整数
25.若执行下述程序时,若从键盘输入6和8,结果为()。
A.36 B.64 C.48 D.以上都不对
26.若运行时给变量x输入12,则以下程序的运行结果是()。
A.0 B.22 C.12 D.10
27.运行下面程序时,从键盘输入字母A,则输出结果是()。
28.以下叙述正确的是()。
A.只能在循环体内和switch语句体内使用break语句
B.contiune语句的作用是结束整个循环的执行
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
29.下列叙述中错误的是()。
A.在C语言中,对二进制文件的访问速度比文本文件快
B.在C语言中,随机文件以二进制代码形式存储数据
C.语句FILE fp;定义了一个名为fp的文件指针
D.C语言中的文本文件以ASCII码形式存储数据
30.若输入“abcdef”“abdef”,以下程序的输出结果为()。
A.-1 B.0 C."abcdef" D."abdef"
31.以下语句定义正确的是()。
A.int a[1][4]={1,2,3,4,5};
B.float a[3][]={{1},{2},{3}};
C.long a[2][3]={{1},{1,2},{1,2,3},{0,0}};
D.double a[][3]={0};
32.下述程序的输出结果是()。
A.22 B.11 C.34 D.12
33.字符串"\\\"ABCDEF\"\\"的长度是()。
A.11 B.10 C.5 D.3
34.若二维数组a有m列,则在a[i][j]前的元素个数为()。
A.j*m+i B.i*m+j C.j*m+i+1 D.i*m+j+1
35.下列程序的运行结果是()。
A.5,4,3,2 B.2,3,4,5 C.2,2,2,2 D.5,5,5,5,
36.以下有关宏替换的叙述不正确的是()。
A.双引号中出现的宏名不替换 B.使用宏定义可以嵌套
C.宏定义仅仅是符号替换 D.宏名必须用大写字母表示
37.设有定义:char*c;,以下选项中能够使字符型指针c正确指向一个字符串的是()。
A,char str[]="string";c=str; B.scanf("%s",c);
C.c=getchar(); D.char str[]="string";strcpy("c,str")
38.有以下程序:
程序运行后的输出结果是()。
A.1001,zhangDa,1098.0 B.1002,ChangRong,1202.0
C.1001,ChangRong,1098.0 D.1002,zhangDa,1202.0
39.下述程序的输出结果是()。
A.9 B.10 C.12 D.2
40.已知一个文件中存放若干工人档案记录,其数据结构如下:
定义一个数组:struct a b[10];
假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。
二、程序填空题
给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。
请在/**********found**********/下面的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
提示与分析:
本题中函数fun的功能是在形参ss所指字符串数组中,删除所有串长超过k的字符串,然后函数返回所剩字符串的个数。根据题意,在fun函数中,利用for循环比较字符串长度是否小于k,然后利用strcpy函数组成新的可用字符串数组,将可用的字符串数组的长度值进行返回,即为字符串的个数。
第一空:“for(i=0; i<①; i++)”, for循环的循环条件就要是i小于字符串长度,而字符串长度开始就有定义为N。
第二空:“if(len<=②)”,是在for循环中,根据if语句后面的语句我们可以知道,strcpy要执行,必须字符串长度小于等于k才能保留。
第三空:“strcpy(ss[j++],③ );”,此函数为字符串复制函数,是将后面的一个字符串复制到前面一个字符数组中去,而这里要复制的就是原字符串数组中符合条件的i所对应的字符串。
三、程序修改题
给定程序中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指的数组中,形成一个新的字符串。
例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则c中的字符串应为:aBcdeFgH。请改正程序中的错误,使它能得出正确结果。
注意:程序中,/************found************/下面的一行语句有错误;改错时,不要改动main函数,不得增行或删行,也不得更改程序的结构。
提示与分析:
本题中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。While循环为字符串比较的提供前提条件,然后再比较得到p、q两个字符串一一对应的符合条件中可用的一个字符。
(1)第一个错误,为fun函数中开始定义k的初始值。根据fun函数的功能我们可以知道这里k是新字符串c各字符的位置。而第一个字符在字符串中的位置不是c[1]而是c[0]。
(2)第二个错误,为while循环的条件表达式,而这里while的循环条件则是为终止条件,所以为了完全比较这两个字符串,给出的终止条件应该是到两个字符串都结束,即两个字符串字符都为“‘\0’”时终止。
四、程序设计题
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他“*”号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后字符串中的内容应当是:****ABCDEFG。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
注意:先使用“记事本”创建“D:\z1\in.dat”数据文件,该文件的数据如下图所示。
提示与分析:
本题主函数中需要输入一个字符串,然后进入fun函数,处理字符串。
首先判断字符串的开始位置是否有“*”。这里选用while语句判断开始的字符是否为“*”(因为有步骤的区别,所以这里用while比用if好),见程序第5~6行;依据题意,字符串开始无论有多少个“*”都不用删除,当出现字母时,就开始下一步了。
因为已经出现了字母,所以后面出现的“*”一律删除,而字母是不用管的。这就需要if条件语句来判断是否为“*”然后赋值为空,见程序第9~12行,当程序进行到字符为空时说明字符串结束,程序就终止;这里用while条件语句进行终止判断,见程序第7行。这样循环进行就能保留字符串前面的“*”并且删除后面出现的所有“*”了,当fun函数执行结束时,就可以转到主函数中进行新字符串的输出。
真题2
一、选择题
请在【答题】界面上单击【开始作答】按钮,启动选择题测试程序,按照题目上的内容进行答题。
1.数据结构主要研究的是数据的逻辑结构、数据的运算和()。
A.数据的方法 B.数据的存储结构 C.数据的对象 D.数据的逻辑存储
2.一棵二叉树的前序遍历结果是ABCEDF,中序遍历结果是CBAEDF,则其后序遍历的结果是()。
A.DBACEF B.CBEFDA C.FDAEBC D.DFABEC
3.在数据处理中,其处理的最小单位是()。
A.数据 B.数据项 C.数据结构 D.数据元素
A.模式 B.内模式 C.外模式 D.概念模式
5.以下()不属于对象的基本特征。
A.继承性 B.封装性 C.分类性 D.多态性
6.数据库系统的核心是()。
A.数据模型 B.软件开发 C.数据库设计 D.数据库管理系统
7.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称作()。
A.软件矛盾 B.软件危机 C.软件耦合 D.软件产生
8.关系模型允许定义3类数据约束,下列不属于数据约束的是()。
A.实体完整性约束 B.参照完整性约束
C.属性完整性约束 D.用户自定义的完整性约束
9.关系表中的每一行记录称为一个()。
A.字段 B.元组 C.属性 D.关键码
10.在数据库管理技术的发展中,数据独立性最高的是()。
A.人工管理 B.文件系统 C.数据库系统 D.数据模型
11.以下叙述错误的是()。
A.C语言区分大小写
B.C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改
C.整数和实数都能用C语言准确无误地表示出来
D.在C语言程序中,正整数可以用十进制、八进制和十六进制的形式来表示
12.有以下程序段:
以下关于程序段执行情况的叙述,正确的是()。
A.for循环语句固定执行8次
B.当产生的随机数n为4时结束循环操作
C.当产生的随机数n为1和2时不做任何操作
D.当产生的随机数n为0时结束程序运行
13.可在C语言程序中用作用户标识符的一组标识符是()。
A.void define WORD B.as_b3 _123 If
C.For—abc case D.2c DO SIG
14.若变量已正确定义并赋值,则以下符合C语言语法的表达式是()。
A.a=a+7; B.a=7+b+c,a++ C.int(12.3%4) D.a=a+7=c+b
15.有以下程序段:
已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是()。
A.因变量类型与格式描述符的类型不匹配输出无定值
B.输出项与格式描述符个数不符,输出为零值或不定值
C.a,97,12k=12
D.a,97,k=12
16.下列叙述中错误的是()。
A.计算机不能直接执行用C语言编写的源程序
B.C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
C.后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
D.后缀为.obj和.exe的二进制文件都可以直接运行
17.有以下程序:
程序运行后的输出结果是()。
A.4,6 B.2,5 C.3,5 D.2,6
18.若有代数式,(其中e仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的C语言表达式是()。
A.sqrt(abs(n^x+e^x))B.sqrt(fabs(pow(n,x)+pow(x,e)))
C.sqrt(fabs(pow(n,x)+exp(x)))D.sqrt(fabs(pow(x,n)+exp(x)))
19.设有定义:ink k=0;,下列选项的4个表达式中与其他3个表达式的值不相同的是()。
A.k++ B.k+=1 C.++k D.k+1
20.有下列程序,其中%u表示按无符号整数输出。
程序运行后的输出结果是()。
A.-1 B.65535 C.32767 D.0xFFFF
21.下面程序的运行结果是()。
22.设有语句:if(a==1)b=2;c=3;,以下语句中与之等价的是()。
A.if(a==1){b=2;c=3;} B.if(a!=1){;}else{b=2;c=3;}
C.if(a==1)c=3;b=2; D.(a==1)?b=2:a=a;c=3;
23.运行下列程序时,若输入数据为“321”,则输出结果是()。
A.123 B.1,2,3 C.321 D.3,2,1
24.有以下程序:
程序运行后的输出结果是()。
A.1001,ZhangDa,1098.0 B.1002ZhangDa,1220.0
C.1001,WangPeng,1098.0 D.1002,WangPeng,1220.0
25.判断char型变量c1是否为小写字母的正确表达式为()。
A.'a'<=c1<='z' B.(c1>=a)&&(c1<=z)
C.('a'>=c1)||('z'<=c1) D.(c1>='a')&&(c1<='z')
26.设有定义:char s[10];int i=0;,以下不能将一行(不超过100个字符)带有空格的字符串正确读入的语句或语句组是()。
A.gets(s);
B.scanf("%s",s);
C.while((s[i++]=getchar())!='\n');s[i]='\0';
D.do{scanf("%c",&s[i]);}while(s[i++]!='\n');s[i]='\0';
27.下面4个关于C语言的结论中错误的是()。
A.可以用do-while语句实现的循环一定可以用while语句实现
B.可以用for语句实现的循环一定可以用while语句实现
C.可以用while语句实现的循环一定可以用for语句实现
D.do-while语句与while语句的区别仅是关键字“while”出现的位置不同
28.若有以下程序段:
则以下表达式中值为5的是()。
A.(p++)->m B.*(p++)->m C.(*p).m D.*(++p)->m
29.下列程序的运行结果是()。
A.1,1,1,1,1 B.1,2,3,4,5 C.0,0,0,0,0 D.4,4,4,4,4,
30.有以下程序:
程序运行后的输出结果是()。
A.3 B.6 C.8 D.12
31.C语言中规定,程序中各函数之间()。
A.既允许直接递归调用也允许间接递归调用
B.不允许直接递归调用也不允许间接递归调用
C.允许直接递归调用不允许间接递归调用
D.不允许直接递归调用允许间接递归调用
32.以下程序的输出结果是()。
A.3 B.4 C.1 D.9
33.有以下程序:
程序运行后的输出结果是()。
A.17 B.22 C.16 D.11
34.当用“#define F 37.5f”定义后,下列叙述正确的是()。
A.F是float型数 B.F是char型数
C.F无类型 D.F是字符串
35.若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是()。
A.a=(b=4)=3 B.a=b=c+1 C.a=(b=4)+c D.a=1+(b=c=4);
36.以下说法正确的是()。
A.宏定义是C语句,要在行末加分号
B.可以使用#undefine提前结束宏名的使用
C.在进行宏定义时,宏定义不能嵌套
D.双引号中出现的宏名也要进行替换
37.下面程序的输出结果是()。
A.32 B.16 C.10 D.4
38.以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序:
程序运行后的输出结果是()。
A.1,2,3,4,5,6,7,8,9,10 B.10,9,8,7,6,5,4,3,2,1,
C.1,2,3,8,7,6,5,4,9,10 D.1,2,10,9,8,7,6,5,4,3,
39.设x=061,y=016,则z=x|y的值是()。
A.00001111 B.11111111 C.00111111 D.11000000
40.函数rewind(fp)的作用是()。
A.使fp指定的文件的位置指针重新定位到文件的开始位置
B.将fp指定的文件的位置指针指向文件中所要求的特定位置
C.使fp指定的文件的位置指针向文件的末尾
D.使fp指定的文件的位置指针自动移至下一个字符位置
二、程序填空题
给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,并通过形参px和py把统计的数据传回主函数进行输出。
请在/**********found**********/下面的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序不得增行或删行,也不得更改程序的结构!
提示与分析:
本题中函数fun的功能是不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,然后通过形参pa和pb把统计的数据传回主函数进行输出。因为此函数对于数字的大小有不同的处理方式,所以根据题意首先要区别大于0、小于0和等于0的数字,然后进行统计和程序的执行。显然要使用条件语句,while或者if都可以,再利用自增运算符,即可以统计得到的结果。
第一空出现在fun函数最开始的定义阶段,我们可以看到这里定义的是int整型数据,而在这下面的一步为“scanf("%d", &k );”即让我们输入k的数据,再根据题意,就可以知道这里的k是我们不断输入的整数,而整个程序也仅仅需要这一个数据的输入,所以这一空定义的就是我们需要输入的数据k,同时下面出现的a、c也都没有定义,所以这一空应该填“a=0,c=0,k”。
第二空出现在fun函数中的while循环中。根据题意我们就可以知道,这里循环时只要数字不等于0就一直进行,另外,while循环体内能看到k>0和k<0时的统计步骤,所以这一空应该填“(k!=0)”。
第三空也在while循环中,此while循环是数字的判定函数。这一空前面已经有了对于数字大于0或者小于0的判断,也有相应的a++和c++来进行个数统计,但是我们会发现这里功能已经齐全,只不过没有达到题目要求的不断的输入,所以这一空应该填“scanf("%d",&k);”。
三、程序修改题
给定程序的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun的作用是:累加链表结点数据域中的数据作为函数值返回。
在程序中“/**********found**********/”的下面一行有错,请改正错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
提示与分析:
本题中函数fun的功能是:累加链表结点数据域中的数据作为函数值返回。这里数据是主函数中定义的a,b,c,但是要以链表结点的方式将其相加,其实也类似于普通的数据加减,只不过这里用到链表和结构体的话就要注意很多的细节问题,因为指针一直是C语言最难理解的一部分,很容易搞错它的使用方法。
(1)第一个错误在定义t时,应该将t的初始值定义为0,这样才不会影响后面的数据结果,以免程序出现不必要的错误。所以这里应该将“int t;”改为“int t=0;”。
(2)第二个错误在fun函数中执行while循环的条件。这里用“*p”,我们都知道这是指针的形式,而“*p”的意义是指针变量p所指向的变量的值,所以这里“*p”是一个具体的变量,而while(*p)的意义是“*p”不为空时就一直执行,但是这里根据题意我们需要的链表的地址来进行题目需要的链表的计算,而单向链表的结束标志是链尾的指向为空,这里指向为空的是地址p,所以这里的终止条件不应该是p所指向的值为0,而是p的地址为空,故“while(*p)”应该改为“while(p)”。
(3)第三个错误在fun函数中的计算。我们知道,链表与结构体是紧密相连的,这一题我们进行的是链表结点的运算,自然要用到结构体成员变量的运算。但是在“t=t+p.data;”这个语句中,“p.data”是指针变量,指针变量跟结点变量不同,这里我们需要的是结点的数据,而不是指向它的指针的数据,所以这里的运算是完全错误的,为了符合题意,我们应该要使用结点的结构体变量。故“t=t+p.data;”应该改为“t=t+(*p).data;”。
四、程序设计题
请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。
注意:先使用“写字板”创建“D:\z2\in.dat”数据文件,该文件的内容如下图所示。
在源程序中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
提示与分析:(www.xing528.com)
本题中fun函数的主要功能是:分别找出二维数组中字母A和C的个数。要实现此功能,显然要使用条件语句。解题步骤主要为:第一步,要得到所需要的二维数组;第二步,二维数组在fun函数中需要使用if条件语句来判断数组中的字母是否为A或者C,对数组中的每个数据都要进行判断,并且要同时、分开统计字母A和C的个数;第三步,输出得到的字母A和字母C的个数。
本题首先需要一个二维数组,二维数组的大小在程序开始就由“#define M 14”进行了定义,这个大小比较合适。利用gets函数得到数组的数据,就可以进入fun函数中进行处理。在fun函数中,首先使用for循环语句将二维数组中的数据进行排序,然后使用条件语句进行判断处理,这两步是一体,见程序第9~11行。for循环保证全部使用了二维数组中数据,并且是依次使用,if语句判断了字母是否为A或C或者都不是,并且进行了统计相加得到了A的个数a,C的个数c,这样循环完成后,a和c就能返回主函数进行输出了,见程序26行。最终得到结果。
真题3
一、选择题
请在【答题】界面上单击【开始作答】按钮,启动选择题测试程序,按照题目上的内容进行答题。
1.下面关于算法的叙述中,正确的是()。
A.算法的执行效率与数据的存储结构无关
B.算法的有穷性是指算法必须能在执行有限个步骤之后终止
C.算法的空间复杂度是指算法程序中指令(或语句)的条数
D.以上三种描述都正确
2.下列二叉树描述中,正确的是()。
A.任何一棵二叉树必须有一个度为2的结点
B.二叉树的度可以小于2
C.非空二叉树有0个或1个根结点
D.至少有2个根结点
3.如果进栈序列为A,B,C,D,则可能的出栈序列是()。
A.C,A,D,B B.B,D,C,A C.C,D,A,B D)任意顺序
4.下列各选项中,不属于序言性注释的是()。
A.程序标题 B.程序设计者 C.主要算法 D.数据状态
5.下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。
A.内模式 B.外模式 C.概念模式 D.逻辑模式
6.下列叙述中,不属于软件需求规格说明书的作用的是()。
A.便于用户,开发人员进行理解和交流
B.反映出用户问题的结构,可以作为软件开发工作的基础和依据
C.作为确认测试和验收的依据
D.便于开发人员进行需求分析
7.下列不属于软件工程3个要素的是()。
A.工具 B.过程 C.方法 D.环境
8.数据库系统在其内部具有3级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是()。
A.外模式 B.概念模式 C.内模式 D.存储模式
9.将E-R图转换到关系模式时,实体与联系都可以表示成()。
A.属性 B.关系 C.记录 D.码
10.某二叉树中度为2的结点有10个,则该二叉树中有()个叶子结点。
A.9 B.10 C.11 D.12
11.以下叙述中正确的是()。
A.C程序中注释部分可以出现在程序中任意合适的地方
B.C程序的书写格式是固定的,每行只能写一条语句
C.构成C程序的基本单位是函数,所有函数名都可以由用户命名
D.在对C语言程序进行编译时,可以发现注释行中的拼写错误
12.下面的程序在编译时产生错误,其出错原因是()。
A.定义语句出错,1_case不能作为变量名
B.定义语句出错,printF不能用作用户自定义标识符
C.定义语句无错,scanf不能作为输入函数使用
D.定义语句无错,printf不能输出1_case的值
13.以下不正确的转义字符是()。
A.'\\' B.'\d' C.'\s' D.'088'
14.下面程序的运行结果是()。
A.x=27,y=27 B.x=12,y=13 C.x=15,y=14 D.x=y=27
15.sizeof(char)是()。
A.一种函数调用 B.一个整型表达式
C.一个字符型表达式 D.一个不合法的表达式
16.下列4个程序中,完全正确的是()。
17.设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。下列所示的输入形式中正确的是(注:□代表空格字符)()。
18.两次运行下面的程序,如果从键盘上分别输入3和2,则输出结果是()。
A.4和3 B.4和2 C.4和1 D.3和2
19.以下叙述中不正确的是()。
A.在不同的函数中可以使用相同的名字的变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
20.运行下面的程序,输入字符串“Microsoft Visual Studio”,则程序的执行结果是()。
A.Microsoft Visual Studio B.M
C.Microsoft D.MicrosoftVisualStudio
21.若有“double a;”,则正确的输入语句是()。
A.scanf("%1f",a)B.scanf("%f",&a)
C.scanf("%1f",&a)D.scanf("%1e",a);
22.if语句的基本形式为:if(表达式)语句,其中“表达式”()。
A.可以是任意合法的表达式 B.必须是逻辑表达式
C.必须是逻辑表达式或关系表达式 D.必须是关系表达式
23.若i、j已定义成int型,则以下程序段中内循环体的总执行次数是()。
A.20 B.24 C.25 D.30
24.以下选项中非法的字符常量是()。
A.'\\' B.'\0201' C.'\xAA' D.'0'
25.以下程序的输出结果是()。
A.1 B.3 C.7 D.10
26.下面程序运行后的输出结果是()。
A.12 B.15 C.11 D.8
27.已知下列函数定义:
则调用此函数的正确写法是(假设变量a的说明为int a[50])()。
A.fun(*a,4,5,1)B.fun(&a,4,5,1)
C.fun((int*)a,4,5,1)D.fun(a,4,5,1);
28.以下程序段的输出结果是()。
29.下面程序的运行结果是()。
A.正数 B.负数 C.零 D.不确定的值
30.已知:int c[3][4];,则对数组元素引用正确的是()。
A.c[1][4] B.c[1.5][0] C.c[1+0][0] D.以上表达都错误
31.以下程序:
运行后的输出结果是()。
A.10 B.9 C.7 D.14
32.C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是()。
A.冠以关键字extern B.位置在函数体外部
C.作用范围是全程的 D.位置在函数的外部
33.有以下程序:
程序运行后的输出结果是()。
A.2 B.3 C.4 D)5
34.若有“char s[3][3]={ "AAA", "BBB", "CCC"};”说明语句,则与它等价的语句是()。
A.char**s={"AAA", "BBB", "CCC"};
B.char*s[3]={ "AAA", "BBB", "CCC"};
C.char s[][5]={ "AAA", "BBB", "CCC"};
D.char s[][3]={ "AAA", "BBB", "CCC"};
35.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是()。
A.C语言程序仅可以编译执行
B.C语言程序仅可以解释执行
C.C语言程序既可以编译执行又可以解释执行
D.以上说法都不对
36.若有如下说明,且int类型占两个字节,则正确的叙述为()。
A.结构体变量a与结构体成员a同名,定义是合法的
B.程序只在执行到该结构体时才为结构体st分配存储单元
C.程序运行时为结构体st分配8字节存储单元
D.类型名struct st可以通过extern关键字提前引用
37.有以下程序:
程序运行后的输出结果是()。
A.10 12 B.8 10 C.3 4 D.10 28
38.设有一联合体变量定义如下:
执行下列语句后,正确的联合体变量x的值是()。
A.111111 B.2222 C.2.1546 D.R
39.若x=2,y=3,则x&y的结果是()。
A.0 B.2 C.3 D.5
40.已知一个文件中存放若干工人档案记录,其数据结构如下:
定义一个数组:struct a number[10];
假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。
二、程序填空题
函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。
例如,若输入:2008 5 1,则程序输出:2008年5月1日是该年的第122天。
请在/**********found**********/下面的下划线处填入正确的内容,并把下划线删除,运行程序,使程序得出正确的结果。
注意:源程序不得增行或删行,也不得更改程序的结构!
提示与分析:
本题中函数fun的功能是根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回,其中要考虑是否为闰年。这个问题其实很简单,唯一要考虑的变化因素也只有闰年这个变化,而且这个变化导致的程序变化也很简单。首先设置常规的月份天数,这需要一个数组(注意这个数组应该有13个数据,而不是12个,因为月份是从1月份开始的,而数组是从位置0开始的,所以这里应该将数组的第一个数据定义为0,后面12个数据按照常规月份来然后给出我们需要的月份和日期后进行常规统计),这是一般情况,如果是闰年的话且月份超过二月的话就加上1即可,应对这种情况特别给出一个判断函数就行了。
第一空:出现在isleap函数中,该函数的功能是判断给出的年份是否为闰年,这里要填此函数的返回值。很明显这一空应该填leap。
第二空:这一空出现在fun函数中,所填内容位于days数据的计算表达式中,days即为我们需要统计的天数。依据条件和函数的下一步,我们可以看出来这里的days统计的是当年份不为闰年时的天数。而当年份不为闰年时,只要将给出的月份前面几个月份天数相加,再加上这个月的日期,即为给出年月日在这一年中的天数。再根据上一步我们知道表达式右边的days代表本月前面月份的天数总和,所以这里只需要加上本月的日期就可以了。故这一空应该填给出的日期day。
第三空:这一空也出现在fun函数中,这里所填内容也位于days数据的计算表达式中,但是这里的days是在判断完为闰年且月份大于2时进行的计算,所以这里的days算法不同于上一步days的算法。根据常识我们知道,闰年大于2的月份要比普通的年份多一个2月29号的,所以要比普通的日期天数多一天,故这一空应该填1。
三、程序修改题
在给定的程序中,函数fun的功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第1门课程的平均分,作为函数值返回。例如,主函数中给出了4名学生的数据,则程序运行的结果为:第1门课程的平均分是:76.125000。
请改正函数fun中“/**********found**********/”的下一行中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
提示与分析:
本题fun函数的主要功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第1门课程的平均分,作为函数值返回。这里就是普通的求平均数,只不过这里涉及结构体,所以稍微要比普通的求平均数复杂一点。fun()函数就是相加求和,注意结构体涉及的细节问题即可。
(1)第一个错误在定义单门课程所有人总分sum时,其后面的计算式为“sum+=std[i].score[1]”。很明显,这里的sum需要定义一个初始值0,所以这里应该将“double sum;”改为“double sum = 0;”。
(2)第二个错误在fun函数的for循环条件中。这里的for循环是先求各科的分数和,然后计算平均分,显然for循环的次数和计算平均分的个数是一样的。fun函数是计算n个学生第一门课的平均分,所以这里的sum循环肯定也要进行n次,故这里的“i<2”应该 改成“i<n”。
(3)第三个错误在for循环的求和算式中,这里是求结构体变量的和,语法上本来是没有任何错误的,但是要看清题目要求的计算学生第1门课程的平均分,然后再作为函数值返回。这里“sum+=std[i].score[1]”变量看起来是第一门,但根据数组从0位开始我们就能发现这里其实求的是学生第2门课程的总分,然后求出来的平均分也是第二门学科的,这完全不是题目的要求,所以这里的“sum+ = std[i].score[1]”应该要改为“sum += std[i].score[0]”。
四、程序设计题
请编写函数fun,功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。
例如:若输入的数据为123,则输出结果为:输入的数字是3位。
先使用“记事本”,创建D:\z3\int.dat数据文件,该文件中的数据如下图所示。
注意:在给出的部分源程序中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
提示与分析:
本题fun函数的主要功能是判断形参n 中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。首先我们能想到这一题主要在于判断,因为题目已经限制了条件,就是数字的大小,不要超过四位数的数字,而且要求只要输出这个数字的位数,这样我们就能想到,只要判断这个数字的大小就能知道其位数了。小于10为1位,大于等于10小于100为2位,大于等于100小于1000位3位,大于等于1000小于等于9999为4位。所以只需要很简单的几个判断语句就能实现函数的功能,然后输出结果。
在主函数main中首先要定义数据,然后需要手动输入一个用来进行判断的数字,注意数字要不超过4位,见程序代码第14~16行,而且这里为了防止输入时不小心的错误或者是有人故意错误输入而引发的不好的后果,在数据进入fun函数处理之前还要一个while 函数来进行判断数据是否合理,再进行处理,见程序代码第17行。然后数字进入fun函数,这里很明显会出现四种情况,数字的位数为1位,2位,3位或4位,所以我们用if else if来区别这四种情况见程序第6~9行,在判断完之后我们就可以返回数字位数k的值然后再到主函数main函数中进行输出处理。
真题4
一、选择题
请在【答题】界面上单击【开始作答】按钮,启动选择题测试程序,按照题目上的内容进行答题。
1.算法的时间复杂度是指()。
A.算法的长度 B.执行算法所需要的时间
C.算法中的指令条数 D.算法执行过程中所需要的基本运算次数
2.以下数据结构中,属于非线性数据结构的是()。
A.栈 B.线性表 C.队列 D.二叉树
3.数据结构中,与所使用的计算机无关的是数据的()。
A.存储结构 B.物理结构 C.逻辑结构 D.线性结构
4.内聚性是对模块功能强度的衡量,下列选项中,内聚性较弱的是()。
A.顺序内聚 B.偶然内聚 C.时间内聚 D.逻辑内聚
5.在关系中凡能唯一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的()。
A.连接码 B.关系码 C.外码 D.候选码
6.检查软件产品是否符合需求定义的过程称为()。
A.确认测试 B.需求测试 C.验证测试 D.路径测试
7.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()。
A.控制流 B.加工 C.存储文件 D.源和潭
8.待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。
A.2 B.3 C.4 D.5
9.对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关系R中的所有元组,这样的集合运算称为()。
A.并运算 B.交运算 C.差运算 D.除运算
10.下列选项中,不属于数据管理员(DBA)职责的是()。
A.数据库维护 B.数据库设计
C.改善系统性能,提高系统效率 D.数据类型转换
11.C语言规定,在一个C程序中,main()函数的位置()。
A.必须在系统调用的库函数之后 B.必须在程序的开始
C.必须在程序的最后 D.可以在任意位置
12.以下叙述中正确的是()。
A.C语言比其他语言高级
B.C语言可以不用编译就能被计算机识别执行
C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D.C语言出现的最晚,具有其他语言的一切优点
13.已知“int a=6;”则执行“a+=a-=a*a;”语句后,a的值为()。
A.36 B.0 C.-24 D.-60
14.下列叙述中错误的是()。
A.C语句必须以分号结束
B.复合语句在语法上被看作一条语句
C.空语句出现在任何位置都不会影响程序运行
D.赋值表达式末尾加分号就构成赋值语句
(15)若有定义:int a=7;float x=2.5,y=4.7;则表达式“x+a%3*(int)(x+y)%2/4”的值是()。
A.2.500000 B.2.750000 C.3.500000 D.0.000000
16.若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是()。
A.++i; B.n1=(n2/(n3=2))
C.k=i=j D.a=b+c=2;
17.下列关于逻辑运算符两侧运算对象的叙述中正确的是()。
A.只能是整数0或1 B.只能是整数0或非0整数
C.可以是结构体类型的数据 D.可以是任意合法的表达式
18.若有说明 int a[3][4];则a数组元素的非法引用是()。
A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4]
19.下列说法不正确的是()。
A.int *ptr;//指针指向整型数据
B.char *ptr;//指针的类型是字符型指针
C.int**ptr;//指针的类型是双重指针
D.int(*ptr)[3];//是一个指针数组,数组共有三个元素,而三个元素是int型指针
20.有以下程序:
程序运行后的输出结果是()。
A.0 B.2 C.3 D.5
21.有以下程序:
程序的运行结果是()。
A.y=0 B.y=1 C.y=2 D.y=3
22.下面的for语句的循环次数为()。
A.是无限循环 B.循环次数不定
C.最多执行6次 D.最多执行5次
23.下列程序的输出结果是()。
A.0,1,2 B.1,2,3 C.1,1,3 D.1,2,2
24.有以下程序:
从第一列开始输入数据(<CR>代表一个回车符):3845<CR>,则程序输出结果为()。
A.77889 B.77868 C.776810 D.77886610
25.C语言规定,函数返回值的类型是()。
A.由调用该函数时的主调函数类型所决定
B.由return语句中的表达式类型所决定
C.由调用该函数时系统临时决定
D.由定义该函数时所指定的数值类型决定
26.执行下列程序时输入“456<空格>789<空格>123<回车>”,输出结果是()。
A.456,789,123 B.4,789,123 C.4,56,789,123 D.4,56,789
27.已知下列函数定义:
则调用此函数的正确写法是(假设变量a的说明为int a[10])()。
A.fun(*a,6,14)B.fun(&a,6,8)C.fun(a,8,4)D.fun((int)a,8,6);
28.设Y为整型变量,A=1,A的地址为EF01;B=2,B的地址为EF02;执行语句B=&A;Y=&B;后Y的值()。
A.1 B.2 C.EF01 D.EF02
29.有以下程序:
程序运行后的输出结果是()。
A.4 B.7 C.10 D.6
30.以下语句定义正确的是()。
A.int a[1][4]={1,2,3,4,5}
B.float a[3][]={{1,2},{2,3},{3,1}};
C.long a[2][3]={{1},{1,2},{1,2,3},{0,0}};
D.double a[][3]={8};
31.下列一维数组说明中,不正确的是()。
32.下面函数的功能是()。
A.将字符串s复制到字符串t中 B.比较两个字符串的大小
C.求字符串的长度 D.将字符串s持续到字符串t中
33.有以下程序:
程序的运行结果是()。
A.xy,aaaacc B.aaaacc,xy C.bcc,aabcc D.aabcc,bcc
34.若已定义:
其中,则对a数组元素不正确的引用是()。
A.a[p-a] B.*(&a[i])C.p[i] D.a[10]
35.以下选项中可用作C程序合法实数的是()。
A.1e0 B.3.0e0.2 C.E9 D.9.12E
36.以下叙述中不正确的是()。
A.预处理命令行都必须以#号开始,结尾不加分号
B.在程序中凡是以#号开始的语句行都是预处理命令行
C.C程序在执行过程中对预处理命令进行处理
D.预处理命令可以放在程序中的任何位置
37.以下程序的输出结果是()。
A.12 B.13 C.14 D.16
38.设有下面的定义:
要使p指向结构变量d中的a成员,正确的赋值语句是()。
A.*p=d.a B.p=&a C.p=d.a D.p=&d.a;
39.交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。
A.& B.^ C.‖ D.~
40.如果需要打开一个已经存在的非空文件“FILE”并进行修改,正确的语句是()。
A.fp=fopen("FILE","r")B.fp=fopen("FILE","a+");
C.fp=fopen("FILE","w+")D.fp=fopen("FILE","r+");
二、程序填空题
函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行结果为:
学号:N1002 学号N1006
共有2位学生有不及格科目
请在/**********found**********/下面的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。
注意:在给出的源程序中,不得增行或删行,也不得更改程序的结构。
提示与分析:
本题中函数fun的功能是在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号,函数的返回值是有不及格科目的学生人数。这里用到了结构体,结构体在对于个人信息处理是有很方便的作用。只需要用到学生的分数和学号,所以这里的结构体的成员表列比较少。然后根据题目要求是要统计出不及格学生的人数并且查找和统计他们的学号,这里用到if条件语句即可进行统计,要注意这里的学科数,要求只要有一门学科不及格即进入统计,所以要正确地给出条件语句。最后输出学号和人数。
第一空:这一空出现在定义结构体时,这里使用了typedef就是很明显地要声明结构体类型,而这里则是要填写结构体类型名。根据后面程序已给出的部分,我们能清楚地看到定义的结构体类型名是STU,所以这一空应该填“STU”。
第二空:这一空出现在fun函数中的if条件语句中,根据if后面的执行语句,我们可以看到,这里应该是在判断学生学科分数是否及格的条件语句。对于一开始的结构体定义,我们能够发现成员score是长度为2的数组,所以每个学生应该有两门学科的分数需要来判定和统计,而这两门学科中任意一门分数低于60,就属于统计的人数,所以这一空应该填“或”运算符“||”。
第三空:这一空出现在fun函数中,这里要填写的是fun函数执行后的返回值。根据题目的要求fun函数是要查找不及格科目的学生,找到学生学号,然后返回学生的人数。由程序可知,人数统计的变量名是k,所以这一空应该填“k”。
三、程序修改题
给定程序中,函数fun的功能是判断整数n是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数。如果是完数,函数返回值为1,否则函数返回值为0。数组a中存放的是找到的因子,变量k中存放的是因子的个数。
请改正函数fun中注释行/**********found**********/下面一行中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
提示与分析:
本题的fun函数主要功能是:判断整数n是否是“完数”。(当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数。)如果是完数,函数返回值为1,否则函数返回值为0。数组a中存放的是找到的因子,变量k中存放的是因子的个数。这里是一个条件判断问题,原理上利用if条件语句和for循环得到结果,结果则是用数组输出完数的因子,用k变量输出因子的个数。
这里fun函数为了判定这个数字是否为完数,一定要使用正确的循环,这个判断条件还是需要一定的步骤的。最重要的就是注意细节。
(1)第一个错误在fun函数的for循环中,这里的循环就是输入数字n的因式,很明显的问题就是循环变量i的起始值不能为0,若为0,会使if语句中的“n%i”因式无意义。所以这里应该将“i=0”改为“i=1”。
(2)第二个错误在fun函数中数字经过for循环过后,这里“k=m”,是为了得到“k”的值,也就是因子的个数。但是注意到fun函数中的参数是“*k”,也就是说k只是一个指针变量,而不是我们所需要的因子个数的变量,所以这里应该将“k=m”改为“*k=m”。
(3)第三个错误在fun函数第二个if语句中,这里“f(t=0)return 1;”的t是数字减掉因子和的值,也就是说只要是t等于0就代表输入的数字是一个完数,所以在if条件语句中的等号应该是“==”,而不是赋值号“=”,所以这里应该将“if(t=0)”改为“if(t==0)”。
四、程序设计题
请编写函数fun:在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。
使用“记事本”创建“D:\z4\in.dat”数据文件,该文件中的数据如下图所示。
在给出的部分源程序中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
提示与分析:
本题fun函数的功能主要是在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。这个题目类似于排序,但是又不是严格的排序,只要重新排序最大值和最小值的位置即可。所以类似于排序,这一题需要相互比较4个数字,然后进行位置的调换。基本思路就是比较相邻的两个数字,如果靠近a的数字比靠近d的数字要大,就不用进行交换,如果靠近a的数字比靠近d的数字小,就进行交换,这样的话最大的数字就会慢慢交换到a的位置,然后最小的数字就会慢慢交换到d的位置。所以根据分析我们就要用到if语句来进行判断和处理,只要经过几轮的if判断大小然后交换,就能实现题目条件所给出的位置的重置,得到要求的结果。
首先在主函数main中我们需要的就是四个数字,这四个数字需要手动输入,见程序代码第13~15行,四个数字输入完成后就可以进入fun函数进行数据处理了。进入到fun函数中,只要从a到d进行比较,按照一开始的规则即可,如果a大于b,不变,比较a与c,若a小b,a与b交换位置,交换过后a就大于b了,这样就进行a与c的比较;a与c的比较同理,这样的循环比较,就能发现,每比较一次,较大的数字就能交换到a的位置,较小的数字就离a越来越远,也就是到了d的位置,这样就完成了题目所给出的要求了,最大的数字放在a中,最小的数字放在d中。当新的排序排好后,就可以返回主函数进行输出了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。