南京信息工程大学实验报告(二)

四、实验结论
1.验证性实验部分
结合你自己的理解,以你自己的语言,提炼总结你对以下几点的认识和理解(可以借助图、表、手绘图画等一切你认为可以更清晰表达自己的方式):
① 函数声明和函数定义各自的作用,二者的区别;
函数声明:告明用到哪一个函数。
函数定义:函数的类型和具体内容。

② 什么是形参?什么是实参?函数参数和返回值在函数中起到什么作用?
形参:函数被调用时用于接收实参值,用到的时候才分配内存,用完释放内存。离开函数体不能使用
实参:有确定的值和分配的内存,在主函数中,被调函数中不能使用。

③ 函数参数传递过程中,值传递和引用传递区别是什么?
值传递:用实参的值初始化形参,参数单项传递,之后形参的改变不会影响实参的值。
引用传递:对形参的改变对主函数中的实参有效。
2. 编程实验部分
(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 (nk||k0)
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相对应,有时候加个{}可以很好的划分。

枚举

  1. 枚举的每一个元素都可以赋值,第一个是0,第二个是1……并且可以进行运算。

随机数

  1. rand随机数需要一个种子seed,不然每次seed都默认为1,随机数都会一样。
    问题:随机数的出现是不是在rand函数的数列中与seed的值对应位置的数?
    递归
    1.不会数学公式写递归真的很要命!
posted @ 2018-03-25 19:50  花逢君  阅读(267)  评论(14编辑  收藏  举报