北京理工大学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 */
额外进程测试输入期待的输出
允许迟交: 否