學習筆記《計算機程序設計C++》第8周編程作業

第8周編程作業
本作業是在線評測形式。提交源程序,系統自動評測,可多次提交。輸出格式嚴格按題目要求,參考給出的樣例。大小寫、中英文、空格數量都必須嚴格。

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

溫馨提示:

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

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

1輸出數字的英文名稱(20分)
題目內容:

編寫一個函數,將表示數字的數值(0-12)轉換成對應的英文名稱(小寫)。用戶輸入阿拉伯數字,程序輸出對應數的英文單詞。要求必須使用指針數組完成。

輸入格式:

0-12的數

輸出格式:

輸入數字對應的英文單詞,均爲小寫字母

【提示】:函數格式: char * digitName(int n);

輸入樣例:

1

輸出樣例:

one

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

#include<iostream>  
using namespace std;
char str[][10] = { "zero","one", "two", "three" ,"four","five","six","seven","eight","nine","ten","eleven","twelve" };
int main()
{
	char(*p)[10] = str;
	int number;
	cin >> number;if(number>=0&&number<13)cout << p[number];
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 14ms 368kb
4
用例2通過 2ms 368kb
4
用例3通過 2ms 256kb
4
用例4通過 14ms 372kb
4
用例5通過 2ms 372kb
4
提交答案本次得分/總分:20.00/20.00分
2去除字符串首尾多餘的空格(20分)
題目內容:

用戶輸入一個字符串,首尾有多餘的空格,編寫程序來去除這些多餘的空格。要求必須使用指針來完成本題。

輸入格式:

一個首尾有多餘空格字符串。爲了便於標識出尾部的空格,在字符串尾部額外添加了個#號表示字符串結束。字符串內部保證不會出現#號。

輸出格式:

去除空格後的字符串,同樣在在字符串尾部額外添加了個#號表示字符串結束。

輸入樣例:

my score #

輸出樣例:

my score#

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

#include<iostream>  
using namespace std;
char str[100];
int main()
{
	char*p = str;
	cin.getline(str, 100);
	while (*p == ' ')++p;
	char *q = p;
	while (*(q) != '#')++q;
	--q;
	while (*(q) == ' ')--q;
	*(q + 1) = '#';*(q + 2) = '\0';
	cout << p;
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 376kb
7
用例2通過 2ms 364kb
7
用例3通過 2ms 256kb
3
用例4通過 3ms 360kb
3
提交答案本次得分/總分:20.00/20.00分
3遍歷二維數組(20分)
題目內容:

用戶首先輸入兩個整數m和n,然後輸入mn個元素,建立一個mn的二維數組。要求使用 行指針 來遍歷這個二維數組,輸出該數組中所有元素的和。

輸入格式:

首先輸入兩個整數m和n,然後依次輸入m*n個元素

輸出格式:

二維數組中所有元素的和

輸入樣例:

2 3

1 3 5

2 4 6

輸出樣例:

21

提示:動態申請二維數組的方法

//動態申請二維數組
#include
using namespace std;
int main()
{
int **a; //指向指針的指針
int n,m;//n行 m列
int i,j;
cin>>n>>m; //輸入行數和列數

//申請空間
a= new int * [n];  //n個 int 指針 數組
for(i=0;i<n;i++)    //n個大小爲m的一維數組
{
    a[i]=new int[m]; //1個大小爲m的一維數組,a[i]是int指針
} 

//輸入數據
for(i=0;i<n;i++)
{
    for(j=0;j<m;j++)
    {
        //cin>>a[i][j];//輸入 
        cin>> *(*(a+i)+j);//同上a相當於行指針 

    }
}

//輸出數據
for(i=0;i<n;i++)
{
    for(j=0;j<m;j++)
    {
        //cout<<a[i][j]<<"\t";//輸出 
        cout<< *(*(a+i)+j)<<"\t";

    }
    cout<<endl;
}
//釋放申請的空間!!!
for(i=0;i<n;i++) //釋放n個大小爲m的一維數組
{
    delete []a[i]; 
}
delete []a;//釋放int指針數組
return 0;

}

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

//動態申請二維數組
#include <iostream>
using namespace std;
int main()
{   
    int **a;  //指向指針的指針 
    int n,m;//n行 m列 
    int i,j;
    cin>>n>>m; //輸入行數和列數
 
    //申請空間
    a= new int * [n];  //n個 int 指針 數組
    for(i=0;i<n;i++)    //n個大小爲m的一維數組
    {
        a[i]=new int[m]; //1個大小爲m的一維數組,a[i]是int指針
    } 
 
    //輸入數據
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            //cin>>a[i][j];//輸入 
            cin>> *(*(a+i)+j);//同上a相當於行指針 
 
        }
    }
 
    //輸出數據
int sum=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            //cout<<a[i][j]<<"\t";//輸出 
          //  cout<< *(*(a+i)+j)<<"\t";
 sum+= *(*(a+i)+j);
        }
      //  cout<<endl;
    }
