当前位置:文档之家 > 华北电力大学c++实验指导实验二、实验三改错题、填空题参考答案

华北电力大学c++实验指导实验二、实验三改错题、填空题参考答案

实验二选择结构程序

做改错题的一般思路:

首先修改程序中的语法错误:

(1)观察程序中有没有用到数学函数,如果用了,察看程序中是否包含了对应的头文件。

(2)观察程序中用到的输入输出函数与头文件是否对应。

(3)include命令行的格式是否正确:#开头,不能加分号

(4)函数名、函数类型、以及函数参数是否正确,函数首部不能加分号。

(5)程序中用到的变量是否都定义了,类型是否正确。

(6)输入、输出语句是否正确。

(7)大括号是否正确对应。

(8)其它语句的语法是否正确。

然后根据程序要实现的功能,修改逻辑错误:比如,对于求和算法,求和单元赋初值的位置是否正确等等。

同学们在做题的过程中要不断总结,积累宝贵经验。

读程序写运行结果:

首先分析程序的结构,然后再读,写结果时注意输出语句的格式。

P89 1.改错题

(1)正确程序为:

#include

void main()

{int a,b;

cin>>a>>b;

if(a==b)

{cout<<"a,b相等";cout<

else if(a!=b)

{ cout<<"a,b不相等,较大的数为";

if(a>b)cout<<"a,值为:"<

else cout<<"b,值为:"<

}

(2)正确程序为:

#include

#include

void main()

{ float x,y;

cin>>x;

if(x<0)y=sin(x)+1;

if(0<=x&&x<10) y=pow(x,2)+3/x;

if(x>=10)y=sqrt(x+4);

cout<

}

(3)正确程序为:

#include

void main()

{float cj;char grade;

printf("Please enter a score:");

scanf("%f",&cj);

switch((int)cj/10)

{ case 10:

case 9:grade='A';break;

case 8:grade='B';break;

case 7:grade='C';break;

case 6:grade='D';break;

default :grade='E';}

printf("The grade of score is:%c.\n",grade);

}

(4)正确程序为:

#include

void main()

{char ch;

cin>>ch;

if(ch>='a'&&ch<='z')ch=ch-32;

else if(ch>='A'&&ch<='Z')ch=ch+32;

else if(ch>='0'&&ch<='9')ch=ch-'0';

else ch=' ';

cout<

(5)正确程序如下:

#include

void main()

{int day,month,year,leap=0,error=0;

printf("Please input year-month-day:\n");

scanf("%d,%d,%d",&year,&month,&day);

if(year%400||(year%4==0&&year%100!=0))leap=1; switch(month)

{case 1:if(day>31)error=1;break;

case 2:if(leap)

{if(day>29)error=1;}

else

if(day>28)error=1;

break;

case 3:if(day>31)error=1;break;

case 4:if(day>30)error=1;break;

case 5:if(day>31)error=1;break;

case 6:if(day>30)error=1;break;

case 7:if(day>31)error=1;break;

case 8:if(day>31)error=1;break;

case 9:if(day>30)error=1;break;

case 10:if(day>31)error=1;break;

case 11:if(day>30)error=1;break;

case 12:if(day>31)error=1;break; default:error=1;break;

}

if(error==0)printf("It is the correct date."); else printf("It is the wrong date.");}

2.读程序,写结果

(1)RUN?

2,1

(2)RUN?

6

(3)RUN?

x=2

(4)RUN?

5

3.写程序

(4)程序如下:

#include

void main()

{float x,y;

scanf("%f",&x);

if(x<1)y=x*x-1;

else if(x<10) y=2*x-1;

else y=3*x-11;

printf("x,y=%f,%f",x,y);}

分段函数的程序有两种典型错误:

错误程序一:

#include

void main()

{float x,y;

cin>>x;

if(x<1)

y=x*x-1;

if(x<10)

y=2*x-1;

else

y=3*x-11;

cout<

}

错误原因:条件x<1引出的选择结构和条件x<10引出的选择结构是并列的关系,

即:执行完前一个选择结构后,再执行后一个选择结构。若x小于1,表达式x<1为真,执行语句y=x*x-1;计算出y的值。然后执行由条件x<10引出的选择结构,此时条件x<10也为真,因此,执行语句y=2*x-1; 导致程序出错。即:当x小于1时,计算出的y值不对,这种错误称为逻辑错误。

错误程序一:

#include

void main()

{float x,y;

cin>>x;

if(x<1)

y=x*x-1;

if(1

y=2*x-1;

else

y=3*x-11;

cout<

}

错误原因:表达式1

1

改正:表达式1

实验三循环结构程序设计

二1.改错题

(1)正确程序如下:

#include

void main()

{int i,n,flag=-1;

float sum;

sum=0;

cin>>n;

for(i=1;i<=n;i++)

{ flag=-flag;

sum=sum+1.0/i*flag;} cout<

(2)正确程序如下:

#include "stdio.h"

void main()

{char c;int sum;

sum=0;

while((c=getchar())!='0')

sum=sum+c;

printf("%d",sum);

}

(3)正确程序如下:

#include "iostream.h"

void main()

{int m,s,j;

for(m=1;m<=1000;m++) { s=0;

for(j=1;j

if(m%j==0)s+=j;

if(s==m)cout<

}

(4)正确程序如下:

#include

void main()

{int n,max=0,t;

scanf("%d",&n);

do

{ t=n%10;

if(max

n/=10;}

while(n);

printf("max=%d",max);} (5)正确程序如下:

#include

void main()

{int i,k,sum=0,m,n,t,gs=0; cin>>m>>n;

if(m>n){t=m;m=n;n=t;}

for(k=m;k<=n;k++)

{ for(i=2;i

if(k%i==0)break;

if(k==i)

{ sum=sum+k;gs++;}

}

cout<<"共有"<

cout<<"平均值为:"<

}

2.填空题

做填空题的一般思路:仔细读题,然后根据题意读程序,分析程序中每一部

分的功能以及各变量的作用。

(1)填空后的程序如下:

#include "iostream.h"

void main()

{int n,i;float s;

s=1;

cin>>n;

for(i=1;i<=n;i++)

s*=i;

cout<

}

(2)填空后的程序如下:

#include "iostream.h"

void main()

{int n,i;

double sum;

sum=0;

cin>>n;

for(i=1;i<=n;i++)

if(i%3==0||i%7==7)

sum+=1.0/i;

cout<<"sum="<

}

(3)填空后的程序如下:

#include "iostream.h"

void main()

{int n,q;

double s;

n=2;

cin>>q;

s=2.0;

while(s<=q)

{s=s+(double)(n+1)/n;

n++;

}

cout<<"s="<

}

(4)填空后的程序如下:

#include "iostream.h"

void main()

{int x,i,j,sum=0;

j=0;

cin>>x;

for(i=1;i<=x;i++)

if(x%i==0)

if(i%2!=0)

{cout<

j++;

sum+=i;}

cout<

(5)填空后的程序如下:

#include "iostream.h"

void main()

{int i,j,n,count=0;

cin>>n;

for(i=2;i<=n;i++)

{

for(j=2;j

if(i%j==0)

break;

if(j>=i)

{ count++;

cout<

}

}

cout<

}

(6)填空后的程序如下:

#include "iostream.h"

void main()

{int i,n,sum;

sum=0;

cin>>n;

for(i=2;i<=n;i=i+2)

{

sum=sum+i;

}

cout<

}

(7)填空后的程序如下:

#include "iostream.h"

void main()

{int n,g,b,s,count=0;

for(n=100;n<1000;n++)

{ g=n%10;

s=n/10%10;

b=n/100;

if(g+b==s)

{count++;

cout<

if(count%5==0)

cout<

}

}

cout<

}

(8)填空后的程序如下:

#include "iostream.h"

#include "iomanip.h"

void main()

{int n,i,j;

float a,s=0;

cin>>n;

for(i=1;i<=n;i++)

{a=0;

for(j=1;j<=i;j++)

a+=j;

s=s+1.0/a;

}

cout<

}

(9)填空后的程序如下:

#include "iostream.h"

void main()

{int n,m;

long sum;

sum=0;

cin>>n>>m;

while(n<=m)

{sum=sum+n;

n++;

}

cout<<"sum="<

(10)填空后的程序如下:#include "iostream.h"

void main()

{int n,i;

long sum=0,t=1;

cin>>n;

for(i=1;i<=n;i++)

{ t=t*i;

sum=sum+t;}

cout<<"sum="<

(11)填空后的程序如下:#include "iostream.h"

void main()

{int n,g;

for(n=1;n<=1000;n++)

{ g=n%10;

if(n==g*g*g)

cout<

}

}

(12)填空后的程序如下:#include "iostream.h"

void main()

{int num,k,leap,g;

float sum,aver;

g=0;sum=0.0;

for(num=2;num<100;num++) { leap=1;

for(k=2;k

if(num%k==0)

{leap=0;

break;}

if(leap)

{ sum=sum+num;

g++;}

}

aver=sum*1.0/g;

cout<<"sum="<bd728_90();