題目---處理字符四題及預習題


 

2019春第八周作業

這個作業屬於那個課程 C語言程序設計II
這個作業要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3074
我在這個課程的目標是 熟練運用指針
這個作業在那個具體方面幫助我實現目標 指針字符數組的處理
參考文獻 算法入門經典

 

第一題

-1 函數實現字符串逆序 (15 分)

 

本題要求實現一個字符串逆序的簡單函數。

函數接口定義:

void f( char *p );

函數fp指向的字符串進行逆序操作。要求函數f中不能定義任何數組,不能調用任何字符串處理函數。

裁判測試程序樣例:

 1 #include <stdio.h>
 2 #define MAXS 20
 3 
 4 void f( char *p );
 5 void ReadString( char *s ); /* 由裁判實現,略去不表 */
 6 
 7 int main()
 8 {
 9     char s[MAXS];
10 
11     ReadString(s);
12     f(s);
13     printf("%s\n", s);
14 
15     return 0;
16 }
17 
18 /* 你的代碼將被嵌在這里 */

輸入樣例:

Hello World!

輸出樣例:

!dlroW olleH

 

實驗代碼

 1 void f(char * p)
 2 {
 3     int len = strlen(p);
 4     for(int i = 0 ; i < len/2 ; i++){
 5     char a = p[i];
 6     p[i]=p[len-i-1];
 7     p[len-i-1]=a;
 8 }
 9 
10     return;
11 }

設計思路

 

 

實驗過程中遇到的問題及解決方法

一開始把P[len-i-1]粗心換成了P[len-i]導致最后一個元素出差錯

運行結果截圖

 

第二題

6-3 字符串的連接 (15 分)

 

本題要求實現一個函數,將兩個字符串連接起來。

函數接口定義:

char *str_cat( char *s, char *t );

函數str_cat應將字符串t復制到字符串s的末端,並且返回字符串s的首地址。

裁判測試程序樣例:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAXS 10
 5 
 6 char *str_cat( char *s, char *t );
 7 
 8 int main()
 9 {
10     char *p;
11     char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
12 
13     scanf("%s%s", str1, str2);
14     p = str_cat(str1, str2);
15     printf("%s\n%s\n", p, str1);
16 
17     return 0;
18 }
19 
20 /* 你的代碼將被嵌在這里 */

輸入樣例:

abc
def

輸出樣例:

abcdef
abcdef

 

實驗代碼

1 char *str_cat( char *s, char *t )
2 {
3     return  strcat(s,t);
4 }

 

設計思路

 

本題調試過程中遇到的問題及解決方法

運行結果截圖

 

 

第三題

7-1 輸出學生成績 (20 分)

 

本題要求編寫程序,根據輸入學生的成績,統計並輸出學生的平均成績、最高成績和最低成績。建議使用動態內存分配來實現。

輸入格式:

輸入第一行首先給出一個正整數N,表示學生的個數。接下來一行給出N個學生的成績,數字間以空格分隔。

輸出格式:

按照以下格式輸出:

average = 平均成績
max = 最高成績
min = 最低成績

結果均保留兩位小數。

輸入樣例:

3
85 90 95

輸出樣例:

average = 90.00
max = 95.00
min = 85.00
 

實驗代碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(int argc, const  char * argv[])
 5 {
 6     double * num;
 7     double N,sum,max=0,min=101;
 8     cin >> N;
 9     num = (double *)malloc(N * sizeof(double));
10 
11     for (int i = 0; i < N; i++)
12     {
13         cin >> num[i];
14         sum += num[i];
15         if (num[i] > max)
16             max = num[i];
17         if (num[i] < min)
18             min = num[i];
19     }
20     double average = sum / N;
21         printf("average = %.2f\n", average);
22     printf("max = %.2f\n", max);
23     printf("min = %.2f\n", min);
24 
25     free(num);
26     return 0;
27 }

 

設計思路

 

本題調試過程中遇到的問題及解決方法


運行結果截圖

 

 

第四題

7-4 字符串排序 (20 分)

 

本題要求編寫程序,讀入5個字符串,按由小到大的順序輸出。

輸入格式:

