C語言 實驗整理

2021-10-01 15:27:18 字數 4248 閱讀 1732

實驗二:陣列操作

實驗三:呼叫函式

實驗四:指標,處理字串

課程設計:銷售業績管理系統

【感想】

題目求1-1/2+1/3-1/4……+1/99-1/100之值。

求出200到300之間的數,且滿足條件:它們三個數字之積為42 ,三個數字之和為12。

**一

#include

intmain()

printf

("%f"

,sum)

;return0;

}

利用1相反數得-1,-1去相反數得1

#include

#include

#define n 100

intmain()

利用(-1)的乘方控制符號

**二

#include

intmain()

return0;

}

個位:該資料除以10後取餘

十位:該資料減去個位上的數字,除以10,再除以10取餘

百位:該資料減去個位,再減去十位上數字乘以10的數,最後再除以100

明顯此方法較麻煩,優化一下:

#include

intmain()

return0;

}

直接除以10降位!妙啊~

題目**

#include

intmain()

for(i =

0; i <

100; i++)}

if(repetition ==0)

repetition =0;

}for

(i =

0; i < k-

1; i++)if

(max != i)

}for

(i=0

;i1;i++

)printf

("數字%d出現的次數為%d\n"

, b[i]

, c[i]);

return0;

}

小白的思路很原始,但**很複雜:先輸入數字a[i],記錄一共輸入了多少個數字→檢查裡面有多少個不一樣的數字b[i]→記錄每個不一樣的數字出現的次數c[i]→再用c[i]排序

接下來讓大佬來優化一下↓:

#include

#include

int a[

101]

;void

maxn

(int

*b,int n)

if(max==-1

)//找出需要的數之後就結束

return

;printf

("%-3d is %d times\n"

,book,max+1)

; b[book]=-

1;maxn

(b,n)

;//遞迴

}int

main()

for(j=

0;j)maxn

(b,101);

return0;

}

將輸入的數直接作為計數陣列的下標,這樣就省去了檢測有多少種不一樣的數,可以直接計數了。

在排序時,還用到了遞迴(我們當時還沒學,這位大佬自己學了,膜拜)

題目編寫函式,從標準輸入中讀取字元,直到遇到 eof 。程式要輸出每個字元是否是字母。如果是,還要求輸出該字母在字母表中的數值位置。

**

#include

void

check

(char a)

intmain()

return0;

}

#include

#include

//回車也被記錄為字元,若想檢測多個,請一次全部輸入

intpanduan

(char c)

intmain()

return0;

}

這次兩個**差不多,都是利用字元的ascii碼判斷是不是字母

題目定義函式 void mystrcat(char *s1,char *s2, char *new_s) 實現對兩個字串進行交叉連線。

例如:有兩個字串「abcd」、「1234」,交叉連線後結果為「a4b3c2d1」。

**

#include

#include

void

mystrcat

(char

*s1,

char

*s2,

char

*new_s)

//將第二個字元陣列反向存放

while(*

(s1+j)

!='\0'&&*

(s2+j)

!='\0'

)//兩個陣列先同時乙個乙個往新的陣列裡放字元if(

*(s1+j)

=='\0'

)//如果陣列一先結束,那麼將陣列二里剩餘的字元依次填入

else

//如果陣列二先結束,同上}*

(new_s+ i )

='\0'

;//結束,防止出現燙燙燙

printf

("兩個字串交叉連線結果:");

puts

(new_s)

;return;}

intmain()

思路:輸入兩個字串→將字串2反向→將字串1和新的字串2依次填入到另乙個字元陣列中→最後在末尾加上『\0』

優化↓

#include

#include

void

mystrcat

(char

*s1,

char

*s2,

char

*new_s)

;int

main()

void

mystrcat

(char

*s1,

char

*s2,

char

*str)

if(len2 ==-1

)//存完了第二個字串 也是退出

if(i %2==

0)//交叉存入

*(str + i)

= s1[j++];

//將第乙個字串正序往新的陣列裡存

else

*(str + i)

= s2[len2--];

//將第二個字串反序往新的陣列裡存}if

(ss==2)

//如果是第乙個先存完 那麼把第二個剩餘部分存進去if(

!ss)

//如果是第二個先存完 那麼把第乙個剩餘部分存進去

}

這個**就是把兩個字串直接交叉往新的陣列裡面存,省去了將字串二反向。

剛開始沒加注釋,小白沒看懂(ŏдŏ;);相信現在大家應該都能理解了~

所以,以後大佬們要多加一些注釋哦,讓小白們理解你的思路,向你學習!在這裡替小白們謝謝大佬了~

這個大作業是很多個子函式拼在一起的,**超級多,這就不展示了,但總結幾個問題吧。

魯棒性:

針對使用者(不懷好意的 老師)不按要求輸入,如:需要輸入數字的地方輸入字母或其他字元

解決方法:將使用者的輸入全部存為字元陣列,依次判斷每個字元是否為數字或小數點。只要遇到乙個不是的,就提示使用者輸入錯誤;如果全部正確,再用atof函式將其轉換為實數。

在輸入字元和數字之間加getchar(),吸收回車鍵;

用while( scanf("",)!=eof ) ,可以方便使用者多次查詢

檔案裡一共有幾個公司的資訊?

解決方法:在讀取檔案前,先把結構體裡的公司號全部賦值為0,從檔案裡讀取資訊,若公司號大於0,則n計數加一。

這次整理這學期做的實驗的**,讓我看到了自己的成長,最初的**真的很原始,很笨拙,沒有一點點的計算機思維(不知道自己現在是否有一點點了)。趕在期末考試前,將這學期學習過的c語言程式設計的知識點整理了一遍,作為自己的複習了。雖然內容很基礎,但這就是成長吧,一點一滴的積累。

不積跬步無以至千里,不積小流無以成江海。

C語言實驗 排列

c語言實驗 排列 time limit 1000ms memory limit 65536kb problem description 有4個互不相同的數字,請按序輸出由其中三個不重複數字組成的排列。input 4個整數。output 所有排列,輸出順序見樣例。example input 1 2 3...

C語言 實驗2

一 有一函式 y 2 x 1,y 2 x 2,y 2 x 3.用scanf函式輸入x的值,求y值。執行程式,輸入x的值 分別為x 1 1 10 x 10這3種情況 檢查輸出的y值是否正確。include include intmain void elseif x 1 x 10 elseif x 10...

C語言 實驗5

一 用選擇法對10個整數排序。10個整數用scanf函式輸入 參考教材112頁例8 3 include intmain for i 0 i 9 i if minp i printf 排序後的結果 n for i 0 i 10 i printf n return0 二 有15個數按從小到大的順序存放在...