[实验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

 

 

  

posted @ 2018-03-22 21:50  酥茶  阅读(209)  评论(0编辑  收藏  举报