[实验2]函数
1.验证性实验
① 函数声明和函数定义各自的作用,二者的区别;
函数声明的作用:检查函数定义,函数调用时,参数,返回值,是否与声明相同。
函数定义的作用:在调用时寻找对应函数,执行操作。
区别:函数声明引入了一个名字来代表一个函数,并且可选的,指明函数的参数列表,可以出现在文件作用域中。
函数定义将函数体和函数名及参数关联起来,并且只能出现在文件作用域中。
② 什么是形参?什么是实参?函数参数和返回值在函数中起到什么作用?
形参:在定义函数名和函数体的时候使用的参数,用来接收调用该函数时传入的参数。在调用函数时,实参将赋值给形参。
实参:在进行函数调用时,把值传送给形参。预先用赋值,输入等办法使实参获得确定值。实参可以是常量、变量、表达式、函数,个数、类型应与形参对应,并且必须要有确定的值。
作用:参数从实参赋予形参,执行函数操作。返回值返回函数的调用结果。
③ 函数参数传递过程中,值传递和引用传递区别是什么?
值传递:际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
引用传递:实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
2.编程实验
(1)习题2-28
源代码及运行结果截图
if...else语句:
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 char c; 6 cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:"<<endl; 7 while(1) 8 { 9 cin >> c; 10 if (c== 'A'||c== 'a') 11 { 12 cout << "数据已经增加. " << endl; 13 continue; 14 } 15 else if (c== 'D'||c== 'd') 16 { 17 cout << "数据已经删除. " << endl; 18 continue; 19 } 20 else if (c== 'S'||c== 's') 21 { 22 cout << "数据已经排序. " << endl; 23 continue; 24 } 25 else if (c== 'Q'||c== 'q') 26 break; 27 } 28 return 0; 29 }
switch语句:
1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 int main() 5 { 6 cout<<"Menu: A(dd) D(elete) S(ort) Q(uit) Select one :"<<endl; 7 char c; 8 while(1) 9 { 10 cin>>c; 11 switch(c) 12 { 13 case 'A': 14 case 'a': 15 cout<<"The data has been added!"<<endl; 16 break; 17 case 'D': 18 case 'd': 19 cout<<"The data has been deleted!"<<endl; 20 break; 21 case 'S': 22 case 's': 23 cout<<"The data has been sorted!"<<endl; 24 break; 25 case 'Q': 26 case 'q': 27 exit(0); 28 break; 29 default: 30 cout<<"Invalid choice! "<<endl; 31 } 32 } 33 return 0; 34 }
(2)习题2-29
①简洁描述「判断一个数为质数」的算法:
只需要界于2到这个数n的平方根之间的所有数,看它们是否可以整除这个数n。如果有一个可以整除,说明输入的数不是素数;反之,说明输入的数是素数。
②源代码及运行结果截图
while语句:
1 #include<iostream> 2 using namespace std; 3 int main() 4 {int i,j,n,m; 5 i=2; 6 while(i<101) 7 {m=1;n=i/2;j=2; 8 while(j<=n) 9 { if(i%j==0) 10 {m=0; 11 break; 12 } 13 j++; 14 } 15 if(m) 16 cout<<i<<" "; 17 i++; 18 } 19 }
do...while语句:
1 #include<iostream> 2 using namespace std; 3 int main() 4 {int i,j,n,m; 5 i=2; 6 do 7 {m=1;n=i/2;j=2; 8 while(j<=n) 9 { if(i%j==0) 10 {m=0; 11 break; 12 } 13 j++; 14 } 15 if(m) 16 cout<<i<<" "; 17 i++; 18 } while(i<101) ; 19 return 0; 20 }
for语句:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i,j,n,m; 6 for(i=2;i<100;i++) 7 {m=1;n=i/2;j=2; 8 while(j<=n) 9 { if(i%j==0) 10 {m=0; 11 break; 12 } 13 j++; 14 } 15 if(m) 16 cout<<i<<" "; 17 } 18 return 0; 19 }
(3)习题2-32
源代码及运行结果截图
1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 int main() 5 { 6 int a=rand()%100; 7 int n; 8 while(1)//造成一个死循环 9 { 10 cout<<"please input an number: "<<endl; 11 cin>>n; 12 if(a==n)//循环退出条件 13 { 14 cout<<"n="<<n<<endl; 15 break; 16 }else if(a<n) 17 { 18 cout<<"your number are biger than the number,please try again."<<endl; 19 }else if(a>n) 20 { 21 cout<<"your number are smaller than the number,please try again."<<endl; 22 } 23 } 24 return 0; 25 }
(4)习题2-34
①简洁描述你的算法思路
1.将五种颜色设为枚举类型
2.利用for循环将各种颜色搭配 筛选出3个颜色不一样的
3.输出
②源代码及运行结果截图
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 enum color{red,yellow,blue,white,black};//声明枚举类型color 6 color c; //定义color类型的变量c 7 int i,j,k,n=0,q;//n是累计不同颜色的组合数 8 for(i=red;i<=black;i++)//当i为某一颜色时 9 { 10 for(j=red;j<=black;j++)//当j为某一颜色时 11 { 12 if(i!=j)//若前两个球的颜色不同 13 { 14 for(k=red;k<=black;k++)//两个球的颜色不同,查第3个球的颜色 15 { 16 if(k!=i&&k!=j)//三个球的颜色都不同 17 { 18 n++;//使累计值n加1 19 cout<<" "<<n;//输出当前的n值 20 for(q=1;q<=3;q++)//先后对三个球做处理 21 { 22 switch(q)//q的值先后为1,2,3 23 { 24 case 1:c=color(i);break;//color(i)是强制类型转换,使c的值为i 25 26 case 2:c=color(j);break;// j 27 28 case 3:c=color(k);break;// k 29 30 default :break; 31 } 32 33 switch(c) //判断c的值,输出相应的颜色 34 { 35 case red:cout<<" "<<"red";break; 36 37 case yellow:cout<<" "<<"yellow";break; 38 39 case blue:cout<<" "<<"blue";break; 40 41 case white:cout<<" "<<"white";break; 42 43 case black:cout<<" "<<"black";break; 44 45 default :break; 46 } 47 } 48 49 cout<<endl; 50 } 51 } 52 } 53 } 54 } 55 56 cout<<"total:"<<n<<endl; //输出符合条件的组合的个数 57 58 return 0; 59 }
3.总结与心得
(1)同一个程序可以用不同循环编写
并且for循环、do...while、while之间可以相互转化
(2)使用while(1)可以让程序循环执行
(3)exit(0)可以让程序正常退出
(4)找质数只需要除到这个数的平方根
(5)随机数rand()%x