桂林理工大学2021年硕士研究生入学考试试题
考试科目代码:877
考试科目名称:C语言程序设计(A卷)
(总分150分,三小时答完)
考生注意:1.请将答题写在答卷纸上,写在试卷上视为无效。
2.考试需带 ╳╳╳ 用具
一 、选择题(每小题2分,共30分)
1.若变量已正确定义并赋值,符合C语言语法的表达式是 ( )。
A.a=20++ B.a=5,6,7 C.a=a+2=3 D.a=12.5%4
2.若有“int a=1,b=1; ”,则循环语句“while(a<20) b++; a++;”的循环执行( )。
A.20次 B.21次 C.无限次 D.19次
3.在程序中可以用来作为变量名的合法标识符是( )。
A.switch B.stu_a C.2a1 D.buy?
4.有以下代码,当输入数据的形式为10,20,30回车,正确的输出结果为( )。
#include <stdio.h>
int main( )
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z );
printf("%d" ,x+y+z);
return 0;
}
A.60 B.10 C.30 D.不确定值
5.C语言中函数返回值的类型是由( )决定的。
A.return语句中的表达式类型 B.调用该函数的主调函数的类型
C.调用函数时临时决定 D.定义函数时所指定的函数类型
6.以下说法正确的是( )。
A.char *a= "123456"; 等价于 char *a; *a= "123456";
B.char str[10]={ "123456"}; 等价于 char str[10]; str[ ]={ "123456"};
C.char *s= "123456"; 等价于 char *s; s= "123456";
D.char c[7]= "123456", d[7]= "123456"; 等价于 char c[7]=d[7]= "123456";
7.以下程序的输出结果是( )。
#include <stdio.h>
void fun (int a,int b,int c)
{ a=1; b=2; c=a+b; }
int main( )
{ int x=10, y=20,z=60;
fun (x,y,z);
printf("%d,%d,%d",x,y,z);
return 0;
}
A.10,20,30 B.10,20,60 C.1,2,3 D.1,2,6
8.以下程序的输出结果是( )。
#include <stdio.h>
int main( )
{ char *s[]={"one","two","three"},*p;
p=s[2];
printf("%c,%s",*(p+1),s[0]);
return 0;
}
A. t,two B.h,one C.r,two D. o,three
9.若有以下定义,则*(p+6)表示( )。
int a[10],*p=a;
A.元素a[7]的地址 B.元素a[7]的值 C.元素a[6]的地址 D.元素a[6]的值
10.以下程序的输出结果是( )。
#include <stdio.h>
int main( )
{ char *s="1314"; int v1=0,v2=0,v3=0,v4=0,k;
fo r(k=0; s[k]; k++)
switch(s[k])
{ case '1': v1++;
case '3': v3++;
case '2': v2++;
default: v4++;
}
printf("v1=%d,v2=%d,v3=%d,v4=%d",v1,v2,v3,v4);
return 0;
}
A.v1=2,v2=0,v3=1,v4=1 B.v1=2,v2=3,v3=3,v4=4 C.v1=1,v2=3,v3=1,v4=4 D.v1=4,v2=2,v3=3,v4=1
11.有如下变量定义,char s[ ]="12012";,则sizeof(s),strlen(s)的值分别为( )。
A. 5 6 B. 6 5 C. 3 4 D. 4 3
12.调用函数时,实参是一个数组名,则向函数传送的是( )。
A.数组首地址 B. 数组元素个数 C.数组每个元素的地址 D. 数组每个元素值
13.表达式 strcmp("abcdef", "ABCDEF") 的值是一个( )。
A.0 B.负数 C.正数 D.不确定的数
14.根据声明int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a; ,下列表达式错误的是( )。
A.(*p)++ B.p++ C. a++ D.*p++
15.以下程序的运行结果是( )。
#include <stdio.h>
void fun(int *s)
{ static int j=0;
do
{ s[j]=s[j]+s[j+1];
j++; } while(j<2);
}
int main()
{ int k,a[5]={1,2,3,4,5};
fo r(k=1;k<3;k++)
fun(a);
fo r(k=0;k<5;k++)
printf("%d",a[k]);
return 0;
}
A. 35756 B. 23445 C. 35745 D. 12345
二、填空题(每空2分,共30分)
1.设x都为整型变量,请写出描述“x是偶数”的表达式( )。
2.若m是一个三位数,则百位上的数字可表示为( )。
3.当整型变量a、b、c的值分别为9、6、3时,表达式f=a>b>c的值是 ( )。
4.已有如下程序语句:double x,y; scanf("%lf",&x); 请写出赋值语句,用条件表达式求出x的绝对值并赋值给变量y。( )
5.字符常量'B'在内存中所存放的是它的( )码。
6.设有如下定义:int a[10]={1,2,3},*p; p=&a[3]; 则p+2指向数组元素( )。
7.以下程序段的输出结果是( )。
int a=2,b=1,c=3;
if(a<b)
if(b>0)
c=0;
else
c++;
printf("c=%d",c);
8.整型变量a、b的值分别为10、3,语句printf("%d/%d=%d",a,b,a/b);输出结果为( ) 。
9.若有以下定义:
struct node{
int data;
struct node *next;
}*head, *p;
并已建立如下图所示的链表结构,第1个结点为1所在结点,第2个结点为3所在结点。
1 | next
3 | next
100|NULL
head …
请写出将第2个结点的data值更新为2的程序段( )。
10.以下程序的输出结果是( )。
#include<stdio.h>
int main( )
{ int a[3][3],*p,i;
p=&a[0][0];
fo r(i=0;i<9;i++)
*p++=i;
fo r(i=0;i<3;i++)
printf("%d",a[2][i]);
return 0;
}
11.以下程序段的功能为求1—1000之间的所有偶数之和,并将和保存至变量sum中,请在横线上填上合适的语句,将程序补充完整。
int sum,i;
fo r (i=0; i<=1000; )
sum=sum+i;
12. 以下程序的输出是( )。
#include <stdio.h>
struct stu{ int data; char flag;};
void func(struct stu *p)
{ p->data=100; p->flag='A'; return; }
int main()
{ struct stu mystu={90, 'B'};
func(&mystu);
printf("%d,%c", mystu.data, mystu.flag);
return 0;
}
13. 已知有如下结构体类型定义,变量声明,请写出语句,实现从键盘输入book_1中两个数据成员的值。( )
struct book
{
char bookname[20];
double price;
};
struct book book_1;
14.如果需要从被调用函数中返回一个函数值,则被调用函数中必须包含( )语句。
15.若函数f的参数类型依次为字符型指针,字符,整型,函数返回值为字符型指针,请写出函数f的函数首部( )。
三、程序阅读题(每小题5分,共30分)
1.请写出以下程序的运行结果。
#include<stdio.h>
int main()
{
int a[3][4],i,j;
fo r(i=0;i<3;i++)
{
fo r(j=0;j<4;j++)
{ a[i][j]=i*j;
printf("%4d",a[i][j]);}
printf("\n");
}
return 0;
}
2.请写出以下程序的运行结果。
#include <stdio.h>
#define N 5
int main()
{ int i;
int x1=1,x2=2;
fo r(i=1;i<=N;i++)
{ printf("%4d%4d",x1,x2);
if(i%2==0)
printf("\n");
x1=x1+x2;
x2=x2+x1;
}
return 0;
}
3.以下程序欲实现的功能是,输入整型变量n的值,n的值不超过30,求出n!并输出,请找出程序中的错误并改正。
#include <stdio.h>
int main()
{ int n,i,f;
scanf("%d",n);
fo r(i=0; i<=n; i++)
f=f*i;
printf("%d\n",f);
}
4.请写出以下程序的运行结果。
#include <stdio.h>
int w=3;
int fun(int k)
{ if(k==0)
return(w);
return(fun(k-1)*k);
}
int main()
{ int w=10;
printf("%d\n",fun(5)*w);
return 0;
}
5.请写出以下程序的运行结果。
#include <stdio.h>
int f(int a)
{ int b=1;
static int c=2;
b++; c++;
return(a+b+c);
}
int main()
{ int a=2,i;
fo r(i=0;i<3;i++)
printf("%4d",f(a));
}
6.阅读以下程序,说明函数f实现的功能是什么,并写出主函数运行后的输出结果。
#include <stdio.h>
int f(int *a,int n)
{ int i,s=0;
fo r(i=0;i<n;i++)
{
if (a[i]<=0)
continue;
s=s+a[i];
}
return s;
}
int main( )
{ int b[10]={1,-1,3,-3,5,-5,7,-7,9,-9}; int i,s=0;
printf("%d",f(b,8));
return 0;
}
四、编程题(1,2,3小题每小题10分,4,5小题每小题15分,共60分。)
1.编写程序计算以下求和式,n的值由键盘输入,以小数点后保留4位的形式输出s的值。
2.编写程序,实现功能:输入一个字符串(长度不超过80),对字符串进行如下处理:如果字符是大写字符,则用该字符对应的小写字符替换,如果字符是小写字符,则用该字符对应的大写字符替换,其他字符则保持不变,输出经过处理的字符串。如输入:abKY12,则输出为:ABky12。(说明:本题不允许使用string.h中的函数strlwr、strupr)
3.给定如下函数声明,double fun_pow(double x,int n);该函数的返回值为xn,并且该函数是一个递归函数。请将函数体补充完整,并写出主函数,调用函数fun_pow,求出210,并输出。(说明:本题不允许使用math.h中的函数pow)
4.编写一个函数,功能为求出整型数组中数据的最大值、最小值,要求:函数名为fun_array,数组大小由参数确定,其余参数以及函数返回值等请根据函数功能设计。并将以下主函数补充完整,调用函数fun_array,输出数组的最大值,最小值。(主函数中若需要增加变量,请自行定义声明)
#include <stdio.h>
int main()
{
int data[20],i;
fo r (i=0; i<20; i++)
scanf("%d",data+i);
……
}
5.编写一个函数,实现对一个整数加密处理,加密方法为:如果整数为负数,则加密之后结果为该数的绝对值;如果整数为非负数,加密方式将个位上的数字加6,如果超过10,则取个位上的数字。如-12,加密之后结果为12;356加密之后结果为352。函数名为fun_pass,参数及返回值请根据函数功能设计。编写主函数,实现如下功能:输入100个整数,调用函数fun_pass对这些数据进行加密处理,并将加密之后的数据,写入文件data.txt中。