2005年4月计算机二级C语言真题(二)【附答案】
PDF版下载(非扫描): 2005年4月计算机二级C语言真题
if(a%2= =1)
{a+ =5; continue;}
a=3;
}
printf("%d\n",b);
}
A)3 B)4
C)5 D)6
(42)下列程序的输出结果是( )。
main( )
{ char s[ ]="159",*p;
p=s;
printf("%c",*p+ +);
printf("%c",*p+ +);
}
A)15 B)16
C)12 D)59
(43)有下列函数:
fun(char *a,char *b)
{ while(*a! ='\0')&&(*b! = '\0')&&(*a= =*b)}
{ a+ +; b+ +;}
return(*a-*b);
}
该函数的功能是( )。
A)计算a 和b 所指字符串的长度之差
B)将b 所指字符串复制到a 所指字符串中
C)将b 所指字符串连接到a 所指字符串后面
D)比较a 和b 所指字符串的大小
(44)有下列程序:
main( )
{ int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i+ +)
{ for(j=0;j<i;j+ +)
printf("%4c",' ');
for(j=__;j<4;j+ +)
printf("%4d",num[i][j]);
printf("\n");
}
}
若要按下列形式输出数组右上半三角。
1 2 3 4
6 7 8
11 12
16
则在程序下划线处应填入的是( )。
A)i-1 B)i
C)i+1 D)4-i
(45)下列程序的输出结果是( )。
point(char*p){ p+ =3; }
main( )
{ char b[4]={'a','b','c','d'},*p=b;
point(p); printf("%c\n",*p);
}
A)a B)b
C)c D)d
(46)程序中若有下列说明和定义语句:
char fun(char *);
main( )
{ char *s="one",a[5]={0},(*f1)( )=fun,ch;
…
}
下列选项中对fun()函数的正确调用语句是( )。
A)(*fl)(a); B)*fl(*s);
C)fun(&a); D)ch=*fl(s);
(47)有下列结构体说明和变量定义,如图所示,指针p、q、r 分别指向此链表中的三个连
续结点。
struct node
{ int data;
struct node *next;
}*p,*q,*r;
现要将q 所指结点从链表中删除,同时要保持链表的连续,下列不能完成指定操作的
语句是( )。
A)p->next=q->next; B)p-next=p->next->next;
C)p->next=r; D)p=q->enxt;
(48)下列对结构体类型变量td 的定义中,错误的是( )。
A)typedef struct aa B)struct aa
{ int n; { int n;
float m; float m;
}AA; }td;
AA td; struct aa td;
C)struct D)struct
{ int n; { int n;
float m; float m;
}aa; }td;
struct aa td;
(49)下列与函数fseek(fp,0L,SEEK_SET)有相同作用的是( )。
A)feof(fp) B)ftell(fp)
C)fgetc(fp) D)rewind(fp)
(50)有下列程序:
#include <stdio.h>
void WriteStr(char *fn,char *str)
{ FILE *fp;
fp=fopen(fn,"w"); fputs(str,fp); fclose(fp);
}
main( )
{ WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程序运行后,文件t1.dat 中的内容是( )。
A)start B)end
C)startend D)endrt
二、填空题(每空2 分,共40 分)
(1)某二叉树中度为2 的结点有18 个,则该二叉树中有【1】个叶子结点。
(2)在面向对象方法中,类的实例称为【2】。
(3)诊断和改正程序中错误的工作通常称为【3】。
(4)在关系数据库中,把数据表示成二维表,每一个二维表称为【4】。
(5)问题处理方案正确而完整的描述称为【5】。
(6)下列程序运行时若从键盘输入:10 20 30<CR>。输出结果是【6】。
#include <stdio.h>
main( )
{ int i=0, j=0, k=0;
scanf("%d%*d%d",&i,&j,&k); printf("%d%d%d\n",i,j,k);
}
(7)下列程序运行后的输出结果是【7】。
#define S(x) 4*x*x+1
main( )
{ int i=6, j=8;
printf("%d\n",S(i+j)); }
(8)下列程序运行后的输出结果是【8】。
main( )
{ int a=3,b=4,c=5,t=99;
if(b<a&&a<c)t=a;a=c;c=t;
if(a<c&&b<c)t=b,b=a,a=t;
printf("%d%d%d\n",a,b,c); }
(9)下列程序运行后的输出结果是【9】。
main( )
{ int a, b,c;
a=10; b=20; c=(a%b<1)‖(a/b>1);
printf("%d %d %d\n",a,b,c);
}
(10)下列程序运行后的输出结果是【10】。
main( )
{ char c1,c2;
for(c1='0',c2='9';c1<c2;c1+ +,c2--) printf("%c%c",c1,c2);
printf("\n");
}
(11)已知字符A 的ASCII 代码值为65,下列程序运行时若从键盘输入:B33<CR>。则输
出结果是 【11】。
#include <stdio.h>
main( )
{ char a,b;
a=getchar( );scanf("%d", &b);
a=a-'A'+'0'; b=b*2;
printf("%c %c\n",a,b);
}
(12)下列程序中,fun()函数的功能是求3 行4 列二维数组每行元素中的最大值。请填空。
void fun(int, int, int(*)[4],int*);
main( )
{ int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
fun(3,4,a,b);
for(i=0;i<3;i+)printf("%4d",b[i]);
printf("\n"); }
void fun(int m, int n, int ar[ ][4], int *br)
{ int i, j, x;
for(i=0;i<m;i+ +)
{ x=ar[i][0];
for(j=0;j<n;j+ +)
if(x<ar[i][j]) x=ar[i][j];
【12】=x;
}
}
(13)下列程序运行后的输出结果是【13】。
void swap(int x,int y)
{ int t;
t=x;x=y;y=t;printf("%d %d ",x,y); }
main( )
{ int a=3,b=4;
swap(a,b); printf("%d %d\n",a,b);
}
(14)下列程序运行后的结果是【14】。
#include <string.h>
void fun(char *s, int p, int k)
{ int i;
for(i=p;i<k-1;i+ +) s[i]=s[i+2]; }
main( )
{ char s[ ]="abcdefg";
fun(s,3,strlen(s)); puts(s);
}
(15)下列程序运行后的输出结果是【15】。
#include <string.h>
main( )
{ char ch[ ]="abc",x[3][4]; int i;
for(i=0;i<3;i+ +) strcpy(x[i],ch);
for(i=0;i<3;i+ +) printf("%s",&x[i][i]);
printf("\n");
}
(16)下列程序运行后的输出结果是【16】。
fun(int a)
{ int b=0; static int c=3;
b+ +; c+ +;
return(a+b+c);
}
main( )
{ int i, a=5;
for(i=0;i<3;i+ +)printf("%d%d",i,fun(a));
printf("\n");
}
(17)下列程序运行后的输出结果是【17】。
stuct NODE
{ int k;
struct NODE *link;};
main( )
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p! =q)
{ p->k=+ +i; p+ +;
q->k=i+ +; q--;
}
q->k=i;
for(i=0;i<5;i+ +) printf("%d",m[i].k);
printf("\n");
}
(18)下列程序中huiwen()函数的功能是检查一个字符串是否是回文,当字符串是回文时,
函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出。所谓回文即
正向与反向的拼写都一样,例如:adgda。请填空。
#include <string.h>
char*huiwen(char *str)
{ char *p1,*p2; int i,t=0;
p1=str; p2= 【18】;
for(i=0);i<=strlen(str)/2;i+ +)
if(*p1+ +! =*p2--){t=1;break;}
if( 【19】)
return("yes!");
else
return("no!");
}
main( )
{ char str[50];
printf("Input:"); scanf("%s",str);
printf("%s\n", 【20】);
}
if(a%2= =1)
{a+ =5; continue;}
a=3;
}
printf("%d\n",b);
}
A)3 B)4
C)5 D)6
(42)下列程序的输出结果是( )。
main( )
{ char s[ ]="159",*p;
p=s;
printf("%c",*p+ +);
printf("%c",*p+ +);
}
A)15 B)16
C)12 D)59
(43)有下列函数:
fun(char *a,char *b)
{ while(*a! ='\0')&&(*b! = '\0')&&(*a= =*b)}
{ a+ +; b+ +;}
return(*a-*b);
}
该函数的功能是( )。
A)计算a 和b 所指字符串的长度之差
B)将b 所指字符串复制到a 所指字符串中
C)将b 所指字符串连接到a 所指字符串后面
D)比较a 和b 所指字符串的大小
(44)有下列程序:
main( )
{ int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i+ +)
{ for(j=0;j<i;j+ +)
printf("%4c",' ');
for(j=__;j<4;j+ +)
printf("%4d",num[i][j]);
printf("\n");
}
}
若要按下列形式输出数组右上半三角。
1 2 3 4
6 7 8
11 12
16
则在程序下划线处应填入的是( )。
A)i-1 B)i
C)i+1 D)4-i
(45)下列程序的输出结果是( )。
point(char*p){ p+ =3; }
main( )
{ char b[4]={'a','b','c','d'},*p=b;
point(p); printf("%c\n",*p);
}
A)a B)b
C)c D)d
(46)程序中若有下列说明和定义语句:
char fun(char *);
main( )
{ char *s="one",a[5]={0},(*f1)( )=fun,ch;
…
}
下列选项中对fun()函数的正确调用语句是( )。
A)(*fl)(a); B)*fl(*s);
C)fun(&a); D)ch=*fl(s);
(47)有下列结构体说明和变量定义,如图所示,指针p、q、r 分别指向此链表中的三个连
续结点。
struct node
{ int data;
struct node *next;
}*p,*q,*r;
现要将q 所指结点从链表中删除,同时要保持链表的连续,下列不能完成指定操作的
语句是( )。
A)p->next=q->next; B)p-next=p->next->next;
C)p->next=r; D)p=q->enxt;
(48)下列对结构体类型变量td 的定义中,错误的是( )。
A)typedef struct aa B)struct aa
{ int n; { int n;
float m; float m;
}AA; }td;
AA td; struct aa td;
C)struct D)struct
{ int n; { int n;
float m; float m;
}aa; }td;
struct aa td;
(49)下列与函数fseek(fp,0L,SEEK_SET)有相同作用的是( )。
A)feof(fp) B)ftell(fp)
C)fgetc(fp) D)rewind(fp)
(50)有下列程序:
#include <stdio.h>
void WriteStr(char *fn,char *str)
{ FILE *fp;
fp=fopen(fn,"w"); fputs(str,fp); fclose(fp);
}
main( )
{ WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程序运行后,文件t1.dat 中的内容是( )。
A)start B)end
C)startend D)endrt
二、填空题(每空2 分,共40 分)
(1)某二叉树中度为2 的结点有18 个,则该二叉树中有【1】个叶子结点。
(2)在面向对象方法中,类的实例称为【2】。
(3)诊断和改正程序中错误的工作通常称为【3】。
(4)在关系数据库中,把数据表示成二维表,每一个二维表称为【4】。
(5)问题处理方案正确而完整的描述称为【5】。
(6)下列程序运行时若从键盘输入:10 20 30<CR>。输出结果是【6】。
#include <stdio.h>
main( )
{ int i=0, j=0, k=0;
scanf("%d%*d%d",&i,&j,&k); printf("%d%d%d\n",i,j,k);
}
(7)下列程序运行后的输出结果是【7】。
#define S(x) 4*x*x+1
main( )
{ int i=6, j=8;
printf("%d\n",S(i+j)); }
(8)下列程序运行后的输出结果是【8】。
main( )
{ int a=3,b=4,c=5,t=99;
if(b<a&&a<c)t=a;a=c;c=t;
if(a<c&&b<c)t=b,b=a,a=t;
printf("%d%d%d\n",a,b,c); }
(9)下列程序运行后的输出结果是【9】。
main( )
{ int a, b,c;
a=10; b=20; c=(a%b<1)‖(a/b>1);
printf("%d %d %d\n",a,b,c);
}
(10)下列程序运行后的输出结果是【10】。
main( )
{ char c1,c2;
for(c1='0',c2='9';c1<c2;c1+ +,c2--) printf("%c%c",c1,c2);
printf("\n");
}
(11)已知字符A 的ASCII 代码值为65,下列程序运行时若从键盘输入:B33<CR>。则输
出结果是 【11】。
#include <stdio.h>
main( )
{ char a,b;
a=getchar( );scanf("%d", &b);
a=a-'A'+'0'; b=b*2;
printf("%c %c\n",a,b);
}
(12)下列程序中,fun()函数的功能是求3 行4 列二维数组每行元素中的最大值。请填空。
void fun(int, int, int(*)[4],int*);
main( )
{ int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
fun(3,4,a,b);
for(i=0;i<3;i+)printf("%4d",b[i]);
printf("\n"); }
void fun(int m, int n, int ar[ ][4], int *br)
{ int i, j, x;
for(i=0;i<m;i+ +)
{ x=ar[i][0];
for(j=0;j<n;j+ +)
if(x<ar[i][j]) x=ar[i][j];
【12】=x;
}
}
(13)下列程序运行后的输出结果是【13】。
void swap(int x,int y)
{ int t;
t=x;x=y;y=t;printf("%d %d ",x,y); }
main( )
{ int a=3,b=4;
swap(a,b); printf("%d %d\n",a,b);
}
(14)下列程序运行后的结果是【14】。
#include <string.h>
void fun(char *s, int p, int k)
{ int i;
for(i=p;i<k-1;i+ +) s[i]=s[i+2]; }
main( )
{ char s[ ]="abcdefg";
fun(s,3,strlen(s)); puts(s);
}
(15)下列程序运行后的输出结果是【15】。
#include <string.h>
main( )
{ char ch[ ]="abc",x[3][4]; int i;
for(i=0;i<3;i+ +) strcpy(x[i],ch);
for(i=0;i<3;i+ +) printf("%s",&x[i][i]);
printf("\n");
}
(16)下列程序运行后的输出结果是【16】。
fun(int a)
{ int b=0; static int c=3;
b+ +; c+ +;
return(a+b+c);
}
main( )
{ int i, a=5;
for(i=0;i<3;i+ +)printf("%d%d",i,fun(a));
printf("\n");
}
(17)下列程序运行后的输出结果是【17】。
stuct NODE
{ int k;
struct NODE *link;};
main( )
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p! =q)
{ p->k=+ +i; p+ +;
q->k=i+ +; q--;
}
q->k=i;
for(i=0;i<5;i+ +) printf("%d",m[i].k);
printf("\n");
}
(18)下列程序中huiwen()函数的功能是检查一个字符串是否是回文,当字符串是回文时,
函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出。所谓回文即
正向与反向的拼写都一样,例如:adgda。请填空。
#include <string.h>
char*huiwen(char *str)
{ char *p1,*p2; int i,t=0;
p1=str; p2= 【18】;
for(i=0);i<=strlen(str)/2;i+ +)
if(*p1+ +! =*p2--){t=1;break;}
if( 【19】)
return("yes!");
else
return("no!");
}
main( )
{ char str[50];
printf("Input:"); scanf("%s",str);
printf("%s\n", 【20】);
}