江苏省高校计算机等级考试命题研究院
2009年春季江苏省二级c语言试题与答案
江苏省高校计算机等级考试2009年春季考试试题
第二部分 C程序设计
21.以下定义和声明中,语法均有错误的是____(21)_________
①int j(int x){}②int f(int f){} ③int 2x=1; ④struet for{int x;};
A.②③ B.③④ C.①④ D.①②③④
22.设有定义和声明如下:
#define d 2
int x=5;float Y =3.83;char c='d';
以下表达式中有语法错误的是_(22)______
A.x++ B.y++ C.c++ D.d++
23.以下选项中,不能表示函数功能的表达式是___(23)______。
A.s=(X>0)?1:(X<0)?-1:0 B.s=X<0?-1:(X>0?1:0)
C.s=X<=0?-1:(X==0?0:1) D.s=x>0?1:x==0?0:-1
24.以下语句中有语法错误的是____(24)______ 。
A.printf("%d",0e); B.printf("%f",0e2);
C.printf("%d",Ox2); D.printf("%s","0x2");
25.以下函数定义中正确的是___(25)_________ 。
A.double fun(double x,double y){}
B.double fun(double x;double Y){}
C.double fun(double x,double Y);{}
D.double fun(double X,Y){}
26.若需要通过调用f函数得到一个数的平方值,以下f函数定义中不能实现该功能的
是_____(26)______ 。
A.void f(double *a){*a=(*a)*(*a);}
B.void f(double a,double *b){*b=a*a;}
C.void f(double a,double b){b=a*a;}
D.double f(double a){return a*a;}
27.设有声明"int P[10]={1,2},i=0;",以下语句中与"P[i]=P[i+1],i++;"等价的
是____(27)_______。
A.P[i]=P[i++]; B.P[++i]=P[i];
C.P[++i]=P[i+1]; D.i++,P[i-1]=P[i];
28.已知有声明"char a[]="It is mine",*p="It is mine";",下列叙述中错误的是28 。 A.strcpy(a,"yes")和strcpy(p,"yes")都是正确的
B.a="yes"和p="yes"都是正确的
C.*a等于*p
D.sizeof(a)不等于sizeof(p)
29.已知有声明"int a[3][3]={0},*p1=a[1],(*p2)[3]=a;",以下表达式中与
"a[1][1]=1"不等价的表达式是29。
A.*(p1+1)=1 B.p1[1][1]=1
C.*(*(p2+1)+1)=1 D.p2[1][1]=1
30.设有结构定义及变量声明如下:
struct product
{char code[5];
float price;
}y[4]={"100",100}"
以下表达式中错误的是____(30)_____。
A.(*y).code[0]='2';
B.y[0].code[0]='2';
C.y->price=10;
D.(*y)->price=10;
二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分)
●基本概念
1.在一个C语言源程序中,必不可少的是(1) 。
2.若有声明"int x;"且sizeof(x)的值为2,则当x值为( 2 )时"x+1>x"为假。
3.若有声明"float y=3.14619;int x;",则计算表达式"x=y*100+0.5,Y=x/100.0"后y 的值是(3) 。
4.执行以下程序段中的语句"k=M*M+1"后k的值是(4)
#define N 2
#define M N+1
k=M*M+1:
●阅读程序
5.以下程序运行时输出结果是(5)
#include<stdio.h>
void main()
{double x[3]={1.1,2.2,3.3},Y;
FILE *fp=fopen("d:\\a.out","wb+");
fwrite(x,sizeof(double),3,fp)"
fseek(fp,2L*sizeof(double),SEEK_SET);
fread(&y,sizeof(double),1,fp)"
printf("%.1f",y);
fclose(fp)"
}
6.以下程序运行时输出结果是(6)。
#include<stdio.h>
void main()
{ int k=5,n=0;
while(k>0)
{ switch(k)
{ case 1:
case 3:n+=1;k--;break"
default:n=0;k--;
case 2:
case 4: n+=2;k--;break;
}
}
printf("%3d",n);
}
}
7.以下程序运行时输出结果是(7) 。
#include<stdio.h>
void change(int x,int Y,int *z)
{ int t;
t=x;x=y;y=*z;*z=t;
}
void main()
{ int x=18,y=27,z=63;
change(x,y,&z);
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
8.以下程序运行时输出结果是(8) 。
#include<stdio.h>
int f(int x,int y)
{retum x+y; }
void main()
{double a=5.5,b=2.5;
printf("%d",f(a,b));
}
9.以下程序运行时输出结果中第-行是 (9) ,第三行是(10) 。 #include<stdio.h>
define N 5
void main()
{ static char a[N][N];
int i,j,t,start=0,end=N-1;
char str[]="123",ch;
for(t=0;t<=N/2;t++)
{ ch=str[t];
for(i=j-start;i<end;i++)a[i][j]=ch;
for(j=start;j<end;j++)a[i][j]=ch;
for(i=end;i>start;i--)a[i][j]=ch;
for(j=end;j>start;j--)a[i][j]=ch;
if(start==end) a[start][end]=ch;
start++,end--;
}
for(i=O;i<N;i++)
{ for(j=0;j<N;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
10.以下程序运行时输出结果中第一行是(11),第二行是(12)。 #include<stdio.h>
void fun(int x,int P[],int *n)
{ int i,j=O;
for(i=1;i<=x/2;i++)
if(x%i==0)p[j++]=i;
*n=j:
c语言while语句流程图}
void main()
{int x,a[10],n,i;
fun(27,a,&n);
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n%5d",n);
}
11.以下程序运行时输出结果是(11) 。
#include<stdio.h>
#include<ctype.h>
int count(char s[])
{ int i=0;
if(s[i]=='\0') return 0;
while(isalpha(s[i]))i++;
while(!isalpha(s[i])&&s[i]!='\O')i++;
return 1+count(&s[i]);
}
void main()
{char line[]="one world,one dream.";
printf("%d",count(line));
} .
12.以下程序运行时输出结果中第一行是 (14) ,第二行是(15)
#include<stdio.h>
int fun(char *a,char *b)
{int m=0,n=0:
while(*(a+m)!='\0')m++;
while(b[n])
{ *(a+m)=b[n];m++;n++; }
*(a+m)='\0';
return m;
}
void main()
{char s1[20]="yes",s2[5]="no";
printf("%d\n",fun(s1,s2));
puts(s1);
}
13.以下程序运行时输出结果中第-行是 (16) ,第二行是 (17) ,第三行是( 18 ) #include<stdio.h>
typedef struct{int x;int y;}S;
void fun(S pp[],int n)
{int i,j,k;S t;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if((pp[j].x<pp[k].x)||(pp[j].x==pp[k].x&&pp[j].y<pp[k].y))
k=j;
if(k!=i)
{t=pp[i];pp[i]=pp[k];pp[k]=t;}
}
}
void main()
{S a[5]={{3,2},{3,1},{1,2},{2,4},{2,3}};
int i,n=5;
fun(a,n);
for(i=0;i<n;i++)
printf("%d,%d\n",a[i].x,a[i].y);
} .
●完善程序
14?以下程序求一组整数的最大公约数。试完善程序以达到要求的功能。
#include<stdio.h>
int gcd(int a,int b) i
{int r;
while(_____(19)_______)
{r=a%b;a=b;(_____20_____);}
return a;
}
void main()
{int x,i,a[6]={12,56,48,32,16,24};
x= (___21_____) ;
for(i=1;i<6;i++)
x=gcd(___(22)_____,a[i]);
printf("(%d,",a[O]);
for(i=1;i<5;i++)
printf("%d,",a[i]);
printf("%d)=;d\n",a[5],x);
}
15.以下程序完成两个长正整数的加法运算并输出计算结果。函数add模拟手工加法运算的过程,将a和b指向的数组中存储的两个以字符串形式表示的n位正整数相加,并将运算结果以字符串形式保存到c指向的数组中。main函数中pl和p2数组分别存放被加数字符串和加数字符串,p3数组存放运算结果字符串。若p1中的字符串为"1000000001"、p2中的字符串为"9000000009",调用add函数后p3得到的是以字符串表示的这两个整数相加的结果"10000000010"。试完善程序以达到要求的功能。
#include "stdio.h"
#include "string.h"
void add(char a[],char b[],char c[],__(23)____)
{int i,k;
c[n]='\0';k=0;
for(i=n-1;i>=0;i--)
{c[i]=(a[i]-'O')+(b[i]-'0')+k;
k=______(24)______;
c[i]=c[i]%10+'0';
}
if(k)
{for(i=n+1;i>O;i--)
c[i]=___(25)____;
c[i]=k+'0';
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论