南京林业大学2003年C程序设计考研试题 | |||||||||
---|---|---|---|---|---|---|---|---|---|
http://www.sina.com.cn 2005/11/18 12:44 海文学校 | |||||||||
一. 选择题(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个棋子 谁最后取剩下的一个棋子,谁就输,如果甲方先取,请给出甲方赢的算法.(写出函数) 更多信息请访问:新浪考研频道 |