学习笔记MOOC《计算机程序设计C++》第五周基础练习

第5周基础练习
将简单的功能,编写成一个个小的函数,形成自己的函数库,以后实现稍微复杂的功能,调用这些函数,会觉得简单、得心应手。

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1求两个数的和(10分)
题目内容:

编写函数,求两个实数的和。编写主函数,输入两个数,调用函数求和,在主函数中显示结果。建议函数名mysum。

输入:两个实数,用逗号隔开。

输出:一个实数。

注意,本题的关键不是求和,关键是要用函数实现。

样例1输入:

1.2 2.4

样例1输出:

3.6

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
double mysum(double a,double b){
	return a+b;
} 
int main(){
	double a,b;
	cin>>a>>b;
	cout<<mysum(a,b);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 372kb
3
用例2通过 2ms 256kb
3
用例3通过 2ms 368kb
2
用例4通过 2ms 368kb
2
提交答案本次得分/总分:10.00/10.00分
2求绝对值的函数(10分)
题目内容:

编写函数,求实数x的绝对值。在主函数中输入实数x,调用函数求绝对值,在主函数中输出。建议函数名 myfabs。

输入:一个实数

输出:绝度值

【注意】不用系统库函数,自己实现,返回绝对值,在主函数中输出!

样例1输入:

-1.25

样例1输出:

1.25

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
double myabs(double a){
	if(a<0)a=0-a;
	return a;
} 
int main(){
	double a;
	cin>>a;
	cout<<myabs(a);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 236kb
3
用例2通过 2ms 256kb
3
用例3通过 3ms 372kb
2
用例4通过 2ms 236kb
2
提交答案本次得分/总分:10.00/10.00分
3x的k次方(10分)
题目内容:

编写函数,求x的k次方,k为整数(可正、可负、可0),0的任何次方为0,任何非0数的0次方为1。编写主函数,输入x和k,调用函数计算x的k次方,在主函数中输出。结果为实数。建议函数名mypow。

输入:x和k,用空格隔开。x为实数,k为整数。

输出:实数,x的k次方。

【注意】用函数实现,使用循环连乘或连除,不使用系统的库函数pow。

样例1输入:

2 -2

输出:

样例1输出:

0.25

样例2输入:

2 3

样例2输出:

8

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
double mypow(double a,int k){
	if(a==0)return 0;
	if(k==0)return 1;
	if(k<0)a=1/a*mypow(a,k+1);
	if(k>1)a*=mypow(a,k-1);
	return a;
} 
int main(){
	double a;int k;
	cin>>a>>k;
	cout<<mypow(a,k);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 19ms 256kb
1
用例2通过 2ms 224kb
1
用例3通过 2ms 236kb
1
用例4通过 2ms 256kb
1
用例5通过 2ms 236kb
1
用例6通过 2ms 256kb
1
用例7通过 2ms 364kb
1
用例8通过 2ms 364kb
1
用例9通过 2ms 256kb
1
用例10通过 2ms 256kb
1
提交答案本次得分/总分:10.00/10.00分
4求n!的函数(10分)
题目内容:

编写函数,求n!,0!=1。编写主函数,输入n,调用函数求阶乘,在主函数中输出结果。

输入:非负整数

输出:阶乘

【注意】必须用函数实现,在主函数中输出结果。函数中不能有cout,printf等屏幕输出。

样例1输入:

6

样例1输出:

720

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int  myjc(int a){
	int s=1;
	for(int i=2;i<=a;++i)
		s*=i;
	return s;	
} 
int main(){
	double a;
	cin>>a;
	cout<<myjc(a);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 380kb
2
用例3通过 2ms 260kb
2
用例4通过 2ms 256kb
2
用例5通过 2ms 364kb
2
提交答案本次得分/总分:10.00/10.00分
5输入数组元素(10分)
题目内容:

编写函数,输入数组元素,输入-9999表示 结束,返回数组元素的个数。在主函数中定义数组,数组大小足够大(满足问题规模要求,本题100即可),调用函数输入数组元素,在主函数中逆序输出数组元素。数组元素为整型。

输入:数据元素,用空格或换行隔开,-9999表示结束。元素个数不超过100个。

输出:逆序输出数组元素,用空格隔开,末尾无空格。

【提示】形参为数组,实参为数组名,在函数中添加数组元素,元素自然返回。函数应使用return返回实际输入的元素个数。

【注意】要用函数实现!!!

样例1输入:

1 2 3 4 5 -9999

样例1输出:

5 4 3 2 1

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int  myli(int a[]){
	int i=0;
	do{
		cin>>a[i];
	}while(a[i++]!=-9999);
	return i;	
} 
int main(){
	int  a[110];
	int i=myli(a)-2;
	for(;i>=0;--i){
		if(i>0)cout<<a[i]<<" ";
		else cout<<a[i];
	}
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 368kb
5
用例2通过 2ms 256kb
5
提交答案本次得分/总分:10.00/10.00分
6输出数组元素值(10分)
题目内容:

编写函数,输出数组元素,用一个空格隔开,末尾无空格。在主函数中定义数组,数组大小足够大(满足问题规模要求,本题100即可),调用上题函数输入数组元素,调用本题函数输出数组元素。数组元素为整型。

输入:数据元素,用空格或换行隔开,-9999表示结束。元素个数不超过100个。

输出:数组元素,用空格隔开,末尾无空格。

注意:要用函数实现!!!

提示:本题不需返回值。

样例1输入:

1 2 3 4 5 -9999

样例1输出:

1 2 3 4 5

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int  myli(int a[]){
	int i=0;
	do{
		cin>>a[i];
	}while(a[i++]!=-9999);
	return i-1;	
} 
void printve(int a[],int myli){
	for(int i=0;i<myli;++i){
		if(i<myli-1)cout<<a[i]<<" ";
		else cout<<a[i];
	}
}
int main(){
	int  a[110],i=myli(a);
	printve(a,i);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 368kb
5
用例2通过 2ms 368kb
5
提交答案本次得分/总分:10.00/10.00分
7将数组元素逆序(10分)
题目内容:

编写函数,将数组元素逆序。编写主函数,定义数组,使用前面编写的函数输入数组元素,调用本题函数逆序数组元素,调用前面编写的输出数组的函数输出。设数组元素为整数,不超过100个。

输入:若干空格或换行隔开的整数,-9999表示结束。

输出:逆序的数组元素,末尾无空格。

【注意】输入、输出、逆序均通过调用函数实现!!!不使用函数的程序无意义。

样例1输入:

1 2 3 4 5 6 7 -9999

样例1输出:

7 6 5 4 3 2 1

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int  myli(int a[]){
	int i=0;
	do{
		cin>>a[i];
	}while(a[i++]!=-9999);
	return i-1;	
} 
void printve(int a[],int myli){
	for(int i=myli-1;i>=0;--i){
		if(i!=0)cout<<a[i]<<" ";
		else cout<<a[i];
	}
}
int main(){
	int  a[110],i=myli(a);
	printve(a,i);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 380kb
5
用例2通过 2ms 380kb
5
提交答案本次得分/总分:10.00/10.00分
8求数组元素的和(10分)
题目内容:

编写函数,求数组元素的和。编写主函数,定义数组,使用前面编写的函数输入数组元素,调用本题函数求和,在主函数中输出和。数组元素为整数,不超过100个。

输入:若干整数,用空格或换行分隔,-9999表示结束。

输出:和

【注意】使用函数,在主函数中输出。

样例1输入:

1 2 3 4 5 -9999

样例1输出:

15

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int  myli(int a[]){
	int i=0,sum=0;
	do{
		cin>>a[i];
		sum+=a[i];
	}while(a[i++]!=-9999);
	return sum+9999;	
} 
int main(){
	int  a[110];
	cout<<myli(a);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
4
用例2通过 2ms 256kb
3
用例3通过 2ms 356kb
3
提交答案本次得分/总分:10.00/10.00分
9求字符串的长度的函数(10分)
题目内容:

编写函数,计算字符串的长度。编写主函数,定义字符数组,输入字符串,调用函数求长度,在主函数中输出字符串的长度。字符串最大长度不超过100。注意,必须用函数实现,不能使用字符串处理的库函数,不能使用string类型。

输入:一个不带空格的字符串

输出:字符串的长度。

【提示】逐个数出字符个数,直到遇到结束符。

样例1输入:

compile

样例1输出:

7

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int  myli(char a[]){
	int i=0;
	while(a[++i]);
	return i;
} 
int main(){
	char a[110];
	cin>>a;
	cout<<myli(a);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 384kb
2
用例2通过 3ms 360kb
2
用例3通过 2ms 256kb
2
用例4通过 2ms 356kb
2
用例5通过 2ms 256kb
2
提交答案本次得分/总分:10.00/10.00分
1010.字符串转大写(10分)
题目内容:

编写函数,将字符串中的所有字母转换为大写。在主函数中定义字符数组,输出字符串,调用函数转大写,在主函数中输出。字符串长度不超过200. 注意,必须用字符数组实现,不能使用字符串处理库函数,也不能使用string类。

输入:字符串,不含空格

输出:大写字符串。

【提示】逐个判断字符是否小写字母,是就转换,不是就不转换,直到字符串结束。

样例1输入:

Short123

样例1输出:

SHORT123

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
void myli(char a[]){
	for(int i=0;i<200;i++){
		if(a[i]<=123&&a[i]>=97)a[i]-=32;
		if(a[i]=='\0') return;
	}
} 
int main(){
	char a[200];
	cin>>a;
	myli(a);
	cout<<a;
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 364kb
2
用例2通过 2ms 380kb
2
用例3通过 2ms 240kb
2
用例4通过 2ms 360kb
2
用例5通过 2ms 236kb
2
提交答案本次得分/总分:10.00/10.00分
11字符串复制函数(10分)
题目内容:

编写函数,将字符串s1复制到字符串s2中,函数格式为:

void  mystrcpy(char s1[],char s2[]);

编写主函数,定义字符数组s1[100],s2[100], 输入字符串s1,调用函数将s1的内容复制到s2中,在主函数中输出s2的内容。要求必须用字符数组实现,不能使用系统的库函数,不能使用string类型。

输入:一个可能带空格的字符串,长度小于100.

输出:字符串。

【提示】逐个复制字符,直到遇到s1的结束符,在s2的末尾添加结束符。本题不需返回值。

【注意】本例的输入输出相同,没有经过函数复制的输出是无意义的。

样例1输入:

be calm

样例1输出:

be calm

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
#define maxn 101
void  mystrcpy(char s1[],char s2[]){
	int i=0;
	for(;i<maxn;++i)
		s2[i]=s1[i];
	s2[i]='\0';
} 
int main(){
	char a[maxn], b[maxn]={0};
	cin.get(a,maxn);
	mystrcpy(a,b);
	cout<<b;
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 368kb
5
用例2通过 3ms 256kb
5
提交答案本次得分/总分:10.00/10.00分
12字符串比较函数(10分)
题目内容:

编写函数,按字母表顺序比较字符串s1,s2,区分大小写,若s1>s2返回1,若s1

字符串的比较就是比较它们在字母表中的顺序,如a在b前,就是a

输入:两个英文字符串,用空格隔开。

输出:1,0,或-1

【提示】逐个比较两个字符串的对应字母,直到不等或有一个结束,根据最后字符的差确定返回值。

样例1输入:

abc ab

样例1输出:

1

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
#define maxn 101
int compar(char s1[],char s2[]){
	int i=0;int cpl=0;
	for(;i<maxn;++i){
		if(s1[i]=='\0'&&s2[i])return -1;
		if(s1[i] && s2[i]=='\0')return 1;
		if(s1[i]=='\0' && s2[i]=='\0')return 0;
		cpl=s1[i]-s2[i];
		if(cpl)break;
	}
	if(cpl>1)cpl=1;
	if(cpl<-1)cpl=-1;
	return cpl;
} 
int main(){
	char a[maxn], b[maxn]={0};
	cin>>a>>b;
	cout<<compar(a,b);
	return 0;	
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 256kb
1
用例2通过 2ms 376kb
1
用例3通过 2ms 256kb
1
用例4通过 2ms 368kb
1
用例5通过 2ms 256kb
1
用例6通过 2ms 256kb
1
用例7通过 2ms 240kb
1
用例8通过 2ms 252kb
1
用例9通过 2ms 240kb
1
用例10通过 2ms 252kb
1
提交答案本次得分/总分:10.00/10.00分

你可能感兴趣的:(C++学习笔记)