实验2
实验结论:
1.验证性实验:(1)函数的声明相当于函数定义的存在证明,证明有这个函数,防止因为该函数定义在主函数之后而在调用时发生错误;而如果先写函数体,则不必再进行函数声明。而函数定义就是该函数 的具体实现,决定了该函数的类型和功能。
(2)实参是出现在函数调用中的参数,而形参是出现在函数定义中的参数,是一个局部变量。
函数参数在函数中的作用可分为形参和实参两个方面:形参的作用是接收调用该函数时传入的参数;而实参的作用是在进行调用时传递该函数的参数。
函数返回值的作用是一个函数在运算结束以后向调用它的母函数或者系统反馈一个值,这个值可以是各种变量类型。
(3)在值传递中,改变形参的值并不会影响外部实参的值;从被调用函数的角度来说,值传递是单向的,参数的值只能传入,不能传出。
而在引用传递中,形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在被调用函数中的形参存放的是由主函数放进来的实参变量的地址,所以被调用函数对形参的任何操作 都影响了主函数中的实参变量。
2.编程实验:
(1)习题2-28
源代码:
//使用if...else语句进行判断,用break,continue控制程序流程 #include<iostream> using namespace std; int main() { char a; while (1) { //循环输入 cout << "Menu: A D S Q,Select one:"; cin >> a; if (a == 'A') { cout << "数据已增加"<<endl; continue; //结束本次判断 } if (a == 'D') { cout << "数据已删除" << endl; continue; } if (a == 'S') { cout << "数据已排序" << endl; continue; } else break; //结束所有循环 }return 0; }
运行结果:
(2)习题2-29
1)“判断一个数为质数”的算法:因为质数定义为:一个大于1的自然数,除了1和它本身以外,不能被任何数整除。所已算法为:判断一个整数n是否为质数,只需用2到sqrt(n)或(n/2)间的每一个整数去除,如果都不能被整除,那么n就是一个质数。
源代码:
//使用while语句 #include<iostream> using namespace std; int main() { int i = 2; int j,n,m; while (i >= 0, i <= 100) { m = 1, n = i / 2, j = 2; while(j<=n) {if(i%j==0) { m = 0; break;//如果i能被j整除则非质数,终止循环,并给m赋值0; } j++; } if (m) //如果m不为0,则i为质数,输出i; cout <<i<<" "; i++; }return 0; }
运行结果:
源代码:
//用do...while语句找出1--100间的质数; #include<iostream> using namespace std; void main() { cout << 2 << " ";//此算法会遗漏2,而2亦为质数 int i, j, n, m; i = 2; do { m = 1; n = i / 2; j = 2; do { if(i%j==0) { m = 0; break; } j++; } while (j <= n); if (m) cout << i << " "; i++; } while (i < 101); }
运行结果:
源代码:
//用for语句输出1--100中的质数 #include<iostream> #include<cmath> using namespace std; int main() { int i, n; for (n = 2; n <= 100; n++) { for (i = 2; i <= sqrt(n); i++) if (n%i == 0) break; if (i > sqrt(n)) cout << n << " "; }cout << endl; return 0; }
运行结果:
(3)习题3-32
源代码:
//在程序中定义一个整形变量,赋予1至100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。使用while语句 #include<iostream> #include<cstdlib> using namespace std; int fun() //生成随机数,但只是伪随机。若要真随机可用srand((unsigned)time(NULL)); { int diel =rand() % 100;//随机数在1至100之间 return diel; } int main() { int n; int i; unsigned seed; cout << "Please enter an unsigned integer:"; cin >> seed; srand(seed); n = fun();//输入种子数,调用fun函数 while (1) //循环输入输出 { cout << "请输入你的答案: " << endl; cin >> i; if (i > n) { cout << "太大了!" << endl; continue; //终止本次循环 } if(i<n) { cout << "太小了!" << endl; continue; } if(i=n) { cout << "正确!" << endl; break; //循环结束 }return 0; } }
运行结果:
源代码:
//在程序中定义一个整形变量,赋予1至100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。用do...while #include<iostream> using namespace std; int fun() //生成随机数 { int diel = rand() % 100; return diel; } int main() { int n; int i; unsigned seed; cout << "Please enter an unsigned integer:"; cin >> seed; srand(seed); n = fun(); do { cout << "请输入你的答案:" << endl; cin >> i; if (i > n) { cout << "太大了!" << endl; continue; } if (i < n) { cout << "太小了!" << endl; continue; } if (i = n) { cout << "正确!" << endl; break; } } while (1); return 0; }
运行结果:
(4)习题2-34
1)算法思路:对于这种摸球类问题要列举出所有可能的方法的话可以使用循环历遍的方法。比如说假设摸的第一个球为红色(虽然题意是一次性摸三个没有先后顺序),在此条件下循环找出第二个球的颜色的所有可能性,即除红色之外的四种颜色,再在这四种条件下分别循环找出第三个球的颜色的所有可能性,而循环自加就能得到取法的数量。可以用数组来实现。
源代码:
#include<iostream> using namespace std; void main() { int i, j, k, n = 0; char c[5][7] = { "red","yellow","blue","white","black" }; for (i = 0; i<5; i++) for (j = i + 1; j<5; j++) for (k = j + 1; k<5; k++) { if (i != j && j != k && k != i) { cout << c[i] << " " << c[j] << " " << c[k] << endl; n++; } }; cout << n << endl; }
运行结果:
实验总结与体会:
这次实验使我收获颇丰,我更好地理解和掌握了c++中函数定义和声明的作用 ·声明和使用方法,理解了中值传递与引用传递的区别,更让我明白了if,switch,while,do···while,continue,break等语句的嵌套使用以及如何用他们进行循环输入输出。除此之外通过例题和实验我还明白了什么是”伪随机数“以及伪随机数的用法,并且通过查阅资料和询问同学我还了解了如何生成真正的随机数。
这还是我第一次用c++语言编写小游戏,虽然这些程序可能简单到连小游戏都算不上,但通过自己的不断努力和尝试编译成功后我感觉到了一种以前从来没有过的兴趣和满足,这是个好兆头!希望我能带着这份兴趣越走越远!