學習筆記MOOC《計算機程序設計C++》第五週基礎練習

第5周基礎練習
將簡單的功能,編寫成一個個小的函數,形成自己的函數庫,以後實現稍微複雜的功能,調用這些函數,會覺得簡單、得心應手。

依照學術誠信條款,我保證此作業是本人獨立完成的。

溫馨提示:

1.本次作業屬於Online Judge題目,提交後由系統即時判分。

2.學生可以在作業截止時間之前不限次數提交答案,系統將取其中的最高分作爲最終成績。

1求兩個數的和(10分)
題目內容:

編寫函數,求兩個實數的和。編寫主函數,輸入兩個數,調用函數求和,在主函數中顯示結果。建議函數名mysum。

輸入:兩個實數,用逗號隔開。

輸出:一個實數。

注意,本題的關鍵不是求和,關鍵是要用函數實現。

樣例1輸入:

1.2 2.4

樣例1輸出:

3.6

時間限制:500ms內存限制:32000kb
C++

#include <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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<s2返回-1,若s1等於s2返回0。在主函數中定義字符數組,輸入字符串,調用函數進行比較,在主函數中輸出結果。

字符串的比較就是比較它們在字母表中的順序,如a在b前,就是a<b)。實際上就是比較它們的ASCII碼。注意,必須用字符數組實現,不能使用字符串處理庫函數,也不能使用string類。字符串的長度不超過200.

輸入:兩個英文字符串,用空格隔開。

輸出:1,0,或-1

【提示】逐個比較兩個字符串的對應字母,直到不等或有一個結束,根據最後字符的差確定返回值。

樣例1輸入:

abc ab

樣例1輸出:

1

時間限制:500ms內存限制:32000kb
C++

#include <iostream>
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分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章