文档库

最新最全的文档下载
当前位置:文档库 > 实验4-函数

实验4-函数

实验4 函数

程序填空

1.普通参数

本题分值:4

题目描述:输入日期的年份和月份,求该月有多少天。要求编写函数int daynum(int year,int month),求出以year为年份、以month为月份的某个月的天数。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:

//通过日期求某月的天数。

#include

using namespace std;

int main()

{

int daynum(int year,int month);

int y,m,d;

cin>>y>>m;

if(y<1900 || y>=3000 || m<1 || m>12)

{

cout<<"输入错误!"<

return 0;

}

d=daynum(__(1)__); //以y、m作实参调用函数,求出该月的天数

cout<<"此月的天数为"<

return 0;

}

int daynum(int year,int month)

{

int days;

switch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31; break;

case 4:

case 6:

case 9:

case 11: days=30; break;

case 2: if(year%4==0&&year%100!=0 || year%400==0)

days=29;

else

days=28;

break;

}

return __(2)__;

}

答案:

(1) y,m

(2) days

每空分值:2

参考答案:yx3-t1.cpp

2.字符数组参数

本题分值:4

题目描述:编写一个函数,用来求字符串s的任意子串。函数原型为

void SubString ( char s[ ] , int start , int len , char d[ ] ) ;

其中s是原字符串,d用来存放s中从第start个字符开始(1≤start≤strlen(s) ),长度为len 的子串。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:

#include

using namespace std;

int main( )

{

void SubString(char s[ ], int start, int len, char d[ ]);

char s[81],d[81];

int m,n;

gets(s); //输入一个字符串的值存放在字符数组s中,以回车结束

//cout<<"从第m个字符开始(m≥1)取n个字符构成的子串。请依次输入m、n的值:"; cin>>m>>n;

if(m>strlen(s) || n>strlen(s) || m+n>strlen(s)+1)

{

cout<<"m、n值超过了范围!\n";

return 0;

}

SubString(__(1)__);

cout<

return 0;

}

//从s中第start个字符开始取出长度为len的子串放入d中

void SubString(char s[ ], int start, int len, char d[ ])

{

int k,j;

for(j=0,k=start-1;j<=__(2)__;j++,k++)

d[j]=s[k];

d[len]='\0';

}

答案:

(1) s,m,n,d

(2) len-1

每空分值:2

参考答案:yx3-t2.cpp

3.嵌套调用

本题分值:6

题目描述:验证哥德巴赫猜想:对任意输入的正整数n,验证6~n以内的偶数都可分解为两个素数(质数)之和。以下程序中,函数bool divide(int n)是用来将偶数n分解为两个质数的;若分解成功,则返回true;否则返回false。函数bool IsPrime(int m)是用来判断m是否为质数的;若是,则函数返回true;否则返回false。请在计算机上调试以下程序,补足其中的空格。

代码:

#include

#include

using namespace std;

int main()

