四、实验结论
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相对应,有时候加个{}可以很好的划分。
枚举
- 枚举的每一个元素都可以赋值,第一个是0,第二个是1……并且可以进行运算。
随机数
- rand随机数需要一个种子seed,不然每次seed都默认为1,随机数都会一样。
问题:随机数的出现是不是在rand函数的数列中与seed的值对应位置的数?
递归
1.不会数学公式写递归真的很要命!