计算机二级C语言上机真题(95)【附详解】
【真题1】 给定程序的功能是求出1 到1000 之内能被7 或11 整除但不能同时被
7 和11 整除的所有整数放在数组a 中,通过n 返回这些数的个数。
#include < stdio.h >
void fun(int *a, int *n)
{ int i, j = 0 ;
for(i = 1 ; i < = 1000 ; i++) {
/**************found**************/
if(((i % 7 == 0) || (i % 11 == 0)) && i % 77 != 0)
a[j++] = ___1___ ;
}
/**************found**************/
*n = ___2___ ;
}
main()
{ int aa[1000], n, k ;
/**************found**************/
fun ( ___3___ ) ;
for ( k = 0 ; k < n ; k++ )
if((k + 1) % 10 == 0) printf("\n") ;
else printf("%5d", aa[k]) ;
}
解析: 本题的考核点是循环语句和整除算法。
解题思路:使用循环语句使循环变量依次从1 递增到1000,并将每个值与7
和11 进行取余比较,将符合条件的值存放入数组中并统计符合条件的值的个
数。
本评析仅供参考。
答案:【1】i 【2】j 【3】 a,&n
【真题2】 给定程序modi.c 中,函数fun 的功能是:实现两个整数的交换。 例如
给a 和b 分别输入:60 和65,输出为:a=65 b=60 请改正程序中的错误,使它
能得出正确结果。 注意:不要改动main 函数,
#include < stdio.h >
#include < conio.h >
/************found************/
void fun(int a,b)
{int t;
/************found************/
t=b;b=a;a=t;
}
main()
{int a,b;
clrscr();
printf("Enter a,b:");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
}
(2011年2月)
解析: 本题的考核点是函数的入口参数和基本算法。
函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普
通的变量说明不同,函数参数必须同时具有变量类型和变量名,程序"void fun
( int a, b )"语句中第二个函数参数没有变量类型,是错误的;另外,从主函数
里的"fun( &a, &b);"语句可以看出,fun 函数的两个参数应为整型指针。综上
所述,应该把"void fun ( int a, b )"语句改为"void fun(int *a,int *b)"或相
同作用的语句。所以,fun 函数里的"t=b;b=a;a=t;"语句也是错误的,应该改
为"t=*b;*b=*a;*a=t;"或相同作用的语句。本评析仅供参考。
【真题3】 请编写函数fun,对长度为7 个字符的字符串,除首、尾字符外,将其
余5 个字符按降序排列。例如,原来的字符串为CEAedca,排序输出为
CedcEAa。 注意:部分源程序存在文件prog.c中。 请勿改动主函数main 和其他
函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#include < stdio.h >
#include < ctype.h >
#include < conio.h >
int fun(char *s,int num)
{……}
main()
{ char s[10];
clrscr();
printf("输入7 个字符的字符串:");
gets(s);
fun(s,7);
printf("\n%s",s); }
(2011年2月)
解析: 本题的考核点是对除首、尾字符外的其它字符按降序排列的算法。 提示
思路:只对除首、尾字符外的字符排序,排序可用多种方法来实现,本题用的
是选择法,通过一变量来记录大数的下标,再与前面的数交换,从而实现降序
排序。 本评析仅供参考
int fun(char *s,int num)
{int i,j,h,t;
for (i=1;i< num-1;i++)
{ h=i;
for (j=i;j< num-1;j++)
if (s[h]< s[j]) h=j;/*从字符串的第i+1 个字符到num-1 个字
符中找出最大的字符,并将其数组下标赋值给h*/
if (h!=i)/*判断找到的最大字符的下标是否为第i 个字符*/
{ t=s[h];s[h]=s[i];s[i]=t;}/*将s[h]与s[i]中的字符进
行交换*/
7 和11 整除的所有整数放在数组a 中,通过n 返回这些数的个数。
#include < stdio.h >
void fun(int *a, int *n)
{ int i, j = 0 ;
for(i = 1 ; i < = 1000 ; i++) {
/**************found**************/
if(((i % 7 == 0) || (i % 11 == 0)) && i % 77 != 0)
a[j++] = ___1___ ;
}
/**************found**************/
*n = ___2___ ;
}
main()
{ int aa[1000], n, k ;
/**************found**************/
fun ( ___3___ ) ;
for ( k = 0 ; k < n ; k++ )
if((k + 1) % 10 == 0) printf("\n") ;
else printf("%5d", aa[k]) ;
}
解析: 本题的考核点是循环语句和整除算法。
解题思路:使用循环语句使循环变量依次从1 递增到1000,并将每个值与7
和11 进行取余比较,将符合条件的值存放入数组中并统计符合条件的值的个
数。
本评析仅供参考。
答案:【1】i 【2】j 【3】 a,&n
【真题2】 给定程序modi.c 中,函数fun 的功能是:实现两个整数的交换。 例如
给a 和b 分别输入:60 和65,输出为:a=65 b=60 请改正程序中的错误,使它
能得出正确结果。 注意:不要改动main 函数,
#include < stdio.h >
#include < conio.h >
/************found************/
void fun(int a,b)
{int t;
/************found************/
t=b;b=a;a=t;
}
main()
{int a,b;
clrscr();
printf("Enter a,b:");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
}
(2011年2月)
解析: 本题的考核点是函数的入口参数和基本算法。
函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普
通的变量说明不同,函数参数必须同时具有变量类型和变量名,程序"void fun
( int a, b )"语句中第二个函数参数没有变量类型,是错误的;另外,从主函数
里的"fun( &a, &b);"语句可以看出,fun 函数的两个参数应为整型指针。综上
所述,应该把"void fun ( int a, b )"语句改为"void fun(int *a,int *b)"或相
同作用的语句。所以,fun 函数里的"t=b;b=a;a=t;"语句也是错误的,应该改
为"t=*b;*b=*a;*a=t;"或相同作用的语句。本评析仅供参考。
【真题3】 请编写函数fun,对长度为7 个字符的字符串,除首、尾字符外,将其
余5 个字符按降序排列。例如,原来的字符串为CEAedca,排序输出为
CedcEAa。 注意:部分源程序存在文件prog.c中。 请勿改动主函数main 和其他
函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#include < stdio.h >
#include < ctype.h >
#include < conio.h >
int fun(char *s,int num)
{……}
main()
{ char s[10];
clrscr();
printf("输入7 个字符的字符串:");
gets(s);
fun(s,7);
printf("\n%s",s); }
(2011年2月)
解析: 本题的考核点是对除首、尾字符外的其它字符按降序排列的算法。 提示
思路:只对除首、尾字符外的字符排序,排序可用多种方法来实现,本题用的
是选择法,通过一变量来记录大数的下标,再与前面的数交换,从而实现降序
排序。 本评析仅供参考
int fun(char *s,int num)
{int i,j,h,t;
for (i=1;i< num-1;i++)
{ h=i;
for (j=i;j< num-1;j++)
if (s[h]< s[j]) h=j;/*从字符串的第i+1 个字符到num-1 个字
符中找出最大的字符,并将其数组下标赋值给h*/
if (h!=i)/*判断找到的最大字符的下标是否为第i 个字符*/
{ t=s[h];s[h]=s[i];s[i]=t;}/*将s[h]与s[i]中的字符进
行交换*/