计算机二级C语言上机真题(80)【附详解】
【真题1】 给定程序中,函数fun 的功能是:将N×N 矩阵中元素的值按列右移1
个位置,
右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
计算结果为
3 1 2
6 4 5
9 7 8
#include < stdio.h >#define N 4
void fun(int (*t)[N])
{ int i, j, x;
/**********found**********/
for(i=0; i< ___1___; i++)
{
/**********found**********/
x=t[i][___2___] ;
for(j=N-1; j >0; j--)
t[i][j]=t[i][j-1];
/**********found**********/
t[i][___3___]=x;
}
}
main()
{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
printf("The original array:\n");
for(i=0; i< N; i++)
{ for(j=0; j< N; j++) printf("%2d ",t[i][j]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0; i< N; i++)
{ for(j=0; j< N; j++) printf("%2d ",t[i][j]);
printf("\n");
}
}
(2011年2月)
解析: 本题考查的是二维数组的用法。
在fun 函数中,外层循环是按行循环,由于共有N行,故循环的结束条件为i
>=N,即第一空应填N;对于第j列的元素,其移动后应位于j+1列,如果
j+1=N 则将其移至0 列。在本题中,首先将i行N-1 列的元素存放到临时变量
x中,然后通过循环语句将i行j-1 列的元素移到i行j列,然后将临时变量x
中的值赋值给t[i][0]。故第二空应填N-1或其等效形式;第三空应填0。
答案:【1】N 【2】N-1 【3】0
【真题2】 下列给定程序中,函数fun()的功能是找出100~n(不大于1000)之间
百位数字加十位数字等于个位数字的所有整数,把这些整数放在s 所指的数组中,个
数作为函数值返回。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >#define N 100
int fun(int *s, int n)
{ int i,j,k,a,b,c;
j=0;
for(i=100; i< n; i++)
{
/**********************found***********************/
k=n;
a=k%10;
k/=10;
b=k%10;
c=k/10;
if(a==b+c)
/**********************found***********************/
s[j]=i;
}
return j;
}
main()
{
int a[N], n,num=0, i;
do
{
printf("\nEnter n(< =1000) :");
scanf("%d",&n);
}
while(n > 1000);
num= fun(a,n);
printf("\n\nThe result :\n");
for(i=0; i< num; i++)
printf("%5d",a[i]);
printf("\n\n");
}
(2011年2月)
解析: (1)错误:k=n; 正确:k=i;
(2)错误:s[j]=i; 正确:s[j++]=i;
错误1:k就是当前要被判断的数,是随着i值的变化而变化的。错误2:在循
环中,j是数组的下标要递增。
【真题3】 函数fun 的功能是:将s 所指字符串中ASCII值为偶数的字符删除,串
中剩余字符形成一个新串放在t 所指的数组中。
例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符B 的ASCII码
值为偶数、…、字符2 的ASCII码值为偶数、…都应当删除,其他依次类推。最后t
所指的数组中的内容是:“ACEG135”。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组元素与2 做取余操作,如果余数不为零则将其值存入
另外一个数组中。
#include < conio.h >#include < stdio.h >#include < string.h >void
fun(char *s,char t[])
{……}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is: %s\n",t);
}
(2011年2月)
解析: void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*判断字符s[i]其值的ASCII码值是否为偶数,如果是,则继续下一个字符的
判断,否则将字符s[i]复制到t数组中*/
for(i=0;i< slenth;i++)
if(s[i]%2!=0)
t[n++]=s[i];
t[n]='\0';
}
个位置,
右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
计算结果为
3 1 2
6 4 5
9 7 8
#include < stdio.h >#define N 4
void fun(int (*t)[N])
{ int i, j, x;
/**********found**********/
for(i=0; i< ___1___; i++)
{
/**********found**********/
x=t[i][___2___] ;
for(j=N-1; j >0; j--)
t[i][j]=t[i][j-1];
/**********found**********/
t[i][___3___]=x;
}
}
main()
{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
printf("The original array:\n");
for(i=0; i< N; i++)
{ for(j=0; j< N; j++) printf("%2d ",t[i][j]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0; i< N; i++)
{ for(j=0; j< N; j++) printf("%2d ",t[i][j]);
printf("\n");
}
}
(2011年2月)
解析: 本题考查的是二维数组的用法。
在fun 函数中,外层循环是按行循环,由于共有N行,故循环的结束条件为i
>=N,即第一空应填N;对于第j列的元素,其移动后应位于j+1列,如果
j+1=N 则将其移至0 列。在本题中,首先将i行N-1 列的元素存放到临时变量
x中,然后通过循环语句将i行j-1 列的元素移到i行j列,然后将临时变量x
中的值赋值给t[i][0]。故第二空应填N-1或其等效形式;第三空应填0。
答案:【1】N 【2】N-1 【3】0
【真题2】 下列给定程序中,函数fun()的功能是找出100~n(不大于1000)之间
百位数字加十位数字等于个位数字的所有整数,把这些整数放在s 所指的数组中,个
数作为函数值返回。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < stdio.h >#define N 100
int fun(int *s, int n)
{ int i,j,k,a,b,c;
j=0;
for(i=100; i< n; i++)
{
/**********************found***********************/
k=n;
a=k%10;
k/=10;
b=k%10;
c=k/10;
if(a==b+c)
/**********************found***********************/
s[j]=i;
}
return j;
}
main()
{
int a[N], n,num=0, i;
do
{
printf("\nEnter n(< =1000) :");
scanf("%d",&n);
}
while(n > 1000);
num= fun(a,n);
printf("\n\nThe result :\n");
for(i=0; i< num; i++)
printf("%5d",a[i]);
printf("\n\n");
}
(2011年2月)
解析: (1)错误:k=n; 正确:k=i;
(2)错误:s[j]=i; 正确:s[j++]=i;
错误1:k就是当前要被判断的数,是随着i值的变化而变化的。错误2:在循
环中,j是数组的下标要递增。
【真题3】 函数fun 的功能是:将s 所指字符串中ASCII值为偶数的字符删除,串
中剩余字符形成一个新串放在t 所指的数组中。
例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符B 的ASCII码
值为偶数、…、字符2 的ASCII码值为偶数、…都应当删除,其他依次类推。最后t
所指的数组中的内容是:“ACEG135”。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组元素与2 做取余操作,如果余数不为零则将其值存入
另外一个数组中。
#include < conio.h >#include < stdio.h >#include < string.h >void
fun(char *s,char t[])
{……}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is: %s\n",t);
}
(2011年2月)
解析: void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*判断字符s[i]其值的ASCII码值是否为偶数,如果是,则继续下一个字符的
判断,否则将字符s[i]复制到t数组中*/
for(i=0;i< slenth;i++)
if(s[i]%2!=0)
t[n++]=s[i];
t[n]='\0';
}