计算机二级C语言操作题(填空、修改、设计题)——真题库(17)附解析答案
1.程序填空题
程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。不得增行或删行,也不得更改程序的结构。
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s, int n, char *t)
{ int len,i,j=0;len=strlen(s);
/**********found**********/if(n>=len) strcpy(__1__);else {
/**********found**********/for(i=len-n; i<=len-1; i++) t[j++]= __2__ ;
/**********found**********/t[j]= __3__ ;}
}
void main()
{ char s[N],t[N]; int n;printf("Enter a string: ");gets(s);printf( "Enter n:"); scanf("%d",&n);fun(s,n,t);printf("The string t : "); puts(t);
}
2.程序修改题
程序中,函数fun的功能是:找出一个大于给定整数m且紧m的素数,并作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
int fun( int m)
{ int i,k;for (i=m+1; ;i++){ for (k=2;k<i;k++)
/*************found**************/if (i%k!=0)break;
/*************found**************/if (k<i)return(i);}
}
void main()
{ int n;system("CLS");printf("\nPlease enter n: ");scanf("%d",&n);printf ("%d\n",fun(n));
}
3.程序设计题
程序中,编写函数void fun(int x, int pp[], int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15.
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号填入你编写的若干语句。
#include <stdio.h>
void fun ( int x, int pp[], int *n )
{}main( )
{ int x, aa[1000], n, i ;void NONO ();printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ;fun(x, aa, &n ) ;for( i = 0 ; i < n ; i++ )printf("%d ", aa[i]) ;printf("\n") ;NONO( ) ;
}void NONO ()
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/int x, aa[1000], n, i, j ;FILE *fp ;fp = fopen("out.dat","w") ;for(j = 0 ; j < 10 ; j++) {x = 30 + j ;fun(x, aa, &n) ;for(i = 0 ; i < n ; i++) fprintf(fp, "%d ", aa[i]) ;fprintf(fp, "\n") ;}fclose(fp) ;
}
附:参考答案
1.程序填空题
(1)t,s
(2)s[i]
(3)0或'\0'
【解题思路】
填空1:当给定的长度n大于该字符串s的长度,那么通过函数strcpy()把该字符串直接赋值到t就可以了故空1处应填t,s。
填空2:使用for循环语句,把字符串s最右边n个字符依次添加到t中,故空2处应填s[i]。
填空3:字符串操作结束,需要给t末尾加一个字符串结束符,故空3处应该填0或'\0'
2.程序修改题
(1)if(i%k==0)
(2)if(k==i)
【解题思路】
(1)判断当前数是否为素数,若存在一个数(除1和其自身)能整除当前数,则当前数不是素数,跳出本次循环,所以if条件应为i%k==0。
(2)如果i是素数,则循环结束时k==i,将该值返回
3.程序设计题
void fun (int x, int p[], int *n)
{
int i,j=0;
for(i=1; i<=x;i=i+2)//i的初始值为1,步长为2,确保i为奇数
if(x%i==0) //将能整除x的数存入数组pp中
pp[j++]=i;
*n=j; //传回满足条件的数的个数
}
【解题思路】
本题题干信息是:能整除x且不是偶数的所有整数。循环语句中变量i从1开始且每次增2,所以i始终是奇数。能将整除x的i 值存放在数字pp中,整数采用求余运算符“%”,即“x%i==0”。最后将数据元素个数j保存到n中。