{

bool divide(int n);

int i,n;

cin>>n;

if(n<6)

{

cout<<"输入数据出错\n";

return 0;

}

for(i=6;i<=n;i+=2)

if(divide(i)== __(1)__) //对i进行分解,并判断分解是否成功

{

cout<<"猜想错误\n";

return 0;

}

return 0;

bool divide(int n)

{

bool IsPrime(int n);

int i,m;

for(i=3;i<=n/2;i++)

{

if(!IsPrime(i)) continue;

m=n-i;

if(__(2)__) break; //若m是素数,则分解已成功,结束该循环}

if(i>n/2) return false;

cout<

return true;

}

bool IsPrime(int m)

{

int p,i;

p=sqrt(m);

for(i=2;i<=p;i++)

if(m%i==0) return false;

return __(3)__;

}

答案:

(1) false

(2) IsPrime(m)

(3)true

每空分值:2

参考答案:yx3-t3.cpp

4.全局变量

本题分值:4

题目描述:编写一函数addup,统计字符串s中字母、数字、空格和其它字符的个数,并且用几个全局变量记录上述统计结果。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:

#include

using namespace std;

int letter, digit, space, other; //全局变量

int main()

void addup(char s[ ]);

char str[101];

//cout<<"输入字符串:\n";

gets(str);

addup(str);

cout<<"字母个数:"<

return 0;

}

void addup(char s[ ])

{

int i;

letter=digit=space=other=__(1)__;

for(i=0;s[i]!='\0';i++)

if(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z') letter++;

else if(s[i]>='0' && s[i]<='9') digit++;

else if(s[i]==32) space++;

else __(2)__;

}

答案:

(1) 0

(2) other++

每空分值:2

参考答案:yx3-t4.cpp

5. 递归调用

本题分值:4

题目描述:用递归方法求n的阶乘n!,递归公式为

1 (n等于0或1)

n!=

n×(n-1)! (n大于1)

要求编写递归函数int fact(int n); 以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:

#include

using namespace std;

int main()

{

int fact(int n);

int n,f;

//cout<<"请输入整数n(n≥0):";

cin>>n;

f=fact(n);

cout<

return 0;

}

//求阶乘

int fact(int n)

{

int f;

if(n==0 || n__(1)__) f=1;

else f=__(2)__;

return f;

}

答案:

(1) = =1

(2) n*fact(n-1)

每空分值:2

参考答案:yx3-t5.cpp

程序设计

1.普通参数

本题分值:12

题目标题:判断完数

时间限制:1000MS

内存限制:32768KB

题目描述:判断正整数n是否为完数。已知一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。此程序要求编写函数bool wanshu(int n),判断n是否为完数,若n是,则函数返回true;否则返回false。然后主函数通过该函数的返回值,在屏幕上输出判断结果。

输入描述:输入一个正整数n。

输出描述:若n是完数,则输出"yes";否则输出"no"。

样例输入:

28

样例输出:

yes

参考答案:

yx3-1.cpp

2. 数组参数

本题分值:12

题目标题:统计一组数中的奇数之和

时间限制:1000MS

内存限制:32768KB

题目描述:统计输入的10个整数中所有奇数之和。要求编写函数int oddsum(int array[ ],int num),求出数组array中前num个整数中的奇数之和,并将结果作为函数值返回。要求主函数必须先输出这10个数,再输出求出的奇数之和。

输入描述:输入10个整数。

输出描述:输出其中奇数之和。

样例输入:97 48 23 17 45 59 90 75 49 92

样例输出:365

参考答案:

yx3-2.cpp

3. 嵌套调用

本题分值:12

题目标题:求两数的最大公约数和最小公倍数。

时间限制:1000MS

内存限制:32768KB

题目描述:求两个正整数的最大公约数和最小公倍数。要求,写一个函数求最大公约数:int GCD(int a,int b),再写一个函数求最小公倍数:int LCM(int a,int b)。其中最大公约数函数GCD的算法:可以参考《实验预习1》中程序填空题5中的算法,也可以使用辗转相除法。最小公倍数函数LCM的算法:a、b的最小公倍数等于a*b/a、b的最大公约数。要求:最小公倍数函数LCM中嵌套调用函数GCD,以求a、b的最大公约数。

输入描述:分别输入2个整数。

输出描述:当输入的数据不是正整数时,显示“ERROR!”;当输入的数据都是正整数时,依次输出最大公约数x和最小公倍数y,两个数据之间用一个空格隔开。

样例输入:

12 18

样例输出:

6 36

参考答案:

yx3-3.cpp

4.数组参数

本题分值:12

题目标题:字符串中小写字母转换成大写字母

时间限制:1000MS

内存限制:32768KB

题目描述:编写函数int f (char s[ ]),将字符串中所有的小写字母转换成对应的大写字母,其他字符不变,并统计被转换字母的个数,将其作为函数值返回。要求主函数中输入该字符串,最后输出转换后的新字符串,和转换字母的个数。

输入描述:输入一个字符串。

输出描述:两行,第一行输出转换后的新字符串,第二行输出被转换的小写字母个数。

样例输入:

ser34GHj

样例输出:

SER34GHJ

4

参考答案:

yx3-4.cpp

5.指针参数

本题分值:12

题目标题:统计字符串中某字符出现的次数

时间限制:1000MS

内存限制:32768KB

题目描述:输入一个字符串s和一个字符ch,统计并输出字符ch在字符串s中出现的总次数。改写要求:编写一个函数,求字符指针p所指向的字符串中,字符ch出现的次数,并将该结果作为函数值返回。函数原型为

int CountChar ( char* p, char ch ) ;

输入描述:输入一个字符串后按回车键,再输入一个字符后回车。(提示:输入字符串用gets(s),s为存放字符串的字符数组)

输出描述:输出为一个正整数,表示字符ch出现的总次数。

样例输入:

bb

a

样例输出:

参考答案:

yx3-5.cpp