題目---英文單詞排序及指針選擇題


 

2019春第五周作業:

作業課程 C語言程序設計II
作業要求 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2824
課程目標 背熟棧,隊列,向量函數及熟練指針
從作業中得到的幫助 熟練使用Vector
參考文獻 挑戰程序設計

 

 

 

 

 

7-1 英文單詞排序 (25 分)

本題要求編寫程序,輸入若干英文單詞,對這些單詞按長度從小到大排序后輸出。如果長度相同,按照輸入的順序不變。

輸入格式:

輸入為若干英文單詞,每行一個,以#作為輸入結束標志。其中英文單詞總數不超過20個,英文單詞為長度小於10的僅由小寫英文字母組成的字符串。

輸出格式:

輸出為排序后的結果,每個單詞后面都額外輸出一個空格。

輸入樣例:

blue
red
yellow
green
purple
#

輸出樣例:

red blue green yellow purple 

 

 

簡單思路:一開始本來想用結構體記錄單詞長度及位置,后面覺得太麻煩了,想到為何不用數據結構來直接處理字符串呢?然后理所當然地就用到了之前博客提到Vector(向量)數組,可以將輸入的字符串內容存進里面逐一處理,這樣問題就變的很簡單了。

老規矩,先把解決算法寫上來,之后再擺文件代碼,便於理解(此次文件代碼用的是C++中的函數,可以去百度了解一下)

實驗代碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main ( int argc , const char * argv[])
 5 {
 6     string zf;//定義一個字符串變量  7     vector<string> str;//聲明一個存string類型的vector數組  8     int count=0;//記錄單詞數  9     while(cin>>zf){if(zf[0]=='#')break;str.push_back(zf);count++;}//如果不是#號則壓入Vector 10     for(int i = 0 ; i < count - 1 ; i++)
11     for(int j = i ; j < count ; j++){if(str[i].length()>str[j].length()){string s = str[i];str[i]=str[j];str[j]=s;}}//交換位置 12     for(int i = 0 ; i < count ; i++)cout<<str[i]<<" ";
13     return 0;
14 }

 

 

 

實驗代碼(文件)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main ( int argc , const char * argv[])
 5 {
 6 
 7     fstream fp("D:\\wj.txt");
 8     fp.is_open()?cout<<"OK"<<endl:cout<<"fail"<<endl;
 9     char zf[100];
10     vector<string> str;
11     int count=0;
12 /*    while(!fp.eof()){  //注釋代碼可以自己去掉注釋,可以觀察取值過程 13     fp.getline(zf,100);
14     cout<<zf<<endl;
15     }
16 */
17     while(fp.getline(zf,100)){if(zf[0]=='#')break;str.push_back(zf);count++;}
18     for(int i = 0 ; i < count - 1 ; i++)
19     for(int j = i ; j < count ; j++){if(str[i].length()>str[j].length()){string s = str[i];    str[i]=str[j];str[j]=s;}}
20     for(int i = 0 ; i < count ; i++)cout<<str[i]<<" ";
21     
22 
23         for(int i = 0 ; i < count ; i++)
24         fp<<str[i]<<" ";
25 
26 
27 
28     return 0;
29 }

 

設計思路

 

 

 

 

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

問題:Vector數組相應類型變量的聲明和對應變量的調用方式使用過程生硬

解決方案:反復使用標准庫中的模板去嘗試,逐漸熟練。

 

運行結果截圖

 

 

 

----------------------------------------------------------------------------------------------------------------------------

選擇題

預習內容:其實也不能算是預習內容..指針很久之前就過了一遍,算是半知半解吧,現在回過頭來復習,主要內容就是連接鏈表,多級指針的運用,以及自定義函數中利用指針可以非常非常非常方便的有多個返回值(簡單來說自定義函數中一般只能return一個特定值,但指針沒有這個限制,想返回多少返回多少,可以說是特別方便了),不過現在大部分用不着,因為一般解題一個返回值或者直接用布爾類型的就解決了,暫時沒有刷到需要多個返回值的題(可能我太菜了),總的來說本章最重要的了解指針變量是什么,指針是用來干嘛的,給你一個指針你可以用來完成什么操作,這就是預習的內容了。

 

預習中的疑惑:1.一個指針訪問一次內存地址的耗時

                         2.創建一次鏈表需要的時間對整個程序的影響

                         3.如何能夠有效避免浪費內存空間

下面是這次預習題的我選的答案,僅限參考,全錯就尷尬了,畢竟概念這種東西很久沒去看了(手動滑稽)

2-1

下列語句定義 x 為指向 int 類型變量 a 的指針,正確的是()。 (2分)

 

2-2

int *p 的含義是 (2分)

 

2-3

如果有定義:int m, n = 5, *p = &m; 與m = n 等價的語句是 () 。 (1分)

 

2-4

變量的指針,其含義是指該變量的( )。 (1分)

 

2-5

有如下程序段

int *p,a=10,b=1;
p=&a; a=*p + b;

執行該程序段后,a的值是 (2分)

 

2-6

對於下列程序,正確的是() 。 (2分)

void f(int *p)
{
      *p = 5;
}
int main(void)
{
      int a, *p;

      a = 10;
      p = &a;
      f(p);
      printf(“%d”, (*p)++);

      return 0;
}

 

 

2-7

執行如下程序段,打印輸出的內容是: (2分)

#include <stdio.h>
void fun (int c, int *d) {
    c++;
    (*d)++;
}
int main ( ){
    int a=5, b=9;
    fun(a, &b);
    printf("%d, %d", a, b);
    return 0;
}

 

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

 

 

結對編程感想:我的搭檔不止一個..結對編程的過程中很有趣,能互相收獲許多知識,許多忘掉的知識點在搭檔們的幫助下又漸漸回憶起來,而且能夠互補,許多地方我可能並不是很清楚,但一起查資料並且互相解釋一遍后,對知識點的鞏固特別有幫助,希望和搭檔一起加油!

 

 

 

挑戰題博客地址:https://www.cnblogs.com/xiangqi/p/10603408.html

也可以直接點擊我的博客去查看。


免責聲明!

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



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