for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{if(a[i]<a[i+1])
min=a[i];
a[i]=a[i+1];
a[i+1]=min;
if(a[i]<a[i+1])
min=a[i];
a[i]=a[i+1];
a[i+1]=min;
}
你的程序太乱,一踏糊涂
NOIP2010(Pascal提高组)
一、单项选择题
1与16进制数 A12等值的10进制数是 ( )A1012 B1114 C161125 D17725
2一个字节(byte)由( )个二进制组成。 A8 B16 C32 D以上都有可能
3以下逻辑表达式的值恒为真的是( )。
AP∨(┓P∧Q)∨(┓P∧┓Q) BQ∨(┓P∧Q)∨(P∧┓Q)
CP∨Q∨(P∧┓Q)∨(┓P∧Q) DP∨┓Q∨(P∧┓Q)∨(┓P∧┓Q)
4Linux下可执行文件的默认扩展名是( )。 A exe B com C dll D以上都不是
5如果在某个进制下等式77=41成立,那么在该进制下等式1212=( )也成立。
A 100 B 144 C 164 D 196
6提出“存储程序”的计算机工作原理的是( )。
A 克劳德•香农 B戈登•摩尔 C查尔斯•巴比奇 D冯•诺依曼
7前缀表达式“+ 3 2 + 5 12 ” 的值是( )。A 23 B 25 C 37 D 65
8主存储器的存取速度比中央处理器(CPU)的工作速度慢的多,从而使得后者的效率受到影响。而根据局部性原理,CPU所访问的存储单元通常都趋于一个较小的连续区域中。于是,为了提高系统整体的执行效率,在CPU中引入了( )。A寄存器 B高速缓存 C闪存 D外存
9完全二叉树的顺序存储方案,是指将完全二叉树的结点从上到下、从左到右依次存放到一个顺序结构的数组中。假定根结点存放在数组的1号位置上,则第k号结点的父结点如果存在的话,应当存放在数组中的( )号位置。 A 2k B 2k+1 C k/2下取整 D (k+1)/2
10以下竞赛活动中历史最悠久的是( )。A NOIP BNOI C IOI D APIO
二、不定项选择题
1元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出栈的可能是( )。AR1 BR2 CR4 DR5
2 Pascal语言,C语言和C++语言都属于( )。A高级语言 B自然语言 C解释性语言 D编译性语言
3 原地排序是指在排序过程中(除了存储待排序元素以外的)辅助空间的大小与数据规模无关的排序算法。以下属于原地排序的有( )。A冒泡排序 B插入排序 C基数排序 D选择排序
4 在整数的补码表示法中,以下说法正确的是( )。
A.只有负整数的编码最高位为1 B.在编码的位数确定后,所能表示的最小整数和最大整数的绝对值相同
C.整数0只有一个唯一的编码 D.两个用补码表示的数相加时,若在最高位产生进位,则表示运算溢出
5 一颗二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根结点的左子树的结点个数可能是( )。 A.0 B 2 C 4 D 6
6 在下列HTML语句中,可以正确产生一个指向NOI官方网站的超链接的是( )。
A.<a url=”h t t p : / / w w w n o i c n”>欢迎访问NOI网站</a>
B.<a href=”h t t p : / / w w w n o i c n”>欢迎访问NOI网站</a>
C.<a>h t t p : / / w w w n o i c n</a>
D.<a name”h t t p : / / w w w n o i c n”>欢迎访问NOI网站</a>
7 关于拓扑排序,下列说法正确的是( )。
A.所有连通的有向图都可以实现拓扑排序
B.对同一个图而言,拓扑排序的结构是唯一的
C.拓扑排序中入度为0的结点总会排在入度大于0的结点的前面
D.拓扑排序结果序列中的第一个结点一定是入度大于0的点
8 一个平面的法线是指与该平面垂直的直线。过点(1,1,1)、(0,3,0)、(2,0,0)的平面的法线是( )。
A.过点(1,1,1)、(2,3,3)的直线 B.过点(1,1,1)、(3,2,1)的直线
C.过点(0,3,0)、(-3,1,1)的直线 D.过点(2,0,0)、(5,2,1)的直线
9双向链表中有两个指针域llink和rlink,分别指向该结点的前驱及后继。设p指向链表中的一个结点,他的左右结点均为非空。现要求删除结点p,则下列语句序列中正确的是( )。
A.p->rlink->llink=p->rlink;
p->llink->rlink=p->llink; delete p;
B.p->llink->rlink=p->rlink;
p->rlink->llink = p->llink; delete p;
C.p->rlink->llink = p->llink;
p->rlink->llink ->rlink = p->rlink; delete p;
D.p->llink->rlink = p->rlink;
p->llink->rlink->link = p->llink; delete p;
10 今年(2010年)发生的事件有( )。
A.惠普实验室研究员Vinay Deolalikar 自称证明了P≠NP
B.英特尔公司收购计算机安全软件公司迈克菲(McAfee)
C.苹果公司发布iPhone 4手机 D.微软公司发布Windows 7 *** 作系统
三、问题求解
1.LZW编码是一种自适应词典编码。在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用于后继信息的编码。
举例说明,考虑一个待编码的信息串:“xyx yy yy xyx”。初始词典只有3个条目,第一个为x,编码为1;第二个为y,编码为2;第三个为空格,编码为3;于是串“xyx”的编码为1-2-1(其中-为编码分隔符),加上后面的一个空格就是1-2-1-3。但由于有了一个空格,我们就知道前面的“xyx”是一个单词,而由于该单词没有在词典中,我们就可以自适应的把这个词条添加到词典里,编码为4,然后按照新的词典对后继信息进行编码,以此类推。于是,最后得到编码:1-2-1-3-2-2-3-5-3-4。
我们可以看到,信息被压缩了。压缩好的信息传递到接受方,接收方也只要根据基础词典就可以完成对该序列的完全恢复。解码过程是编码过程的逆 *** 作。现在已知初始词典的3个条目如上述,接收端收到的编码信息为2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6,则解码后的信息串是”____________”。
2无向图G有7个顶点,若不存在由奇数条边构成的简单回路,则它至多有__________条边。
3记T为一队列,初始时为空,现有n个总和不超过32的正整数依次入列。如果无论这些数具体为何值,都能找到一种出队的方式,使得存在某个时刻队列T中的数之和恰好为9,那么n的最小值是___________。
四、阅读程序写结果
1
const
size = 10;
var
i, j, cnt, n, m : integer;
data : array[1size] of integer;
begin
readln(n, m);
for i := 1 to n do
read(data[i]);
for i := 1 to n do
begin
cnt := 0;
for j := 1 to n do
if (data[i] < data[j]) or ((data[j] = data[i]) and (j < i))
then inc(cnt);
if cnt = m
then writeln(data[i]);
end;
end
输入
5 2
96 -8 0 16 87
输出:__________
2
const
size = 100;
var
na, nb, i, j, k : integer;
a, b : array[1size] of integer;
begin
readln(na);
for i := 1 to na do
read(a[i]);
readln(nb);
for i := 1 to nb do
read(b[i]);
i := 1;
j := 1;
while (i <= na) and (j <= nb) do
begin
if a[i] <= b[j] then
begin
write(a[i],' ');
inc(i);
end
else begin
write(b[j], ' ');
inc(j);
end;
end;
if i <= na then
for k := i to na do
write(a[k], ' ');
if j <= nb then
for k := j to nb do
write(b[k], ' ');
end
输入
5
1 3 5 7 9
4
2 6 10 14
输出:__________
3
const
num = 5;
var
n: integer;
function r(n : integer) : integer;
var
i : integer;
begin
if n <= num then
begin
r := n;
exit;
end;
for i :=1 to num do
if r(n-i) < 0 then
begin
r:=i;
exit;
end;
r:=-1;
end;
begin
readln(n);
writeln(r(n));
end
输入 16
输出:__________
4
const
size=100;
var
n,m,x,y,i :integer;
r: array[1 size] of integer;
map : array[1size, 1size] of boolean;
found : boolean;
function successful : boolean;
var
i : integer;
begin
for i :=1 to n do
if not map[r[i]][r[i mod n + 1]]
then begin
successful := false;
exit;
end;
successful :=true;
end;
procedure swap(var a, b : integer);
var
t : integer;
begin
t := a;
a := b;
b := t;
end;
procedure perm(left, right : integer);
var
i : integer;
begin
if found
then exit;
if left > right
then begin
if successful
then begin
for i := 1 to n do
writeln(r[i], ' ');
found := true;
end;
exit;
end;
for i:= left to right do
begin
swap(r[left], r[i]);
perm(left + 1, right);
swap(r[left], r[i]);
end;
end;
begin
readln(n, m);
fillchar(map, sizeof(map), false);
for i := 1 to m do
begin
readln(x, y);
map[x][y] := true;
map[y][x] := true;
end;
for i := 1 to n do
r[i] := i;
found := false;
perm(1, n);
if not found
then writeln('No soloution');
end
输入:
9 12
1 2
2 3
3 4
4 5
5 6
6 1
1 7
2 7
3 8
4 8
5 9
6 9
输出:__________
五、完善程序
1(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥走到河的左岸在伸手不见五指的黑夜里,过桥时必须借照灯光来照明,不幸的是,他们只有一盏灯另外,独木桥上最多能承受两个人同时经过,否则将会坍塌每个人单独过独木桥都需要一定的时间,不同的人要的时间可能不同两个人一起过独木桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥所花费的时间现在输入N(2<=N<1000)和这N个人单独过桥需要的时间,请计算总共最少需要多少时间,他们才能全部到达河左岸
例如,有3个人甲、乙、丙,他们单独过桥的时间分别为1 2 4,则总共最少需要的时间为7具体方法是:甲 乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然后甲,丙在一起过桥到河的左岸,总时间为2+1+4=7
const
SIZE = 100;
INFINITY = 10000;
LEFT = true;
RIGHT = false;
LEFT_TO_RIGHT = true;
RIGHT_TO_LEFT = false;
var
n, i : integer;
time : array[1Size] of integer;
pos :array[1Size] of Boolean;
function max(a, b :integer) : integer;
begin
if a > b then
max := a
else
max := b;
end;
function go(stage : boolean) : integer;
var
i, j, num, tmp, ans : integer;
begin
if (stage = RIGHT_TO_LEFT)
then begin
num := 0;
ans :=0;
for i := 1 to n do
if pos[i] = Rignt then
begin
inc(num);
if time[i] > ans then
ans := time[i];
end;
if __________ then
begin
go := ans;
exit;
end;
ans := INFINITY;
for i := 1 to n – 1 do
if pos[i] = RIGHT then
for j := i+1 to n do
if pos[j] = RIGHT then
begin
pos[i] := LEFT;
pos[j] := LEFT;
tmp := max(time[i], time[j]) + _______;
if tmp < ans then
ans := tmp;
pos[i] := RIGHT;
pos[j] := RIGHT;
end;
go := ans;
end
else if (stage = LEFT_TO_RIGHT)
then begin
ans := INFINITY;
for i := 1 to n do
if _______ then
begin
pos[i] := RIGHT;
tmp := ________;
if tmp < ans then
ans := tmp;
_________;
end;
go := ans;
end
else go := 0;
end;
begin
readln(n);
for i := 1 to n do
begin
read(time[i]);
pos[i] := RIGHT;
end;
writeln(go(RIGHT_TO_LEFT));
end
一、单项选择题(共10题,每题15分,共计15分)
1 2 3 4 5 6 7 8 9 10
C A A D B D C B C B
二、不定项选择题(共10题,每题15分,共计15分,多选或少选均不得分)
1 2 3 4 5 6 7 8 9 10
ACD AD ABD AC B B D D BCD ABC
三、问题求解(共3题,每题5分,共计15分)
1.yyxy xx yyxy xyx xx xyx 2.12 3.18
四、阅读程序写结果(共4题,每题7分,共计28分)
1.16 2.1 2 3 5 6 7 9 10 14 3.4 4.1 6 9 5 4 8 3 2 7
五、完善程序(第1空2分,其余10空,每空25分,共计27分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.① num <= 2(或num < 3 或num = 2)
② go(LEFT_TO_RIGHT)
③ pos[i] = LEFT(或LEFT = pos[i])
④ time[i] + go(RIGHT_TO_LEFT)(或go(RIGHT_TO_LEFT) + time[i])
⑤ pos[i] := LEFT
本小题中,LEFT可用true代替,LEFT_TO_RIGHT可用true代替,RIGHT_TO_LEFT可用false代替。
2.① opt[k]
② home[r] := k
③ j := i + i(或j := 2 i 或j := i 2)
④ swap(i, j)(或swap(j, i))
⑤ value[i] + heap[1](或heap[1] + value[i])
⑥ i - m
(1)交换类排序法交换类排序法是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序法与快速排序法都属于交换类排序方法。冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n–1)/2。但这个工作量不是必需的,一般情况下要小于这个工作量。快速排序法也是一种交换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。其关键是对线性表进行分割,以及对各分割出的子表再进行分割。(2)插入类排序法插入类排序法主要有简单插入排序法和希尔排序法。简单插入排序法,是指将无序序列中的各元素依次插入到已经有序的线性表中。在这种排序方法中,每一次比较后最多移掉一个逆序,因此,这种排序方法的效率与冒泡排序法相同。在最坏情况下,简单插入排序需要n(n–1)/2次比较。希尔排序法对简单插入排序做了较大的改进。它是将整个无序序列分割成若干小的子序列分别进行插入排序。希尔排序的效率与所选取的增量序列有关。在最坏情况下,希尔排序所需要的比较次数为O(n15)。(3)选择类排序选择类排序主要有简单选择类排序法和堆排序法。简单选择排序法的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的线性表,在最坏情况下需要比较n(n–1)/2次。堆排序法也属于选择类排序法。具有n个元素的序列(h1, h2, …, hn),当且仅当满足条件: 或 (i=1, 2, …, n/2)时称之为堆。可见,堆顶元素(即第一个元素)必为最大项。堆排序的方法对于规模较小的线性表并不适合,但对于较大规模的线性表来说是很有效的。在最坏情况下,堆排序需要比较的次数为O(nlog2n)。
一
选择题
(共15题,
每题2分,共30分)
1
定义结构体的关键字是(
)
A
union
B
enum
Cstruct
Dtypedef
2
设整型变量a为5,使b不为2的表达式是(
)
A
b=a/2
B
b=6-(--a)
C
b=a%2
D
b=a>32:1
3
下面哪一项是不正确的字符串赋值或赋初值的方法(
)
A
char
str;
str=
“china”;
B
char
str[7]=
{‘c’,
‘h’,
‘i’,
‘n’,
‘a’};
C
char
str1[]=
“china”,str2[]=“123”;
D
char
str1[10];
str1=
“china”;
4
以下对二维数组a进行正确初始化的是(
)
A
int
a[2][3]={{1,2},{3,4},{5,6}};
B
int
a[
][3]={1,2,3,4,5,6};
C
int
a[2][
]={1,2,3,4,5,6};
D
int
a[2][
]={{1,2},{3,4}};
5
选出下列标识符中不是合法的标识符的是(
)
A
hot_do
B
cat1
C
_pri
D
2ab
6
以下说法中正确的是(
)
A
C语言程序总是从第一个的函数开始执行
B
在C语言程序中,要调用的函数必须在main()函数中定义
C
C语言程序总是从main()函数开始执行
D
C语言程序中的main()函数必须放在程序的开始部分
7
若已定义:int
a[9],
p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为(
)
A
p+1
B
a+1
C
a++
D
++p
8
若有说明:
int
i,j=7,
p=&i;,
则与i=j;
等价的语句是(
)
A
i=
p;
B
p=&j;
C
i=&j;
D
i=
p;
9
若变量c为char类型,能正确判断出c为小写字母的表达式是(
)
A
‘a’<=c<=
‘z’
B
(c>=
‘a’)
||
(c<=
‘z’)
C
(‘a’<=c)
and
(‘z’>=c)
D
(c>=
‘a’)
&&
(c<=
‘z’)
10
以下程序的输出结果是(
)
main()
{
int
a[]={1,2,3,4,5,6,7,8,9},
p;
p=a;
(p+3)+=2;
printf(
“%d,%d\n”,p,(p+3)
);
}
A
0,
5
B
1,
6
C
1,
5
D
0,
6
11
以下程序的输出结果是(
)
main()
{
int
a=5;
float
x=314;
a=x(‘E’-
‘A’);
printf(“%f\n”,(float)a);
}
A
62000000
B
62800000
C
63000000
D
62
12
以下程序的输出结果是(
)
#define
f(x)
xx
main()
{
int
a=6,b=2,c;
c=f(a)/f(b);
printf(“%d\n”,c);
}
A
9
B
6
C
36
D
18
13
定义如下变量和数组:int
i;
int
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
1
5
9
B
1
4
7
C
3
5
7
D
3
6
9
14
下列程序段的输出结果是
(
)
void
main(
)
{
int
k;
for
(k=1;k<5;k++)
{
if(k%2!=0)
printf(
“#”
);
else
printf(“”)
;
}
}
A
##
B
##
C
##
D
15
下列程序执行后输出的结果是(
)
int
d=1;
fun
(int
p)
{
int
d=5;
d
+
=p
+
+;
printf("%d,",d);
}
main(
)
{
int
a=3;
fun(a);
d
+
=
a
+
+;
printf("%d\n",d);
}
A
8,
4
B
9,
6
C
9,
4
D
8,
5
二
填空题(共7题,每空2分,共30分)
1
数组
int
a[3][5];
共定义了_______________个元素。
2
有float
f=31415927;
则
printf(“%54f”,
f
);输出的结果是_______________。
3
下面程序的功能是:输出
100以内(不包含100)能被
3整除且个位数为
6的所有整数,请填空。
main(
)
{
int
i;
for(i=1;
_______________;
i++)
if
(_______________)
printf("%d",
i);
}
4
设有“int
x=2,
y”说明,则逗号表达式“y=x+5,x+y”的值是
_______________
5
以下是使用指针,进行字符串复制的程序,请填空。
main()
{
char
a[]=
“Tsinghua
University”,
b[30],
p1,p2;
p1=a;
p2=b;
for(;
p1!=
‘_______________’;
p1++,
p2++)
_______________=_______________;
p2=
‘_______________’;
printf(“string
a
is:%s\n”,a);
printf(“string
b
is:%s\n”,b);
}
6
下面程序用冒泡法对数组a进行降序排序,请填空。
main()
{
int
a[5]={4,7,2,5,1};
int
i,j,m;
for(i=0;i<4;i++)
for(j=0;j<_______________;j++)
if(
_______________<
_______________
)
{
m=a[
j];
a[
j]=a[
j+1];
a[
j+1]=
m;
}
for(i=0;i<5;i++)
printf("%d
",a[i]);
}
7
函数fun的功能是:使一个字符串按逆序存放,请填空。
void
fun
(char
str[])
{
char
m;
int
i,j;
for(i=0,j=strlen(str);i<_______________;i++,j--)
{
m=str[i];
str[i]=
_______________;
str[j-1]=m;
}
printf("the
rotated
string
is
%s\n",_______________);
}
答得辛苦,完全原创,郁闷。希望你体谅体谅!!
二
1、窗体布局窗口、属性窗口、工程资源管理器、工具箱
2、属性、方法和事件
3、面向对象的程序
4、CommonDialog1ShowOpen
5、Interval 和 Timer
6、按值传递和按地址传递
7、MultiLine
8、PasswordChar
三
1答案:
1
222
33333
4444444
2答案:7
3答案:33
4答案:4 次 第二句执行了 12次
5答案:13 -16
四
1答案:
Option Explicit
Private Sub Form_Click()
Dim i As Integer, b As Integer, Z As Long
i = InputBox("请输入N值", "提示")
Z = 1
For b = 1 To i
Z = Z b
Next
pirnt "N!值 为:" & Z
End Sub
2答案 :
Option Explicit
Private Sub Form_Click()
Dim i(1 To 5) As Integer, b As Integer, Z As Long
For b = 1 To 5
Randomize
i(b) = Int(Rnd 99 + 1)
Next b
For b = 0 To 4
For Z = b + 1 To 5
'冒泡原理(大的数下沉,小的数上浮)即(如果前面的大于后面的数,两者交换)
If i(i) > i(Z) Then temp = i(i): i(i) = i(Z): i(Z) = temp
Next Z
Next i
End Sub
以上就是关于关于一道C语言的填空题目全部的内容,包括:关于一道C语言的填空题目、2010信息学奥赛初赛试题及答案、二级C语言排序技术2等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)