最近在練習c**的程式設計題目,隨著題目的難度增加,**長度也在增加,今天在這裡給大家分享兩道程式設計題目。
(1)編寫**在乙個整形有序陣列中查詢具體的某個數。要求是找到了就列印數字所在的下標,找不到則輸出:找不到
(2)猜數字遊戲。
這道題是要求在乙個整形陣列中去查詢任意的乙個數字,如果在陣列中能夠找到,則列印出這個數字所在陣列中的下標,找不到則輸出找不到。
這個題目我使用了函式的方法去實現題目中的要求,第一步,需要建立乙個整形陣列arr,必須是有序的陣列,公升序或者倒序都可以。第二步,建立乙個變數,使用者在螢幕上輸入乙個需要查詢的整數k,第三步,呼叫函式傳遞引數進行查詢。
上述為實現這個功能的具體步驟,重點在於第三步,如何編寫具體函式**進行查詢k,我用的是二分法查詢,二分查詢的前提就是這個陣列是有序的,每次我們找中間下標的值與k進行比較,根據這個兩個數的大小更改要查詢的區間範圍,不斷縮小範圍,最終就可以進行查詢了。
首先函式無返回,在函式體中進行查詢,找到了直接列印下標,找不到輸出找不到,函式傳參需要將陣列首元素位址傳過去,還有要查詢的整數k,那這裡需不需要將左右下標傳過去呢?答案是要傳過去,因為已知我們傳過去首元素的位址,根據首元素位址我們不能使用sizeof(arr)/sizeof(arr[0])計算出元素的右下標,因為在這裡sizeof(arr),arr是乙個位址,在32位平台下sizeof(arr)等於4,因此sizeof(arr)/sizeof(arr[0])等於1,並不是我們所期待的值,因此我們需要將左右下標傳過去。這是關於函式返回和函式引數的設定,下面我們介紹函式體怎麼編寫。
這裡假設陣列是公升序的,函式體內部負責查詢k,先定義乙個mid變數,表示中間下標,當左下標小於等於右下標時,就需要進行判斷中間下標的值與k的大小,這裡需要迴圈,每次進入迴圈體,就需要計算中間下標的值。
(1)中間下標的值大於k的大小,那我們查詢的範圍就應該在陣列左半邊,因此需要更改右下標的值。
(2)中間下標的值小於k的大小,那我們查詢的範圍就應該在陣列右半邊,因此需要更改左下標的值。
(3)中間下標的值等於k的大小,那我們就找到了,此時mid就是這個值的下標,列印出來即可。
當左下標大於右下標時,此時不進入迴圈,說明找不到了。到這裡整個函式就編寫完成了。
實現c**如下。
#include
void
find
(int a,
int left,
int right,
int k)
else
if(a[mid]
> k)
else}if
(left > right)
}int
main()
;int k =0;
int left =0;
int right =
sizeof
(arr)
/sizeof
(arr[0]
)-1;
scanf
("%d"
,&k)
;find
(arr, left, right, k)
;return0;
}
這道題是要求完成乙個猜數字的小遊戲,這裡需要多個函式互相配合完成。
這個題目呢要求完成乙個猜數字的小遊戲,電腦隨機的產生乙個1~100的數字num,然後從螢幕上獲取使用者猜測的數字a,如果a大於num,則輸出猜大了,繼續猜測,如果a小於num,則輸出猜小了,繼續猜測,當a等於num時,輸出猜對了,進行下一次遊戲。
要完成這個題目,分為兩步,第一步,輸出選單,使用者可以選擇玩遊戲,也可以選擇退出遊戲。第二步就是玩遊戲,因此這裡需要定義兩個函式。下面我們進行具體細節的介紹。
主函式中需要進行迴圈,一次遊戲完成後可以繼續進行下一次遊戲,這裡定義乙個選單函式,這個函式只是基礎資訊的列印,在主函式迴圈體中進行呼叫。主函式內部接著從螢幕上獲取使用者的選擇,可以選擇玩遊戲,也可以選擇退出遊戲。
如果使用者選擇玩遊戲,那麼呼叫玩遊戲的函式,玩遊戲函式的函式體中使用rand函式產生乙個隨機數num,使用迴圈,在迴圈體中進行判斷,迴圈體內部從螢幕獲取猜測的數字a,當a=num時,退出迴圈,其他情況輸出對應的語句,繼續進行迴圈猜測。
這樣整個程式的大概框架就完成了,在主函式中呼叫即可,具體的c**如下。
#include
#include
#include
void
menu()
void
play()
else
if(a>num)
else}}
intmain()
case2:
default:}
}return0;
}
這次的程式設計題目就總結到這裡,希望大家來批評指正,期待下一次練習題的總結!謝謝大家。 C語言日常練習題(一)
今日的程式設計練習題。1 列印100 200之間的素數。素數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。列印100 200之間的素數。素數 只能被一和其本身整除的數。include include intmain if j i printf d i system pause retu...
C語言陣列練習題目
1 編寫程式,輸入10個整數存入一維陣列,統計輸出其中的正數 負數和零的個數。include main for i 0 i 10 i printf 正數 d,零 d,負數 d j,k,l 2 編寫程式,輸入10個整數存入一維陣列,再按逆序重新存放後再輸出 include main 3 輸入10個整數...
c語言作文的題目 c語言練習題目
解題報告寫 1.2.3.4.5.6 不寫挑戰題 1.小李發獎金 money.cpp pas c 題目描述 當然打撞球只是小李的休閒娛樂活動,對待他的本職工作,他還是非常兢兢業業的。但是小李的老闆是個周扒皮,每次都想剋扣小李的工資和獎金,甚至制定出非常奇葩的規則。又到了每年發年終獎的時候了,今年老闆的...