《高级语言程序设计》模拟试题B卷 - 参考答案 下载本文

内容发布更新时间 : 2024/5/12 4:19:16星期一 下面是文章的全部内容请认真阅读。

武汉大学

2009-2010学年度第2学期

《高级语言程序设计(C语言)》学位考试模拟试卷B卷答案

姓名: 学号: 专业: 一. 单项选择题:(选择最合适的答案填空,每小题2分,共16分)

( D )1、设有变量定义:int m=5,n=3;则执行表达式((m+=2)>=7)||((n-=3)<10)

后,m,n的值分别为_____ _。 A. 5和0 B. 5和3 C. 7和0 D. 7和3

( D )2、已知各变量的类型说明如下: int k,a,b;

unsigned long w=5; double x=1.42;

则以下不符合C语言语法的表达式是 。

A. w+=-2 B. k=(a=2,b=3,a+b) C. a+=a-=(b=4)*(a=3) D. x%(-3) ( B )3、下面程序段的运行结果是 。 #include int main ( ) { int a=11,b=10,c=0; a/=b+(b&&c); printf(“%d\\n”, a); return 0; }

A. 0 B.1 C. 1.1 D. 11 ( C )4、头文件type1.h的内容如下所示: #define N 5 #define M1 N*3 程序如下: #include “type1.h” #define M2 N*2 int main() { int i; i=M1+M2; printf(“%d\\n”,i); return 0; } 则上述程序编译后运行的输出结果是 :

A. 10 B.20 C. 25 D. 30 ( A )5、设有如下定义: struck sk { int a;

float b; }data; int *p;

若要使P指向data中的a域,正确的赋值语句是: A. p=&data.a; B. p=data.a; C. p=&a; D. *p=data.a ( C )6、设有如下定义int a[ ]={10,11,12},*p=&a[0];则执行完*p++; *p+=1;后

a[0],a[1],a[2]的值依次是 。 A. 10,11,12 B. 11,12,12 C. 10,12,12 D. 11,11,12 ( B )7、表达式2.5+5%2-1/2*2的结果为_____ 。

A. -2.5 B. 3.5 C. 4.0 D. 5.0 ( A )8、设变量int x=10,y=20,则执行x=x+y;y=x-y;x=x-y;后x为______ 。

A. 20

B. 30

C. 10

D. 0

二. 程序阅读与分析(共29分)

9、分析以下程序执行流程,写出程序执行结果。(本小题8分) #include int main() { int x=5;

while(x++<10) { do{

printf(\ }while(x<11); x--; }

return 0; }

答案: 6 7 8 9 10

10、分析以下程序执行流程,写出程序执行结果。(本小题8分) #include int main() { int m=2;

int a=3, b=5, c=0,d=0;

int sbs( int x, int y, int *p1, int *p2) ; printf(“m\\n”,sbs(a,b,&c,&d)); printf(“mmm \\n”,m,c,d); return 0; }

int sbs( int x, int y, int *p1, int *p2) { int m; *p1=x*x; *p2=y*y; m=*p1+*p2; return m;

} 答案: 34

2 9 25

11、下面程序输入字符串s1的内容,并把字符串s1的内容复制到字符串s2中(不能使用strcpy库函数)。(本小题8分)

#include int main()

{ char s1[50], (1); int i=0;

scanf(“%s’, (2) ); while( (3) ) { (4) ; i++; }

s2[i]=0;

printf(“%s\\t%s\\n”,s1,s2); return 0; }

答案:(1) s2[50] (2) s1或者&s1[0] (3) s1[i]!=’\\0’或者s1[i]!=0或者s1[i] (4) s2[i]=s1[i]

12、阅读以下递归程序,分析该程序执行流程。(本小题5分) #include

