logo资料库

2020年广西桂林理工大学C语言程序设计考研真题A卷.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
2020 年广西桂林理工大学 C 语言程序设计考研真题 A 卷 一、选择题(每小题 2 分,共 30 分) 1.以下( ) 是错误的整型常量。 A. -0xabcdef B. 018 C. 0x29 D. 011 2.为了判断两个字符串 s1 和 s2 是否相等,应当使用( )。 A. C. if(s1==s2) if(strcmp (s1,s2) == 1) B. D. if(s1=s2) if(strcmp(s1,s2) == 0) 3.以下scanf函数调用语句中错误的是 ( )。 B. D. scanf("%s", pup[1].name); scanf("%s", p->name); struct student { char name[20]; int age; }pup[5], *p; p=pup; A. C. scanf("%d", p->age); scanf("%d", &(p->age)); 4. 以下程序运行结果( )。 #include int main( ) { int sum=0,item=0; while (item<5) { item++; sum+=item; if(sum>=8) break; } printf("%d\n",sum) ; return 0; } A. 15 B. 10 C. 6 D. 9 5.下面程序段的运行结果是( )。 #include int main( ) { int i=0, a[]={3,4,5,4,3}; do{ a[i]++;
}while(a[++i]<5); for(i=0;i<5;i++) printf("%d ",a[i]); return 0; } A. 4 5 6 5 4 B. 3 4 5 4 3 C. 4 5 5 5 4 D. 4 5 5 4 3 6.以下程序的输出结果是( )。 #include int main( ) { int a[9]={1,2,3,4,5,4,3,2,1}; int *p,*q,i,x; p=&a[0]; q=&a[8]; for (i=0;i<=4;i++) if(*(p+i) == *(q-i) ) x=*(p+i)*2; printf("%d\n",x); return 0; } A. 2 B. 18 C. 10 D. 不确定 7.以下程序段的运行结果是( )。 #include int main( ) { int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i; for(i=0;i<4;i++) p[i]=&a[i*3]; printf("%d\n",p[3][2]); return 0; } A. 11 B. 12 C. 8 D. 9 8.要把一个函数计算结果的两个整型数据返回给主调函数,在下面的方法中不正确的 是( )。 A. 用两个return语句 C. 形参用两个整型的指针 B. 形参用数组,该数组包含两个整型数据 D. 用两个整型全局变量 9.若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a, i=3; 则对a数组元素不正确 的引用是 ( A.a[p-a] )。 B.p[i] C.*(&a[i]) D.a[p+a] 10.下列程序段的输出结果是( )。 #include #include
int main( ) { char s[20]="abcd",*p2="ABCD",str[50]="xyz"; strcpy(str+2, strcat(s+2,p2+1)); printf("%s\n", str); return 0; } A. xyabcAB B. abcABz C. ABabcz D. xycdBCD 11.若有定义:int a=7; double x=2.5,y=4.7; 则表达式 x+a%3*(int)(x+y)%2/4 的 值是( )。 2.500000 A. B. 2.750000 C. 3.500000 D. 0.000000 12.对于语句 int *p[10]; ,以下说法正确的是( )。 A. p 是一个指针,指向一个数组,数组的元素是整型数据 B. p 是一个指针,指向一个数组,数组中有 10 个整型数据 C. p 是一个数组,它的每一个元素是指向整型数据的指针 D. p 是一个数组,它的每一个元素是指向 10 个整型数据的指针 13.下面程序的输出结果是( )。 #include #include int main ( { ) int i; char *s= "abcd"; for ( i=0 ; i
} 主函数中定义变量 int a, b; 调用函数的语句为 swap(&a, &b) A. 程序有错,调用语句应为 swap(a, b); B.程序有错,函数 swap 缺少 return 语 句 C. 程序有错,应将 swap 函数中的形参 x,y,局部变量 t 定义为整型指针类型,执行语 句不变 D. 以上说法都不正确 二、填空题(每空 2 分,共 30 分) 1. 在 C 语言中存储字符串 "abcdef" 至少需要( )个字 节。 2. 用if语句实现与以下赋值语句 k=a>b?(b>c?1:0):0;一样的功能, 对应的if语句为 ( )。 3. 在C程序中有自定义函数f,函数首部为:void f(int *x),主函数中有数组定义 为 int a[5] , 以 数 组 a 为 实 参 , 则 调 用 该 函 数 的 语 句 为 ( )。 4. 使用malloc函数,分配能够存储4个double数据的内存空间,并将起始地址赋值给 指 针 变 量 p , 变 量 p 已 经 定 义 : double *p; 相 应 的 赋 值 语 句 是 ( )。 5. 以下程序的输出结果是( )。 #include #define PT 5.5 #define S(x) PT*x*x int main( ) { int a=1,b=2; printf("%.1f\n" ,S(a+b)); return 0; } 6. 如 果 指 针 fp 所 指 向 的 文 件 未 结 束 , 函 数 feof(fp) 的 返 回 值 为 ( )。 7. 若有以下定义: struct link{ int data; struct link *next; }*head, *p; 并已建立如下图所示的链表结构,第 1 个结点为 10 所在结点,第 2 个结点为 30 所在 结点。 head 10 | next 30 | next … data|NULL 指针 P 指向如下结点: p 20 | next
则能够把 p 所指结点插入到链表中,成为链表第 2 个结点的程序段是 ( )。 8.下列程序的输出结果是( #include )。 int main( ) { int i; for(i=0;i<3;i++) switch(i) { case 1: printf("%d",i); case 2: printf("%d",i); default: printf("%d",i); 函 数 的 功 能 是 ) 。 } return 0; 9. 以 } 下 ( int function(char *x) { char *p=x; while(*p++); return(p-x-1); } 10. 若 有 定 义 : int a=10,b=8,c; 则 执 行 语 句 c=(a&b)>>2; 变 量 c 的 值 为 ( )。 11. 以下程序的功能是统计输入的字符串中数字字符的个数并输出,输入换行符时结 束,请分析程序并填空。 #include int main( ) { int n=0; char c; while ( if ( n++; printf("n=%d\n",n); return 0; } ) ) 12. 函数 fun 的函数首部为:int fun(int i,int j)且函数指针变量 P 定义如下: int ( *P )( int i , int j ); 则 使 指 针 P 指 向 函 数 fun 的 赋 值 语 句 是 ( )。
13. 若 有 定 义 结 构 体 及 函 数 定 义 如 下 , 函 数 fun 所 实 现 的 功 能 是 ( )。 struct node{ int data; struct node *next; }; void fun(struct node *head) { struct node *p=head; while(p) { if ((p->data%)%2) printf("%d",p->data); p=p->next; } } 14. 有以下语句,执行之后变量 k 的值是( )。 int a[5]={2,4,6,8,10},*p, k; p=&a[2]; k=*(--p); 三、程序阅读题。 (每小题 5 分,共 30 分) 1. 写出以下程序的输出结果。 #include int main( ) { x, y; int for(x=30, y=0; x>=10, y<10; x--, y++) x/=2, y+=2; printf("x=%d,y=%d\n",x,y); return 0; } 2. 请写出以下程序的运行结果。 #include int z=0; void f(int *x, int y) { ++*x; y--; z=*x+y+z; printf("%d %d %d\n",*x,y,z); } int main( )
{ } int x=1, y=5,z=9; f(&x,y); printf("%d %d %d\n",x,y,z); return 0; 3. 阅读以下程序,说明函数 f 实现的功能是什么,并写出主函数运行后的输出结果。 #include void f(int *a,int n) { int i,t; for(i=0;i int f(int *a,int n) { if(n>1) return a[0] + f(&a[1],n-1); else return a[0]; } int main( ) { int aa[ ]={1,2,3,4,5},s; s=f(&aa[0],sizeof(aa)/sizeof(int)); printf("%d\n",s); return 0; } 5. 请写出以下程序的运行结果。 #include int fun(int k) { static int a=0;
a+=k; return a; } int main( ) { int i,s=0; for (i=1; i<=4; i++) s=s+fun(i); printf("s=%d\n",s); return 0; } 6. 请写出下列程序的运行结果。 #include #include int main( ) { char ch[3][5]={"135","246","789"},*p[3]; int i,j,s=0; for(i=0;i<3;i++) p[i]=ch[i]; for(i=0;i<3;i++) for(j=0;p[i][j]>='0'&&p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0'; printf("%d\n",s); return 0; } 四、编程题。 1,2,3 小题每小题 10 分,4,5 小题每小题 15 分,共 60 分。 1. 黑洞数也称为陷阱数,又称“Kaprekar 问题”,是一类具有奇特转换特性的数。任 何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到 495。最后 所得的 495 即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大 数减去重排后的最小数。例如,对三位数 207:第 1 次重排求差得:720 - 27 = 693; 第 2 次重排求差得:963 - 369 = 594;第 3 次重排求差得:954 - 459 = 495;编 写程序,实现如下功能:输入一个三位整数,输出将其转换为黑洞数的过程,输入输出 格式为: 输入: 207 输出: 1:720-27=693 2:963-369=594 3:954-459=495 如果输入的三位数字全部相同,则只输出一次重排求差过程,值为 0 就停止。 2. 编写一个函数,实现字符串的复制,函数首部定义为:char * str_copy(char *d, char *s) 函数功能为:将第二个参数 s 所表示的字符串复制到第一个参数 d 所表示的字符串中, 函数返回值为第一个参数的值。请写出完整的函数,并写出主函数,对该函数进行验
分享到:
收藏