輸入為由空格分隔的5個非空字符串,每個字符串不包括空格、制表符、換行符等空白字符,長度小於80。

輸出格式:

按照以下格式輸出排序后的結果:

After sorted:
每行一個字符串

輸入樣例:

red yellow blue green white

輸出樣例:

After sorted:
blue
green
red
white
yellow
 

實驗代碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(int argc, const  char * argv[])
 5 {
 6     string s;
 7     vector<string> str;
 8     for (int i = 0; i < 5; i++)
 9     {
10         cin >> s;
11         str.push_back(s);
12     }
13     for (int i = 0; i < 4; i++)
14     for (int j = i; j < 5; j++) { if (str[i][0] > str[j][0]) { string s = str[i]; str[i] = str[j]; str[j] = s; } }
15     cout<<"After sorted:"<<endl;
16     for(int i = 0 ; i < 5 ; i++)cout<<str[i]<<endl;
17     return 0;
18 }

 

設計思路

 

本題調試過程中遇到的問題及解決方法

運行結果截圖

 

預習題

7-3 計算平均成績 (15 分)

 

給定N個學生的基本信息,包括學號(由5個數字組成的字符串)、姓名(長度小於10的不包含空白字符的非空字符串)和成績([0,100]區間內的整數),要求計算他們的平均成績,並順序輸出平均線以下的學生名單。

輸入格式:

輸入在一行中給出正整數N(≤10)。隨后N行,每行給出一位學生的信息,格式為“學號 姓名 成績”,中間以空格分隔。

輸出格式:

首先在一行中輸出平均成績,保留2位小數。然后按照輸入順序,每行輸出一位平均線以下的學生的姓名和學號,間隔一個空格。

輸入樣例:

5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60

輸出樣例:

80.00
zhang 00001
chen 21987
 

實驗代碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 struct students {
 5     int Fraction;
 6     char ID[6];
 7     char name[20];
 8 };
 9 
10 int main(int argc, const  char * argv[])
11 {
12     struct students nummber[100];
13     int T;
14     double sum=0, average;
15     cin >> T;
16     for (int i = 0; i < T; i++)
17     {
18         cin >> nummber[i].ID >> nummber[i].name >> nummber[i].Fraction;
19         sum += nummber[i].Fraction;
20     }
21     average = sum / T;
22     printf("%.2f\n", average);
23     for (int i = 0; i < T; i++)
24     {
25         if (nummber[i].Fraction < average)
26             cout << nummber[i].name << " " << nummber[i].ID << endl;
27     }
28     return 0;
29 }

 

設計思路

 

本體調試過程中遇到的問題及解決方法

運行結果截圖

 

 結對編程感想:搭檔還是比較熱愛學習的,許多不懂的問題都及時的解決了,能力提升非常快,有很明顯的進步,我也得向搭檔學習學習,不斷的超越自我,學習新的東西。

學習總結: 存在的問題 心得 完成作業消耗時間 本周學習內容
第一周 對文件讀取數據的運用不是很熟練 多去看關於刷題的書籍,有助於提高自己寫題能力,實在不會的可以參考大佬的代碼,加以自己理解之后去默寫幾遍 半個小時左右 文件輸入,BFS,DFS,PARTITION算法及簡單的貪心算法
第二周 對單純用數組完成雙向鏈表的操作還是太生疏了,說明對雙向鏈表的運作原理不熟 推薦兩本比較好的書《挑戰程序設計》《算法競賽》 半個小時左右 vector數組及list雙向鏈表操作

第三周

指針的概念太久沒記有點生疏了 對vector數組使用愈加熟練 一小時左右 數據結構
第四周 對聯通二維數組的最大子數和自閉了 多看些算法,不然寫題目用什么方法去解決都弄不清 基礎題目10分鍾,挑戰作業現在都在自閉中 迭代器
第五周 最小權值路徑最優解該用什么解法 多思考一下如何優化自己的代碼,會有新的收獲 一個小時 遞歸和分治法
第六周 指針類型的轉換 能用數據結構解決的問題就用數據結構 半小時 windows函數

 

系列一:博客字數 系列二:代碼行數

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM