南京信息工程大學實驗報告(二)
四、實驗結論
1.驗證性實驗部分
結合你自己的理解,以你自己的語言,提煉總結你對以下幾點的認識和理解(可以借助圖、表、手繪圖畫等一切你認為可以更清晰表達自己的方式):
① 函數聲明和函數定義各自的作用,二者的區別;
函數聲明:告明用到哪一個函數。
函數定義:函數的類型和具體內容。
② 什麽是形參?什麽是實參?函數參數和返回值在函數中起到什麽作用?
形參:函數被調用時用於接收實參值,用到的時候才分配內存,用完釋放內存。離開函數體不能使用
實參:有確定的值和分配的內存,在主函數中,被調函數中不能使用。
③ 函數參數傳遞過程中,值傳遞和引用傳遞區別是什麽?
值傳遞:用實參的值初始化形參,參數單項傳遞,之後形參的改變不會影響實參的值。
引用傳遞:對形參的改變對主函數中的實參有效。
- 編程實驗部分
(1)習題2-28
用switch
include
using namespace std;
int main(){
char a; cout<<"Menu:A(dd) D(elete) S(ort) Q(uit)"<<endl; cout<<"Select one:"; cin>>a; switch(a){ case ‘A‘:cout<<"數據已增加"<<endl; break; case ‘D‘:cout<<"數據已刪除"<<endl; break; case ‘S‘:cout<<"數據已排序"<<endl; break; case ‘Q‘:break; } return 0;
}
用if……else break和continue
include
using namespace std;
int main(){
int i;
char a;
cout<<"Menu:A(dd) D(elete) S(ort) Q(uit)"<<endl;
cout<<"Select one:";
for (i=0;;i++){ //之前的錯誤 for(i=0;i++;) //i++ 是第三個條件,後面不應該有; cin>>a; if (a!=‘Q‘){ if (a==‘A‘){ cout<<"數據已增加";continue;} if (a==‘D‘){ cout<<"數據已刪除";continue;} if (a==‘S‘){ cout<<"數據已排序";continue;} } else break; } return 0;
}
(2)習題2-29
①簡潔描述「判斷一個數為質數」的算法:如有整除,終止內部循環,外部進行下一次循環判斷下一個數,如果內部循環中間沒有終止說明只有1和本身可以整除,說明是質數,這時候j與i相等,那麽輸出這個數。
②源代碼及運行結果截圖
用for
include
using namespace std;
int main(){
int i,j;
for (i=2;i<101;i++)
{
for(j=2;j<i;j++){
if (i%j==0){
break;
}
}
if (j==i)
cout<<i<<" ";
}
return 0;
}
用while
include
using namespace std;
int main(){
int i=2,j=2;
while (i<101)
{
while(j<i)
{
if (i%j==0){
break;
}
j++;
}
if (j==i){
cout<<i<<" ";}
i++;
j=2;
}
return 0;
}
用do……while
include
using namespace std;
int main(){
int i=2,j=2;
do{
do{
if(i%j==0)
break;
j++;
}while(j<i);
if (j==i)
cout<<i<<" ";
i++;
j=2;
}while(i<101);
return 0;
}
(3)習題2-32
源代碼及運行結果截圖
用do……while
include
include
using namespace std;
int main(){
unsigned seed;
short b;
cin>>seed;
srand(seed);
int a=rand()%100;
do {
cin>>b;
if (a>b)
cout<<"小了";
if (a<b)
cout<<"大了";
}while(a!=b);
cout<<"隨機數為:"<<a;
return 0;
}
用while
include
include
using namespace std;
int main(){
unsigned seed;
short b;
cin>>seed;
srand(seed);
int a=rand()%100;
while(1) {
cin>>b;
if (a!=b){
if (a>b)
cout<<"小了";
else if (a<b)
cout<<"大了";
}
else {
cout<<"隨機數為:"<<a; break;
}
}
return 0;
}
(4)習題2-34
①簡潔描述你的算法思路
②源代碼及運行結果截圖
include
include
using namespace std;
int comm(int n,int k){//遞歸
if (k>n)
return 0;
else if (n==k||k==0)
return 1;
else
return comm(n-1,k)+comm(n-1,k-1);//數學公式
}
int main(){
int n,k;
cout<<"輸入小球顏色種類數和每次摸不同顏色球的個數:";
cin>>n>>k;
cout<<comm(n,k);
return 0;
}
五、實驗總結與體會
結合你在本次實驗中的收獲、感受等,也可以是自己延伸自學及編程實踐中的新收獲、發現、思考,等等。
循環的使用條件掌握的不好,對循環內部參數的變化掌握的也不是很清楚。
1.For循環中三個條件,前兩個條件後要加“;”
2.而且一般第一個條件是將i的初值設定好了,每次循環都是這樣,但是在while中一開始沒有意識到,每一次循環後i的值變了,導致之後的每次循環初始值變了。
3.break結束循環,continue結束本次循環,進行下一次。break循環和switch都可以用,continue只能在循環中使用。
If條件
1.每一個else都要和一個明確的if相對應,有時候加個{}可以很好的劃分。
枚舉
- 枚舉的每一個元素都可以賦值,第一個是0,第二個是1……並且可以進行運算。
隨機數
- rand隨機數需要一個種子seed,不然每次seed都默認為1,隨機數都會一樣。
問題:隨機數的出現是不是在rand函數的數列中與seed的值對應位置的數?
遞歸
1.不會數學公式寫遞歸真的很要命!
南京信息工程大學實驗報告(二)