程序设计课后习题参考答案 1Word文档格式.docx

上传人:b****6 文档编号:16259856 上传时间:2022-11-22 格式:DOCX 页数:31 大小:25.50KB
下载 相关 举报
程序设计课后习题参考答案 1Word文档格式.docx_第1页
第1页 / 共31页
程序设计课后习题参考答案 1Word文档格式.docx_第2页
第2页 / 共31页
程序设计课后习题参考答案 1Word文档格式.docx_第3页
第3页 / 共31页
程序设计课后习题参考答案 1Word文档格式.docx_第4页
第4页 / 共31页
程序设计课后习题参考答案 1Word文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

程序设计课后习题参考答案 1Word文档格式.docx

《程序设计课后习题参考答案 1Word文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计课后习题参考答案 1Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

程序设计课后习题参考答案 1Word文档格式.docx

d;

cout<

<

"

max="

max<

end1;

}

2.输入一个整数:

为65时,显示“A”;

为66时,显示“B”,为67时,显示“C”,其它值显示“END”。

#include<

iostream.h>

intx;

cinx;

switch(x)

{

case65:

A\n"

break;

case66:

B\n"

case67:

C\n"

default:

END\n"

3.编写输入一个整数并且该数按小于10,10~99,100~999,1000以上分类并显示的C++程序,例如:

输入335时,显示“335is100to999”。

inta;

cina;

if(a>

=100)

=1000)

a<

isgreaterthan1000\n"

else

is100to999\n"

if(a<

10)

islessthan10\n"

is10to99\n"

4.一个分数序列为:

2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。

floatx=1,y=2,p,k,s=0;

for(k=1;

k<

=20;

k++)

s+=y/x;

p=x+y;

x=y;

y=p;

2/1+3/2+5/3+8/5+…="

s<

endl;

5.编写程序,显示如下图形。

*

***

*****

*******

inti,j,k;

for(i=1;

i<

5;

i++)

for(k=4;

k>

=i;

k--)

for(j=1;

j<

=2*i-1;

j++)

*"

;

endl;

for(i=3;

i>

0;

i--)

=4-i+1;

