二级C语言程序设计题专项强化真题试卷6
程序设计题
1.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。请编写函数fun,其功能是:求n(n<10000)以内的所有四叶玫瑰数并逐个存放到result所指的数组中,四叶玫瑰数的个数作为函数值返回。
如果一个4位正整数等于其各个数字的4次方之和,则称该数为四叶玫瑰数。
例如,1634=1*1*1*1+6*6*6*6+3*3*3*3+4*4*4*4,因此1634就是一个四叶玫瑰数。
注意:部分源程序存在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include<stdio.h>
{fpragrna warning(disable:4996)
int fun(int n,int result[])
{
}
main()
{
int result[10],n,i;
void NONO(int result[],
int n);
n=fun(9999,result);
for(i=0,i<n;i++)
printf(\\
int fun(int n,int result[])
{
int a,b,c,d,i,sum=0;
int coont=0;
for(i=1000;i<=n;i++)
{
a=i%10;
b=i/10%10;
c=i/100%10;
d=i/1000;
sum=a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d;
if(i==sum){
result[count++]=i;
}
}
return count;
}
解析:利用循环获得1000~9999之间的所有四位整数,分别取出每个整数的个位、十位、百位、千位。对每个位的数字求四次方,然后求和。得到的和与这个数相等,这个数就是四叶玫瑰数。一个数求余10得到这个数的个位,一个数整除10会去掉最后一位,整除100会去掉两位,整除1000会去掉三位。题目要求返回四叶玫瑰数的个数,题中的count变量统计了这个数,并返回。
2.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:将数组左下半三角元素中的值全部置成O。例如a数组中的值为:
1 9 7
2 3 8
4 5 6
则返回主程序后a数组中的值应为:
0 9 7
0 0 8
0 0 0
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include
#include
#include
#define N 5
void fun(int a[][N])
{
}
void main()
{
int a[N][N],i,j;
system(”CLS”);
printf(\\
void fun(int a[][N])
{
int i,j;
if(a==NULL)retum;
f10r(i=0;i<N;i++)
for(j:0;j<=i;j++)
a[i][j]=0; /*将数组左下半三角元素中的值全部置成0*/
}
解析:对于N×N二维数组,如何表示其左下半三角元素,可以通过以下语句实现。
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
外层循环用来控制矩阵的行下标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以j的范围是0~i。
3. 编写函数int fun(int lim,int aa[MAX]),其功能是求出小于或等于lim的所有素数并放在aa数组中,并返回求出的素数的个数。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int fun(int lim,int aa[MAX])
{
}
void main()
{
FILE *wf;
int limit,i,sum;
int aa[MAX];
system(\\
int fun(int lim,int aa[MAX])
{
int i,j,k=0;
for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素数*/
{
for(j=2;j<i;j++)
if(i%j==0)break;
if(j>=i)
aa[k++]=i;/*将求出的素数放入数组aa中*/
}
return k;/*返回所求出的素数的个数*/
}
解析:本程序使用for循环语句查找小于lim的所有数,使用内嵌的循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素数的判定方法:
for(j=2;j<i;j++)
if(i%j==0)break;
…
4. 编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。
例如,假定输入的字符串为\\
int fun(char *str,char *substr)
{
int i,j=0;
for(i=0;str[i+1]!=’\0’;i++)
/*如果一个长度为2的子字符串在主字符串中出现一次,则j+1,如此循环*/
if(str[i]==substr[0]&&str[i+1]==substr[1])
j++;
return j;/*返回子字符串在主字符串中出现的次数*/
}
解析:本题考查:遍历字符串,实现字符串的比较运算。
该题中substr只有两个字符,所以
本文档预览:3600字符,共3699字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载