请编写一个函数int sum(int n),该函数完成1+2+3+…+n的运算,并返回运算结果,其中n>0。注意:请使用

题目

请编写一个函数int sum(int n),该函数完成1+2+3+…+n的运算,并返回运算结果,其中n>0。注意:请使用递归算法实现该函数。

注意:部分源程序已存在文件:test11.cpp中。

请勿修改主函数main和其他函数中的任何内容,仅在函数sum的花括号中填写若干语句。

文件test11_2.cpp的内容如下:

include<iostream.h>

int sum(int n)

{

}

void main()

{

int n;

cout<<"输入n:";

cin>>n;

int result;sum(n);

cout<<"结果为:"<<result<<endl;

}

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

已有变量定义和函数调用语句int a,b; b=sum(a);函数sum用来求1+2+3+…+n,请编写sum函数。 int sum(int n){ }


D

第2题:

输入一个自然数n,如果n为奇数,输出表达式1+1/3+...+1/n的值;如果n为偶数,输出表达式1/2+1/4+...+1/n的值;输出表达式结果,并保留2位小数。请完善代码。 def f(n): sum=0 if ____________: for i in range(1,n+1,2): sum+=1/i else: for i in range(2,n+1,2): sum+=1/i return sum n=int(input()) print(f(n))


n%2!=0##%_YZPRLFH_%##n%2==1

第3题:

请编写一个函数fun(),它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

例如,若传给m的值为50,则程序输出:

7 11 14 21 X 28 33 35 42 44 49

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include<conio.h>

include<stdio.h>

define M 100

void fun(int m, int *a, int *n)

{

}

main()

{

int aa[M],n,k;

clrscr();

fun(50,aa,&n);

for(k=0;k<n; k++)

if((k+1)%20==0) /*每行输出20个数*/

{printf("%4d",aa[k]);

printf("\n");

}

else

printf("%4d",aa[k]);

printf("\n");

}