for(j=1,j<

习题4参考答案

三、编程题

1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。

#include<

inta[5],t;

for(inti=0;

cina[i];

for(i=0;

5/2;

t=a[i];

a[i]=a[4-i];

a[4-i]=t;

a[i]<

\t"

2.有一个3×

3的矩阵,分别求出两条对角线元素之和。

inta[3][3],i,j,suml=0,sum2=0;

输入数组元素:

\n"

3;

for(j=0;

3:

cina[i][j];

sum1+=a[i][i];

sum2+=a[i][2-i];

sum1="

sum1<

sum2="

sum2<

3.输入一个字符,统计单词个数,单词之间用空格分离。

isotream.h>

charstr[80],c1,c2=′′;

inti=0,num=0;

cin.getline(str,78);

while(str[i](='

\o'

c1=str[i];

if(i==0)c2=();

elsec2=str[i-1];

if(c1!

='

'

&

c2=('

)num++;

i++

共有"

num<

个单词"

4.用冒泡法对输入的15个整数按由小到大顺序排列。

#include<

iomanip.h>

inti,j,m,a[15];

15;

cina[i];

for(j=1;

14;

15-j;

if(a[i]>

a[i+1])

m=a[i];

a[i]=a[i+1];

a[i+1]=m;

setw(4)<

a[i];

5.从键盘为1个N×

N的整型数组a输入数据,并显示每一行的最大值。

iomanip.h>

constN=5;

inta[N][N],b[N],i,j;

请为数组a:

输入数据:

N;

N;

cina[i][j];

//用双重循环为数组a顺序输入数据

b[i]=a[i][0];

N:

if(b[i]<

a[i][j])

b[i]=a[i][j];

//经比较将a数组第i行的最大值分别存入b[i]中

输出每一行的最大值:

b[i];

//经b[i]输出数组a每一行的最大值

程序运行结果:

5015341729

1825427735

2524172311

5998322862

541997848

输出每一行的最大值:

5077259878

习题5参考答案

1.输入3个字符串,要求输出其中最大,最小字符串。

输入3

#include"

iostream.h"

string.h"

constintN=3;

chars[N][20],max[20],min[20];

cin.getline(s[i],20);

strcpy(max,s[0]);

strcpy(min,s[0]);

if(strcmp(s[i],max)>

0)

strcpy(max,s[i]);

if(strcmp(min,s[i])>

strcpy(min,s[i]);

最大字符串是:

最小字符串是:

min<

2.用指针的方法将一个字符串“china”的单个字符依次输出。

iostream.h"

char*p="

china"

p[i]!

\0'

p[i]<

3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。

输入不是1~12时,则退出程序。

{//C++语言中续行符用"

\"

表示

char*monthname[]={"

january"

"

february"

,"

march"

april"

may"

june"

july"

august"

september"

october"

november"

december"

};

inti;

while

(1)

请输入月份号:

cini;

if(i<

1‖i>

12)

cont<

错误的月份号"

……>

monthname[i-1]<

end1;

4.编写程序将n个数按逆序输出,要求使用指针。

思考:

可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。

#include"

constintN=5;

inta[N],*p=a,*q,t;

cin*p++;

//输入数组元素

p--;

//将p指向最后一个数组元素

for(q=a;

q<

p;

p--,q++)

t=*p;

*p=*q;

*q=t;

p=a;

*(p+i)<

5.有n个人围成一个圈,顺序排号。

从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。

#include"

inti,k,m,n,num[50],*p;

inputnumberofperson:

n="

cinn;

p=num;

n;

*(p+i)=i+l;

//从1到n对每个人进行编号

i=0;

//i为每次循环时的计数变量

k=0;

//k为按1,2,3报数时的计数变量

m=0;

//m为退出人数

while(m<

n-1)//当退出人数比n-1少时(即未退出人数大于1时)执行

if(*(p+i)!

=0)k++;

if(k==3)//对退出的人的编号置为0

*(p+i)=0;

m++;

i++;

if(i==n)i=0;

//报数到尾后,i恢复为0

while(*p=0)p++;

endl<

thelastoneisNO:

*p;

运行结果为:

inputnumberofperson:

n=8

7

习题6参考答案

1.编写程序,计算1+2+3+…+n的值。

其中n是自然数。

分析:

n1为1,n2为100即可

intGetSum(intn);

intnum;

intsum=0;

"

Pleaseenteranumber:

cinnum;

sum=GetSum(num);

sum<

while

(1){}

return0;

intGetSum(intn)

ints=0;

for(inta=0;

=n;

a++)

s+=a;

returns;

2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。

例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。

math.h"

introot(float,float,float);

floatxl,x2;

floata,b,c;

请输入a,b,c的值:

cinabc;

if(root(a,b,c))

x1="

x1<

\tx2="

x2<

root(floata,floatb,floatc)

floatt;

t=b*b-4*a*c;

if(t>

=0&

a)

t=sqrt(t);

x1=(-b+t)/(2*a);

x2=(-b-t)/(2*a);

return1;

return0;

3.编写一个函数,分别求出一维整型数组a[n]中所有值为奇数的元素个数和所有值为偶数的元素个数。

string.h>

intGetcount(char*p)

intcount=0;

//记录大写字母字符个数的变量,设初值为0

while(*p!

=NULL)//如为大写字母,则总数加1

if(*p>

A'

*p<

z'

count++;

p++;

returncount;

voidFunc(inta[],intn,int'

&

ox,int&

ex)

inti=0;

ox=0;

//参数引用,返回数组中值为奇数的元素个数

ex=0;

//参数引用,返回数组中值为偶数的元素个数

while(i<

n)

if(a[i]%2==0)

ex++;

ox++;

4.编写一个函数,求输入的两个自然数的最大公约数。

intFunc(intMax,intMin)

intTemp,Num;

if(Max<

Min)

Temp=Max;

Max=Min;

Min=Temp;

do{

Num=Max%Min;

Min=Num;

}while(Num!

=0);

returnMax;

注释:

本题采用“辗转相除法”。

具体如下:

(1)Max变量存放较大的数作为被除数,Min变量存放较小的数作为除数。

(2)用Max除以Min后的余数存放在Num中。

(3)若Num!

=0,则Max←Min,Min←Num,继续相除得到的新的Num。

(4)重复步骤(3),最后的Max就是最大公约数。

5.有4个人,其中第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人又比第1个人大2岁,如果第1个人30岁,那么第4个人多少岁?

用递归调用实现。

intyear(int);

intn;

请输入:

第一个人的年龄(30):

第四个人的年龄是:

year(n)<

intyear(intn)

staticinty=n,m=0;

if(m==3)

returny;

y=year(y)+2;

6.求一元二次方程的实根程序。

intfun(int,int);

intn1,n2;

输入两个正整数且前者要小于后者:

cinn1n2;

从"

n1<

到"

n2<

的累加和为:

fun(n1,n2)<

intfun(intm,intn)

if(m=n)

returnn;

returnn+fun(m,n-1);

习题7参考答案

二、编程题

1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。

math.h"

#definemax(x,y)x>

y?

x:

y;

intx,y,z,absmax;

cinxyz;

absmax=max(abs(x),abs(y));

absmax=max(abs(absmax),abs(z));

Theabsolutevalueofmaximalnumberis:

absmax<

2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。

#defineN4

intmain()

int[N][N];

for(intj=0;

*(*(a+i)+j)=i+j;

*(*(a+i)+j)<

程序运行的结果:

0123

1234

2345

3456

3.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。

stdio.h"

#defineMIN(m,n)m<

n?

m:

n//定义宏名MIN替换运算m<

m:

n

floatt=36.712,u=18.645;

//定义实型变量t,u

floatmin;

min=MIN(t,u);

//调用带参数的宏MIN,求t和u的最小值

运算结果是:

18.645

习题8参考答案

三、编程题

1.定义枚举类型months,用枚举常量代表一年的12个月份。

enummanths{JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};

2.利用结构体类型编制一程序,实现输入输出一个学生的学号、姓名和出生日期。

structdate

intyear;

intmonth;

intday;

};

structstudent

intnumber;

charname[10];

datebirth;

structstudentstu1;

cinstu1.numberstu1.name;

cinstu1.birth.yearstu1.birth.monthStu1.birth.day;

stu1.number<

stu1.name<

stu1.birth.year;

年"

stu1.birth.month<

月"

stu1.birth.day<

日"

3.利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。

structstudy

intmid;

intend;

intaverage;

}math;

cinmath.midmath.end;

math.average=(math.mid+math.end)/2;

setprecision

(2)<

math.average<

4.利用指向结构体的指针编制一程序,实现输入3个学生的学号,数学期中和期末成绩,然后计算其平均成绩并输出成绩表。

structstu

intmid:

intave;

}s[3];

voidm

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1