📄 c++.txt
字号:
else if (x==0 && y!=0)
cout<<"("<<x<<","<<y<<")"<<" is on y axis"<<endl;
else if (x!=0 && y==0)
cout<<"("<<x<<","<<y<<")"<<" is on x axis"<<endl;
}
3.16 简单计算器。设计一个程序计算表达式:data1 op
data2的值,其中data1、data2为两个实数,op为运算符(+、-、*、/),并且都由键盘输入。
解:
# include <iostream.h>
void main()
{ float x,y;
char op;
cout<<"please Input x op y:";
cin>>x>>op>>y;
switch(op)
{ case '+': cout<<x<<op<<y<<"="<<x+y<<endl;break;
case '-': cout<<x<<op<<y<<"="<<x-y<<endl;break;
case '*': cout<<x<<op<<y<<"="<<x*y<<endl;break;
case '/': cout<<x<<op<<y<<"="<<x/y<<endl;break;
default : cout<<"Input op error!"<<endl;
}
}
3.17奖金税率如下:(a代表奖金,r代表税率)
a<500(元) r=0%
500≤a<1000 r=3%
1000≤a<2000 r=5%
2000≤a<5000 r=8%
a≥5000 r=12%
输入一个奖金数,求税率、应交税款及实得奖金数。
解:
# include <iostream.h>
void main(void)
{ int a,b;
float r,tax,prise;
cout<<"please Input prize :";
cin>>a;
if (a>=5000)
b=10;
else
b=a/500;
switch(b)
{ case 0: r=0;break;
case 1: r=3;break;
case 2:
case 3: r=5;break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: r=8;break;
case 10: r=12;break;
default :cout<<"Input error!";
}
tax= a*r/100;
prise=a*(1-r/100);
cout<<"Tax rate:"<<r<<"%"<<endl;
cout<<"Tax :"<<tax<<endl;
cout<<"Prise:"<<prise<<endl;
}
3.18 写出下列程序的运行结果:
#include <iostream.h>
void main(void)
{ int n=4;
while (--n)
cout<<n<<'\t';
cout<<endl;
}
答: 3 2 1
3.19 写出下列程序的运行结果:
#include <iostream.h>
void main(void)
{ int x=3;
do
cout<<x<<'\t';
while (!(x--));
cout<<endl;
}
答:3
3.20 写出下列程序的运行结果:
#include <iostream.h>
void main(void)
{ int i=0,j=0,k=0,m;
for (m=0;m<4;m++)
switch (m)
{ case 0:i=m++;
case 1:j=m++;
case 2:k=m++;
case 3:m++;
}
cout<<i<<'\t'<<j<<'\t'<<k<<'\t'<<m<<endl;
}
答:0 1 2 5
3.21 求 的值,即求 的值。
解:
# include <iostream.h>
void main()
{ int i,n;
float s;
cout<<"Please Input n:";
cin>>n;
s=0;
i=1;
while (i<=n)
{ s=s+1.0/i;
i++;
}
cout<<"s="<<s<<endl;
}
另解(for语句)
# include <iostream.h>
void main()
{ int i,n;
float s;
cout<<"Please Input n:";
cin>>n;
for(s=0,i=1;i<=n;i++) s=s+1.0/i;
cout<<"s="<<s<<endl;
}
3.22 编程计算 的值(x>1),直到最后一项小于10-4为止。
解:用当型语句求解
方法一:
# include <iostream.h>
# include <math.h>
void main(void)
{ int i;
float x,y,z;
cout<<"Please Input x:";
cin>>x;
if (x>1)
{ i=1; y=1;
z=1.0/pow(x,i);
while (z>=0.0001)
{ y+=z;
i++;
z=1.0/pow(x,i);
}
cout<<"y="<<y<<'\t'<<"1/xi="<<z<<'\t'<<"i="<<i<<endl;
}
else
cout<<"x<=1 error!";
}
方法二:
# include <iostream.h>
void main(void)
{ float x,y,z;
cout<<"Please Input x:";
cin>>x;
if (x>1)
{ y=1;z=1.0/x;
while (z>=0.0001)
{ y=y+z;
z=z/x;
}
cout<<"y="<<y<<endl;
}
else
cout<<"x<=1 error!";
}
方法三:
# include <iostream.h>
void main(void)
{ float x,y,t;
cout<<"Please Input x:";
cin>>x;
if (x>1)
{ for(y=1,t=1.0/x;t>=0.0001;t=t/x)
y=y+t;
cout<<"y="<<y<<endl;
}
else
cout<<"x<=1 error!";
}
方法四(直到型)
# include <iostream.h>
# include <math.h>
void main()
{ int i;
float x,y,z;
cout<<"Please Input x:";
cin>>x;
if (x>1)
{ i=1; y=1;
z=1.0/pow(x,i);
do
{ y+=z;
i++;
z=1.0/pow(x,i);
}while (z>=0.0001);
cout<<"y="<<y<<'\t'<<"1/xi="<<z<<'\t'<<"i="<<i<<endl;
}
else
cout<<"x<=1 error!";
}
3.23 输入两个正整数m和n,求其最大公约数和最小公倍数。
解:求两个自然数m与n的最大公约数采用辗转相除法,
设最小公倍数 (Lease common multiple)为lcm=m*n;
最大公约数(Gretest common divisor)为gcd。
可采用如下循环实现:
r=m%n;m←n;n←r;直到r=0为止,此时最大公约数为gcd=n,最小公倍数为lcm=lcm/gcd
例如:求m=4与n=6的最大公约数:
r=4%6=4; m←6;n←4;
r=6%4=2; m←4;n←2;
r=4%2=0;
则最大公约数gcd=n=2
最小公倍数lcm=4*6/2=12
事实上:4的公约数为1、2、4,6的公约数为1、2、3、6,所以两数公约数为1,2,最大公约数为2。4的公倍数为4、8、12、16等,6的公倍数为6、12、18等,所以两数最小公倍
数为12。
# include <iostream.h>
void main()
{ int m,n,lcm,gcd,r;
cout<<"please input m,n:";
cin>>m>>n;
lcm=m*n;
while (m%n!=0)
{ r=m%n;
m=n;
n=r;
}
gcd=n;
lcm=lcm/gcd;
cout<<"Lease common multiple="<<lcm<<endl;
cout<<"Greatest common divisor="<<gcd<<endl;
}
3.24某月十天内的气温为:-5、3、4、0、2、7、0、5、-1、2(℃),编程统计出气温在0℃以上、0℃和0℃以下各多少天?并计算出这十天的平均气温值。
解:
# include <iostream.h>
void main(void)
{ int i,positive=0,zero=0,negative=0;
float f,sum=0,ave;
cout<<"请输入10天的气温:";
for (i=1;i<=10;i++)
{ cin>>f;
if (f>0) positive++;
else if (f==0) zero++;
else negative++;
sum+=f;
}
ave=f/10;
cout<<"大于零度:"<<positive<<"天\n等于零度:"
<<zero<<"天\n小于零度:"<<negative<<"天"<<endl;
cout<<"平均温度:"<<ave<<endl;
}
3.25 求 ,即求1!+2!+3!+4!+……+10!。
解:
# include <iostream.h>
void main(void)
{ int i,n,k=1;
long s=0;
cout<<"Please Input n:";
cin>>n;
for(i=1;i<=n;i++)
{ k=k*i;
s=s+k;
}
cout<<"s="<<s<<endl;
}
3.26设用100元钱买100支笔,其中钢笔每支3元,圆珠笔每支2元,铅笔每支0.5元,问钢笔、圆珠笔和铅笔可以各买多少支(每种笔至少买1支)?
解:
设钢笔、圆珠笔和铅笔各买i、j、k支,则应有下列式子成立。
3*i+2*j+0.5*k=100
i+j+k=100
用穷举法将购买钢笔、圆珠笔的数量用二重循环遍历一遍。从中找出符合上述条件的购买方法。
# include <iostream.h>
void main(void)
{ int i,j,k;
for (i=1;i<=33;i++)
for (j=1;j<=49;j++)
{ k=100-i-j;
if (k%2==0 && 3*i+2*j+k/2==100)
cout<<"pen="<<i<<"\t ball pen="<<j<<"\t
pencil="<<k<<endl;
}
}
3.27 编程显示如下图形:
解:
# include <iostream.h>
void main(void)
{ int i,j,n;
cout<<"请输入棱形的对角线半长度n:";
cin>>n;
for (i=1;i<=n;i++) //画上半个棱形
{ for(j=1;j<=40-i;j++) cout<<" ";
for(j=1;j<=2*i-1;j++) cout<<"*";
cout<<endl;
}
for (i=n-1;i>0;i--) //画下半个棱形
{ for(j=1;j<=40-i;j++) cout<<" ";
for(j=1;j<=2*i-1;j++) cout<<"*";
cout<<endl;
}
}
习题4
4.1什么是数组?
答:
数组是若干个同类型数据元素的集合。
4.2一维数组与二维数组在内存中是如何存储的?
答:
一维数组a[n]定义后,系统分配n*k个连续存储单元,用于存放数组元素值,其中k=元素占用字节数。
二维数组a[m][n]定义后,系统分配m*n*k个连续存储单元,用于存放数组元素值,其中k=元素占用字节数。
存放方式为按行存放,即先存第一行元素,再存第二行元素,依次把各行元素存入一串连续的存储单元中。
4.3有如下数组定义:
int a[20];
指出该数组的数组名、数组元素类型、数组元素个数、第一个数组元素的下标值和最后一个数组元素的下标值。
答:
数组名为a,数组元素类型为整型,数组元素个数为20,第一个数组元素的下标值为0和最后一个数组元素的下标值为19。
4.4写出下列程序的运行结果:
#include <iostream.h>
void main(void)
{ int i,k,a[10],p[3];
k=5;
for (i=0;i<10;i++) // a[0]=0,…,a[9]=9
a[i]=i;
for (i=0;i<3;i++)
p[i]=a[i*(i+1)]; // p[0]=a[0]=0,p[1]=a[2]=2,p[2]=a[6]=6,
for (i=0;i<3;i++)
k=k+p[i]*2; // k=5+0*2+2*2+6*2=21
cout<<k<<endl;
}
答: 21
4.5写出下列程序的运行结果:
#include <iostream.h>
void main(void)
{ int a[6][6],i,j;
for (i=1;i<6;i++)
for (j=1;j<6;j++)
a[i][j]=(i/j)*(j/i); //当i<j时i/j=0 当j<i时j/i=0 所以只有当i=j时a[i][j]=1
for (i=1;i<6;i++)
{ for (j=1;j<6;j++)
cout<<a[i][j]<<'\t';
cout<<endl;
}
}
答:
a[i][j]=(i/j)*(j/i); //当i<j时i/j=0 当j<i时j/i=0 所以
a[i][j]=1, i=j
a[i][j]=0, i≠j
即矩阵对角线上元素为1,其它元素为0。输出结果为对角线矩阵:
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
4.6写出下列程序的运行结果:
#include <iostream.h>
#include <string.h>
void main(void)
{ char str[80];
int i,j,k;
cout<<"Input string:";
cin>>str;
for (i=0,j=strlen(str)-1;i<j;i++,j--)
{ k=str[i];
str[i]=str[j];
str[j]=k;
}
cout<<str<<endl;
}
运行时输入:abcdef(回车)
答:fedcba
4.7某班有30个学生,进行了数学考试,编写程序将考试成绩输入一维数组,并求数学的平均成绩及不及格学生的人数。
解:
#include <iostream.h>
#define N 10
void main(void)
{ float math[N],sum,ave;
int i,count;
cout<<"Input math score:";
sum=0;
count=0;
for(i=0; i<N;i++)
cin>>math[i];
for(i=0;i<N;i++)
{ sum=sum+math[i];
if (math[i]<60) count++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -