您的当前位置:首页正文

C++程序设计实验报告

2021-11-14 来源:爱go旅游网
实验一 C++语言概述——C++简单程序设计

1.编辑、编译、连接和运用一个程序输出: “Hello,C++!”

“This is my first C++ program.\" 解:实验过程如下: 解:实验过程如下: #include using namespace std; void main() { 

cout<<\"Hello World!\\n\"; 

cout<<\"This is my first C++ program.\\n\";  system(\"pause\"); } 

运行结果: 运行结果:

实验的感受:第一次上机进行程序操作,终于可以将课本的理论用在了实践。然而,在上机时,无论是对程序的编译还是程序的连接和运行都十分的生疏,仅仅是这个实验也用了一个多节课来完成。经过这次的实验,我对程序有了更多的了解,相信在将来的上机中,我会学到更多的程序编译。 实验,我对程序有了更多的了解,相信在将来的上机中,我会学到更多的程序编译。

实验二 C++基本数据类型与表达式

1、运行下面的程序,写处该程序的运行结果,体会i++与++i的差别。 的差别。 解:程序编译如下: 解:程序编译如下: #include using namespace std; int main() { 

int myage=20, yourage=30; cout<<\"I am\"<cout<<\"You are\"<cout<<\"One year passes\\n\"; cout<<\"I am\"<cout<<\"Another year passes\\n\"; cout<<\"I am\"<cout<<\"You are\"<<++yourage<cout<<\"You are\"<运行结果: 运行结果:

2、找出下列程序的错误,并改正。 、找出下列程序的错误,并改正。 解:改正后的程序如下: 解:改正后的程序如下: #include #include

using namespace std; void main() { 

float x; 

cout<<\"Input a real number:\";  cout<<\"x*x\"<cout<<\"sqrt(x)=\"<cout<<\"2*x-1=\"<<2*x-1<3、编程序,从键盘输入两个int型(整型)数据,而后通过使用运算符+、—、*、/、%来计算这两个数的和、差、积、商以及余数,并将结果显示在屏幕上。 和、差、积、商以及余数,并将结果显示在屏幕上。 解:程序编译如下: 解:程序编译如下: #include using namespace std; int main() { 

int a,b; 

cout<<\"输入两个任意整数:\";  cin>>a>>b; 

cout<<\"a+b=\"<实验程序运行结果: 实验程序运行结果:

4、编程序,从键盘输入三个浮点数给a、b、c ,然后屏幕输出表达式b^2-4ac的结果。 的结果。 解:程序编译如下: 解:程序编译如下: #include using namespace std; float main() 

{ 

float a,b,c; 

cout<<\"请输入三个浮点数:\";  cin>>a>>b>>c; 

cout<<\"b*b-4*a*c=\"<运行结果: 运行结果:

5、设a=1,b=1,c=3,试编程序分别计算如下表达式的值,写成程序的运行结果: ,试编程序分别计算如下表达式的值,写成程序的运行结果: (1) b+=a+2*c%5  (2)  b*=b=c=3  (3)  a+=b+=c  (4)  a-=b=++c+2 

解:(1).#include  using namespace std; void main(void) { 

int a=1,b=1,c=3;  b+=a+2*c%5; 

cout<<\"b+=a+2*c%5=\"<a*=b=c=3; 

cout<<\"a*=b=c=3=\"<cout<<\"a+=b+=c=\"<cout<<\"a-=b=++c+2=\"<运行结果: 运行结果:

6、编写一个计算圆的周长和面值的程序。 、编写一个计算圆的周长和面值的程序。 解:#include using namespace std; void main(void) { 

const float pi=3.14;  float R=0,c=0,s=0; 

cout<<\"请输入圆的半径R=\"<>R;  c=2*pi*R;  s=pi*R*R; 

cout<<\"圆的周长c=\"< #include void main() {  double a,b,c,x;  cout<<\"请输入方程的系数a,b,c:\";  cin>>a>>b>>c;  if(a==0)  {  if(b==0)  {  if(c==0)  cout<<\"方程有无穷多解\"<0)  {  cout<<\"x1=\"<<(-b+sqrt(b*b-4*a*c))/(2*a)<else if(b*b-4*a*c==0)  {x=-b/(2*a);  cout<cout<<\"x1=\"<<-b/(2*a)<<\"+\"<运行结果: 运行结果:

2、 用for循环编写程序,是其完成下面的功能。 循环编写程序,是其完成下面的功能。

(1)提示用户输入两个整数:firstNum和SecondNun(FirstNum一定要小于SecondNum).  (2) 输出所有界于FirstNum和SecindNum之间的奇数。 之间的奇数。

(3)输出所有界于FirstNum和SecindNum之间的偶数的和。 之间的偶数的和。 (4)输出所有界于FirstNum和SecindNum之间的奇数的平方和。 之间的奇数的平方和。 解:#include  using namespace std; 

void main() { 

int i,a,b; 

cout<<\"请输入两个整数FirstNum和SecondNum(FirstNum要比SecondNum小):\";  cin>>a>>b;  if(a>=b) 

{  cout<<\"您所输入的两个数不满足条件,请重新输入\"<cout<<\"请输入两个整数FirstNum和SecondNum(FirstNum要比SecondNum小):\";  cin>>a>>b;  } 

//两数之间的奇数 两数之间的奇数

cout<if(i%2!=0)    if(i%2!=0)    cout<//两数之间的偶数的和 两数之间的偶数的和 long sum=0; 

for(i=a+1;iif(i%2==0)  sum=sum+i;  } 

cout<//两数之间的奇数的平方和 两数之间的奇数的平方和 long qsum=0;  for(i=a+1;iqsum=qsum+i*i; if(i%2!=0)    if(i%2!=0)   

} 

cout<}

3、使用while循环编写上题。 循环编写上题。 解:#include

using namespace std; void main() { int i,a,b; 

cout<<\"请输入两个整数FirstNum和SecondNum(FirstNum要比SecondNum小):\";  cin>>a>>b;  if(a>=b) 

{  cout<<\"您所输入的两个数不满足条件,请重新输入\"<cout<<\"请输入两个整数FirstNum和SecondNum(FirstNum要比SecondNum小):\";  cin>>a>>b;  } 

//两数之间的奇数 两数之间的奇数

cout<while(i} 

//两数之间的偶数的和 两数之间的偶数的和 long sum=0;  i=a+1;  while(icout<//两数之间的奇数的平方和 两数之间的奇数的平方和 long qsum=0; 

i=a+1;  while(icout<运行结果:

2、编写程序输出如下图形(注:用循环语句完成) 、编写程序输出如下图形(注:用循环语句完成) #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  # 解:程序编写 解:程序编写 #include  using namespace std; void main() { 

int i,k,s; 

for(i=0;i<5;i++)  { 

for(s=0;s<4-i;s++)  cout<<\" \";  //输出(4-i)个空格 个空格 for(k=0;k<2*i+1;k++) 

cout<<\"#\";  //输出(2i+1)个#号 )个#号 cout<for(i=3;i>=0;i--)  { 

for(s=0;s<4-i;s++)  cout<<\" \";  //输出(4-i)个空格 个空格 for(k=0;k<2*i+1;k++) 

cout<<\"#\";  //输出(2i+1)个#号 )个#号 cout<system(\"pause\"); } 

3、一只母鸡5元钱,一只公鸡3元钱,三只小鸡1元钱,用100元钱买100只鸡,有多少中卖法?编写程序输出所有可能的结果。 序输出所有可能的结果。

解:#include  using namespace std; void main() { 

int A,B,C,D=0;  //A表示母鸡数,B表示公鸡数,C表示小鸡数,D表示买的方法。 表示买的方法。 for(A=0;A<=100;A++)  for(B=0;B<=100;B++) 

for(C=0;C<=100;C++)  { 

if(A+B+C==100) 

if(5*A+3*B+1.0/3.0*C==100)  { 

D=D+1; 

cout<<\"母鸡共A=\"<\"<}  } 

cout<<\"共有D=\"<运行结果: 运行结果:

4、将下列程序补充完整,用以确定百货商店的顾客是否已经超出信用卡的透支额度。对于每位顾客,以下信息是已知的: 信息是已知的:

(a)信用卡的账号(int accountNumber)  (b) 月初差额(double balance) 

(c) 本月该顾客购买商品的金额(double charges)  (d) 本月顾客账户中的存款(double creduts)  (e) 允许的信贷额度(double limit) 解:#include #include using namespace std; void main() 

{ int accountNumber; 

double balance,charges,credits,limit;  cout<<\"Enter account number(-1 to end):\"  <> accountNumber;  //输入帐号 输入帐号 //这里补充,写一段循环程序 这里补充,写一段循环程序 while(accountNumber!=-1) 

{  cout<<\"Enter beginning balance:\"; 

cin>>balance;  //输入月初差额 输入月初差额 cout<<\"Enter total charges:\"; 

cin>>charges;  //输入本月购买商品的金额 输入本月购买商品的金额 cout<<\"Enter total credits:\"; 

cin>>credits;  //输入本月存款 输入本月存款 cout<<\"Enter credit limit:\"; 

cin>>limit;  //输入信贷额度 输入信贷额度

if(balance+charges-credits>limit) 

//当超过了信贷额度时显示帐号、信用额度、新的差额、并输出信息“Credits Limit Exceeded.” { cout<<\"Accout:  \"<cout<<\"Balance:  \"<<(balance=balance+charges-credits)<cout<<\"\\nEnter account number(-1 to end):\";  }//循环结束 循环结束

cout<运行结果: 运行结果:

实验感想:这次的上机操作,我深深的体会到了C++程序流程控制真的很难,在同学的帮助下,我懂得了for和while在编写程序的不同,熟练了if和switch的选择结构,也加深了i++的了解,重要的是,我学到了在程序设计中使用循环的方法。当然,这些都是很基础的东西,但也说明了我的进步与收获。 了在程序设计中使用循环的方法。当然,这些都是很基础的东西,但也说明了我的进步与收获。

实验四 C++函数与程序结构 1、编写函数,令其在屏幕上显示一个由“#”围成的空心正方形,该正方形的边长有参数side指定。例如:如果side的值是5,则函数就会显示: ,则函数就会显示: # # # # #  #  #  #  #  #  #  # # # # # 如果side的值是3,这函数就会显示: ,这函数就会显示: # # #  #  #  # # # 解:#include using namespace std; void main() {  int side,i,j;  cout<<\"输入空心正方形的边长side=\";  cin>>side;  for(i=0;i2、编写猜字游戏:让计算机随机长生一个1到100以内的正整数,让用户来猜这个游戏,并提示是大了还是小了,或是刚好猜中。若猜错了,程序就会执行循环,若猜对了,程序就会显示:Excellent!You guessed the number! 

Would you like to play again (yes or no)? 

用户如果输入n或N,程序终止;用户如果输入y或Y,则重新产生随机数,并开始信的一轮游戏。 ,则重新产生随机数,并开始信的一轮游戏。 解:程序编写如下: 解:程序编写如下: #include  #include  #include  #include  using namespace std; void main() { 

void yx(int x,int y);   int i,j; 

cout<<\"Iuput i:\"<j=rand()%100; 

cout<<\"j取得的随机数是:\"<>i; 

yx(i,j);  } 

void yx(int a,int b) 

{ 

if (a==b)  { 

cout<<\"Excllent!You guessed the number!\"<<<\"Would you like to play again(yes or no)?\"<>k; 

if (k=='y') { 

cout<<\"Input i again:\"<cin>>a;  yx(a,b);  } } else  { 

if (acout<<\"j>i\"<cout<<\"i>j\"<>a;  yx(a,b); 

} } 

运行结果: 运行结果:

3、在一个多层停车库停车3小时,最低收费为$2.00,如果超出3小时,没小时会增加$1.50的费用。停车24小时,最高收取费用为$10.00.编写程序来计算应该收取的费用。 编写程序来计算应该收取的费用。 解:#include #include

using namespace std; void main() { 

float CalCharges(float);  //声明CalCharges(float)函数 函数 float car1,car2,car3,charge1,charge2,charge3;  float totalhours,totalmoney; 

cout<<\"Enter the hours parked of three cars:\"; 

cin>>car1>>car2>>car3; 

charge1=CalCharges(car1);  //调用CalCharges(float)函数计算第一辆小车的停车费 函数计算第一辆小车的停车费 charge2=CalCharges(car2); 

charge3=CalCharges(car3); 

totalhours=car1+car2+car3;  //计算三辆车的总的时间 计算三辆车的总的时间 totalmoney=charge1+charge2+charge3;  //计算总的费用 计算总的费用

cout<cout<float CalCharges(float carn) 

{ 

const float hourL=3.0;  //3小时 小时 const float hourH=24.0;  //最高24小时 小时 const float Low=2.00;  //最低收费 最低收费 const float Phour=0.50;  //超过3小时后,每小时的收费 小时后,每小时的收费 const float High=10.00;  //24小时及24小时后的收费(最高收费) 小时后的收费(最高收费) if(carn<=hourL)  return Low; 

else if(carn运行结果: 运行结果:

4、编写函数用递归方法求1+2+3+...+n的值,在主程序中提示输入整数n。 解:程序编辑: 解:程序编辑: #include  #include  using namespace std; int fn1(int i); void main() { 

int i; 

cout<<\"请输入一个正整数 请输入一个正整数 n: \";  cin>>i; 

cout<<\"从1累加到\"<int fn1(int i) { 

if (i==1)  return 1; 

else 

return (i+1)*i/2; } 

运行结果: 运行结果:

5、编写一个递归结构的函数,求1!+2!+3!+4!+....+15!的值。 的值。 解:#include using namespace std; long nj(int); void main() { 

int i,a; 

long sum=0; 

cout<<\"请输入一个正整数:\"; 

cin>>i; 

for(a=1;a<=i;a++)  { 

sum=sum+nj(a);  } 

cout<<\"从1!累加到\"<long nj(int i)  { 

if (i==1)  return 1;  else  return i*nj(i-1); 

} 

6、编写一个递归函数power(double base,double esponent),t条用该函数时,返回结果为: 条用该函数时,返回结果为: Base exponent 

例如:power(3,4)=3*3*3*3.前提是exponent是一个大于或等于1的整数。 的整数。 解:程序编辑: 解:程序编辑: #include  #include  using namespace std; 

double power (double base,int exponent); void main() 

{ 

double a,b; 

cout<<\"Input a b: \"<cin>>a>>b; 

cout<double power (double base,int exponent) { 

int i,k=1; 

if (exponent<1) 

cout<<\"Input exponent Error\"<for (i=1;i<=exponent;i++)  k=k*base;  return k; } 

运行结果: 运行结果:

实验感想:通过这次实验的操作练习后,我从中体会到了函数的定义、声名、以及调用的一些方法还能够编制并测试函数。,当然,更重要的是,我还掌握了局部变量、全局变量、和静态变量。动态变量的一些使用方法。现在,我对C++函数与程序结构也有了更进一步的了解,相信我能做的更好。同时,我感到学习C++也越来越难了,以后还得更加努力。 难了,以后还得更加努力。

实验五: 数组

1、把有10个整数的元素的数组用冒泡排序法和选择排序法按有小到大升序排列。 解:程序编写: 解:程序编写: #include void bubble(int[],int); void main() 

{ int array[]={36,6,49,7,76,2,28,33,86,58}; 

int len=sizeof(array)/sizeof(int);  //元素个数 元素个数 for (int i=0;ibubble(array,len);  //调用排序函数 调用排序函数 } 

void bubble(int a[],int size)  //冒泡排序 冒泡排序 { int i,temp; 

for (int pass=1;passa[i+1]) 

{temp=a[i];a[i]=a[i+1];a[i+1]=temp;} for (i=0;i2、下列程序中,函数fun功能是:实现B=A+A',即把矩阵A加上A的转置,存放在B中返回main函数。将程序补充完整。 函数。将程序补充完整。 解:#include #define N 3 

fun(int a[3][3],int t[3][3]) {int i,j; 

for(i=0;i<3;i++)  for(j=0;j<3;j++) 

t[i][j]=a[i][j]+a[j][i];}  void main() {int i,j; 

int a[3][3]={1,2,3,4,5,6,7,8,9},t[3][3];  fun(a,t); 

printf(\"A:\\n\");  for(i=0;i<3;i++)  {for(j=0;j<3;j++) 

printf(\"%3d\ printf(\"\\n\");  } 

printf(\"\\nA':\\n\");  for(i=0;i<3;i++)  {for(j=0;j<3;j++) 

printf(\"%3d\ printf(\"\\n\");  } 

printf(\"\\nB:\\n\");  for(i=0;i<3;i++)  {for(j=0;j<3;j++) 

printf(\"%3d\ printf(\"\\n\");  } } 

运行结果: 运行结果:

3、以下程序的输出结果是: 、以下程序的输出结果是:

解:程序编写: 解:程序编写:

#include using namespace std; void main() { 

int i,k,a[10],p[3];  k=5; 

for(i=0; i<10; i++) a[i]=i; 

for(i=0; i<3; i++) p[i]=a[i*(i+1)];  for(i=0; i<3; i++) k+=p[i]*2;  cout<运行结果: 运行结果:

4、17个人围成一圈,编号为:个人围成一圈,编号为:1到17,从一号开始报数,报到从一号开始报数,报到3的倍数的人离开,一直数下去,的倍数的人离开,一直数下去,直到最后只剩下1人为胜利者。求此人的编号。 人为胜利者。求此人的编号。

解:编写程序: 解:编写程序: #include  using namespace std; void main() { 

const int num=17;  int a[num],i; 

int b; 

cout<<\"请输入要数到第几个人时,那个人离开:(b<\"<>b; 

for( i=0;icout<<\"下面输出一圈人的编号:\"<cout<<\"下面输出依次离开的人的编号:\"<for(int j=0; ji=(i+1)%num;  if (a[i]!=0)  j++;  } 

if (c==num)  break;  cout<cout <<\"\\n第\"<运行结果: 运行结果:

5、某公司生产很多不同类的玩具,每种都有一个商品编号,编写程序,读入每种玩具的商品编号和价格,并把他们分别存储在number数组和price数组中,程序应该允许用户执行以下操作。 (1)根据用户输入的商品号查找并显示对应商品的价格。 (2)打印每种商品的商品好合对应的价格。 解:(1)程序编写: )程序编写: #include  using namespace std; void main() 

{  const int n=2;  //n表示该公司产品的总的种类个数,假设有10种 int number[n]; 

float price[n];  int i,cx;  //cx用于保存要查找的产品编号 用于保存要查找的产品编号 char chaxun='y';  for(i=0;icout<<\"请输入该产品的编号和相应的价格。\"<cin>>number[i]>>price[i];  } 

cout<<\"共有\"<cout<while(chaxun=='y'||chaxun=='Y')  { 

cout<<\"请输入要查找的产品编号:\";  cin>>cx; 

for(i=0;iif(cx==number[i]) 

{cout<<\"该产品的价格为:\"<{cout<<\"没有这个产品\"<cout<<\"还要继续查找吗?(Y/N)\";  cin>>chaxun;  } } 

运行结果: 运行结果:

实验感想: 实验感想:

通过这次的实验,熟悉了基本的数据类型,及便是形式和取值范围;也了解了一维数组和二维 通过这次的实验,熟悉了基本的数据类型,及便是形式和取值范围;也了解了一维数组和二维 数组的定义、赋值和输入输出方法;也对字符数组和字符串数组的差异。然而,本节的实验中 数组的定义、赋值和输入输出方法;也对字符数组和字符串数组的差异。然而,本节的实验中 有关数组的一些算法却很是生疏,希望通过多上机操作可以解决这一问题。 有关数组的一些算法却很是生疏,希望通过多上机操作可以解决这一问题。

1、请改正下列程序存在的问题。 、请改正下列程序存在的问题。 解:程序修改如下: 解:程序修改如下: #include  using namespace std; int*  Fn1(); int main() { 

int *a = Fn1(); 

cout << \"The value of a is: \" << *a; delete a; return 0; } 

int* Fn1() { 

int * p = new int (5); return p; } 

运行结果: 运行结果:

实验六 指针与引用

2、读下列程序 、读下列程序

(1)说出程序的功能; )说出程序的功能;

(2)将其改写成传递引用参数; )将其改写成传递引用参数;

(3)将findmax()函数改写成非递归函数(重新考虑参数个数) 解:(1)该程序是用于数组与指针的使用方法,找数组中的最大值。 (2)程序改编为: )程序改编为: #include  using namespace std; const size=10; 

void findmax(int a[],int n,int i,int &); int main() { 

int a[size];  int n=0; 

cout<<\"请输入\"<>a[i]; 

findmax(a,size,0,n); 

cout<<\"最大的数是:\"<cout<<\"它的下标是:\"<void findmax(int a[],int n,int i,int &m) { 

for(i=0;ia[m])  m=i; } 

运行结果: 运行结果:

(3)重新考虑参数个数(size=6):

#include 

using namespace std; const size=6; 

void findmax(int a[],int n,int i,int &); int main() { 

int a[size]; int n=0; 

cout<<\"请输入\"<>a[i];  findmax(a,size,0,n); 

cout<<\"最大的数是:\"<cout<<\"它的下标是:\"<void findmax(int a[],int n,int i,int &m) { 

for(i=0;ia[m])  m=i; } 

3、一个程序,要求用户输入两个字符串,程序用strcmp()函数比较用户输入的两个字符串,并指出第一个字符串是小于、等于或是大于第二个字符串。 解:程序编写如下: 解:程序编写如下: 4、编写一个函数,输入第一种日期格式:08/27/99,打印出第二种日期格式:1999年8月27日。并在主函数中验证改函数。 并在主函数中验证改函数。 解:程序编写: 解:程序编写: #include  using namespace std; int main() {  char a[10],b;  int i=0;  cout<<\"please enter the date(月/日/年):\";  while((b=getchar())!='\\n')  {  if((b>='0')||(b<='9'))  {  a[i]=b;  }  else a[i]=' ';  i++; }  cout<

因篇幅问题不能全部显示,请点此查看更多更全内容