2008秋C语言上机试卷C03答案
- 格式:doc
- 大小:52.50 KB
- 文档页数:3
考试说明:1.在本地用户盘以姓名拼音为名建立文件夹,考试生成的各类文件均存于此文件夹;2.源程序文件名的命名规则是:学号末两位+题号.C,题号为两位数字,其编号规则是:组号+题型号,题型号用1表示编程题,2表示填空题。
如学号末两位为36的张三同学对第1组编程题的文件名为:3611.C;3.填空题请在下划线位置填入适当的内容后调试运行。
注意不得更改程序的结构.编程题:编程输出下列图形1 2 3 4 5 6 7 8 92 3 4 5 6 7 8 93 4 5 6 7 8 94 5 6 7 8 95 6 7 8 96 7 8 97 8 98 99填空题:下列程序的功能是找出一组正数中的最大数和最小数,输入-1时结束输入。
main(){ float x,amax,amin;scanf("%f",&x);amax=x; amin=x;while ( ){ if (x>amax) amax=x;if ( ) amin=x;scanf("%f",&x); }printf("\namax=%f\namin=%f\n",amax,amin); }第2组考试说明:1.在本地用户盘以姓名拼音为名建立文件夹,考试生成的各类文件均存于此文件夹;2.源程序文件名的命名规则是:学号末两位+题号.C,题号为两位数字,其编号规则是:组号+题型号,题型号用1表示编程题,2表示填空题。
如学号末两位为36的张三同学对第1组编程题的文件名为:3611.C;3.填空题请在下划线位置填入适当的内容后调试运行。
注意不得更改程序的结构。
编程题:输入N个正整数,将其按由大到小(降序)排列后输出。
填空改错题:建立并输出一个10阶单位矩阵。
main(){int i,j,a[10][10]={0};for (i=1;i<=10;i++);for (i=1;i<=10;i++){for (j=1;j<=10;j++)printf("%5d",a[i][j]);;}}考试说明:1.在本地用户盘以姓名拼音为名建立文件夹,考试生成的各类文件均存于此文件夹;2.源程序文件名的命名规则是:学号末两位+题号.C,题号为两位数字,其编号规则是:组号+题型号,题型号用1表示编程题,2表示填空题。
年 月计算机等级考试二级 语言模拟试卷及其答案
转贴于:计算机二级考试 考试大
全国计算机等级考试二级C语言模拟试卷答案
一、选择题
评析:算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。
一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。
评析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。
《电力拖动控制线路与技能训练》试卷( )。
一、选择题3.1 C 3.2 C 3.3 D 3.4 C 3.5 D3.6 B 3.7 C 3.8 D 3.9 A 3.10 B二、填空题3.11 (1)-200,2500(2)i=-200,j=2500(3)i=-200j=25003.12 [1]12 [2]0 [3]03.13 一条语句;3.14 分号3.15 、[1] 100<CR>15.81<CR>1.89234<CR>[2] 100 15.81 1.89234<CR> /*注意各数之间要有空格号*/[3] 100 <CR>15.81 1.89234<CR>三(1)、改错题3.16、正确程序如下#include"stdio.h"void main(){double a,b,c,s,v;printf("input a,b,c:");scanf("%lf%lf%lf",&a,&b,&c); /*注意双精度输入必须用lf,单精度用f*/printf("a=%f,b=%f,c=%f\n",a,b,c);s=a*b;v=s*c;printf("s=%f,v=%f\n",s,v);}三(2)、编程题3.17、#include"stdio.h"void main(){int a=560,b=60,c,d;c=a/b;d=a%b;printf("560分钟=%d小时%d分钟",c,d);}3.18、#include"stdio.h"void main(){int a,b,c,d;printf("Input two numbers:");scanf("%d%d",&a,&b);c=a/b;d=a%b;printf("c=%d,d=%d\n",c,d);}3.19、#include"stdio.h"void main(){double a,b,c,ave;printf("Enter three numbers:");scanf("%lf%lf%lf",&a,&b,&c);ave=(a+b+c)/3;printf("(1)ave=%f\n",ave);ave=(int)(ave*10+0.5)/10.0;printf("(2)ave=%f\n",ave);}3.20、#include"stdio.h"void main(){int a,b,c,m,n,t;printf("Enter three numbers:");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);m=a;n=b;t=c;b=m;c=n;a=t;printf("a=%d,b=%d,c=%d",a,b,c); }她含着笑,切着冰屑悉索的萝卜,她含着笑,用手掏着猪吃的麦糟,她含着笑,扇着炖肉的炉子的火,她含着笑,背了团箕到广场上去晒好那些大豆和小麦,大堰河,为了生活,在她流尽了她的乳液之后,她就用抱过我的两臂,劳动了。
全国计算机等级考试二级C语言 2008年4月真题卷答案及解析一、选择题(1)C解析:程序流程图是人们对解决问题的方法、思路或算法的一种描述。
其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。
带箭头的线段在数据流程图中表示数据流,而在程序流程图中表示控制流。
在所给出的选项中,在图元之间用带有箭头的线段表示图元关系。
在模块之间用带有箭头的线段表示调用关系。
构成程序流程图的基本图符及其含义是:→或↓表示控制流,□表示加工步骤,◇表示逻辑条件。
(2)A解析:结构化程序设计的原则包括:"自顶而下,逐步求精"的设计思想,"独立功能,单出口、单入口"的模块化设计等。
多态性是面向对象程序语言的特征。
(3)B解析:模块划分应遵循的准则包括模块之间的耦合和内聚。
一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即高内聚、低耦合的原则。
(4)B解析:需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面。
产生的主要文档为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。
(5)A解析:算法具有6个特性。
①有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的。
②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义。
③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
⑤输出:一个算法有一个或多个输出。
(6)D解析:在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都是n(n-1)/2,堆排序需要比较的次数为nlog2n。
江苏省二级C 语言程序设计2008 年(秋)第一部分计算机基础知识(1)信息技术指的是用来扩展人们信息器官功能、协助人们更有效地进行信息处理的一类技术。
在下列有关信息技术的叙述中,错误的是__________。
A)现代信息技术的主要特征之一是以数字技术和电子技术为基础B)遥感遥测技术、自动控制技术等均属于现代信息技术C)微电子技术是信息技术领域的关键技术,它以集成电路为核心D)利用磁带、光盘、电话、传真等进行信息传递均属于现代通信(2)二进制数10111000 和11001010 进行逻辑“与”运算,结果再与10100110 进行逻辑“或”运算,最终结果的十六进制形式为__________。
A)A2 B)DE C)AE D)95(3)计算机的性能在很大程度上是由CPU 决定的。
在下列有关CPU 结构和原理的一些叙述中,错误的是__________。
A)目前PC 机所使用的CPU 均是Intel 公司的产品B)从逻辑组成上看,CPU 主要由寄存器组、运算器和控制器等部分组成C)目前CPU 中的运算部件ALU 有多个,每个ALU 均可独立完成运算D)不同CPU 能执行的指令有所不同,但同一系列CPU 产品通常是“向下兼容的”(4)在下列有关目前PC 机主板及其组件的叙述中,正确的是__________。
A)主板的物理尺寸没有标准,通常不同品牌的主板采用不同的尺寸B)主板上的BIOS 芯片是一种RAM 芯片,因而其存储的信息是可以随时刷新的C)主板上的存储器控制和I/O 控制功能大多集成在芯片组内D)主板上的CMOS 芯片是一种非易失性存储器,其存储的信息永远不会丢失(5)在下列有关PC 机硬盘存储器的叙述中,错误的是__________。
A)硬盘上的数据块要用柱面号、扇区号和磁头号这三个参数来定位B)目前硬盘一般都含有DRAM 芯片构成的高速缓存(Cache)C)目前硬盘与主机的接口大多为串行ATA 接口D)硬盘容量的增加主要是靠碟片数增加,目前硬盘一般均有数十个碟片组成(6)在下列有关PC 机I/O 总线和接口的叙述中,错误的是__________。
安徽大学2008----2009学年第二学期C语言程序设计期末机考试题一、单项选择题(30分,每题2分)每小题的四个选项中只有一个符合题目要求,请将正确选项前字母填在括号中。
1.若int a[][3]={1,2,3,4,5,6};则a[1][0]的值是【______】。
AA. 4B. 2C. 1D. 52.执行下列程序段后,变量k的值是【______】。
Aint k=3, s[2];s[0]=k;k = s[1]*10;A)不确定B)0C)10 D)303.执行下列程序段后,变量k的值是【______】。
Cint k=3, s[2]={1};s[0]=k;k = s[1]+10;A)不确定B)0C)10 D)304.下面程序的输出结果是【______】。
C#include <stdio.h>void main(void){int i, a[10];for(i=9;i>=0; i--)a[i]=10-i;printf("%d%d%d\n",a[2],a[5],a[8]);}A)258 B)741C)852 D)3695.下面程序的输出结果是【______】。
B#include <stdio.h>void main(void){int a[3][3]={1,2,3,4,5,6,7,8,9},i;for(i=0;i<3; i++)printf("%d ",a[i][2-i]);}A)1 5 9 B)3 5 7C)1 4 7 D)3 6 96.下面程序的输出结果是【______】。
C#include "stdio.h"void fun(int a[]){int i;for(j=0;j<5; j++)a[j]=j;}void main(void){int num[]={5,6,7,8,9}, i;fun(num);for(i=0;i<5; i++)printf("%d ", num[i]);}A. 56789B. 98765C. 01234D. 432107.下面程序的输出结果是【______】。
中央广播电视大学2008秋季C语言程序设计A课程试卷(1)2009年10月部队考一、单选题(每小题2分,共20分)1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( )。
A. mainB. MAINC. nameD. function2.每个C语言程序文件的编译错误分为()类。
A. 1B. 2C. 3D. 43. 字符串"a+b=12\n"的长度为()。
A. 6B. 7C. 8D. 94. 在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为()语句。
A. forB. ifC. doD. while5. 在下面的do-while循环语句中,其循环体语句被执行的次数为()。
int i=0。
do i++。
while(i<10)。
A. 4B. 3C. 5D. 106. 将两个字符串连接起来组成一个字符串时,选用的函数为()。
A. strlen()B. strcap()C. strcat()D. strcmp()7. 若用数组名作为函数调用的实参,传递给形参的是()。
A. 数组的首地址B. 数组中第一个元素的值C. 数组中全部元素的值D. 数组元素的个数8. 假定a为一个整数类型的数组名,整数类型的长度为4,则元素a[4]的地址比a数组的首地址大( )个字节。
A. 4B. 8C. 16D. 329. 假定s被定义为指针类型char *的变量,初始指向的字符串为"Hello world!",若要使变量p指向s所指向的字符串,则p应定义为()。
A. char *p=s。
B. char *p=&s。
C. char *p。
p=*s。
D. char *p。
p=&s。
10. 从一个数据文件中读入以换行符结束的一行字符串的函数为()。
A. gets()B. fgets()C. getc()D. fgetc()二、填空题(每小题2分,共26分)1.C语言中的每条简单语句以________作为结束符。
C语言上机练习参考答案Company number:【0089WT-8898YT-W8CCB-BUUT-202108】第1章 C语言概述1-1编写程序,在屏幕上显示一个如下输出:1-2--------------------------------- 1-3Programming in C is fun! 1-4I love C language.1-5---------------------------------1-6编写程序,在屏幕上显示一个如下图案:1-7* * * *1-8 * * *1-9 * *1-10 *1-11 已知某个圆的半径,编写一个程序,用来计算并显示面积。
1-12 要求:将π定义为符号常量,并假设一个恰当的半径值。
OutputThe area of circle is:1-13 已知两个整数20和10,编写程序,自定义函数add( )将这两个数相加,自定义函数sub( )计算这两个数的差,并按照下面形式显示计算结果:1-1420+10=30 1-15 20-10=10Output20 + 10 = 3020 – 10 = 101-16 已知变量a 、b 和c 的值,编写程序,用来计算并显示x 的值,其中cb a -=x 1-17 请分别用以下数值运行该程序1-18(1)a=250,b=85,c=25 1-19(2)a=300,b=70,c=80Output (1)x =Output (2)x =第2章 常量、变量及数据类型 & 第3章 运算符和表达式3-1 编写程序,求华氏温度100o F 对应的摄氏温度。
计算公式如下:3-2 9)32(5-⨯=f c 3-3 式中:c 表示摄氏温度,f 表示华氏温度。
(c 定义为实型,f 定义为整型)OutputCelsius degree (corresponding to 100 Fahrenheit) is: .3-4 一个物体从100m 的高空自由落下,编写程序,求它在前3s 内下落的垂直距离。
2008年9月全国计算机等级考试二级C笔试试卷一、选择题1、一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后在依次出栈,则元素出栈的顺序是A)12345ABCDE B)EDCBA54321C)ABCDE12345 D)54321EDCBA2、下列叙述正确的是A)循环队列有队头和队尾两个指针,因此,循环队列是非线形结构B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D)循环队列中元素的个数是由队头指针和队尾指针共同决定3、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A)O(n) B) O(n2) C)O(log2n) D)O(log2n)4、下列叙述中正确的是A)顺序结构存储的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间5、数据流图中带有箭头的线段表示的是A)控制流 B)事件驱动 C)模块调用D)数据流6、在软件开发中,需求分析阶段可以使用的工具是A)N—S图 B)DFD图 C)PAD图 D)程序流程图7、在面向对象的方法中,不属于〞对象〞基本特点的是A)一致性 B)分类性 C)多态性 D)标识唯一性8、一间宿舍可住多个学生,则实体宿舍和学生之间的联系是A)一对一B)一对多 C)多对一 D)多对多9、在数据管理技术发展的三个阶段中,数据共享最好的是A)人工管理阶段 B)文件系统阶段C)数据库系统阶段 D)三个阶段相同10、有三个关系R、S和T如下:R S TA Bm 1n 2B C1 33 5A B Cm 1 3由关系R和S通过运算得到关系T,则所使用的运算为A)笛卡尔积 B)交 C)并 D)自然连接11、以下叙述中正确的是A)C程序的基本组成单位是语句 B)C程序中的每一行只能写一条语句C)简单C语句必须以分号结束 D)C语句必须在一行内写完12、计算机能直接执行的程序是A)源程序 B)目标程序 C)汇编程序 D)可执行程序13、以下选项中不能作为C语言合法常量的是A)´cd´B) 0.1c+6 C)〞\a〞 D)´\011´14、以下选项中正确的定义语句是A)double a;b; B) double a=b=7C)double a=7,b=7; D)double,a,b;15、以下不能正确表示代数式2ab/cd 的C语言表达式是A)2*a*b/c/d B)a*b/c/d*2C)a/c/d*b*2 D)2*a*b/c*d16、C源程序中不能表示的数制是A)二进制 B)八进制 C)十进制 D)十六进制17、若有表达式(w)?(-x):(++y),则其中与w等价的表达式是A)w==1 B)w==0 C)w!=1 D)w!=018、执行以下程序段后,w的值为int w=´A´,x=14,y=15;W=((x||y)&&(w<´a´));A) -1 B) NULL C)1 D) 019、若变量已正确定义为int 型,要通过语句scanf(〞%d,%d,%d〞,&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(u代表一个空格符)A)uuu1,2,3<回车> B)1u2u3<回车>C)1,uuu2,uuu3<回车> D)1,2,3<回车>20、有以下程序段int a,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c,c=a;printf(〞a=%d b=%d c=%d\n〞,a,b,c);程序的输出结果是A) a=10 b=50 c=10 B) a=10 b=50 c=30C)a=10 b=30 c=10 D)a=50 b=30 c=5021、若有以下定义语句:int m[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是A)m[-i] B)m[2*2] C)m[m[0]] D)m[m[i]]22、下面的函数调用语句中func函数的实参个数是func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));A) 3 B) 4 C)5 D) 823、若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是A) *p B) x[5] C)*(p+1) D) *x24、若有定义语句:char s[10]=〞1234567\0\0〞;,则strlen(s)的值是A) 7 B) 8 C) 9 D) 1025、以下叙述中错误的是A)用户自定义的函数中可以没有return语句B)用户自定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值C)用户自定义的函数中若没有return语句,则应当定义函数为void类型D)函数的return语句中可以没有表达式26、以下关于宏的叙述中正确的是A)宏名必须用大写字母表示B)宏定义必须位于源程序中所有语句之前C)宏替换没有数据类型限制D)宏调用比函数调用耗费时间27、有以下程序#include <stdio.h>main(){ int i,j;for (i=3;i>=1;i--){for(j=1;j<=2;j++) printf(〞%d〞,i+j);pintf(〞\n〞);}}程序运行的结果是A) 2 3 4 B) 4 3 2 C)2 3 D) 4 53 4 5 5 4 3 3 4 3 44 5 2 328、有以下程序#include <stdio.h>main(){ int x=1,y=2,z=3;if(x>y)if(y>z) printf(〞%d〞,++z);else printf(〞%d〞,++y);printf(〞%d\n〞,x++);}程序运行的结果是A) 331 B)41 C)2 D)129、有以下程序#include <stdio.h>main(){ int i=5;do{ if(i%3==1)if(i%5==2){ printf(〞%d〞,i); break;}i++;} while(i!=0);printf(〞\n〞);}程序运行的结果是A) *7 B)*3*5 C)*5 D)*2*630、有以下程序#include <stdio.h>int fun(int a,int b){ if(b==0) return a;else return(fun(-a,-b));}main(){printf(〞%d\n〞,fun(4,2));}程序运行的结果是A) 1 B) 2 C) 3 D)431、有以下程序#include <stdio.h>#include <stdio.h>{ int *p;p=(int*)malloc(sizeof(int));*p=n; return *p;}main(){ int a;a=fun(10); printf(〞%d\n〞,a+fun(10));}程序运行的结果是A)0 B) 10 C)20 D)出错32、有以下程序#include (stdio.h)void fun(int a, int b){ int t;t=a; a=b; b=t;}main(){ int c[10]={1,2,3,4,5,6,7,8,9,0},i;for(i=0;i<10;i+=2) fun(c[i],c[i+1]);for (i=0;i<10;i++) printf(〞%d,〞,c[i]);printf(〞\n〞);}程序运行的结果是A)1,2,3,4,5,6,7,8,9,0 B)2,1,4,3,6,5,8,7,0,9C)0,9,8,7,6,5,4,3,2,1 D)0,1,2,3,4,5,6,7,8,933、有以下程序#include <stdio.h>struct st{int x,y;} data[2]={1,10,2,20};main(){struct st *p=data;printf(〞%d,〞,p->y); printf(〞%d\n〞,(++p)->x);}程序运行的结果是A) 10,1 B)20,1 C)10,2 D) 20,234、有以下程序#include <stdio.h>void fun(int a[],int n){ int i,t;for(i=1;i<n/2;i++) {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){ int k[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5);for(i=2;i<8;i++)printf(〞%d〞,k[i]);printf(〞\n〞);}程序运行的结果是A) 345678 B)876543 C)1098765 D)32167835、有以下程序#include <stdio.h>#define N 4void fun(int a[][N],int b[]){ int i;for(i=0;i<N;i++) b[i]=a[i][i];}main(){int x[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i;fun(x,y);for(i=0;i<N;i++) printf(〞%d,〞,y[i]);printf(〞\n〞);}程序运行的结果是A)1,2,3,4, B)1,0,7,0, C)1,4,5,9, D)3,4,8,10,36、有以下程序#include <stdio.h>int fun(int (*s)[4],int n,int k){ int m,i;m=s[0][k];for(i=1;i<n;i++) if(s[i][k]>m)m=s[i][k];return m;}main(){int a[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34}}; printf(〞%d\n〞,fun(a,4,0));}程序运行的结果是A) 4 B) 34 C) 31 D)3237、有以下程序#include <stdio.h>main(){ struct STU{ char name[9]; char sex; double score[2];};struct STU a={〞Zhao〞,´m´,85.0,90.0},b={〞Qian〞,´f´,95.0,92.0}; b=a;printf(〞%s,%c,%2.0f,%2.0f\n〞,,b.sex,b.score[0],b.score[1]); }程序运行的结果是A)Qian,f,95,92 B)Qian,m,85,90C)Zhao,f,95,92 D)Zhao,m,85,9038、假定已建立以下链表结构,且指针p和q已指向如图所示的结点:则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是A) (*p).next=(*q).next; free(p);B) p=q->next; free(q);C) p=q; free(q);D)p->next=q->next; free(q);39、有以下程序#include <stdio.h>main(){char a=4;printf(〞%d\n,a=a<<1〞);}程序的运行结果是A) 40 B) 16 C) 8 D) 440、有以下程序#include <stdio.h>main(){ FILE *pf;char *s1=〞China〞,*s2=〞Beijing〞;pf=fopen(〞abc.dat〞,〞wb+〞);fwrite(s2,7,1,pf);rewind(pf);fwrite(s1,5,1,pf);fclose(pf);}以下程序执行后abc.dat文件的内容是A) China B) ChinangC) ChinaBeijing D)BeijingChina二、填空题1、对下列二叉树进行中序遍历的结果是( ).2、按照软件测试的一般步骤,集成测试应在()测试之后进行。
全国计算机等级考试二级C语言机试真题2008年9月(总分:100.00,做题时间:90分钟)一、程序填空题(总题数:1,分数:30.00)1.N个有序整数数列已放在一维数组中,给定的下列程序中,函数fun()的功能是:利用折半查找法查找整数m在数组中的位置。
若找到,则返回其下标值;反之,则返回“Not be found!”。
折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。
如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中,直到low>high,查找结束。
[注意] 部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
[试题源程序]#include <stdio.h>#define N 10int fun(int a[],int m)int low=0, high=N-1, mid;while(low<=high)mid= (1) ;if(m<a[mid])high= (2) ;eiseif(m>a[mid])low=mid+1;elsereturn(mid);(3) (-1);main()int i, a[N]=(-3, 4, 7, 9, 13, 24, 67, 89, 100, 180), k, m;printf("a数组中的数据如下: ");for(i=0; i<N; i++);printf("%d", a[i]);printf("Enter m: ");scanf("%d", &m);k=fun(a, m);if(k>=0)printf("m=%d, index=%d/n", m, k));elseprintf("Not be found/n");(分数:30.00)填空项1:__________________ (正确答案:[1] (low+high)/2[2] mid-1[3] return)解析:[解析] 填空1:根据题目的意思,这里应该是确定折半查找的中间位置,所以很明显应该填(low+high)/2。
2008年秋二级 C语言上机试卷(试卷代号C03)答案
一、改错题(20分)
【程序功能】
函数intersec的功能是:找出所有在两个字符串集合s1和s2中都出现的字符串,将这些字符串放入一个新集合s3中,函数返回新集合中字符串的个数。
【测试数据与运行结果】
测试数据:s1集合:{ while, for, switch, if, break, continue }
s2集合:{ for, case, do, else, char, switch }
运行结果:for switch
【含有错误的源程序】
#include <stdio.h>
#include <string.h>
int intersec(char s1[][10],char s2[][10],char s3[][10],int m,int n)
{ int i,j,k=0;
for(i=0; i<m; i++)
for(j=i;j<n; j++) /*中,改为: for(j=0; j<n; j++) */ if(s1[i]==s2[j]) /*中,改为: if(strcmp(s1[i],s2[j])==0) */ { strcpy(s3[k++],s1[i]);
break;
}
return k;
}
void main()
{ int i,j;
char s1[6][10]={while, for, switch, if, break, continue},
s2[6][10]={for,case,do,else,char,switch},s3[20][10];
/*易,改为: char s1[6][10]={"while","for","switch","if","break","continue"}, s2[6][10]={"for","case","do","else","char","switch"},s3[20][10];*/ j=intersec(s1,s2,s3,6,6);
for(i=0;i<j;i++)
printf("%c ", s3[i]); /* 中,改为:printf("%s ", s3[i]); */ }
【评分标准】
共20分。
完整录入源程序4分,每改正一个错误4分,共4个错误。
二、编程题(20分)
【程序功能】
数组部分元素逆置。
【编程要求】
1.编写函数v oid reverse( int *a, int n,int m ),其功能是在a指向的有n个元素的数组中找到最后一个素数,再将该素数之前的m个元素(不包括该素数本身)逆置。
若该素数之前的元素个数不足m时,则从第一个数组元素开始逆置。
2.编写main函数,声明一维数组a并用测试数据初始化,接收键盘输入的m值,用a数组和m变量作为实参调用reverse函数,将变换后的a数组中的数据输出到屏幕及结果文件myf2.out中。
最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。
【测试数据与运行结果】
测试数据:
a数组初始数据:4 3 6 7 8 13 9 19 21 26
运行结果:
当m=4时,a数组变为:4 3 6 9 13 8 7 19 21 26
当m=8时,a数组变为:9 13 8 7 6 3 4 19 21 26
【参考答案】
#include <stdio.h>
int prime(int a)
{ int k,i;
if(a==1)return 0;
if(a==2)return 1;
for(i=2;i<a;i++)
if(a%i==0) return(0);
return(1);
}
void reverse( int *a,int n,int m)
{ int i,k=-1,*b, *p,t;
for(i=0;i<n;i++)
if(prime(a[i])) k=i;
p=a+k-1;
if(k-m<0) b=a;
else b=a+k-m;
while(b<p)
{ t=*b; *b=*p; *p=t;
b++;p--;
}
}
void main( )
{ int a[20]={4,3,6,7,8,13,9,19,21,26},i,m,n=10;
FILE *fp;
if((fp=fopen("d:\\myf2.out","w"))==NULL)
{ printf("Creat File myf2.out failed!\n"); exit(0); }
printf("Please input m:\n");
scanf("%d",&m);
reverse(a,n,m);
for(i=0;i<n;i++)
{ printf("%4d",a[i]);
fprintf(fp, "%4d",a[i]);
}
fprintf(fp,"\nMy exam number is: 0112400123\n");
fclose(fp);
}
【评分标准】
共20分。
满分时必须运行,若无正确结果扣1分
一、main函数(共10分)
1.文件操作:3分(#include, fp声明,fopen各1分)
2.变量/数组声明及获得初始数据:2分
3.函数调用:2分
4.在屏幕显示运算结果:1分
5.保存运算结果到文件myf2.out:1分
6.保存准考证号到文件myf2.out:1分
二、reverse 函数(共10分)
1.函数头部:1分
2.遍历a数组:1分
3.定位最后一个素数:4分(判断素数2分,定位最后一个素数2分)
4.逆置:4分(判断最后素数前的元素个数1分,最后素数之前的m个元素(不包括
该素数)逆置3分)。