C++程序设计基础程序源代码Word格式文档下载.docx
《C++程序设计基础程序源代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++程序设计基础程序源代码Word格式文档下载.docx(105页珍藏版)》请在冰豆网上搜索。
inta,b,c,max;
输入三个整数:
cin>
a>
b>
c;
cout<
a="
a<
'
\t'
b="
b<
c="
c<
if(a>
b)max=a;
elsemax=b;
最大数为:
if(c>
max)cout<
max<
【例3.3】用嵌套if语句完成【例3.2】的任务。
方法1:
采用第二种嵌套形式
voidmain(){inta,b,c,max;
if(a>
b)
c)max=a;
//a>
b且a>
c
elsemax=c;
b且a<
else
if(b>
c)max=b;
//b>
=a且b>
=a且b<
max="
方法2:
采用第一种嵌套形式
inta,b,c,max;
b&
elseif(b>
a&
【例3.4】某商场优惠活动规定,某商品一次购买5件以上(包含5件)10件以下(不包含10件)打9折,一次购买10件以上(包含10件)打8折。
设计程序根据单价和客户的购买量计算总价。
floatprice,discount,amount;
//单价、折扣、总价
intcount;
//购买件数cout<
输入单价:
price;
输入购买件数:
count;
if(count<
5)discount=1;
elseif(count<
10)discount=0.9;
elsediscount=0.8;
amount=price*count*discount;
单价:
price<
购买件数:
count<
\t\t"
折扣:
discount<
总价:
amount<
【例3.5】求一元二次方程ax2+bx+c=0的根。
其中系数a(a^0)、b、c的值由键盘输
入。
math.h>
floata,b,c;
floatdelta,x1,x2;
constfloatzero=0.0001;
//定义一个很小的常数
输入三个系数a(a!
=0),b,c:
delta=b*b-4*a*c;
if(fabs(delta)<
zero){//绝对值很小的数即被认为是0
方程有两个相同实根:
x1=x2="
-b/(2*a)<
elseif(delta>
0){delta=sqrt(delta);
x1=(-b+delta)/(2*a);
x2=(-b-delta)/(2*a);
方程有两个不同实根:
x1="
x1<
x2="
x2<
else//delta<
方程无实根!
【例3.6】运输公司对所运货物实行分段计费。
iomanip>
intc,s;
floatp,w,d,f;
输入运输单价p,重量w和里程s:
p>
w>
s;
c=s/250;
switch(c){
case0:
d=0;
break;
case1:
d=0.02;
case2:
case3:
d=0.05;
case4:
case5:
case6:
case7:
d=0.08;
case8:
case9:
case10:
case11:
d=0.1;
default:
d=0.15;
f=p*w*s*(1-d);
运输单价:
p<
重量:
w<
里程:
s<
d<
运费:
f<
【例3.7】设计一个计算器程序,实现加、减、乘、除运算。
floatnum1,num2;
charop;
输入操作数1,运算符,操作数2:
num1>
op>
num2;
switch(op){
case'
+'
:
num1<
op<
num2<
="
num1+num2<
case'
-'
num1-num2<
*'
num1*num2<
/'
num1/num2<
default:
是无效运算符!
【例3.8】这是一个古罗马数学家伦纳德斐波那契提出的有趣的问题。
0n0
fib(n)1n1
fib(n-2)fib(n-1)n1
iomanip>
constintm=20;
intfib0=0,fib1=1,fib2;
setw(15)<
fib0<
fib1;
for(intn=3;
n<
=m;
n++){
fib2=fib0+fib1;
//控制每行5个数据
fib2;
if(n%5==0)cout<
endl;
fib0=fib1;
fib1=fib2;
【例3.9】输入一个不超过9位的整数,将其反向后输出。
例如输入247,变成742输出。
#include<
usingnamespacestd;
voidmain(){
intnum,subscript;
intdigit[9];
输入一个整数:
cin»
num;
原来整数为:
num<
subscript=0;
〃数组下标初值
do{
digit[subscript]=num%10;
num=num/10;
subscript++;
//修改下标
}while(num>
0);
for(inti=O;
i<
subscript;
i++)〃整数的反向组合
num=num*10+digit[i];
反向后整数为:
【例3.10]用迭代法求x■a的近似值。
求平方根的迭代公式为
Xn1(Xna/Xn)/2
#include<
math>
floatx0,x1,a;
输入一个正数:
>
a;
if(a<
0)cout<
不能开平方!
x1=a/2;
do{
x0=x1;
x1=(x0+a/x0)/2;
}while(fabs(x1-x0)>
=1e-5);
a<
的平方根为:
【例3.11】输入一段文本,统计文本的行数、单词数及字符数。
假定单词之间以空格或跳格或换行符间隔,假定文本没有空行。
charch;
intnline=0,nword=0,nch=0;
intisword=0;
输入一段文本(无空行):
ch=cin.get();
if(ch=='
\n'
)nline++;
//遇换行符行数+1if(ch!
='
'
ch!
ch!
=EOF){//读到非间隔符
//在单词的起始处给单词数+1
//字符数加+1
//读到间隔符
//读到文本结束符为止
if(!
isword)nword++;
nch++;
isword=1;
elseisword=0;
}while(ch!
=EOF);
行数:
nline<
单词数:
nword<
字符数:
nch<
【例3.12]计算1+2+3+…+100的值。
constintn=100;
//采用常变量有利于修改程序voidmain(){
inti=1,sum=0;
//循环初始条件
while(i<
=n){sum+=i;
i++;
//修改循环条件
sum="
sum<
【例3.13]给定正整数m,判定其是否为素数。
intm,i,k;
输入整数m:
m;
if(m==2)cout<
m<
是素数"
else{
k=sqrt(m);
for(i=2;
=k;
i++)if(m%i==0)break;
//只要有一个整除,就可停止if(i>
k)cout<
m<
//循环提前终止表示是非素数
elsecout<
不是素数"
第四章
【例4.1】从键盘上输入一组数据,并按相反的顺序打印出来。
voidmain()
{inti,a[10];
for(i=0;
10;
i++)
a[i];
for(i=9;
i>
=0;
i--)
a[i]<
【例4.2】利用随机函数求一组数中的最大值及其位置。
ctime>
//调用系统时间
cstdlib>
//调用随机数的函数
{inti,max,k,a[10];
srand((unsigned)time(0));
//使每次产生的随机数不同
a[i]=rand()%1000;
//保证产生的随机数在1000以内
max=a[0];
k=0;
if(a[i]>
max){max=a[i],k=i;
//输出数组中个元素的值
Thelocationofthemaximumis:
k<
Valuesare:
max;
【例4.3】输出数列中的前10项:
1,1,2,3,5,8,13,…….
a[0]=1;
a[1]=1;
for(i=2;
i++)a[i]=a[i-1]+a[i-2];
i++)cout<
【例4.4】求nxn矩阵中主对角线元素的乘积。
constintn=4;
voidmain(){inti,j,a[n][n];
intp=1;
//初始化主对角线乘积变量
4;
i++)for(j=0;
j<
j++)cin>
a[i][j];
i++)//求主对角线元素的乘积
p*=a[i][i];
主对角线元素的乘积是"
p;
【例4.5】在一次选举学生会主席的大会上,有5名候选人,分别用1,2,3,4,5代表每位
候选人的号码,统计出每人的得票数。
用-1作为终止输入的标志。
程序如下:
{inti,a[6]={0};
请输入每张票上所投候选人的代号”;
i;
while(i!
=-1){
if(i>
=1&
i<
=5)a[i]++;
i;
}
endl;
for(i=1;
=5;
:
【例4.6】某社区对居民用电情况进行统计,每隔50度为一个统计区域,当大于等于
500度时不再统计,编一程序,分别统计各用电区间内的居民数。
include<
usingnamespacestd;
voidmain()
{inta[11]={0};
inti,x;
for(i=1;
=n;
{cin>
x;
if(x<
500)a[x/50]++;
elsea[10]++;
=10;
a["
]="
【例4.7】已知有10个整数,采用选择法将这10个数按从小到大的顺序打印输出。
选择法排序:
{inta[10]={33,61,43,74,86,92,11,35,64,25};
inti,j,k;
{k=i-1;
for(j=i-1;
j++)if(a[j]<
a[k])k=j;
//外循环控制次数
//外循环每一遍时最小值的位置//外循环每一遍时需要比较数据的次数//将最小值的位置号记录下来
intx=a[i-1];
a[i-1]=a[k];
a[k]=x;
将当前数与最小值互换}
for(inti=0;
i++)cout<
//输出排序后的数据
2.冒泡法排序:
【例4.8】有一组整数,采用冒泡法将这10个数按从小到大的顺序打印输出。
constintn=10;
voidmain(){inta[n];
inti,j,x;
for(i=1;
n-1;
for(j=0;
n-i;
j++)if(a[j]>
a[j+1]){x=a[j];
a[j]=a[j+1];
a[j+1]=x;
n;
【例4.9】用插入法对上例中的数据进行排序
i++)//外循环控制遍历次数,n个数从第2个数开始到最后进行n-1
次插入
{x=a[i];
//将待插入的数暂存于变量x中
j>
=0&
x<
a[j];
j--)//在有序序列中寻找插入位置
a[j+1]=a[j];
//若找到插入位置,则元素后移一个位置
//找到插入位置,完成插入
【例4.10】在一组整数42,55,73,28,48,66,30,65,94,72中,查找数据为65的数据,并给出查找结果。
{constintn=10;
inti,a[n]={42,55,73,28,48,66,30,65,94,72};
intx=65;
for(i=0;
if(x==a[i]){cout<
查找"
x<
成功,"
下标为:
break;
if(i>
=n)cout<
失败"
【例4.11】假定一维数组中的n个元素是一个从小到大顺序排列的有序表,编一程序从
a中用二分法查法,找出其值等于给定值为key的元素。
{inta[n]={15,26,37,45,48,52,60,66,73,90};
intkey=80;
intlow=0,high=n-1;
intmid;
while(low<
=high)
{mid=(low+high)/2;
if(key==a[mid]){cout<
二分查找"
key<
成功"
下标为"
mid<
}elseif(key<
a[mid])high=mid-1;
elselow=mid+1;
if(key!
=a[mid])cout<
【例4.12】对学生期末考试成绩进行处理,统计每一位学生的平均成绩和每门课程的平均成绩(保留小数一位小数)
constintn=10,m=5;
voidmain(){inta[n][m];
doubleb[n]={0},c[m]={0};
inti,j,sum1,sum2;
for(i=0;
{sum1=0;
j++)sum1+=a[i][j];
b[i]=int(sum1/float(m)*10+0.5)/10.0;
}for(j=0;
j++)
{sum2=0;
//使用格式函数setw(n)
//定义10人,5门课
//初始化平均值变量
//sum1,sum2分别表示每行的和