1、真题选择第6题,预测试题选择第3题
考查知识点:树结构
真题选择第6题
1.对于下二叉树
进行后序遍历的结果为:
A)ABCDEF B)DBEAFC C)ABDECF D)DEBFCA
预测试题选择第3题
3 已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为
A)GEDHFBCA
B)DGEBHFCA
C)ABCDEFGH
D)ACBFEDHG
答案:B
解析: 利用前序和中序遍历的方法可以确定二叉树的结构,具体步骤如下:① 前序遍历的第一个结点A为树的根结点;② 中序遍历中A的左边的结点为A的左子树,A右边的结点为A的右子树;③ 再分别对A的左右子树进行上述两步处理,直到每个结点都找到正确的位置。
2、真题选择第11题,预测试题选择第11题
考查知识点:标识符的定义
真题选择第11题
(11) 以下不合法的用户标识符是
A)j_KEY B) Double C) 4d D)_8
预测试题选择第11题
11 以下不能定义为用户标识符的是()
A)-for B)a3r4 C)int D) f-12
答案:C
解析:语言规定的标识符只能由字母、数字和下划线三种字符组成,第一个字符必须为字母或下划线,并且不能使用C语言中的关键字作为标识符。
3、真题选择第12题,预测试题选择第7、14题
考查知识点:基本的算术运算
真题选择第12题
(12)以下不和法的数值常量是:
A)011 B)1C1 C)8.0E0.5 D)0xabcd
预测试题选择7、14题
7 下列合法的整型常量的表示是
A)0957
B)oXac
C)-32768
D)0Xdh
答案:C解析:【命题目的】考查对于整型常量的表示的掌握情况。
【解题要点】整型常量可以用十进制、八进制和十六进制形式来表示。十进制基本常量用一
串连续的数字来表示,八进制数用数字0开头,十六进制数用数字0和字母x或X开头,各个
进制都需用各自合法的字符数字表示。
【错解分析】选项A)中9是不合法的。选项B)十六进制数字应该用数字零和字母X(或x)
开头,选项D)中h不合法。解析:【考点链接】整型数据的数值范围,-32768~32767。
14 以下选项中,不能作为合法常量的是()
A)1.12e+2 B)1.12e0 C)1.12e02 D)1.12e0.2
答案:D
解析:C语言的语法规定,字母E之前必须有数字,且E后面的指数必须是整数,而选项D)中,E后面的指数是小数,所以不合法。
4、真题选择第14题,预测试题选择第15题
考查知识点:基本的算术运算
真题选择第14题
(14)表达式3.6-5/2+1.2+5%2的值是:
A)4.3 B)4.8 C)3. 3 D)3.8
预测试题选择第15题
15下列程序的输出结果是16.00,请填空。
main()
{int a=9, b=2;
float x=_______, y=1.1,z;
z=a/2+b*x/y+1/2;
printf("%5.2f\n", z );
}
答案:6.6
解析: 本题最后一条语句,表示以浮点格式输出z的值,宽度为5,其中所含2位小数,应该注意的是,两个整型运算结果仍为整型,如1/2的结果为0,对本题可逐步求解:
16.00=9/2+2*x/1.1+1/2
16.00=4+2*x/1.1+0
12.00=2*x/1.1
所以,x的值为6.6。
5、真题选择第15题,预测试题选择第10题
考查知识点:字符串的赋值
真题选择第15题
(15)以下能正确定义字符串的语句是:
A)Char.str[ ]:{‘\064’}; B)Char.str =”:
C)Char.str =”\x43” D)Char.str[ ]=”\0”
预测试题选择第10题
10 下面能正确进行字符串赋值操作的是
A)char s[5]={"hello"};
B)char s[6];*s=”hello”
C)char *s;s="hello";
D)char *s;char a; scanf("%s",&s);
答案:C
解析: 如果一个字符数组用来存储字符串,那么在定义该字符数组时,数组的大小应该比它将要实际存放的字符串长度大1,所以选项A)错,C语言中不允许通过赋值语句给字符数组赋值,所以B)错。选项D)s本身就是一个字符指针,不需再取地址。
6、真题选择第16题,预测试题选择第14题
考查知识点:
真题选择第16题
(16)以下数租定义中错误的是:
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[] [3]={1,2,3,4,5,6};
预测试题选择第14题
14 以下能正确定义二维数组的是
A)int a[][3];
B)int a[][3]=2{2*3};
C)int a[][3]={2};
D)int a[2][3]={{1},{2},{3,4}};
答案:C
解析:当没有对数组进行初始化的时候,二维数组的的常量表达式1不能为空。另外在对二维数组初始化的时,所赋初值个数与数组元素的个数相同;引用二维数组元素时必须带有两个下标;每行所赋初值个数与数组元素的个数不同;所赋初值行数不少于数组行数;赋初值时省略行花括号也对。
7、真题选择第24题,预测试题选择第15题
考查知识点:输入语句
真题选择第24题
(24)若有说明句:double *p,q; 则能通过 scanf 语句正确给输入项读入数据的程序段是
A)*p=&a; scanf(“%1f”,p); B) *p=&a; scanf(“%f”,p);
C) p=&a; scanf(“%1f”,*p); D) p=&a; scanf(“%1f”,p);
预测试题选择第15题
15 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是
A) scanf(“%d”,pA) ; B) scanf(“%d”,A) ;
C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;
答案A:解析: 已经取出a并保存在指针变量pa里,所以不用加取址符&
8、真题选择第25题,预测试题选择第44题
考查知识点:结构体
真题选择第25题
(25)现有以下结构体说明和变量定义,如图所示,指针 分别指向一个链表中连续的三个结点。
Struct node
{char data;
Struct node *next;
} *p*,*q,*r,
现要将q和 r所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作的语句是
A) q->next=r->next; p->next=r, r->next=q;
B) p->next=r,q->next=r->next; ,r->next=q;
C) q->next=r->next; r->next=q;p->next=r;
D) r->next=q;p->next=r; q->next=r->next;
预测试题选择第44题
44 若以下定义:
struct stu
{int data;
struct stu *next;
} a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:
指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是:
A)p.next=q; q.next=p.next;
B)a.next=c; c.next=b;
C)(*p).next=q; (*q).next=&b;
D)p->next=&c; q->next=p->next;
答案:C
解析: 本题考查链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个
指针变量,用它存放下一结点的地址。
9、真题选择第28题,预测试题选择第21题
考查知识点:位运算
真题选择第28题
(28)设有以下语句
Int a=1 b=2,c;
C=a^ (b<<2);
执行后, c的值为
A) 6 B)7 C)8 D)9
预测试题选择第21题
21 以下程序的功能是进行位运算
main()
{ unsigned char a, b;
a=7^3; b= ~4 & 3;
printf("%d %d\n",a,b);
}
程序运行后的输出结果是
A)4 3 B)7 3 C)7 0 D)4 0
答案:A
解析:a=7^3=111^11=100=4(十进制),b=~4&3=~100&11=11&11=11=3(十进制),所以答案为A
10、真题选择第30题,预测试题选择第29题
考查知识点:循环结构
真题选择第30题
(30)有以下程序
main()
int y=10;
while(y--); printf(“y=%d﹨n” y);
执行程序输出的结果是:
A)y=0 B)y=-1 C)y=1 D)while构成无限循环
预测试题选择第29题
29以下程序段的输出结果是()
Int a=3 ;
Do
{
Printf(“%d”,a-=2);
} while(!( --a ) );
A) 1 B) 3 0 C) 1 -2 D)死循环
答案:C
解析:以下程序段包含了一个do…while循环。循环体内只有一条printf语句,输出项表达式:a-=2,且每次输出不换行。当while的控制表达式!(--a)的值为0时就退出循环。但do…while循环的特点是不管控制表达式的值是否为0,至少要执行一次循环体。在以上程序段中,进入循环体前a的值为3,执行a-=2后,a的值变为1,然后输出该值。在while控制表达式!(--a)中,a的值先减1,变成0,再进行“逻辑非”运算,!0的值为1,循环继续。因a的值已是0,第二次执行a-=2后,a的值变为-2,再次输出。在while控制表达式!(--a)中,a的值先减1,变成-3,再进行“逻辑非”运算,!(-3)的值为0,退出循环。
11、真题选择第34题,预测试题选择第26题
考查知识点:二维数组
真题选择第34题
(34)有以下程序
Main()
{int I,t[][3]={9,8,7,6,5,4,3,2,1};
For(i=0;i<3,i++) printf(“%d”,t[2-i][i]);
}
程序执行后的输出结果是
A)753 B)357 C)369 D)751
预测试题选择第26题
26 下面程序输出的结果是
main()
{ int i;
int a[3][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++)
printf("%d ",a[2-i][i]);
}
A)1 5 9
B)7 5 3
C)3 5 7
D)5 9 1
答案:C
解析: 本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2]
[0]=3,当然,如果用排除法的话,就不用考虑后面的循环了,因为在4个选项中,第1
个数为3的选项只有C)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向
为a[1][1]=5,依次循环,可求出答案。
12、真题选择第38题,预测试题选择第13题
考查知识点:指针
真题选择第38题
(38)有以下程序
Void swap(char “x, char *y”)
{char t;
t=*x; *x=*y; *y=t;
}
Main()
{ char *s1=”abc”, *s2=”123”;
Swap(s1,s2); printf(“%s,%s\n”, s1,s2);
}
程序执行后的输出结果是
A)123,abc B)abc,123 C)1bc,a23 D)321,cba
预测试题选择第13题
13下列程序的运行结果是
void fun(int *a, int *b)
{ int *t;
t=a; a=b; b=t;
}
main()
{ int a=13, b=18, *x=&a, *y=&b;
fun(x,y);
printf("%d %d", a, b);
}
A)18 13
B)13 18
C)0 0
D)编译出错
答案:B解析:
int *p1,*p2;
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
注意交换*p1和*p2的值是如何实现的,如果写成下面这样就有问题了!
swap(p1,p2)
int *p1,*p2;
{ int *p;
*p=*p1; /*此语句有问题*/
*p1=*p2;
*p2=*p;
}
*p1就是a,是整型变量。而*p是指针变量p所指向的变量,但p中并无确切地址,用*p可能会造成破坏系统的正常工作状态。应该将*p1的值赋给一个整型变量,用整型变量作为过渡变量实现*p1和*p2的交换。
请注意,不能企图通过改变指针形参的值而使指针实参的值也改变
swap(p1,p2)
int *p1,*p2;
{ int *p;
p=p1;
p1=p2;
p2=p;
}
程序的原意是:交换两个指针的值。但是C语言中实参变量和形参变量之间的数据传递是单
向的“值传递”方式。指针变量做函数参数也要遵循这一规则。调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值……
当然,明白了以上指针变量的调用方式后,本题便可迎刃而解。
13、真题选择第39题,预测试题选择第41题
考查知识点:函数
真题选择第39题
(39)有以下程序
int fun(int n)
{if(n==1) return 1;
Else
return(n+fun(n-1));
}
Main()
{int x;
Scanf(“%d”,&x); x=fun(x); prinf(“%d\n”,x);
}
执行程序时,给变量x输入10,程序的输出结果是
A)55 B)54 C)65 D)45
预测试题选择第41题
41下述程序的输出结果是()
#include <stdio. h>
Long fun ( int n )
{ long s ;
If (n==1 || n==2)
S=2 ;
Else
S=n+fun( n-1 ) ;
Return s ;
}
Main ( )
{
Printf( “\n%ld”, fun( 4 ) );
}
A ) 7 B ) 8 C ) 9 D ) 10
答案:C
解析:此题考查基本的函数递归调用方法。程序在n=1 或n=2 时是出口条件,不在递归,否则一直执行 s=4+fun(n-1)的操作。展开此求和公式,有s=4+fun(3)=4+3+fun(2)=4+3+2=9。
如果调用函数fun()的实参大于等于2,出口n==1的判断就不需要了。
14、真题选择第49题,预测试题选择第28题
考查知识点:预处理基本概念
真题选择第49题
(49)以下叙述中正确的是
A)预处理命令行必须位于C源程序的起始位置
B)在C语言中,预处理命令行都以“# ”开头
C)每个C程序必须在开头包含预处理命令行:#include<stdio.h>
D)C语言的预处理不能实现宏定义和条件编译的功能
预测试题选择第28题
28 以下叙述中不正确的是
A)预处理命令行都必须以#号开始
B)在程序中凡是以#号开始的语句行都是预处理命令行
C)宏替换不占用运行时间,只占编译时间
D)在以下定义是正确的: #define PI 3.1415926;
答案:D
解析: 带参数的宏定义如下:#define 宏名(参数)字符串。本题中,宏定义的作用是指定用标识符PI来代替“3.1415926”这个字符串,但宏定义不是C语句,不必在行末加分号。
15、真题填空第1题,预测试题选择第10题
考查知识点:冒泡排序比较次数
真题填空第1题
(1)对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为 [1] 。
预测试题选择第10题
10对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是()
A)冒泡排序n/2 B)冒泡排序为n(n-1)
C)快速排序为n/2 D)快速排序为n(n-1)/2
答案:D
解析:在最坏情况下,冒泡排序和快速排序需要比较的次数为n(n-1)/2
16、真题填空第3题,预测试题填空第5题
考查知识点:关系数据库
真题填空第3题
(3)在关系模型中,把数据看成是二维表,每一个二维表称为一个 [3] 。
预测试题选择第5题
5 在关系数据库中,把数据表示成二维表,每一个二维表称为_________.
答案:关系
解析:在关系数据库中,一个关系的逻辑结构就是一张二维表。这种用二维表的形式表示实体和实体间联系的数据模型称为关系数据模型。
|