關於C語言學習的問題與收穫 4

2021-09-02 18:14:24 字數 1742 閱讀 2648

1

二分查詢:已知乙個有序陣列,判斷給定的資料x是否在該陣列中,在返回該數在陣列中的位置,不在返回-1。(使用函式)

在search函式中使用while語句,x的數值要大於等於第乙個資料小於等於最後乙個資料,並加上乙個判斷條件,k=-1即為未找到資料,找到了則輸出其位置。初始定義j=n-1和i=0及後面的i=r+1,表示每次使用二分法以後x可能所在資料區間的最後一位資料或第一位資料,while語句中的第乙個條件為r=(i+j)/2,由於定義時定義r為整型資料,所以得到r的整數部分,然後再以a[r]與x比較大小,根據比較情況選擇不同的路徑進行運算,最後得到x的位置,或輸出位置,或列印為未查到該資料:

使用函式來實現尋找資料x的位置的功能,在這之中。利用主函式輸入結果,所需要幹的工作則由其它函式進行,相當於主函式只是用於資料輸入和資料輸出。而定義的函式則用於資料運用和運算。使用函式或許看上去比只用main函式麻煩的多,但是乙個main函式可以呼叫多個函式,在編碼更複雜的**時可以增強可讀性。

2已知一陣列現有n個元素,元素從小到大有序存放,現有資料x,要求將資料x插入到該陣列中,並使得陣列的n+1個元素保持有序。

在這個**中,定義陣列長度為9,a[0]是預留給要插入的資料的空位,從a[1]開始存放資料,定義x為要插入的數,i為迴圈次數,j為元素個數,在主函式內宣告insert函式,呼叫insert函式,在insert(x,a,9)中,x為要插入的元素,a為陣列名,9為陣列長度。在函式中,將x的值賦給a[0],j的值賦給i,利用while迴圈,判斷a[i]是否大於x,如果該條件成立,則把a[i]的值賦給a[i+1]再使i自減,直到a[i]>x不成立為止,跳出while迴圈,再將x的值賦給空出來的位置,即插入x於有序陣列中,再使j自加,最後利用for迴圈將插序後的元素列印出來。

3利用指標將輸入的資料存放再逆序輸出。

「p」中的「」表示該變數是指標變數,「*p」表示指標變數p所指向的變數,p=a即把a陣列的首元素(a[0])的位址賦給指標變數p,而p++則指向a陣列的下乙個元素。(a+10)表示陣列a中第十個元素的位址,p

*p表示所指向的記憶體位址內的存放的資料。但使用過一次p=a時,還要注意在輸出資料時,要重新使p指向a[0],否則由於後續給出的記憶體位址內並未存放資料,會導致輸出一框「空格」。

(如有錯誤,謝謝斧正)

關於C語言學習的問題與收穫 5

輸出二維陣列的有關資料 這個 本身很簡單,但是卻很有利於我們理解指標應用多維陣列。如陣列名a,表示指向一維陣列a 0 也就是0行的起始位址。a 1 就是a 1 而a 1 是唯一陣列名,也是位址,指向a 1 0 所以a 1 為1行0列的元素的值。兩者都是二維陣列元素a 1 0 的不同表示形式。a 1 ...

關於C語言學習的錯誤與收穫 8

1 寫乙個函式,輸入一串字元,要求輸出的字串,兩兩之間有空格隔開。定義乙個插入函式,入口引數和出口引數均為str字元陣列。呼叫strlen函式統計由主函式輸入的字元的個數,然後通過2個賦值表示式將該位置上的字元賦給 2i 的位置,空格賦給 2i 1 的位置上,遍歷完str字元陣列後,輸出插入空格後的...

C 語言學習 4

程式4 題目 輸入某年某月某日,判斷這一天是這一年的第幾天?1.程式分析 以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於3時需考慮多加一天。2.程式源 include stdio.h include conio.h main sum sum da...