C語言部落格作業05 指標

2022-05-30 12:57:09 字數 3637 閱讀 7368

#define n 100
字串的輸入

(1) scanf("s", 字元陣列名);

特點:scanf函式遇到回車或者空格輸入結束,並自動將輸入的一串字元和'\0'送入陣列中

(因此使用時需注意:scanf語句無法接受帶空格的字串)

(2) fgets(陣列名,接收長度,stdin);

特點:讀取到換行符、檔案尾或者讀完n - 1個字元結束。若接收長度為n, 當輸入字元超過n時,還是正常接收n - 1個字元,並且第n個字元為'\0'。

優點是解決了輸入字元超出字元陣列的大小的溢位問題

缺點是當輸入字元不足n - 1時,結束後回車符會被自動吸收。

(通常利用fgets輸入,迴圈條件輸出時需注意)

for (i = 0; a[i] && a[i] != '\n'; i++)//需注意語句2的寫法

(3)利用迴圈輸入(當要求以特定字元結束時一定要使用迴圈輸入的方法!!!)

while((str[i])=getchar()!='\n')

str[i] = '\0';

(注意要加上結束符,否則輸出時會出現亂碼)

字串的輸出

(1) printf("%s", str);

printf("%s", "hello");

輸出常數可以是字元陣列或字串常量,輸出遇到'\0'結束.

(2) puts(str);

puts("hello");

特點:輸出字串後自動換行

(3)迴圈輸出

char str[80];

for (i = 0; str[i] != '\0'; i++) putchar(str[i]);

一維陣列:

int a[n];

int i;

for (i = 0; i < n; i++);

二維陣列:

int a[n][m];

int i, j;

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

字串陣列:

char a[max];

for(i=0;a[i]!='\0';i++)//語句2也可以是a[i]。

//當以特定字元結束時,如以回車符結束時:語句2應為a[i]&&a[i]!='\n'

二分查詢法:

int a[n];

int low=0, high=n-1, mid=(low+high)/2;//low,high,分別為左右兩邊界,mid為中間值。並且為該元素的下標。

int key;//key為所要查詢的數

int loc;//找到位置時的下標

while (low <= high)//注意跳出迴圈的條件是左邊界大於右邊界

if(若左邊界大於右邊界)//說明走遍while迴圈了並未找到該數

則輸出找不到該數的提示

假設需要插入陣列是從小到大排序時

int i;

int loc;//為要插入位置的下標

for i = 0 to n-1

if (a[i] > number)

loc = i;

for i = n to loc+1 //由於插入資料,所以陣列長度增大,從n開始移動

將前乙個的值賦給後面

最後在找到的插入位置中插入所要求的資料

編寫刪除資料的封裝函式時,利用 陣列有效長度的指標!較為簡便。

其可在調整完陣列元素後,就改變該陣列有效長度,為下一次的刪除操作做好了準備。

因此利用陣列有效長度的指標 ,同樣可以適用在編寫插入陣列操作的函式中!

以下為刪除資料操作的分裝函式偽**

void delete(int a, int* n)

return 0;

}函式different(int y, int n)

;//個位數由0到9

int count = 0;//為不同的個數

int i;

for i = 0 to i = 3

for i = 0 to i = 9

if (當統計的不同個數count等於目標不同個數n時)

else return 0;

}

2.3.2 **截圖

2.3.3 造測試資料

輸入資料

輸出資料

說明1001 2

0 1001

該年即是所要求年份,x=0

1988 4

25 2013

最大n2010 3

1 2011

一般samlpe

2.3.4 pta提交列表及說明

1.部分錯誤:

是當時只測試了測試樣例1,然後就提交了pta,沒有注意樣例2中,應該從該出生年份就開始比較。

因此while恆真迴圈中,調整了語句順序,先呼叫函式判斷然後再將變數自增。

2. 部分錯誤:

測試樣例時,改正了1.的錯誤後並測試成功,但是提交pta還是顯示不正確,於是我又再次測試普通測試樣例1,發現這回的輸出結果就不正確了,而且新增printf語句進行檢查,發現問題出在判斷年份不同數字的封裝函式中。由於**量較小,於是我開始直接檢查**的演算法等是否正確,演算法很簡單應該是正確的。於是我又輸入樣例1,進行逐語句測試,這才發現了錯誤。

由於利用hash陣列判斷是否重複出現的過程中,定義時利用了靜態變數的定義方式,由此在多次迴圈中,hash陣列賦值0的情況僅在第一次迴圈時才起作用,而當年份不滿足情況時,此後再利用hash陣列判斷時仍保留之前的記錄,影響了後續的判斷。

該題目的錯誤較簡單,但是由此我對static靜態變數有了更深的理解,所以選擇本題。感覺雖然上課也有講過驚天變數,其賦初值僅在第一次生效,其後變數值保留上一次操作的值。但在後續的題目以及應用中,感覺我們利用static的主要功能都是為了給元素都賦值0,忽略了其靜態的性質。我們通常可在迴圈中利用靜態變數,由於是封裝了函式,所以較容易忽略迴圈也能影響到封裝函式中的靜態變數這一點。

該**的主要功能就是先跟據題目給出的日曆規則判斷輸入日期是否合法,然後根據題目要求輸出給定日期所在的工作日。

該**利用陣列儲存月份,星期日,以及閏年非閏年的每月的天數。

利用函式,分裝了判斷是否合法,是否閏年,以及計算星期日的函式,使得主函式簡潔明瞭。函式可讀性強,思路清晰。

C語言部落格作業05 指標

1.2.1 學習體會 老師這次沒布置課堂派預先作業就直接開講,感覺上課聽的不是很懂。1.2.2 累計 125分 字串的氣泡排序 3.1.1 演算法分析 輸入n,k n 定義二維陣列a和臨時陣列temp for i 0 to n do gets a i end for for i 1 to k do ...

C語言部落格作業05 指標

2.指標變數用於存放位址,在函式中呼叫指標可以進行位址的傳輸,從而可以改變位址的內容,減少全域性變數和區域性變數的使用 3.陣列在函式中進行傳輸時,若函式的形參為指標變數,可以直接傳輸首位址,而陣列名就代表首位址 4.本章還學習了字串連線函式strcat 字串比較函式strcmp,字串長度行數 st...

C部落格作業05 指標

展示關於 指標題目集 分數截圖。每個知識點具體展開介紹。包括指標如何指向字串 字串相關函式及函式 原型的理解 字串相關函式用法 擴充套件課堂未介紹內容 具體格式是什麼,注意事項。為什麼要動態記憶體分配,堆區和棧區區別。動態記憶體分配相關函式及用法。舉例為多個字串做動態記憶體要如何分配。多個字串用二維...