《2006第十二届noip提高组初赛试题及答案(C)》由会员分享,可在线阅读,更多相关《2006第十二届noip提高组初赛试题及答案(C)(11页珍藏版)》请在金锄头文库上搜索。
1、 1 2006 第十二届全国青少年信息学奥林匹克联赛初赛试题 ( 提高组 C C 语言 二小时完成 ) 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 一、 单项选择题 (共 1 10 0 题,每题 1 1. .5 5 分,共计 1 15 5 分。每题有且仅有一个正确答案. .)。 1. 在以下各项中。( )不是 CPU 的组成部分。 A. 控制器 B. 运算器 C. 寄存器 D. ALU E. RAM 2. BIOS(基本输入输出系统)是一组固化在计算机内( )上一个 ROM 芯片上的 程序。 A. 控制器 B. CPU C. 主板 D. 内存条 E. 硬盘 3.在下面各世界顶级的奖项
2、中, 为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是 ( )。 A. 沃尔夫奖 B. 诺贝尔奖 C. 菲尔兹奖 D. 图灵奖 E. 南丁格尔奖 4 在编程时(使用任一种高级语言, 不一定是 C), 如果需要从磁盘文件中输入一个很大的二维数组(例 如 1000*1000 的 double 型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于 列 的)相比,在输入效率上( )。 A. 没有区别 B. 有一些区别, 但机器处理速度很快, 可忽略 不计 C. 按行读的方式要高一些 D. 按列读的方式要高一些 E. 取决于 数组的存储方式。 5在 C 语言中,表达式 212 的值是
3、( )由 OIFan s. cn收集 A. 441 B. 42 C.23 D.24 E.25 6在 C 语言中,判断 a 不等于 0 且 b 不等于 0 的正确的条件表达式是( ) A. !a=0 | !b=0 B. !(a=0) for(i=0;i10)由 OIF an s. cn收集 y+= (v2*100-v3)/(uu0%3*5); else y+=20+(v2*100-v3)/(uv0%3*5); printf(“%d,%dn“, x,y); return 0; /*注:本例中,给定的输入数据可以避免分母为 0 或下标越界。 */ 输入:9 3 9 4 输出:_ 2#include
4、main() int i,j,m=2,3,5,7,13; long t; for (i=0;isj return j; void main() char s8; int k,p; for(k=1;k0) printf(“%2ld“,n%10); 6 if(m1) digit(n/10,m/10); printf(“%2ld“,n%10); main() long x,x2; printf(“Input a number:n“); scanf(“%ld“, x2=1; while(x22-1-5-3。遗传算法的核心是通过两个个体的交叉操作, 产生两 个新的个体。下面的程序给出了最简单的一种交叉算
5、法。具体过程如下: (1)选定中间一段作为互换段,该段的起止下标为 t1,t2,随机生成 t1,t2 后,互换两段。 (2)互换后, 在每个新的排列中可能有重复数字, 因而不能作为新个体的编码, 一般再做两步处理: (2.1) 将两个互换段中,共同的数字标记为 0,表示已处理完。 8 (2.2) 将两个互换段中其余数字标记为 1,按顺序将互换段外重复的数字进行替 换。 例如:n=12,两个个体分别是:由 OIFan 收 集 a1: 1 3 5 4 * 2 6 7 9 * 10 12 8 11 a2: 3 2 1 12 * 6 7 10 11 * 8 5 4 9 t1=5, t2=8。 上述每一
6、行中, 两个星 号间的部分为互换段。 假定数组的下标从 1 开始, 互换后有: a1: 1 3 5 4 * 6 7 10 11 * 10 12 8 11 a2: 3 2 1 12 * 2 6 7 9 * 8 5 4 9 然后,将数字 6,7 对应的项标记为 0,星号内数字 2,9,10,11 对应的项标记为 1, 并且按顺序对 应关系 为:102, 119。 于是, 将 a19=10 替换为 a19=2, 将 a22=2 替换为 a22=10, 类似再做第 2 组替换。这样处理后,就得到了两个新个体: a1: 1 3 5 4 6 7 10 11 2 12 8 9 a2: 3 10 1 12 2
7、 6 7 9 8 5 4 11 (3)输出两个新个体 的编码。 程序: #include #include #define N 20 int a1N,a2N,kz1N,kz2N,n; int rand1(int k) int t=0; while(tk) t=(int)(double)rand()/RAND_MAX*k); return t; void read1(int a,int m) 读入数组元素 a1至 am,a0=0,略。 void wrt1(int a,int m) 输出数组元素 a1至 am,略。 void cross(int a1, int a2,int t1, int t2, int n) int i,j,k,t,kj; for(i=t1; it2) k=t1; t1=t2; t2=k;由 OIFa 收集 wrt1(a1,n); wrt1(a2,n); 11