2018 年江西东华理工大学 C 语言程序设计考研真题
一、选择题:(共 30 小题,1-20 每小题 1 分,21-30 每小题 2 分,共 40 分)
1.C 语言提供的合法关键字是( )
A.switch
B.cher
C. default
D. case
2.在 C 语言中,合法的字符常量是( )
A.′\084′
B. ′ab′
C. ′\x43′
D.′\0′
3.若已定义 x 和 y 为 double 类型,则表达式: x=1,y=x+3/2 的值是( )
A. 2.0
B.2
C.1
D.2.5
4.合法的数组定义是( )
A.int a[]=〃string〃;
B. char a[]={0,1,2,3,4,5};
C.char a=〃string〃;
D. int a[5]={0,1,2,3,4,5};
5.设 a 为整型变量,不能正确表达数学关系 10<a<15 的 C 语言表达式是( )
A. a>10&&a<15
B.a==11||a==12||a==13||a==14
C. 10<a<15
D.!(a<=10)&&!(a>=15)
6.若 t 为 double 类型,表达式 t=1,t+5,t++的值是( )
A. 2.0
B.6.0
C.1
D.1.0
7.若有定义和语句: char s[10];s=〃abcd〃;printf(〃%s\n〃,s);则结果是(以下 μ
代表空格)( )
A. 编译不通过
B.输出 a
C.输出 abcdμμμμμ
D. 输出 abcd
8.若有定义和语句:int **pp, *p, a=10, b=20;
pp=&p;p=&a;p=&b;printf(〃%d,%d\n〃,*p,**pp);则输出结果是( )
A.10,10
B. 20,20
C.20,10
D. 10,20
9.若有以下定义和语句: int u=010, v=0x10, w=10; printf(〃%d,%d,%d\n〃,u,v,w);则输
出结果是( )
A. 8,8,10
B.10,10,10
C. 8,16,10
D. D.8,10,10
10.若有以下定义和语句: char c1=′b′, c2=′e′; printf(〃%d,%c\n〃,c2-c1,c2-′a′
+′A′);则输出结果是( )
A.2,M
B.2,E
C. 3,E
D.输出项与对应的格式控制不一致,输出结果不确定
11.若有定义:int a[3][4];,( )不能表示数组元素 a[1][1]。
A.*(a[1]+1)
B. *(a+5)
C.(*(a+1))[1]
D. *(&a[1][1])
12.若 i、j 已定义为 int 型,则以下程序段中内循环体的总的执行次数是( )
for(i=5;i>0;i--)
for(j=0;j<4;j++){…}
A.30
B.24
C.25
D.20
13.若有以下定义和语句:
char *s1=〃12345〃,*s2=〃1234〃;
printf(〃%d\n〃,strlen(strcpy(s1,s2)));则输出结果是( )
A.9
B.5
C.4
D.10
14.若有以下定义和语句:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则不能表示 a 数组元素的表达式是( )
A.*p
B. a[p-a]
C.*a
D. a[10]
15.下面程序的输出结果是( )
A. k=2 a=3 b=2
B.k=3 a=3 b=2
C. k=3 a=2 b=3
D.k=2 a=2 b=3
16.下面程序的输出结果是( )
main( )
{unsigned a=32768; printf(〃a=%d\n〃,a);}
A.a=32768 B.a=-32767 C.a=32768 D.a=-1
17.执行下面语句后的输出结果为( )
int i=-1;
if(i<=0) printf(〃****\n〃);
else printf(〃%%%%\n〃)
A. 有语法错误,不能正确执行 B.%%%% C.%%%%c D. ****
18.对于条件表达式(M)?(a++):(a--),其中的表达式 M 等价于( )
A. M!=0
B.M==1
C. M==0
D.M!=1
19.下述程序段的输出结果是( )
int x=10; int 7nbspy=x++;printf(〃%d,%d〃,(x++,y),y++);
A.10,10
B.11,11
C.11,10
D.10,11
20.若有以下的定义:
int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为 3 的表达式是( )
A. p+=2,*++p B. p+=2,*(p++) C.p+=3,*p++ D.p+=2,++*p
21.假定所有变量均已正确说明,下列是程序段运行后 x 的值是( )
a=b=c=0;x=35;
if(!a) x--;
else if(b);
if(c) x=3;
else x=4;
A.34 B.3 C.35 D.4
22.在以下一组运算中,优先级最高的运算符是( )
A.<=
B.=
C. &&
D. %
23.若有以下定义和语句:
int w[2][3],(*pw)[3];pw=w;
则对 w 数组元素的非法引用是( )
A. pw[0][0]
B.*(pw+1)[2]
C. *(w[0]+2)
D.*(pw[1]+2)
24.若有以下程序片段: char str[ ]=〃ab\n\012\\\\〃;
printf(〃%d〃,strlen(str));上面程序片段的输出结果是( )
A.12
B.6
C.4
D.3
25.函数调用:strcat(strcpy(str1,str2),str3)的功能是( )
A.将串 str2 复制到串 str1 中后再将串 str3 连接到串 str1 之后
B.将串 str2 连接到串 str1 之后再将串 str1 复制到串 str3 中
C.将串 str1 复制到串 str2 中后再连接到串 str3 之后
D.将串 str1 连接到串 str2 之后再复制到串 str3 之后
26.以下对 C 语言函数的有关描述中,正确的是( )
A.C 函数既可以嵌套定义又可以递归调用
B.函数必须有返回值,否则不能使用函数
C.C 程序中有调用关系的所有函数必须放在同一个源程序文件中
D.在 C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
27.以下叙述中不正确的是( )
A.在 C 中,外部变量的隐含类别是自动存储类别
B.在 C 中,函数形参可以说明为 register 变量
C.在 C 中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
D.在 C 中,在调用函数时,实参和对应形参在类型上只需赋值兼容
28.设有以下定义或语句,则输出的结果是(用 small 模式编译,指针变量占 2 个字
节)( )
struct date
{long *cat; struct date *next; double dog;} too;
printf(〃%d〃,sizeof(too));
A.12 B.14 C.16 D.20
29.设有定义:struct sk{int a;float b;}data,*p;
若有 p=&data;,则对 data 中的 a 域的正确引用是( )
A.(*p).data.a B.p->data.a C.(*p).a D.p.data.a
30.以下对枚举类型名的定义中正确的是( )
A.enum a={〃one〃,〃two〃,〃three〃};
B.enum a{〃one〃,〃two〃,〃three〃};
C.enum a={one,two,three};
D.enum a{one=9,two=-1,three};
二、程序填空题:(每空 2 分,共 50 分)
11.下列算法为奇偶交换排序,思路如下:第一趟对所有偶数的 i,将 a[i]和 a[i+1]
进行比较,第二趟对所有奇数的 i,将 a[i]和 a[i+1]进行比较,每次比较时若
a[i]>a[i+1],将二者交换;以后重复上述二趟过程,直至整个数组有序。
void oesort (int a[],int n)
{ int flag,i,t;
do{
flag=0;
for(i=0;i
if(a[i]>a[i+1]) {flag= (2) ; t=a[i+1];a[i+1]=a[i];a[i]=t; }
for( (3) )
if (a[i]>a[i+1]){flag= (4) ; t=a[i+1];a[i+1]=a[i];a[i]=t; }
}while (5) ;
}
2. 下面是对有序表(递增)进行二分查找的递归算法(如果找到,返回起下标,否则
返回-1)。
int BSearch( ElemType A[ ],int low, int high, KeyType K )
{ if (low <= high)
{ int mid = (1) ;
if ( K= = A[ mid ].key ) return (2) ;
else if ( K > A[mid].key) return (3) ;
else return (4) ; }
else return (5) ;
}
3. 下面程序在数组 a 中查找与 x 值相同的元素所在位置。
void main( )
{ int a[11], i, x ;
printf( “输入 10 个整数:”);
for(i=0; i<10; i++) (1) ;
printf( “输入要找的数 x:”);
scanf( “%d”, (2) );
a[10]=x ; i=0;
while(x != (3) ) (4) ;
if( (5) ) printf( “与 x 值相同的元素位置是:%d\n “, i+1 );
else printf( “找不到与 x 值相同的元素!\n “);
}
4. Fibonacci 数列 A={1,1,2,3,5,8,…}有如下性质:
a(0)=a(1)=1 a(i)=a(i-1)+a(i-2) i>1
另外有一个数列 xn,该数列中各元素的值为: x(i)=a(i)/a(i+1) i=0,1,…,n
要求对 xn 中的元素按升序进行排序,然后以分数形式输出排序后的 xn。
例如 n=5 时,排序前的 xn={1/1,1/2,2/3,3/5,5/8},
排序后的 xn={1/2,3/5,5/8,2/3,1/1}。
make 函数首先生成排序前的 xn,然后调用函数 sort()进行排序,最后输出所求结果。
struct fact { long m,n; };
void sort(int n,struct fact *p)
{ int a; long s,t,u,v; struct fact *q,*end;
for(end=p+(n-1),a=1; (1) ;end--)
for(a=0,q=p; (2) ;q++)
{ s=q->m; t=q->n; u=(q+1)->m; v=(q+1)->n;
if( (3) )
{ q->m=u; (4) ; (5) ; (q+1)->n=t; a=1; }
}
}
void make(int n)
{ int i; long a,b,c; struct fact *x,*y;
x=(struct fact *)malloc(sizeof(struct fact)*n);
x->m=1; x->n=1;
for(a=1,b=1,i=2;i<=n;i++)
{ c= (6) ; a=b; b=c; (x+(i-1))->m=a; (x+(i-1))->n=b; }
(7) ;
printf("x%d={%d/%d",n,x->m,x->n);
for(y=x+1; (8) ;y++) printf(",%d/%d",y->m,y->n);
printf("}\n");
(9) ;
}
void main()
{ int n;
(10) ;
make(n);
}