cout<<sum;
    //釋放申請的空間!!!
    for(i=0;i<n;i++) //釋放n個大小爲m的一維數組
    {
        delete []a[i]; 
    }
    delete []a;//釋放int指針數組
    return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 256kb
7
用例2通過 2ms 244kb
7
用例3通過 2ms 372kb
6
提交答案本次得分/總分:20.00/20.00分
4動態申請大數組(20分)
題目內容:

本題要求編寫兩個函數並測試。

第一個函數原型爲 int *new_array(int n); 該函數可以根據參數n動態申請n個元素的整型數組,最後將數組指針返回。

第二個函數原型爲 void init_array(int *p, int n,int c); 將指定的n個元素的數組每個元素的值均初始化爲c。

用戶輸入數組大小n和待初始化的值c,調用new_array函數申請空間,再調用init_array初始化,最後輸出這個數組的所有元素。

輸入格式:

數組大小n和待初始化的值c

輸出格式:

數組的所有元素,注意最後一個元素後沒有空格

輸入樣例:

8 27

輸出樣例:

27 27 27 27 27 27 27 27

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

#include <iostream>
using namespace std;
int *new_array(int n) {
	int *p = new int[n];
	return p;
}
void init_array(int *p, int n, int c) {
	while (n) {
		*p = c;
		--n;++p;
	}
}
int main()
{

	int n, m, *q;
	cin >> n >> m;
	q = new_array(n);
	init_array(q, n, m);
	cout << *q;
	int *p = q;
	while (--n)cout <<" "<< *(++p);
	delete[]q;//釋放int指針數組
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 360kb
7
用例2通過 2ms 376kb
7
用例3通過 3ms 360kb
6
提交答案本次得分/總分:20.00/20.00分
5矩陣對角線元素之和(20分)
題目內容:

編寫函數,求n階方陣的對角線元素之和。編寫主程序,用戶輸入矩陣的階數n,動態申請n*n的存儲空間,再輸入n行、n列的元素,調用函數求矩陣的對角元素之和,在主函數中輸出這個和。設元素均爲整數。n>=1。

函數格式:int sumDiagonal(int *a,int n);

輸入格式:

一個正整數n,表示矩陣的階數。

n行、n列的矩陣元素。數據間用空格隔開。

輸出格式:

一個整數

輸入樣例:

3

6 1 2

1 13 6

62 4 35

輸出樣例:

54

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

#include <iostream>
using namespace std;
int sumDiagonal(int *a, int n) {
	int sum = 0;
	for (int i = 0; i < n; ++i)
		for(int j = 0; j < n; ++j){
			cin >> *(a + i * n + j);
			if(j == i)sum += *(a + i * n + j);
	}
	return sum;
}
int main()
{
	int n;
	cin >> n;
	int *p = new int[n*n];cout << sumDiagonal(p, n);
	delete[]p;//釋放int指針數組
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 252kb
4
用例2通過 2ms 364kb
4
用例3通過 2ms 248kb
4
用例4通過 2ms 256kb
4
用例5通過 2ms 256kb
4
提交答案本次得分/總分:20.00/20.00分
6(本題只記3分)十進制點分IP轉換爲32位二進制IP(3分)
題目內容:

編寫程序,將十進制點分的IP轉換爲32位二進制IP地址。程序要能驗證輸入的十進制點分IP地址的合法性。用戶輸入的IP不和法時,輸出"data error"。

請使用模塊化程序設計的思想,將功能模塊編寫成函數。通過指針傳遞參數,操作數據,返回結果。在主函數中輸入IP地址,調用函數進行合法性驗證和轉換,在主函數中輸出32位二進制IP。

輸入格式:

十進制點分IP地址(英文句點)

輸出格式:

32位二進制數(二進制字符串)

輸入樣例:

202.151.96.33

輸出樣例:

11001010100101110110000000100001

提示:十進制轉換爲二進制。對整數部分,除2取餘,直到商爲0。例如

13/2=6…1(低位)

6/2=3…0

3/2=1…1

1/2=0…1

轉換後的二進制數位1101

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

#include<iostream>
using namespace std;
bool intput(int *a) {
	for (int i = 0;i < 4;++i) {
		cin >> a[i];
		if ((i < 3 && 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];
	if(intput(a))cout << "data error";
	else coutip32(a);
	return 0;
}

用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 392kb
1
用例2通過 3ms 380kb
1
用例3通過 2ms 380kb
1
提交答案本次得分/總分:3.00/3.00分

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