void reverse(char ch) { ch = getchar();

if(ch !=’#’) { reverse(ch); putchar(ch); } }

int main( ) { char c; reverse(c); return 0; }

在给定输入字符串 123ABCD%&XYZ#KK的前提下,执行上述程序后,产生的输出是什么?

答案:ZYX&üBA321

三. 程序测试与分析(每小题5分,共10分)

13、下面的程序功能是:读入一个整数k(2≤k≤10000),输出它的所有质因子(即所

有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、11。

分析以下程序执行流程,请指明错误之处,如有必要可以简要说明原因,并给出修正错误的建议。(共3个错误)

#include “conio.h” #include “stdio.h”

int IsPrime(int n); 答案:改为 int IsPrime(int n) { int i, m;

m = 1;

for ( i = 2; i < n; i++)

if !( n%i ) 答案:改为 if(!(n%i)) { m=0;

break; }

return(m); }

int main( )

{ int j; 答案:改为 int j, k;

clrscr( );

printf(“\\nPease enter an integer number between 2 and 10000:”); scanf(“%d”, &k);

printf(“\\nThe prime factor(s) of %d is (are):”, k); for( j=2; j<=k; j++)

if((!k%j)&&(IsPrime(j))) printf(“\\nM”, j); printf(“\\n”); return 0;

}

14、下面的程序的功能是:计算的是20!的结果;其中函数f()的功能是计算n的阶乘。实际执行下面的程序得到结果如下: 10!=24320

结果不等于10的阶乘的正确值3628800。

请分析以下程序执行流程,请指明错误之处,如有必要可以简要说明原因,并给出修正错误的建议。

#include long f(short int n) { short int tmp=1,i;

答案:原因数据类型选取不正确,造成数据溢出。改为 long int tmp=1,i; if (n>=2)

for(i =1;i <=n; i++) tmp*=i;

return (long ) tmp; 答案:可以改为return tmp;亦可不改 }

int main()

{ short int a; long b; a=10; b=f(a);

printf(\ getchar(); return 0; }

四. 程序实现题(每小题15分,共30分)

15、设计一个函数insert(a,n,m);其中a为有序数组(按照元素取值由小到大排列),n为任意整数,m为数组a中元素的个数。该函数将n按照顺序插入到数组a相应位置。例如,原数列a为6,8,10,12,14,则调用insert(a,9,5); 后数组a为6,8,9,10,12,14。 答案:

void insert(int *a,int n,int m) { int i=0;

while(a[i]

for(j=m;j>i;j--)

a[j]=a[j-1]; a[i]=n; }

分析程序执行流程基本正确,流程图和程序执行流程基本一致为评分标准。

16、设计一个函数index(s1,s2);如果字符串s1(子串)在字符串s2中出现过,则该函数返回s1(子串)在字符串s2首次出现的位置号;否则如果字符串s1(子串)在字符串s2中没有出现过,函数返回-1。例如s1为”ad”,s2为”sfad123ad”,则调用index(s1,s2);返回值为2。 答案:

int index(char *s1,char *s2) { int i,j,k;

for(i=0; s2[i]!=’\\0’; i++)

for(j=i, k=0; s2[j]==s1[k]; j++,k++) if(s1[k+1]==’\\0’) return i; return -1; }

分析程序执行流程基本正确,流程图和程序执行流程基本一致为评分标准。

五. 算法设计(共15分)

说明:

? 分析思路,说明算法中的重要数据类型的定义;

? 说明算法中的模块划分;各模块的功能、形式参数、函数返回值说明;并用伪代码、

流程图或其它方法描述子程序的执行过程; ?

不必完整写出函数程序的代码,完整代码将不作为判分依据

17、编写一个程序,用户输入一串整数,以-1结束,将用户输入的整数构成一个取值从大到小排列的有序单链表并输出。

具体要求如下

A、说明采用C语言如何定义链表结点;

B、说明程序中划分多少模块?并给出每个模块的原型; C、描述每个模块的算法。

参考答案:评分要点:以算法可行,基本正确为主要评分指标 A、 结构类型 struct node{int data; struct node *next;};

B、 算法中主要功能包括:在有序链表中插入新节点;创建有序链表;输出链表所有

节点数据。