南 京 林 业 大 学
2004年攻读硕士学位研究生入学考试
C程序设计 试题
一. 选择题(40分)
1.设变量m,n,a,b,c,d均为0,执行(m = a==b)||(n=c==d)后,m,n的值是
A. 0,0 B. 0,1 C. 1,0 D. 1,1
2.设整型变量在内存占2个字节,则 unsigned int 型变量数的范围是______.
A.-32768—+32767 B.0—65535 C.0—216 D.0—215
3.设a为变量,数学关系式:10<a<15, 用C语言表达式,下列正确的是
A. 10<a<15 B. a == 11 || a == 12 || a == 13 || a == 14
C. a>10&&a<15 D. !(a<10)&&!(a>15)
4.在以下一组运算符中,优先级最高的运算符是
A. <= B. = C. % D. &&
5.设有程序段
int k=10;
while (k=0) k=k-1;
则下面描述中正确的是_________
A.while循环执行10次 B.循环是无限循环
C.循环体语句一次也不执行 D.循环体语句执行一次
6.语句while(!e)中表达式!e等价于________
A.e= =0 B.e!=1 C.e!=0 D.e= =1
7.若在C语言程序中使用以下的二维数组定义语句并赋以部分初值,其中不正确的
定义只有:
A. int a[2][3]={{4},{5,6}} B. int a[2][3]={{4},{5},{6}}
C. int a[2][3]={4,5,6} D. int a[2][3]={{4},5,6}
8. 若a为二维数组,它有m列,则a[i][j]在数组中的位置是_________
A. i*m+j B. j*m+i C. i*m+j-1 D. i*m+j+1
9.以下关于C语言字符数组的说法中,不正确的是:
A.在C语言中可用字符数组存放字符串
B.可以用关系运算符对字符数组进行比较
C.字符数组中的字符串可以整体输入、输出
D.字符数组中的字符串可以按单个字符输入、输出
10.设有字符串"a\tb\n",则该字符串在内存实际占______个单元.
A.4 B.5 C.6 D.7
11.下列表达式中,错误的是______.
A.2>1 ? a:b B.i+++j C.4.0%2.0 D.x*=y+8
12. 设有程序段
x= -1;
do {x=x*x;}
while (!x);
A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误
13.若以数组元素作为函数的实参,则实参向形参传送的是______.
A.数组元素的地址 B.数组元素的值 C.数组的首地址 B.数组名
14.设有定义语句int a [ 3 ][ 4 ]; 则以下对此语句的叙述不正确的是()。
A. 定义了一个名为a的二维数组
B. a数组共有3*4个元素
C. a数组中行下标为1~3,列下标为1~4
D. 数组中的每个元素必须是整型
15.设有如下的共用体定义:
union data
{int i;
long b;
float f;}a;
则a所占的内存单元为______个字节.
A.4 B.6 C.8 D.10
16.以下关于C语言字符数组的说法中,不正确的是:
A.在C语言中可用字符数组存放字符串
B.可以用关系运算符对字符数组进行比较
C.字符数组中的字符串可以整体输入、输出
D.字符数组中的字符串可以按单个字符输入、输出
17. 以下只有在使用时才为该类型变量分配内存的存储类说明是
A. auto和 static B. auto和 register
C. register和 static D. extern和 register
18.下列选项中不是C语言main函数正确表达形式的是________?
A.main(int argc,char *argv[]);
B.main(ac,av) int ac;char **av;
B.main(c,v) int c;char *v[];
D.main(argc,argv) int argc;char argv[];
19. 以下有关宏替换的叙述不正确的是:
A.宏替换不占用运行时间 B.宏名无类型
C.宏替换只是字符替换 D.宏名必须答写字母表示
20.以下声明语句中,用于声明一个行指针变量的是________。
A. int * p(int); B. int * p; C. int (* p)[3]; D. int (* p)(int);
二.填充(20分)
1. 若有以下定义和语句,则sizeof(a)的值是 ,而sizeof(b)的值是 。
struct { int day; char month; int year;} a, *b;
b=&a;
2. 在C程序中,数据可以用________和_______两种代码形式存取。
3. 在C程序中,文件可以用________方式存取,也可以用_________方式存取。
4.设有二维数组 inta[2][2],*p;,则a[I][j]三种其他表示是______________,
____________,___________。
5.用数组名作函数参数时,形参和实参的结合是采用__________,因为数组名是
数组的__________.
6.设a=3,b=2,c=1,则a>b的值为▁▁▁▁,a>b>c的值为▁▁▁▁。
7.静态变量赋初值是________赋值,动态变量赋初值是___________赋值。
8.链表中每个结点至少应包括二个部分,它们是__________和__________.
9. 以下由while构成的循环执行的次数是_________。
int k = 0; while ( k = 1 ) k++;
10. 若已定义:
struct num
{int a;
int b;
float f;
}n={1,3,5.0};
struct num *pn=&n;
则表达式pn->b/n.a*++pn->b的值是 ,表达式(*pn).a+pn->f的值是 。
三.程序分析题(20分)
1. 以下程序的功能是______。
#include <stdio.h>
main(int argc, char *argv[ ])
{ FILE *f1, *f2;
char ch;
if(argc < 3)
{ printf(“Parameters missing!\n”); exit(0); }
if(((f1 = fopen(argv[1], “r”)) == NULL) ||
((f2 = fopen(argv[2], “w”)) == NULL))
{ printf(“Can not open file!\n”); exit(0); }
while(!feof(f1)) fputc(fgetc(f1), f2);
fclose(f1);
fclose(f2);
}
2. 以下程序的输出结果是______。
conv (b)
int b;
{ if (b >= 2) conv(b/2);
printf(“%d”, b%2);
}
main()
{ int d;
scanf(“%d”, &d); conv(d);
}
3.以下程序的运行结果是 。
main()
{struct EXAMPLE {
struct{int x;int y;}in;
int a;
int b;
}e;
e.a=2;e.b=3;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf(“%d,%d”,e.in.x,e.in.y);
}
4.分析以下程序:
main()
{char c,string[81];
int i,a=0,b=0;
scanf("%s\n",string);
for(i=0;(c=string[i])!='\0';i++)
if (c==' ')a=0;
else if (a==0)
{a=1;b++;}
printf("%d\n",b);
}
5.以下程序运行后,输出结果是
main()
{static char a[]="ABCDEFGH",
b[]="abCDefGh";
char *p1,*p2;
int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k))
printf("%c",*(p1+k));
printf("\n");
}
for(j=MAX-1;j>=start; j--)考
L[j+1]=L[j];业
课
四.完成下列程序(20分)
1.以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。
正门main( )
研{ float x[1000], sum=0.0, ave, a;
48号int n=0, i;
336 26038printf("Enter mark:\n");scanf("%f",&a);
021-while(a>=0.0&& n<1000)
正门
{ sum+ (
1 ) ; x[n]= (
2 ) ;
kaoyantjn++; scanf("%f",&a);
336260 37}
考
ave= (
3 ) ;
kaoyantjprintf("Output:\n");
200092
printf("ave=%f\n",ave);
网络督察for (I=0;I<n; I++)
课if (
4 ) printf ("%f\n",x[I]);
辅导}
2. 已知两个链表的元素按非递减排列,合并两表得到一新表,仍然是按
非递减排列,两个链表以NULL为结束标志。以函数来完成该操作,函数如下,
1. 完成所缺语句。
同济大学四平路
typedef struct node {int data ;
同济
struct node * next ; } Node ,*LinkList;
void LL(LinkList la, LinkList lb, LinkList *lc ) // la,lb是已知二表//共
{Node *pa, *pb, *pc;业
pa=la->next ; pb=( 5 );*lc=( 6 );
while(_______7___________)
if (pa->data<=pb->data)
{ ( 8 );pc=pa;( 9 );}
else {( 10 );pc=pb;( 11 );}
if (_____12________)
____13___;
if (____14_______)
____15______;
}
3已知字母A的ASCII代码值为65,以下程序统计从终端输入的字符中,各
大写字母的个数。用#作为输入结束标志。
#include <stdio.h>
#include <ctype.h>
main()
{ int num [ 26 ], i; char c;
for ( i = 0; i < 26; i ++ ) num [ i ] = 0;
while (( __16___) != ‘#’ ) /* 统计从终端输入的大写字母个数 */
if ( isupper ( c ) ) num [( 17 ) ] += 1;
for ( i = 0; i < 26; i ++ ) /* 输出大写字母和该字母的个数 */
if ( num [ i ] ) printf ( “%c : %d\n”, i( 18 ) , num [ i ] );}
4.在 n 行 n 列的矩阵中,每行都有最小的数,本程序求这 n 个最小数中的最大一个
#include〈stdio.h〉
#define N 100
int a[N][N];
void main()
{ int row ,col ,max ,min ,n;
/*输入合法 n (〈100 〉,和输入 m ×n 个整数到数组 a 的代码略*/
max=a[0][0];
for ( row = 0;row < n;row++) {
for (min = a[row][0],col = l ;col < n;col++)
if (__19_) min = a[row][col];
if (__20__) max = min;
}
printf ("The min of max numbers is %d\n",max);
}
四. 编程题(50分)
1 一矩阵的主对角线、次对角线三条对角线的和,编写函数程序。
2. 建立一个存放n个数的链表,编写函数。这里的结点定义为
typedef struct node {int data ;
struct node * next ; } Node ;
3. 统计一段英文短文中不同单词出现的次数,编写程序。
4. 写程序,下列图形。
1
2 2
3 3 3
4 4 4 4
3 3 3
2 2
1
5.如果甲、乙两方轮流报数,每方至少报数1,最多报数m,将甲、乙两方所
报的数累加, 谁最先报到累加数100,谁就赢。如果甲方先报数,请给出甲方
赢的算法.(写出函数)
http://www.kaoyantj.com考研共济网