c实验4作业函数.docx
《c实验4作业函数.docx》由会员分享,可在线阅读,更多相关《c实验4作业函数.docx(9页珍藏版)》请在冰豆网上搜索。
c实验4作业函数
实验4函数
程序填空
1.普通参数
本题分值:
4
题目描述:
输入日期的年份和月份,求该月有多少天。
要求编写函数intdaynum(intyear,intmonth),求出以year为年份、以month为月份的某个月的天数。
以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
//通过日期求某月的天数。
#include
usingnamespacestd;
intmain()
{
intdaynum(intyear,intmonth);
inty,m,d;
cin>>y>>m;
if(y<1900||y>=3000||m<1||m>12)
{
cout<<"输入错误!
"<return0;
}
d=daynum(__
(1)__);//以y、m作实参调用函数,求出该月的天数
cout<<"此月的天数为"<return0;
}
intdaynum(intyear,intmonth)
{
intdays;
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;break;
case4:
case6:
case9:
case11:
days=30;break;
case2:
if(year%4==0&&year%100!
=0||year%400==0)
days=29;
else
days=28;
break;
}
return__
(2)__;
}
2.字符数组参数
本题分值:
4
题目描述:
编写一个函数,用来求字符串s的任意子串。
函数原型为
voidSubString(chars[],intstart,intlen,chard[]);
其中s是原字符串,d用来存放s中从第start个字符开始(1≤start≤strlen(s)),长度为len的子串。
以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
usingnamespacestd;
intmain()
{
voidSubString(chars[],intstart,intlen,chard[]);
chars[81],d[81];
intm,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";
return0;
}
SubString(__
(1)__);
cout<return0;
}
//从s中第start个字符开始取出长度为len的子串放入d中
voidSubString(chars[],intstart,intlen,chard[])
{
intk,j;
for(j=0,k=start-1;j<=__
(2)__;j++,k++)
d[j]=s[k];
d[len]='\0';
}
3.嵌套调用
本题分值:
6
题目描述:
验证哥德巴赫猜想:
对任意输入的正整数n,验证6~n以内的偶数都可分解为两个素数(质数)之和。
以下程序中,函数booldivide(intn)是用来将偶数n分解为两个质数的;若分解成功,则返回true;否则返回false。
函数boolIsPrime(intm)是用来判断m是否为质数的;若是,则函数返回true;否则返回false。
请在计算机上调试以下程序,补足其中的空格。
代码:
#include
#include
usingnamespacestd;
intmain()
{
booldivide(intn);
inti,n;
cin>>n;
if(n<6)
{
cout<<"输入数据出错\n";
return0;
}
for(i=6;i<=n;i+=2)
if(divide(i)==__
(1)__)//对i进行分解,并判断分解是否成功
{
cout<<"猜想错误\n";
return0;
}
return0;
}
booldivide(intn)
{
boolIsPrime(intn);
inti,m;
for(i=3;i<=n/2;i++)
{
if(!
IsPrime(i))continue;
m=n-i;
if(__
(2)__)break;//若m是素数,则分解已成功,结束该循环
}
if(i>n/2)returnfalse;
cout<returntrue;
}
boolIsPrime(intm)
{
intp,i;
p=sqrt(m);
for(i=2;i<=p;i++)
if(m%i==0)returnfalse;
return__(3)__;
}
4.全局变量
本题分值:
4
题目描述:
编写一函数addup,统计字符串s中字母、数字、空格和其它字符的个数,并且用几个全局变量记录上述统计结果。
以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
usingnamespacestd;
intletter,digit,space,other;//全局变量
intmain()
{
voidaddup(chars[]);
charstr[101];
//cout<<"输入字符串:
\n";
gets(str);
addup(str);
cout<<"字母个数:
"<"<"<"<return0;
}
voidaddup(chars[])
{
inti;
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++;elseif(s[i]>='0'&&s[i]<='9')digit++;
elseif(s[i]==32)space++;
else__
(2)__;
}
5.递归调用
本题分值:
4
题目描述:
用递归方法求n的阶乘n!
,递归公式为
1(n等于0或1)
n!
=
n×(n-1)!
(n大于1)
要求编写递归函数intfact(intn);以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
usingnamespacestd;
intmain()
{
intfact(intn);
intn,f;
//cout<<"请输入整数n(n≥0):
";
cin>>n;
f=fact(n);
cout<="<return0;
}
//求阶乘
intfact(intn)
{
intf;
if(n==0||n__
(1)__)f=1;
elsef=__
(2)__;
returnf;
}
程序设计
1.普通参数
本题分值:
12
题目标题:
判断完数
时间限制:
1000MS
内存限制:
32768KB
题目描述:
判断正整数n是否为完数。
已知一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。
此程序要求编写函数boolwanshu(intn),判断n是否为完数,若n是,则函数返回true;否则返回false。
然后主函数通过该函数的返回值,在屏幕上输出判断结果。
输入描述:
输入一个正整数n。
输出描述:
若n是完数,则输出"yes";否则输出"no"。
样例输入:
28
样例输出:
yes
2.数组参数
本题分值:
12
题目标题:
统计一组数中的奇数之和
时间限制:
1000MS
内存限制:
32768KB
题目描述:
统计输入的10个整数中所有奇数之和。
要求编写函数intoddsum(intarray[],intnum),求出数组array中前num个整数中的奇数之和,并将结果作为函数值返回。
要求主函数必须先输出这10个数,再输出求出的奇数之和。
输入描述:
输入10个整数。
输出描述:
输出其中奇数之和。
样例输入:
97482317455990754992
样例输出:
365
3.嵌套调用
本题分值:
12
题目标题:
求两数的最大公约数和最小公倍数。
时间限制:
1000MS
内存限制:
32768KB
题目描述:
求两个正整数的最大公约数和最小公倍数。
要求,写一个函数求最大公约数:
intGCD(inta,intb),再写一个函数求最小公倍数:
intLCM(inta,intb)。
其中最大公约数函数GCD的算法:
可以参考《实验预习1》中程序填空题5中的算法,也可以使用辗转相除法。
最小公倍数函数LCM的算法:
a、b的最小公倍数等于a*b/a、b的最大公约数。
要求:
最小公倍数函数LCM中嵌套调用函数GCD,以求a、b的最大公约数。
输入描述:
分别输入2个整数。
输出描述:
当输入的数据不是正整数时,显示“ERROR!
”;当输入的数据都是正整数时,依次输出最大公约数x和最小公倍数y,两个数据之间用一个空格隔开。
样例输入:
1218
样例输出:
636
4.数组参数
本题分值:
12
题目标题:
字符串中小写字母转换成大写字母
时间限制:
1000MS
内存限制:
32768KB
题目描述:
编写函数intf(chars[]),将字符串中所有的小写字母转换成对应的大写字母,其他字符不变,并统计被转换字母的个数,将其作为函数值返回。
要求主函数中输入该字符串,最后输出转换后的新字符串,和转换字母的个数。
输入描述:
输入一个字符串。
输出描述:
两行,第一行输出转换后的新字符串,第二行输出被转换的小写字母个数。
样例输入:
ser34GHj
样例输出:
SER34GHJ
4
5.指针参数
本题分值:
12
题目标题:
统计字符串中某字符出现的次数
时间限制:
1000MS
内存限制:
32768KB
题目描述:
输入一个字符串s和一个字符ch,统计并输出字符ch在字符串s中出现的总次数。
改写要求:
编写一个函数,求字符指针p所指向的字符串中,字符ch出现的次数,并将该结果作为函数值返回。
函数原型为
intCountChar(char*p,charch);
输入描述:
输入一个字符串后按回车键,再输入一个字符后回车。
(提示:
输入字符串用gets(s),s为存放字符串的字符数组)
输出描述:
输出为一个正整数,表示字符ch出现的总次数。
样例输入:
bb
a
样例输出:
0