學習筆記《計算機程序設計C++》第8週中級練習

第8週中級練習
本週作業應使用指針和函數實現,也可動態申請空間。

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

溫馨提示:

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

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

1IP地址轉換1(10分)
題目內容:

編寫程序,將十進制IP地址轉換爲二進制IP地址。

例如輸入:202.117.0.20,輸出:11001010011101010000000000010100

輸入格式:

字符串形式的十進制點分IP地址。

輸出格式:

字符串表示的32位二進制IP地址

輸入樣例:

202.117.0.20

輸出樣例:

11001010011101010000000000010100

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

#include<iostream>
using namespace std;
void intput(int *a) {
	for (int i = 0;i < 4;++i) {
		cin >> a[i];
		cin.get();// != '.') || ((i == 3 && a[i] < 1) || a[i] < 0 || a[i]>255)) 	
	//		return 1;
	}
//	return 0;
}
void coutip32(int *a) {
	for (int i = 0;i < 4;++i) 
		for (int j = 7;j >= 0;--j) 
			cout << (a[i] >> j & 1);
}
int main(){
	int a[4];
	intput(a);
	coutip32(a);
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
2
用例2通過 3ms 360kb
2
用例3通過 3ms 360kb
2
用例4通過 2ms 256kb
2
用例5通過 2ms 360kb
2
提交答案本次得分/總分:10.00/10.00分
2IP地址轉換2(10分)
題目內容:

編寫程序,將32位二進制IP地址轉換爲十進制點分IP地址。

例如輸入:11001010011101010000000000010100,輸出202.117.0.20

輸入格式:

字符串表示的32位二進制IP地址

輸出格式:

字符串形式的十進制點分IP地址。

輸入樣例:

11001010011101010000000000010100

輸出樣例:

202.117.0.20

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

#include<iostream>
#include<cmath>
using namespace std;
void coutip32(char *a) {
	int n=0,k=0;
	for (int i = 0;i <4;++i) {
		for (int j = 7;j >=0;--j,++k) {
			if(a[k]=='1') n+=pow(2,j);
		}
		 cout<<n;
		if(i<3)	cout <<".";
		n=0;
	}
}
int main(){
	char a[33]={"11001010011101010000000000010100"};
	cin>>a;
	coutip32(a);
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 360kb
2
用例2通過 2ms 372kb
2
用例3通過 2ms 376kb
2
用例4通過 3ms 360kb
2
用例5通過 3ms 360kb
2
提交答案本次得分/總分:10.00/10.00分
3找數據(10分)
題目內容:

編寫程序,找出一個字符串中的所有數據然後加9輸出(實數或整數)。

例如,China Daily | Updated: 2020-04-10 08:5.9,

輸出:

2029

5

-1

17

14.9

單個正號或負號不算數據,但+0,-0都是數據。字符串總長度不超過200.

輸入格式:

一個帶空格的字符串。

輸出格式:

若干行數據。

輸入樣例:

China Daily | Updated: 2020-04-10 08:5.9

輸出樣例:

2029

5

-1

17

14.9

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

#include<iostream>
#include<cmath>
using namespace std;
int main() {
	char a[110] = { "China Daily | Updated: 2020-04-10 08:5.9," };
	cin.getline(a, 100);
	int bl = 0, fh = 1, i = 0, j = 1;
	double suz = 0;
	for (;;) {
		if (a[i] == '-' ) {
			fh = -1;++i;
		}
		while (a[i] >= '0'&&a[i] <= '9') {
			bl = 1;
			suz = 10 * suz + a[i] - '0';
			i++;
		}
		if (a[i] == '.') {
			int t = 1;
			i++;bl = 1;
			while (a[i] >= '0'&&a[i] <= '9') {
				suz += (a[i] - '0') / pow(10, t++);
				i++;
			}
		}
		if (bl)cout<<suz*fh+9<< endl;
		fh = 1;bl = 0;suz = 0;
		if (a[i] == '.' || a[i] == '-')continue;
		if (a[i++] == '\0')break;
	}
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 25ms 372kb
2
用例2通過 3ms 368kb
2
用例3通過 18ms 368kb
2
用例4通過 3ms 368kb
2
用例5通過 19ms 368kb
2
提交答案本次得分/總分:10.00/10.00分
4指針實現矩陣相加(10分)
題目內容:

編寫函數,使用指針傳遞和指針運算,實現兩個矩陣的和。

編寫主程序,輸入兩個矩陣,調用函數求和,在主函數中輸出計算結果。每個矩陣的元素總個數不超過100,但行數、列數不定。矩陣元素爲整數。

輸入格式:

先輸入兩個整數,表示矩陣的行數和列數,然後分別依次按行輸入兩個矩陣的元素。

輸出格式:

兩個矩陣的和,按行、列顯示,用一個空格隔開,每行末尾無空格。

輸入樣例:

2 4

1 2 3 4

5 6 7 8

1 2 3 4

5 6 7 8

輸出樣例:

2 4 6 8

10 12 14 16

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

#include<iostream>
using namespace std;
int main(){
    int n,m;
	cin>>n>>m;
	int *a=new int[n*m],*b=new int[n*m],*ap=a,*bp=b;
	for(;ap<a+m*n;ap++) cin>>*ap;
	int i=1;
	for(;bp<b+m*n;bp++,a++,i++){
		cin>>*bp;
		cout<<*bp+*a;
		if(i%m)cout<<" ";
		else cout<<endl;
	}
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 356kb
2
用例2通過 3ms 360kb
2
用例3通過 3ms 364kb
2
用例4通過 3ms 360kb
2
用例5通過 3ms 364kb
2
提交答案本次得分/總分:10.00/10.00分
5指針實現矩陣相乘(10分)
題目內容:

編寫函數,使用指針傳遞和指針運算,實現兩個矩陣的乘積。

編寫主程序,輸入兩個矩陣,調用函數計算它們的乘積,在主函數中輸出計算結果。每個矩陣的元素總個數不超過100,但行數、列數不定。矩陣元素爲整數。

輸入格式:

先輸入兩個整數,表示矩陣的行數和列數,然後按行輸入第一個矩陣的元素。

再輸入兩個整數,表示第二個矩陣的行數和列數,然後按行輸入第二個矩陣的元素。

輸入保證第一個矩陣的列數和第二個矩陣的行數相等。

輸出格式:

兩個矩陣的乘積,按行、列顯示,每行末尾無空格。

輸入樣例:

2 3

1 1 0

2 1 1

3 2

1 2

2 1

1 0

輸出樣例:

3 3

5 5

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

#include <iostream>
using namespace std;
int main(){
	int m,n,p,q;
	cin >> m >> n;
	int *a=new int[m*n],*ap=a;
	for(;ap<a+m*n; ++ap)
		cin >> *ap;
	cin >> p >> q;
	int *b=new int[p*q],*bp=b;
	for(;bp<b+p*q; ++bp) 
		cin >> *bp;	
	int *c=new int(m*q);
	for(int i = 0; i < m; ++i) {
		for(int j = 0; j < q; ++j) {
			*(c+j+i*q) = 0;
			for(int k = 0; k < n; ++k)
			*(c+j+i*q) += *(a+i*n+k) *(*(b+j+q*k));
		}
	}
	for(int i = 0;i<m;++i){
		for(int j = 0; j < q; ++j) {
			cout << *(c+j+i*q);
			if(j<q-1)cout<< " ";	
		}
		cout << endl;
	}
return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
2
用例2通過 2ms 372kb
2
用例3通過 3ms 256kb
2
用例4通過 2ms 256kb
2
用例5通過 2ms 480kb
2
提交答案本次得分/總分:10.00/10.00分

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