文档库 最新最全的文档下载
当前位置:文档库 › 北京理工大学C语言期末模拟试题

北京理工大学C语言期末模拟试题

北京理工大学C语言期末模拟试题
北京理工大学C语言期末模拟试题

北京理工大学C语言期末模拟试题

一、单项选择题- 试答1

Question 1

分数: 2

已知结构定义如下:

structsk

{ int a;

float b;

}data, *p;

如果 p = &data;则对于结构变量data 的成员 a 的正确引用是。

选择一个答案

A. p->data.a

B. p.data.a

C. (*p).a

D. (*).data.a

Question 2

分数: 2

说明一个变量 s 来保存 20 以内整数的阶乘,则该变量应说明为。

选择一个答案

A. float 型

B. long 型

C. unsigned 型

D. int型

Question 3

分数: 2

下列四组标识符中, 每组有用逗号分开的4个标识符,全都符合标准 C 标识符规定的一组是______。

选择一个答案

A. *4,trin,mA,Ma

B. r_,_r,i,st’

C. name,t3,x_y,_n3y

D. function1,g,c10,k.c7

Question 4

分数: 2

已知int n = 1, m = 0; 执行下述语句后,变量m的值是。

switch( n )

{ case 1:

case 2: m = 1;

break;

case 3: m = 3;

default: m = 2;

}

选择一个答案

A. 3

B. 0

C. 2

D. 1

Question 5

分数: 2

已知:char str[ ][4] ={ “abc”, ”def”, ”ghi”}, c, * p=&c;如果要使则执行“printf( “%c”, * p )”语句后的输出结果为字符’c’,则赋值语句是。

选择一个答案

A. p = str[0][2];

B. *p = str[0][2];

C. p = str[1][3];

D. *p = str[1][3];

Question 6

分数: 2

已知:int k = 2, m =3, n = 4; 则表达式“! k && m || n”的值是。

选择一个答案

A. 1

B. 3

C. 2

D. 0

Question 7

分数: 2

在下面的说明语句中为字符数组str赋初值,而str不能作为字符串使用的是。选择一个答案

A. char str[8] = “Beijing”;

B. char str[7] = “Beijing”;

C. char str[10] = “Beijing”;

D. char *str = “Beijing”;

Question 8

分数: 2

已知在主调函数中有说明语句如下:

int n, data[10][6];

double sum, *q;

函数的调用语句是:q = func(&n, data );

则函数func的原型是______ 。

选择一个答案

A. double func( int *x, int **data );

B. double func( int x, int data[][] );

C. double *func( int *x, int **data );

D. double *func( int *x, int data[][6] );

Question 9

分数: 2

已知inti, k = 4; 则执行循环语句:

for( i =0; ++i< k; i++ )

printf(“%d\n”, i);

最后一行输出的数值是。

选择一个答案

A. 4

B. 3

C. 5

D. 2

二、程序填空

分数: 2

以下函数使用合并排序法,将两个已经按照从小到大的排序的整型数组,合并到新的数组,新数组仍按照从小到大的顺序排序, 数值相同的数据在新数组中只保存一次。参数a、b 是两个排好序的数组的首地址,参数c是合并后数组的首地址,参数m、n分别是数组a、b的长度,函数的返回值是数组c的长度。

combine(int *a, int m, int *b, int n, int *c )

{ inti = 0, j = 0, k = 0;

while( 【1】 )

c[k++] = a[i] < b[j] ? a[i++] : b[j++];

while( i< m )

c[k++] = a[i++];

while( j < n )

c[k++] = b[j++];

for( i = 0; i< k-1; i++ )

{ while( c[i+1] == c[i] )

{ for( j = 【2】 ; j < k-1; j++ )

c[j] = c[j+1];

【3】 ;

}

}

return( k );

}

【1】:

选择一个答案

A. i<= m || j <= n

B. i< m || j < n

C. i<= m && j <= n

D. i< m && j < n

Question 2

分数: 2

【2】:

选择一个答案

A. 1

B. i

C. 0

D. i + 1

Question 3

分数: 2

【3】:

选择一个答案

A. i--;

B. i++;

C. k--;

D. k++;

Question 4

分数: 2

从键盘输入3个学生的数据,将它们存入当前文件夹下名为"student"的文件中。#include

#define SIZE 3

struct student

{ long num;

char name[10];

int age;

char address[10];

}stu[SIZE], out;

main ( )

{ FILE *fp;

int i;

for( i = 0; i< SIZE; i++ )

{ printf( "Input student %d:", i + 1 );

scanf( "%ld%s%d%s", &stu[i].num, stu[i].name, &stu[i].age, stu[i].address );

}

if( ( fp = fopen( "student", 【4】) ) == NULL )

{ printf( "Cannot open file.\n" );

exit(1);

}

for( i = 0; i< SIZE; i++ )

if( fwrite( 【5】, sizeof(struct student), 1, fp ) 【6】1 )

printf("File write error.\n");

fclose(fp);

}

【4】:

选择一个答案

A. "a"

B. "w"

C. "ab"

D. "wb"

Question 5

分数: 2

【5】:

选择一个答案

A. stu[ i ]

B. *stu[ i ]

C. stu

D. &stu[ i ]

Question 6

分数: 2

【6】:

选择一个答案

A. = = 1

B. = = NULL

C. ! = NULL

D. ! = 1

?查看

?提交

?结果

?提交历史

?相似度

三、编程题_1

成绩: 10 / 折扣: 1

输入行数n 值和首字母,输出由大写英文字母围起的空心三角形。

无论输入的首字母是大写或小写,输出的字母均是大写,且字母输出是循环的,即输出字母Z 后再输出的是字母A。

例:输入:5 m↙