正确答案:void fun(int mint *aint *n) { int ij=0; for(i=1;i=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j; /*返回这些数的个数*/ }
void fun(int m,int *a,int *n) { int i,j=0; for(i=1;i=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j; /*返回这些数的个数*/ } 解析:本题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“||”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“&&”运算符。

第4题:

请编写函数void countValue(int *a,int *n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数并存放在数组a中,并通过n返回这些数的个数。

注意:部分源程序已给出。

请勿改动主函数main()和写函数writeDAT()的内容。

试题程序:

include<conio.h>

include<stdio.h>

void countValue(int *a, int *n)

{

}

main ( )

{

int aa[1000],n, k;

clrscr();

countValue (aa, &n);

for(k=0;k<n; k++)

if((k+1) %10 ==0)

{

printf("%5d",aa[k]);

printf("\n");

}

else printf("%5d",aa[k]);

writeDAT();

}

writeDAT ( )

{

int aa[1000],n, k;

FILE *fp;

fp=fopen("out79.dat","w");

countValue(aa,&n);

for(k=0; k<n; k++)

if((k+1)%10==0)

{

fprintf(fp,"%5d",aa[k]);

fprintf(fp,"\n");

}

else fprintf (fp,"%5d",aa[k]);

fclose(fp);

}


正确答案:void countValue(int *a int *n) { int i; *n=0; for(i=1;i=1000;i++) if(i%7==0 && i%11) /*将能被7整除但不能被11整除的数存入数组a中*/ { *a=i; *n-*n+1; /*统计个数*/ a++; } else if (i%7 && i%11==0) /*将能被11整除但不能被7整除的数存入数组a中*/ { *a=i; *n=*n+1; /*统计个数*/ a++; } }
void countValue(int *a, int *n) { int i; *n=0; for(i=1;i=1000;i++) if(i%7==0 && i%11) /*将能被7整除但不能被11整除的数存入数组a中*/ { *a=i; *n-*n+1; /*统计个数*/ a++; } else if (i%7 && i%11==0) /*将能被11整除但不能被7整除的数存入数组a中*/ { *a=i; *n=*n+1; /*统计个数*/ a++; } } 解析:本题考查的知识点如下:
(1)指针的使用。
(2)“%”运算符。
(3)判断结构中多个条件的布尔运算。
本题中,函数countValue()以指针为参数,这里就要涉及到指针的使用。a是指向数组的指针,初始时,指向数组的第一个元素。地址每加1时,依次指向后面的元素。一个数a若能被b整除,则a除以b取余得数为0。能被7或11整除,但不能被7和11同时整除,则有两种情况,能被7整除但不能被11整除,能被11整除但不能被7整除。这里就要用到多个条件的布尔运算。

第5题:

请编写一个函数inline long sum(int n),用递归函数完成运算:sum(n)=1*1+2*2+…n*n,递归表达式为 sum(n)=sum(n-1)+n2。

注意:部分源程序已存在文件test10_2.cpp中。

请勿修改主函数main和其他函数中的任何内容,仅在函数sum的花括号中填写若干语句。

文件test10_2.cpp的内容如下:

include<iostream.h>

inline long sum(int n)

{

}

void main()

{

int n;

cout<<"输入n:";

cin>>n;

cout<<"结果为:"<<sum(n)<<endl;

}


正确答案:inline long sum(int n) { if(n==1) return 1; else return n*n+sum(n-1); }
inline long sum(int n) { if(n==1) return 1; else return n*n+sum(n-1); } 解析:本题考查的是考生对递归函数掌握的熟练程度。递归的终止条件为n=1时,值为1。

第6题:

请编写函数fun(),它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在 a所指的数组中,通过n返回这些数的个数。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <conio.h>

include <stdio.h>

void fun (int *a,int *n)

{

}

main()

{

int aa[1000], n, k;

clrscr();

fun(aa,&n);

for(k=0;k if((k+1)%10==0)

{printf("%5d",aa[k]);

printf("\n");} /*一行写9个数*/

else

printf("%5d ",aa[k]);

}


正确答案:void fun(int *a int *n) { int ij=0; for(i=1;i=1000;i++) /*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并放入数组a中*/ if((i%7==0||i%11==0)&&i%77!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ }
void fun(int *a, int *n) { int i,j=0; for(i=1;i=1000;i++) /*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数,并放入数组a中*/ if((i%7==0||i%11==0)&&i%77!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ } 解析:注意本题题目应是找出能被7或11整除但不能同时被7和11整除的所有整数。能同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7或11整除的数。所以可得出程序中的if()。按运算优先级可知 (i%7==0||i%11==0),注意,两边必须要有小括号。

第7题:

请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在 9所指的数组中,通过n返回这些数的个数。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <conio.h>

include <stdio.h>

void fun(int *a,int *n)

{

}

main( )

{

int aa[1000],n,k;

clrscr();

fun(aa,an);

for(k=0;k<n;k++)

if((k+1)%10==0)

{

printf("%5d",aa[k]);

printf("\n"); /*—行写10个数*/

}

else

printf("%5d",aa[k]);

}


正确答案:void fun(int*aint *n) { int i.j=0; for(i=1;i=1000;i++) /*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并放入数组a中*/ if((i%5==0||i%13==0)&&i%65!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ }
void fun(int*a,int *n) { int i.j=0; for(i=1;i=1000;i++) /*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数,并放入数组a中*/ if((i%5==0||i%13==0)&&i%65!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ } 解析:注意本题题目是找出能被5或13整除但不能同时被5和13整除的所有整数。能同时被5和13整除的整数一定能被65整除,且不能被65整除的数不一定就是能被5或13整除的数。所以可得出程序中的if()。按运算优先级可知 (i%5==0||i%13==0),注意,两边必须要有小括号。

第8题:

请编写一个函数proc,它的功能是:求出1~m(含m) 能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传给m的值为70,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 55 56 63 66 70 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。 试题程序: include<stdlib.h> include<conio.h> include<stdio.h> define N 100 void proc(int m,int*a,int*n) {

} void main { int arr[N],n,k; system("CLS"); proc(70,arr,&n); for(k=0;k<n;k++) if((k+1)%20==0)//每行输出20个数 { printf("%4d",arr[k]); printf("\n"); } else printf("%4d",arr[k]); printf("\n"); }


正确答案:

void proc(int m,int*a,int*n)
{
int i,j=0;
for(i=1;i<=m;i++)//进行m次循环
if(i%7==0||i%11==0)//能被7或11整除的所有整数
a[j++]=i;//符合条件的数放在数组a中
*n=j;//返回这些数的个数
}
【解析】本题需要先判断1~m每一个整数能否被7或11整除,然后将符合条件的整数放在数组a中,最后将符合条件的数的个数通过形参n返回主函数。

第9题:

请编写函数fun(),该函数的功能是将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。

例如:二维数组中的数据为

33333333

44444444

55555555

则一维数组中的内容应是

334455334455334455334455。

注意:部分源程序以存在文件test_2.cpp中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

文件test39_2.cpp的内容如下:

include<stdio.h>

include<iostream.h>

void fun(int(*s) [10],int *b, int *n,int mm,int nn)

{

}

void main( )

{

int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;

int a[100]={0}, n=0;

cout<<"The matrix:\n"

for(i=0; i<3; i++)

{

for(j=0; j<4; j++

cout<<w[i] [j];

cout<<endl;

}

fun(w, a, &n, 3, 4);

cout<<"The A array:\n";

for(i=0; i<n; i++)

cout<<a[i];

cout<<"\n\n";

}


正确答案:void fun (int(*s)[10]int *b int *n int mm int nn) { int ij; for(j=0;jnn;j++) for(i=0;imm;i++) {b[*n]=*(*(s+i)+j);*n=*n+1; } }
void fun (int(*s)[10],int *b, int *n, int mm, int nn) { int i,j; for(j=0;jnn;j++) for(i=0;imm;i++) {b[*n]=*(*(s+i)+j);*n=*n+1; } } 解析:一个二维数组的存储可以理解为按行进行存储的—个—维数组,但本题中的二维数组要求按列进行存储。根据在主函数中的调用情况,可以看出,指针数组s[10]实质上是用来存放二维数组中各行的首地址,b是用来存放最终二维数组按列处理完毕后的一个一维数组,第3个参数之所以要用“&n”,目的是为了能在函数中直接改变其值。