logo资料库

2019年湖北武汉科技大学C语言程序设计考研真题及答案.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
2019 年湖北武汉科技大学 C 语言程序设计考研真题及答案 一、选择题(共 15 小题,每小题 2 分,共 30 分) )。 total C)char D)stu-code B)unsigned long int C)_var long )。 1. 以下均是合法变量名的是( B)node value_max A)#name 2. 以下选项中不属于 C 语言类型的是( A)short int 3. 若有声明语句:int x; char y[20]; double z; 则正确的输入语句是( A)scanf(“%d%c%le\n”,&x,&y,&z); C)scanf(“%d%s%lf”,&x,y,&z); 4. 若 a、b 和 t 都为 int 变量,则下面不能交换变量 a 和 b 值的是( A)t=a; a=b; b=t; C)t=b; b=a; a=t; 5. 若有定义:int a=1,b=2; float x=3,w; 则合法的 switch 语句是( A)switch(a) B)scanf(“%2d%s%lf”,&x,&y,&z); D)scanf(“%x%s%3.2f”,&x,y,&z); )。 B)a=t; t=b; b=a; D)a=a+b; b=a-b; a=a-b; B)switch(b) D)bool )。 a+b )。 { case 1: w=a/b; case 2: w=a%b; break; break; } C)switch (x) { case 1: case 2: D)switch(a+b); z=a%b; z=a/b; break; } { case 2: case 1: w=a%b;break; w=a/b; break; } { case 3: case 2: w=a%b; break; } 6. 对下述程序段的描述正确的是( )。 scanf("%d,%d",&a,&b); if(a>b) printf("a=%d,b=%d",a,b); a=b; b=a; else a++; b++; )。 B)若输入 5,4 则输出 a=4,b=5 D)有语法错误,不能通过编译 A)若输入 4,5 则输出 a=5,b=6 C)若输入 5,4 则输出 a=5,b=5 7. 以下正确的描述是( A)从多层循环嵌套中退出时,只能使用 break 语句。 B)在循环体内使用 continue 和 break 语句,作用相同。 C)只能在循环体内和 switch 体内使用 break 语句。 D)continue 语句的作用是结束整个循环的执行。 8. 如果有定义:int x=0,s=0; 则下面程序段的执行结果是( )。 while(!x != 0) printf(“%d”,s); s+=x++; B)0 C)无限循环 D)控制表达式非法,无法编译 A)1 9. 下面各语句中,能正确进行字符串操作的语句是( A)char a[10]={'A','B','C','D','\0'}; C)char *p; 10. 以下能对数组 value 进行正确初始化的语句是( A)int value[2][ ]={{1,1},{2,2}}; C)int value[2][3]={1,2,3,4,5,6}; 11. 函数 fun 和实参数组的声明形式为:void fun(char ch,float x[]); float a[5]; B)int value[ ][3]={{1,,3},{4,5,6}}; D)int value[ ][3]={{1},{4,6,}}; B)char a[10]; D)char *s; scanf(“%s”, s); *p="ABCDE"; a="ABCDE"; )。 )。
)。 C)fun('65',2.8); 以下对函数的调用语句中,正确的是( A)fun("a",a[]); B)t=fun('D',a); 12. 设有定义 int a[3][3];和函数调用语句 sort(a,3); 则正确的函数声明是( A)void sort(int a,n); C)void sort(int a[][3],int n); 13. 有函数定义:int func(int *p),x 和 y 是 int 型变量,则( A)y=func(x); 14. 已知书籍结构定义如下,则对结构变量 bk 的正确赋值是( B)void sort(int a[][],int n); D)void sort(int a[][3],n); D)y=func(&x); C)func()=x; B)func(x); )。 D)fun(32,a[5]); )是正确的调用。 )。 int year,month,day; }publish; } bk; struct { struct BOOK{ A)bk.year=1998; B)publish.year=1998; C)year=1998; D)bk.publish.year=1998; 15. 对于以下定义,能打印出字母 h 的语句是( month=11; day=11; bk.month=11; publish.month=11; publish.day=11; bk.day=11; )。 bk.publish.month=11; bk.publish.day=11; struct person{ char title[20]; struct person book[5]={"Physics",17,"Math",18,"English",20,"History",18}; int code; }; A)printf("%c",book[0].title[1]); C)printf("%c",book[2].title[7]); B)printf("%c",book[1].title[4]); D)printf("%c",book[3].title[6]); 二、判断题(共 10 小题,每小题 2 分,共 20 分) 1. C 语言规定,在一个源程序中,main 函数的位置必须在最开始。 2. 表达式 s1= =s2 可以用来判断字符串 s1 与字符串 s2 是否相等。 3. C 语言中一个变量只能定义一次。 4. C 语言本身没有输入输出语句。 5. 函数调用时,函数名必须与所调用的函数名字完全一致。 6. 对结构变量 s 中成员 age 的引用可以采用表达式 s.age。 7. 在 C 语言中,形参是虚拟的,不占存储单元。 8. 全局变量和静态变量的初值是在编译时指定的。 9. 语句 fp=fopen("a:\aa.dat","ab");中变量 fp 的正确定义为:FILE *fp; 10. 若有定义:int a[4][5]; 则表达式 a+3 表示 a 数组第 3 行的首地址。 三、读程序写出程序运行结果(共 4 小题,每小题 5 分,共 20 分) 1. void main( ) { //输入:abcAxyz 回车 char ch=0; while((ch=getchar())!='\n') { if(ch>='a'&&ch<='z'){ printf("%c\n",ch); ch-=30; if(ch>'Z') ch-=26; } } } 2. void main( ) { char *name[4] ={"Tom","Mike","John","Wang"}, *p=name[0]; int i; for(i=0;i<4;p=name[++i]) printf("%c",*p);
} 3. int fun(int arr[],int m,int n) { int i,j,s=0; for(i=0;iarr;p--) *arr=array_end; m--; *p=*(p-1); move(arr,n,m); } void main() { int i,number[10]={1,3,5,7,9,2,4,6,8,10}; move(number,10,8); for(i=0;i<10;i++) printf("%d",number[i]); } 四、程序填空题(共 15 个空,每空 2 分,共 30 分) 1.以下程序为输出所有的水仙花数(3 位数中各位上数字的立方和等于三位数自身)。 ; void main(void) int i,s,n,t { for ( i=100 ; i<1000 ; i++ ) n = i ){ t=n%10; s=s- ③ ; ② ① ; ; ➄ ) printf(″%d″, i ); { s = while ( if ( ➃ ; } } } 2. 下面排序算法的思想是:第一趟比较将最小的元素放在 r[0]中,最大的元素放在 r[n-1] 中,第二趟比较将次小的放在 r[1]中,将次大的放在 r[n-2]中,…,依次下去,直到待 排序列为递增序。 void sort(int r[],int n) { int i=0,j,t,min,max; while( { min=max=i; ① )
② ;++j) ) min=j; else if(r[j]>r[max]) max=j; } ) { t=r[min]; r[min]=r[i]; r[i]=t; } if( for (j=i+1; { ③ if( if(max!=n-i-1) { if( ➃ ➄ ) { t=r[min];r[min]=r[n-i-1]; r[n-i-1]=t; } else { t=r[max]; r[max]=r[n-i-1]; r[n-i-1]=t; } } i++; } }//sort 3. 下面函数用来删除结点类型为 intnode 的链表中结点数据域值为 x 的一个结点。 { struct intnode int deletenode( { intnode struct intnode *next; }; int data; ① *p=*headp, *last; , int x) struct while( ② if( { ➃ ) { last=p; ③ ; } ) if(p==*headp) free(p) ; *headp=p->next; else ➄ ; return(1); } else return(0); } 五、程序设计题(共 4 小题,前 2 小题各 10 分,后 2 小题各 15 分,共 50 分) 1. 设计程序:从键盘输入一个三位整数,然后将该三位整数的各位数字重新排列,输出重 新排列后的最大的三位整数。 2. 在数组 a 中含有 n 个整数,函数 fun 的功能是找出数组 a 中没有出现的最小正整数。例 如,数组 a 为{-8,5,1,3},则未出现的最小正整数是 2;又如数组 a 为{1,3,2},则未 出现的最小正整数是 4。 请采用尽量高效的算法完成函数 fun,其返回值就是未出现的最小正整数。 int fun(int a[], int n) 3.设计程序完成:在主函数中首先输入平面上 N(由键盘输入)个点的坐标(x,y),接着 调用 Distance 函数计算各点与原点的距离,然后调用 Sort 函数对所有点按与原点的距离从 大到小排序,最后调用函数 Output 输出排序后各点的坐标及距原点的距离。平面上的点用 结构体 Point 实现。各函数的声明如下: void void void Distance(struct Point p[], int n); // 计算 n 个点与原点的距离 Sort(struct Point p[], int n); //排序 Output(struct Point p[], int n); //输出 4. 二叉排序树采用二叉链表存储,结点包含左孩子指针 left,右孩子指针 right 和整数 data 其定义为:struct Node{ 请设计如下非递归算法 SortTree 按照从大到小输出非空二叉排序树所有结点的数据。 int data; struct node *left, *right; }; void SortTree(struct Node *root) 答案 一、选择题(共 15 小题,每小题 2 分,共 30 分)
BDCBA DCBAC BCDDA 二、判断题(共 10 小题,每小题 2 分,共 20 分) ⅩⅩⅩ√√ √Ⅹ√√√ 三、读程序写出程序运行结果(共 4 小题,每小题 5 分,共 20 分) 1.CDEAZAB 2.TMJW 3.t=32 4.57924681013 四、程序填空题(共 15 个空,每空 2 分,共 30 分) ②n ②jdata!=x; ③p=p->next ③t*t*t ③r[j]next=p->next ➃n=n/10 ➃min!=i ➄i==0 ➄max==i 五、程序设计题(共 4 小题,前 2 小题各 10 分,后 2 小题各 15 分,共 50 分) 1. #include int main() { c=n%10; b=n/10%10; int n,a,b,c,t,m; scanf("%d",&n); a=n/100; if(a0&&a[i]<=n) b[a[i]-1]=1; } } 3. #include #include struct Point{ void Distance(struct Point p[],int n) { int i; double x,y,dis; }; for(i=0;i
} void Sort(struct Point p[],int n) { int i,j; struct Point t; for(i=0;i0) { stack[top++]=p; p=stack[--top]; printf("%d",p->data); p=p->leftt; while(p){ stack[top++]=p; } } p=p->right; } p=p->right; }
分享到:
收藏