南京信息工程大学实验报告
实验名称 C++简单程序设计-1 实验日期 2018-3-13 得分 指导教师 耿学华
系 计软院 专业计科 年级 2016 级 班次 (2) 姓名 余佳奇 学号 20161326022
一、实验内容及结论。
1.函数的声明和函数的定义:
函数声明表示有这么个函数了,函数定义就是具体实现了。函数声明,只有函数头,比如主函数main里要调用add函数,可是add函数的定义放在main后面。就要在主函数先声明下。
2.函数的形参和实参,函数参数和返回值在函数中的作用:
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参。返回值用于返回一个值给函数或用来结束函数。
3.值传递和引用传递:
引用传递会影响当作参数的对象,而值传递不会影响当作参数的对象。引用传递就相当与对原件进行处理,而值传递相当于对备份进行处理,因而对原件无影响。
4.实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selcet one:”提示用户输入。A表示增加,D表示删除,S表示排序,Q表示退出。输入为A、D、S时分别提示“数据已经增加、删除、排序。”输入为Q时程序结束。
(1)要求使用if…else语句进行判断,用break,continue控制程序流程。
(2)要求使用switch语句。
(1)
Code:
#include<iostream>
using namespace std;
int main(){
while(1){
char ans;
cout<<"Menu:A(dd) D(elete) S(ort) Q(uit) Select One:"<<endl;
cin>>ans;
if(ans=='A'){cout<<"数据已经增加"<<endl;continue;}
else if(ans=='D'){cout<<"数据已经删除"<<endl;continue;}
else if(ans=='S'){cout<<"数据已经排序"<<endl;continue;}
else if(ans=='Q'){break;}
else continue;
}
return 0;
}
运行结果:
(2)
Code:
#include<iostream>
using namespace std;
int main(){
while(1){
char ans;
cout<<"Menu:A(dd) D(elete) S(ort) Q(uit) Select One:"<<endl;
cin>>ans;
switch(ans){
case 'A':
cout<<"数据已经增加"<<endl;break;
case 'D':
cout<<"数据已经删除"<<endl;break;
case 'S':
cout<<"数据已经排序"<<endl;break;
case 'Q':
return 0;
default:
break;
}
}
return 0;
}
运行结果:
5.用穷举法找出1~100间的质数并显示出来。分别使用while,do…while,for循环语句实现。
算法思路:用穷举法,从2开始到100,分别对每一个数进行检验,检验方法是若存在比2大且比该数字的一半小的数,那么从2开始直到该数字的一半一次与该数进行取余运算,若存在余数为0的数,即该数有因数,因此不是质数。若不存在这样的因数,即该数为质数直接输出。
Code:
#include<iostream>
using namespace std;
int main(){
int i,j,n,m;
i=2;
while(i<101)
{
m=1,n=i/2,j=2;
while(j<=n)
{
if(i%j==0)
{
m=0;
break;
}
j++;
}
if(m)
cout<<i<<" ";
i++;
}
}
运行结果:
6.在程序中定义一个整型变量,赋予1~100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while,do…while语句实现循环。
(1)while
Code:
#include<iostream>
#include<Ctime>
using namespace std;
int main(){
srand((unsigned)time(NULL));
int n=rand()%100;
int guess=101;
while(guess!=n)
{
cin>>guess;
if(guess<n)cout<<"Answer is larger than ur guess number!"<<endl;
else if(guess>n)cout<<"Answer is smaller than ur guess number!"<<endl;
}
cout<<"True Answer!"<<endl;
return 0;
}
运行结果:
(2)do…while
Code:
#include<iostream>
#include<Ctime>
using namespace std;
int main(){
srand((unsigned)time(NULL));
int n=rand()%100;
int guess=101;
do{
cin>>guess;
if(guess<n)cout<<"Answer is larger than ur guess number!"<<endl;
else if(guess>n) cout<<"Answer is smaller than ur guess number!"<<endl;
}while (guess!=n);
cout<<"True Answer!"<<endl;
return 0;
}
运行结果:
7.口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中取出3个不同颜色的球,问有多少中取法?
算法思路:计算出所有得颜色组合类型存放到数组中,再从中选择出没有相同颜色的结果,用一个n来计算其数量。最后输出n即可。
Code:
#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++中函数的定义和使用方法。了解了值传递和引用传递的区别,也更熟悉灵活运用了while,do…while,switch等语句。在编程过程中,我感受到了编程与数学逻辑的关系,首先得构思出一个算法过程,再将其对应转换为代码,这是编程的关键步骤。此外,在编程过程中我也发现自己不够灵活,很多时候比较刻板。整体来讲,这次实验对我的编程能力有很大帮助,能够较为轻松的完成这些简单程序的编写了。