南 京 林 业 大 学
2003年攻读硕士学位研究生入学考试
C程序设计 试题
一. 选择题(40分)
1..当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是______
A c=b=a; B (a=c)‖(b=c);
C (a=c)&&(b=c); D a=c=b;
2.在C语言中,不正确的int类型的常数是________
A 32768 B 0 C 037 D 0xAF
3.以下程序的输出结果是________
main( )
{ int a= -1,b=1,k;
if((++a<0)&& ! (b-- <=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);}
A -1 1 B 0 1 C 1 0 D 0 0
4.在C语言类型中,int ,char, short等类型的长度是_________
A.固定的 B.由用户自己定义 C.任意的 D.与机器字长有关
5.设a=1,b=2,c=3,d=4,则表达式:a
A 4 B 3 C 2 D 1
6. 下列说法错误的是______________
A.结构体变量可以被整体赋值.
B. 可以取结构体变量的地址
C. 可以取结构体变量成员的地址
D. 结构体类型的成员可以定义成该结构体类型的指针类型
7.设有如下定义:int x=l,y=-1;,则语句:printf("%d\n",(x--&++y));的输出结果是____
A 1 B 0 C -1 D 2
8. . 设有程序段: t=6;a=7;b=8; if(a=b)t=a;,这段程序执行后,t的结果是______
A. 6 B.7 C.8 D.0
9.下列描述中不正确的是________
A)字符型数组中可以存放字符串
B)可以对字符型数组进行整体输入、输出
C)可以对整型数组进行整体输入、输出
D)不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
10.若a为二维数组,它有m列,则a[i][j]在数组中的位置是_________
A. i*m+j B. j*m+i C. i*m+j-1 D. i*m+j+1
11. 下列语句中符合C语言语法的赋值语句是__________
A a=7+b+c=a+7; B a=7+b++=a+7;
C ) a=7+b,b++,a+7 D a=7+b,c=a+7;
12. 若a为二维数组,则a[1][3]等价于_________
A. *((a+1)+3) B. *(a[1]+3) C. (*(a+1)+3) D. &a[1]+3
13.下面程序段不是死循环的是_____________
A. int j=100;
while(1){j=j%100+1;if(j>100)break;}
B. for( ; ; );
C. int k=0; do{ ++k;}while(k>=0);
D. int s=36; while(s);--s;
14.下列表达式中,错误的是______.
A.2>1 ? a:b B.i+++j C.4.0%2.0 D.x*=y+8
15.a,b为整数且b!=0,则表达式(a/b)*b+a%b的值为______的值.
A.a B.b C.a被b除的余数部分 Da被b除商的整数部分
16.若以数组元素作为函数的实参,则实参向形参传送的是______.
A.数组元素的地址 B.数组元素的值 C.数组的首地址 B.数组名
17.设有如下的共用体定义:
union data
{int i;
long b;
float f;}a;
则a所占的内存单元为______个字节.
A.4 B.6 C.8 D.10
18.语句:printf("%d",(a=2)&&(b= -2);的输出结果是________
A 无输出 B 结果不确定 C -1 D 1
19.下列选项中不是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[];
20.执行for(j=1;j++<4;);语句后变量j的值是_________
A. 3 B. 4 C. 5 D.不定
二.填充(20分)
1.C语言的数据类型中,构造类型包括:数组,__________和__________.
2.设x,y,z,t均为int型变量,则执行以下语句后,t的值为_________
x=y=z=1;
t=++x||++y&&++z;
3. C语言的运算符要确定的两个方面分别是__________和__________.
4. 在函数内使用static是_________,在函数外使用static是________。
5.对于语句:scanf("%3d%3d",&a,&b);,若输入123456,则a和b的值分别为_______和_______.
6.设有二维数组 inta[2][2],*p;,则a[I][j]三种其他表示是______________,
____________,___________。
7.字符串的长度是_________________,它的存储空间大小是_______。
8.静态变量赋初值是________赋值,动态变量赋初值是___________赋值。
9.链表中每个结点至少应包括二个部分,它们是__________和__________.
10.用数组名作函数参数时,形参和实参的结合是采用__________,因为数组名是
数组的__________.
三.程序分析题(20分)
1. 阅读下面程序,给出输出结果。
main( )
{ int i, j, k;
for(i=1; i<10; i++)
{ printf(“\n”);
if(i<=5)
{for(j=1; j<=i; j++)
{ for(k=1;k<=5-i;k++)
printf(“ ”);
printf(“* “); }
else
for (j=1; j<=10-i;j++)
{for(k=1;k<=i-5;k++)
printf(“ ”);
printf(“* ”);}}}
2. 阅读下面程序,指出函数所实现的功能。
void ins(char s[ ], int start, char t[ ])
{ int m, n,i,k;
n=0;m=0;
for(i=0;s[i]!=’\0’;i++) m++;
for(i=0;t[i]!=’\0’;i++) n++;
for(k=1 ; k
for(k=start;k
s[k]=t[k-start];
s[m+n]=’\0’;
}
3. 阅读下面程序,指出下面程序所完成的功能
void st(char *a [ ],int n )
{ int i,j,k;
char *m;
for(i=1; i
{ m=a[i]; k=i;
for (j=i+1; j<=n; j++)
if (strcmp(a[k],a[j])>0), k=j;)
m=a[i]; a[i]=a[k]; a[k]=m; }
for(i=1; i<=n; i++)
printf(“%s”, a[i]);}
4.分析以下程序:
#include “string.h”;
main()
{char c,string[81];
int i,a=0,b=0;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if (c==' ')a=0;
else if (a==0)
{a=1;b++;}
printf("%d\n",b);
}
该程序的作用是_________________.若输入:a b c,则程序运行后,输出结果为______,
且c的值为______,a的值为______.
5. 阅读下面程序,指出函数所实现的功能。
void lnsort(int L[ ],int n)
{int i,j;
for( i=2;i<=n;i++)
{L[0]=L[i];
j=i-1;
while(L[0]
{L[j+1]=L[j];
j--;
}
L[j+1]=L[0];
}
}
四.完成下列程序(20分)
1. 下面程序是查找学生的成绩,完成该程序。
main( )
{ void search (float (*p) [3], int i );
float score [4][3]={{75,78,82},{66,72,77},{85,90,81},{74,89,68}};
while (1)
{ scanf (“%d” &i );
if(___1____)break;
search(_____2_______);}}
void search (float (*p)[3],int i )
{ int k;
print (“The score of No %d are \n”,i );
for(_____3_______)
printf( “%5.2f”,_____4_________);}
2. 已知两个线性表的元素按非递减排列,合并两表得到一新表,仍然是按
非递减排列,两个线性表以-1为结束标志。以函数来完成该操作,函数如下,
完成所缺语句。
void LL(int la[ ], int lb[ ], int lc[ ] ) // la,lb是已知二表//
{ int pa, pb, pc;
pa=0 ; pb=0;pc=0;
if (la[pa]
else {________6__________}
while(_______7___________)
{ if (la[pa]<=lb[pb])
{ lc[pc]=la[pa]; __8___; __9___;}
else {____10_________}}
while (_____11________)
____12___;
while (____13________)
____14______;
}
3.在一数组里装数取数,从数组中所装的数的最后一项的下一个空单元装数,
从数组中所装的数的最後一个取数,取数后该单元成空单元,如果取数已到数
组空,-1表示未取到,以下是对数组的一次取数操作,函数值是所取的值,完成该
函数。
define MAX 100
int pop ( int s[ ] ,int top )
{ if (___15______) return (-1);
top = ___16________;
return (____17_______) ;}
4.在 n 行 n 列的矩阵中,每行都有最大的数,本程序求这 n 个最大数中的最小一个
[程序1.2]
#include〈stdio.h〉
#define N 100
int a[N][N];
void main()
{ int row ,col ,max ,min ,n;
/*输入合法 n (〈100 〉,和输入 n×n 个整数到数组 a 的代码略*/
for ( row = 0;row < n;row++) {
for ( max = a[row][0],col = l ;col < n;col++)
if (__18_) max = a[row][col];
if (__19__) min = max;
else if(__20__) min = max;
}
printf ("The min of max numbers is %d\n",min);
}
五. 编程题(50分)
1. 有函数f(x)=cos(x)可展开成:f(0)+f’(0)x/1!+f”(0)x /2!+…
编写函数程序求cos(x),使误差小于0.0000001。
2. 有一个链表,输出所有结点的数值,确定该链表的长度,并将链表的头结点
与尾结点连接.编写完成这样操作的函数。这里的结点定义为
typedef struct node {int data ;
struct node * next ; } Node ;
3.将一个整数a左循环移位n次,求位移后的这个数.写出子函数
4.写函数,将一个十进制数转换成一个十六进制数,并输出.
5. 如果有n个棋子,甲、乙两方轮流取棋子,每方至少取一个棋子,最多取m个棋子
谁最后取剩下的一个棋子,谁就输,如果甲方先取,请给出甲方赢的算法.(写出函数) |