计算机二级C语言上机真题(82)【附详解】
【真题1】 给定程序中,函数fun 的功能是:有N×N 矩阵,根据给定的m(m<
=N)值,将每行元素中的值均右移m 个位置,左边置为0。例如,N=3,m=2,
有下列矩阵:1 2 3
4 5 6
7 8 9
程序执行结果为
0 0 1
0 0 4
0 0 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。
#include < stdio.h >#define N 4
void fun(int (*t)[N], int m)
{ int i, j;
/**********found**********/
for(i=0; i< N; ___1___ )
{ for(j=N-1-m; j >=0; j--)
/**********found**********/
t[i][j+___2___ ]=t[i][j];
/**********found**********/
for(j=0; j< ___3___; j++)
t[i][j]=0;
}
}
main()
{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j,
m;
printf("\nThe original array:\n");
for(i=0; i< N; i++)
{ for(j=0; j< N; j++)
printf("%2d ",t[i][j]);
printf("\n");
}
printf("Input m (m< =%d): ",N);scanf("%d",&m);
fun(t,m);
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月)
解析: 本题的考核点是C语言中的循环嵌套语句的使用。
提示思路:使用嵌套循环,外循环是行循环,内循环是列循环,这样可以对整
个数组中的元素进行符合条件的运算。题目要求将每行元素中的值均右移m 个
位置,左边置为0,所以首先要使用for语句将每行元素中的值均右移m个位
置,再将左边置为0。
答案:【1】N 【2】M 【3】bb[i]/N 疑难解答 → http://www.51pass.org/kitzod
【真题2】 给定程序modi.c 中,函数fun 的功能是:从低位开始取出长整型变量s
中奇数位上的数,依次构成一个新数放在t 中。
例如,当s 中的数为:7654321 时,t 中的数为:7531。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h
>/************found************/
void fun(long s,long t)
{ long s1=10;
*t=s%10;
while (s >0)
{ s=s/100;
*t=s%10*s1+*t;
/************found************/
s1=s1*100;
}
}
main()
{long s,t;
clrscr();
printf("\nPlease enter s:");scanf("%ld",&s);
fun(s,&t);
printf("The result is:%ld\n",t);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中函数入口参数的用法以及一些简单算法的
掌握情况。
从主函数中可以看出,t是一个字串,因此在fun 函数的参数表中应将t改为字
符指针或字符数组,即把"void fun (long s, long t)"语句改为"void fun(long
s,long *t)"或相同作用的语句。
根据题面要求从低位开始取出长整型变量s 中奇数位上的数来设计功能函数,
用*t = s % 10 取出长整型变量s中的第一个奇数位上的数字,并放在新串t
中。 然后利用while循环体依次取出长整型变量s中的其它奇数位,在这里,
语句sl = sl*100 应改为sl = sl*10 或等效语句,否则在原长整型变量s取出
的奇数位将在新的数字串中隔0排列!
【真题3】 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5 或9
整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n 输入20 后,输出为:s=0.583333。
注意:要求n 的值不大于100。
部分源程序在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >double fun(int n)
{……}
main()
{ int n; double s;
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
}
(2011年2月)
解析: 本题的考核点是求模运算和基本c 语句的使用。
解题思路:在给出的参考程序中,由于函数的返回值为双精度型,所以将sum
定义为双精度型变量,初值为0.0,再求出符合条件的n 中能被5或9 整除的
自然数,同时累加自然数的倒数之和,放入变量sum 中并返回。
#include < stdio.h >
double fun(int n)
{int i;
double sum=0.0; /*将sum 定义为双精度型变量,并给其赋初值为0.0*/
if(n >0&&n< =100)
{for (i=1;i< =n;i++)
if(i%5==0||i%9==0) /*判断i是否能被5 或者9 整除*/
sum+=1.0/i; /*累加自然数的倒数之和,放入变量sum 中*/
}
return sum; /*返回结果*/
}
=N)值,将每行元素中的值均右移m 个位置,左边置为0。例如,N=3,m=2,
有下列矩阵:1 2 3
4 5 6
7 8 9
程序执行结果为
0 0 1
0 0 4
0 0 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。
#include < stdio.h >#define N 4
void fun(int (*t)[N], int m)
{ int i, j;
/**********found**********/
for(i=0; i< N; ___1___ )
{ for(j=N-1-m; j >=0; j--)
/**********found**********/
t[i][j+___2___ ]=t[i][j];
/**********found**********/
for(j=0; j< ___3___; j++)
t[i][j]=0;
}
}
main()
{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j,
m;
printf("\nThe original array:\n");
for(i=0; i< N; i++)
{ for(j=0; j< N; j++)
printf("%2d ",t[i][j]);
printf("\n");
}
printf("Input m (m< =%d): ",N);scanf("%d",&m);
fun(t,m);
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月)
解析: 本题的考核点是C语言中的循环嵌套语句的使用。
提示思路:使用嵌套循环,外循环是行循环,内循环是列循环,这样可以对整
个数组中的元素进行符合条件的运算。题目要求将每行元素中的值均右移m 个
位置,左边置为0,所以首先要使用for语句将每行元素中的值均右移m个位
置,再将左边置为0。
答案:【1】N 【2】M 【3】bb[i]/N 疑难解答 → http://www.51pass.org/kitzod
【真题2】 给定程序modi.c 中,函数fun 的功能是:从低位开始取出长整型变量s
中奇数位上的数,依次构成一个新数放在t 中。
例如,当s 中的数为:7654321 时,t 中的数为:7531。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h
>/************found************/
void fun(long s,long t)
{ long s1=10;
*t=s%10;
while (s >0)
{ s=s/100;
*t=s%10*s1+*t;
/************found************/
s1=s1*100;
}
}
main()
{long s,t;
clrscr();
printf("\nPlease enter s:");scanf("%ld",&s);
fun(s,&t);
printf("The result is:%ld\n",t);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中函数入口参数的用法以及一些简单算法的
掌握情况。
从主函数中可以看出,t是一个字串,因此在fun 函数的参数表中应将t改为字
符指针或字符数组,即把"void fun (long s, long t)"语句改为"void fun(long
s,long *t)"或相同作用的语句。
根据题面要求从低位开始取出长整型变量s 中奇数位上的数来设计功能函数,
用*t = s % 10 取出长整型变量s中的第一个奇数位上的数字,并放在新串t
中。 然后利用while循环体依次取出长整型变量s中的其它奇数位,在这里,
语句sl = sl*100 应改为sl = sl*10 或等效语句,否则在原长整型变量s取出
的奇数位将在新的数字串中隔0排列!
【真题3】 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5 或9
整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n 输入20 后,输出为:s=0.583333。
注意:要求n 的值不大于100。
部分源程序在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >double fun(int n)
{……}
main()
{ int n; double s;
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
}
(2011年2月)
解析: 本题的考核点是求模运算和基本c 语句的使用。
解题思路:在给出的参考程序中,由于函数的返回值为双精度型,所以将sum
定义为双精度型变量,初值为0.0,再求出符合条件的n 中能被5或9 整除的
自然数,同时累加自然数的倒数之和,放入变量sum 中并返回。
#include < stdio.h >
double fun(int n)
{int i;
double sum=0.0; /*将sum 定义为双精度型变量,并给其赋初值为0.0*/
if(n >0&&n< =100)
{for (i=1;i< =n;i++)
if(i%5==0||i%9==0) /*判断i是否能被5 或者9 整除*/
sum+=1.0/i; /*累加自然数的倒数之和,放入变量sum 中*/
}
return sum; /*返回结果*/
}