實驗二:陣列操作
實驗三:呼叫函式
實驗四:指標,處理字串
課程設計:銷售業績管理系統
【感想】
題目求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個數按從小到大的順序存放在...