第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分