屏幕输出:

M↙

N N↙

O O↙

P P↙

Q R S T U T S R Q↙

内存限制额外进程测试输入期待的输出

允许迟交: 否

?查看

?提交

?结果

?提交历史

?相似度

三、编程题_2

成绩: 10 / 折扣: 1

现有n元整钱,到银行兑换成1角、2角、5角的硬币。编写程序,输入整钱数n,输出可能兑换的各种硬币数量的组合。

要求编写程序,当输入整钱数N 时,输出每种兑换方案的硬币枚数。如果有多种兑换方案,按1角硬币数量的升序输出。

例如,整钱数2元,

输入:2

输出:

num: $0.1 $0.2 $0.5

1: 1 2 3

2: 1 7 1

3: 2 4 2

4: 3 1 3

5: 3 6 1

6: 4 3 2

7: 5 5 1

8: 6 2 2

9: 7 4 1

10: 8 1 2

11: 9 3 1

12: 11 2 1

13: 13 1 1

其中第一行是表头。从第二行起每行为一种兑换方案;第一列为方案编号,第二列为1 角硬币数量,第三列为2 角硬币数量,第四列为5角硬币数量。

编写求兑换方案的函数:intfindm(int n, intmn[ ][3])

其中:n 是整钱数,mn是保存兑换方案的数组名;函数的返回值是兑换方案个数。要求:输出的兑换方案按照1角硬币数量的升序排列,并且每种硬币的数量必须大于0。

注意:只提交自编的函数findm,不要提交主函数。给定的程序已经控制好了输出的格式,你只要将你的方案按要求放入数组mn中即可。

预设代码

前置代码

view plaincopy to clipboardprint?

1./* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */

2.

3.#include

4.

5.int findm( int , int [][3] );

6.

7.int main()

8.{ int i, n, num, combm[500][3];

9.

10. scanf("%d",&n);

11. num = findm( n, combm );

12. printf("num: $0.1 $0.2 $0.5\n" );

13.for ( i=0; i < num; i++ )

14. printf("%3d:%5d%5d%5d\n", i+1, combm[i][0], combm[i][1], co

mbm[i][2] );

15.return 0;

16.}

17.

18./* int findm( int n, int mn[][3] ) */

内存限制额外进程测试输入期待的输出

允许迟交: 否

查看

?提交

?结果

?提交历史

?相似度

三、编程题_3

成绩: 10 / 折扣: 1 编写一个函数,使用递归算法求下述函数的值。

f(n,x) = 1 当n == 0 时x 当n == 1 时2 * f(n-1,x) + 3* f(n-2,x) 当n > 1 时-1 其它

函数原型如下:

double findf(int n, double x)

参数说明:n 项数( n > 4 ),x 自变量;返回值是函数值。

例如输入:5 4.0,输出:304.00

注意:仅提交自编的findf函数,不提交main函数。

预设代码

a3_3.c

view plaincopy to clipboardprint?

1./* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */

2.

3.#include

4.int main()

5.{ int n;

6.double f, s, findf( );

7. scanf("%d%lf",&n,&f);

8. s = findf(n, f);

9. printf("%.2lf\n", s);

10.return 0;

11.}

12.

13./* PRESET CODE END - NEVER TOUCH CODE ABOVE */

额外进程测试输入期待的输出

允许迟交: 否

?查看

?提交

?结果

?提交历史

?相似度

三、编程题_4

成绩: 10 / 折扣: 1

功能要求:在带表头的单向链表中,找到其中的最小值结点,删除该结点之后的所有结点。说明:(1) 用带表头的单向链表的方式保存输入的各整数数值,每一个结点的数值域保存一个数值。

(2) 若具有最小数值的结点有多个,则选取其中位于链表最前端的一个结点。预设的代码包括主函数、建立链表函数、输出链表函数,请编写找到链表中最小值结点,并将其之后所有结点删除的函数。

结构的定义:

struct node

{ intnum;

struct node *next; }

typedefstruct node NODE;

typedefstruct node * PNODE;

函数的原型:void delAftMin(PNODE head),其中:参数head是单向链表的头指针。

预设代码

前置代码

view plaincopy to clipboardprint?

1./* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */

2.

3.#include

4.#include

5.

6.struct node

7.{ int data;

8.struct node * next;

9.} ;

10.

11.t ypedef struct node NODE;

12.t ypedef struct node * PNODE;

13.

14.P NODE constructlist( PNODE head, int num );

15.v oid outlist( PNODE head );

16.v oid delAftMin( PNODE head );

17.

18.i nt main ( )

19.{int num=1;

20. PNODE head;

21.

22. head = (PNODE)malloc( sizeof(NODE) );

23. head->next = NULL;

24. head->data = -1;

25.

26.while ( num!=0 )

27. { scanf("%d", &num);

28.if ( num!=0 )

29. constructlist (head, num);

30. }

31. delAftMin( head );

32. outlist( head );

33.return 0;

34.}

35.

36.P NODE constructlist( PNODE head, int num )

37.{ PNODE p;

38. p = (PNODE)malloc( sizeof(NODE) );

39. p->data = num;

40. p->next = head->next;

41. head->next = p;

42.return head;

43.}

44.

45.v oid outlist( PNODE head )

46.{ PNODE p;

47. p = head->next;

48.while ( p != NULL )

49. { printf("%d\n", p->data);

50. p = p->next;

51. }

52.}

53.

54./* This is an example for list. Please programme your code like it

.

55.v oid delAftMin( PNODE head )

56.{

57.}

58.*/

59.

60./* PRESET CODE END - NEVER TOUCH CODE ABOVE */

额外进程测试输入期待的输出

允许迟交: 否

相关文档
相关文档 最新文档