C++ANSWERTHQ.docx
《C++ANSWERTHQ.docx》由会员分享,可在线阅读,更多相关《C++ANSWERTHQ.docx(35页珍藏版)》请在冰点文库上搜索。
C++ANSWERTHQ
高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案
――武汉大学出版社
习题1参考答案
一、选择题
1.C 2.C
二、填空题
1.面向过程,面向对象
2.编辑,编译,链接,运行
3.机器语言,汇编语言,高级语言。
4.数据,操作处理方法
5.'\0'
三、简答题
1.简述三代计算机语言各自的特点。
解答如下:
机器语言是用二进制指令表示的、计算机能够直接识别和执行的语言。
由于计算机可以直接执行机器语言,执行速度快是机器语言的主要优点。
在计算机发展初期,软件工程师使用机器语言来编写程序。
在计算机指令集不断增大的情况下,机器语言不易记忆,不便于学习,软件开发难度大、周期长、易出错,软件维护工作量大等缺点更加突出,机器语言已不能胜任编程工作。
汇编语言是用一些易读的助记符表示机器指令操作码,如ADD、CALL等。
使用汇编语言编写程序提高了编程速度,也比较容易编写出质量较高的程序,检查、维护也比较容易。
但汇编语言抽象层次低,程序员编写程序工作量大。
高级语言屏蔽了机器语言的细节,提高了语言抽象层次。
程序中采用了具有一定含义的数据命令和容易理解的执行语句。
高级语言不受计算机种类的限制,通用性强,易于理解、学习和掌握。
使用高级语言减少了大量的编程工作量。
目前使用比较广泛的高级语言有Basic、Fortran、Pascal和C语言。
C++是一种功能强大、应用更广泛的高级语言。
2.简述C语言程序实现的过程。
用C++语言编写好一个完整的程序后,第一步要上机运行编辑程序,输入源程序;第二步是对源程序进行编译生成目标代码文件,目标代码文件名与源程序文件名相同,而扩展名改为obj;第三步运行连接程序,将目标代码文件与C++的库文件相连接,生成可执行文件,可执行文件名与源程序文件名相同,而扩展名为exe;第四步运行可执行文件,实现程序所具有的功能。
习题2参考答案
1.C 2.B 3.B 4.D
1.?
:
2.4字节,1字节,4字节,8字节
3.15
4.6,60
5.26,25
6.256,22
7.3.96E2,3.96E5
1.C++基本数据类型有哪几种?
程序设计如下:
C++的基本数据类型有bool(布尔型,又称逻辑型)、char(字符型)、int(整型)、float(浮点型,表示实数)和double(双精度浮点型,简称双精度型)等5种。
2.定义符号变量与定义变量有何异同?
定义符号常量和定义变量都要指定数据类型,系统将为其分配一定的存储空间。
其不同之处在于:
定义符号常量必须给出常量值,且以后不能修改本常量的值;而变量可以在定义变量的同时赋初值,以后可以修改该变量。
3.什么叫常量?
什么是变量?
常量就是在程序的运行过程中该量是不可修改的量;变量在程序的运行过程中允许对该变量的值进行修改。
习题3参考答案
1.A 2.C 3.D 4.D 5.C
1.true 2.true 3.11 4.j<10和k%3 5.k<=x
三、编程题
1.编写找出a=18,b=35,c=21,d=96中最大值的程序。
#include
voidmain()
{
inta=18,b=35,c=21,d=96,max;
max=a>b?
a:
b;max=max>c?
max:
c;
max=max>d?
d;cout<<"max="<} 2.输入一个整数:为65时,显示“A”;为66时,显示“B”,为67时,显示“C”,其它值显示“END”。程序设计如下:#includevoidmain(){intx;cinx;switch(x){case65:cout<<"A\n";break;case66:cout<<"B\n";break;case67:cout<<"C\n";break;default:cout<<"END\n";}}3.编写输入一个整数并且该数按小于10,10~99,100~999,1000以上分类并显示的C++程序,例如:输入335时,显示“335is100to999”。程序设计如下:#includevoidmain(){ inta;cina;if(a>=100){ if(a>=1000)cout<elsecout<}else{ if(a<10)cout<elsecout<}}4.一个分数序列为:2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。程序设计如下:#include voidmain(){ floatx=1,y=2,p,k,s=0;for(k=1;k<=20;k++){ s+=y/x;p=x+y;x=y;y=p;}cout<<"2/1+3/2+5/3+8/5+…="<}5.编写程序,显示如下图形。** * ** * * * ** * * * * * ** * * * ** * **程序设计如下:#includevoidmain(){inti,j,k;for(i=1;i<5;i++){ for(k=4;k>=i;k--)cout<<"";for(j=1;j<=2*i-1;j++)cout<<"*";cout<}for(i=3;i>0;i--){ for(k=1;k<=4-i+1;k++)cout<<"";for(j=1,j<=2*i-1;j++)cout<<"*";cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
}
2.输入一个整数:
为65时,显示“A”;为66时,显示“B”,为67时,显示“C”,其它值显示“END”。
intx;cinx;
switch(x)
case65:
cout<<"A\n";break;
case66:
cout<<"B\n";break;
case67:
cout<<"C\n";break;
default:
cout<<"END\n";
3.编写输入一个整数并且该数按小于10,10~99,100~999,1000以上分类并显示的C++程序,例如:
输入335时,显示“335is100to999”。
inta;cina;
if(a>=100)
if(a>=1000)
cout<elsecout<}else{ if(a<10)cout<elsecout<}}4.一个分数序列为:2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。程序设计如下:#include voidmain(){ floatx=1,y=2,p,k,s=0;for(k=1;k<=20;k++){ s+=y/x;p=x+y;x=y;y=p;}cout<<"2/1+3/2+5/3+8/5+…="<}5.编写程序,显示如下图形。** * ** * * * ** * * * * * ** * * * ** * **程序设计如下:#includevoidmain(){inti,j,k;for(i=1;i<5;i++){ for(k=4;k>=i;k--)cout<<"";for(j=1;j<=2*i-1;j++)cout<<"*";cout<}for(i=3;i>0;i--){ for(k=1;k<=4-i+1;k++)cout<<"";for(j=1,j<=2*i-1;j++)cout<<"*";cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
else
cout<}else{ if(a<10)cout<elsecout<}}4.一个分数序列为:2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。程序设计如下:#include voidmain(){ floatx=1,y=2,p,k,s=0;for(k=1;k<=20;k++){ s+=y/x;p=x+y;x=y;y=p;}cout<<"2/1+3/2+5/3+8/5+…="<}5.编写程序,显示如下图形。** * ** * * * ** * * * * * ** * * * ** * **程序设计如下:#includevoidmain(){inti,j,k;for(i=1;i<5;i++){ for(k=4;k>=i;k--)cout<<"";for(j=1;j<=2*i-1;j++)cout<<"*";cout<}for(i=3;i>0;i--){ for(k=1;k<=4-i+1;k++)cout<<"";for(j=1,j<=2*i-1;j++)cout<<"*";cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
if(a<10)
cout<elsecout<}}4.一个分数序列为:2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。程序设计如下:#include voidmain(){ floatx=1,y=2,p,k,s=0;for(k=1;k<=20;k++){ s+=y/x;p=x+y;x=y;y=p;}cout<<"2/1+3/2+5/3+8/5+…="<}5.编写程序,显示如下图形。** * ** * * * ** * * * * * ** * * * ** * **程序设计如下:#includevoidmain(){inti,j,k;for(i=1;i<5;i++){ for(k=4;k>=i;k--)cout<<"";for(j=1;j<=2*i-1;j++)cout<<"*";cout<}for(i=3;i>0;i--){ for(k=1;k<=4-i+1;k++)cout<<"";for(j=1,j<=2*i-1;j++)cout<<"*";cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<}}4.一个分数序列为:2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。程序设计如下:#include voidmain(){ floatx=1,y=2,p,k,s=0;for(k=1;k<=20;k++){ s+=y/x;p=x+y;x=y;y=p;}cout<<"2/1+3/2+5/3+8/5+…="<}5.编写程序,显示如下图形。** * ** * * * ** * * * * * ** * * * ** * **程序设计如下:#includevoidmain(){inti,j,k;for(i=1;i<5;i++){ for(k=4;k>=i;k--)cout<<"";for(j=1;j<=2*i-1;j++)cout<<"*";cout<}for(i=3;i>0;i--){ for(k=1;k<=4-i+1;k++)cout<<"";for(j=1,j<=2*i-1;j++)cout<<"*";cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
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;
cout<<"2/1+3/2+5/3+8/5+…="<
5.编写程序,显示如下图形。
*
* * *
* * * * *
* * * * * * *
inti,j,k;
for(i=1;i<5;i++)
for(k=4;k>=i;k--)
cout<<"";
for(j=1;j<=2*i-1;j++)
cout<<"*";
cout<}for(i=3;i>0;i--){ for(k=1;k<=4-i+1;k++)cout<<"";for(j=1,j<=2*i-1;j++)cout<<"*";cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
for(i=3;i>0;i--)
for(k=1;k<=4-i+1;k++)
for(j=1,j<=2*i-1;j++)
cout<}} 习题4参考答案一、选择题1.C 2.C 3.D 4.B 5.D二、填空题1.递增的顺序连续2.可不3.4.04.i<7,j=i+75.Strlen(str)三、编程题1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。程序设计如下:#includevoidmain(){inta[5],t;for(inti=0;i<5;i++)cina[i];for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
习题4参考答案
1.C 2.C 3.D 4.B 5.D
1.递增的顺序连续
2.可不
3.4.0
4.i<7,j=i+7
5.Strlen(str)
1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。
inta[5],t;
for(inti=0;i<5;i++)
cina[i];
for(i=0;i<5/2;i++)
t=a[i];
a[i]=a[4-i];
a[4-i]=t;
for(i=0;i<5;i++)
cout<cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<}2.有一个3×3的矩阵,分别求出两条对角线元素之和。程序设计如下:#includevoidmain(){inta[3][3],i,j,suml=0,sum2=0;cout<<"输入数组元素:\n";for(i=0;i<3;i++)for(j=0;j<3:j++)cina[i][j];for(i=0;i<3;i++){sum1+=a[i][i];sum2+=a[i][2-i];}cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
2.有一个3×3的矩阵,分别求出两条对角线元素之和。
inta[3][3],i,j,suml=0,sum2=0;
cout<<"输入数组元素:
\n";
for(i=0;i<3;i++)
for(j=0;j<3:
j++)
cina[i][j];
sum1+=a[i][i];
sum2+=a[i][2-i];
cout<<"sum1="<}3.输入一个字符,统计单词个数,单词之间用空格分离。程序设计如下:#includevoidmain(){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++}cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
3.输入一个字符,统计单词个数,单词之间用空格分离。
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++
cout<<"共有"<}4.用冒泡法对输入的15个整数按由小到大顺序排列。程序设计如下:#include#includevoidmain(){inti,j,m,a[15];for(i=0;i<15;i++)cina[i];for(j=1;j<14;j++)for(i=0;i<15-j;i++)if(a[i]>a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}for(i=0;i<15;i++)cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
4.用冒泡法对输入的15个整数按由小到大顺序排列。
inti,j,m,a[15];
for(i=0;i<15;i++)
cina[i];
for(j=1;j<14;j++)
for(i=0;i<15-j;i++)
if(a[i]>a[i+1])
m=a[i];a[i]=a[i+1];a[i+1]=m;
cout<cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<}5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。程序设计如下:#include #include voidmain(){constN=5;inta[N][N],b[N],i,j;cout<<"请为数组a:输入数据:"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。
constN=5;
inta[N][N],b[N],i,j;
cout<<"请为数组a:
输入数据:
"<for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
for(i=0;ifor(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
for(j=0;jcina[i][j];//用双重循环为数组a顺序输入数据for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cina[i][j];//用双重循环为数组a顺序输入数据
for(i=0;i{b[i]=a[i][0];for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
b[i]=a[i][0];
for(j=1;jj++)if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
if(b[i]b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中}cout<<"输出每一行的最大值:";for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中
cout<<"输出每一行的最大值:
";
for(i=0;icout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<}程序运行结果:请为数组a:输入数据:5015341729182542773525241723115998322862541997848输出每一行的最大值:5077259878 习题5参考答案一、选择题1.B 2.D 3.B 4.A 5.D二、填空题1.地址2.NULL或03.整形变量地址,一维数组元素的地址4.(1)int*p=&k;(2)*p=6;(3)int**p;(4)pp=&p;(5)**pp*=2orZ5.t=p;p=q,q=t;三、编程题1.输入3个字符串,要求输出其中最大,最小字符串。程序设计如下:输入3#include"iostream.h"#include"string.h"voidmain(){constintN=3;chars[N][20],max[20],min[20];for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
程序运行结果:
请为数组a:
5015341729
1825427735
2524172311
5998322862
541997848
输出每一行的最大值:
5077259878
习题5参考答案
1.B 2.D 3.B 4.A 5.D
1.地址
2.NULL或0
3.整形变量地址,一维数组元素的地址
4.
(1)int*p=&k;
(2)*p=6;
(3)int**p;
(4)pp=&p;
(5)**pp*=2orZ
5.t=p;p=q,q=t;
1.输入3个字符串,要求输出其中最大,最小字符串。
输入3
#include"iostream.h"
#include"string.h"
constintN=3;
chars[N][20],max[20],min[20];
for(inti=0;icin.getline(s[i],20);strcpy(max,s[0]);strcpy(min,s[0]);for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cin.getline(s[i],20);
strcpy(max,s[0]);
strcpy(min,s[0]);
for(i=0;i{if(strcmp(s[i],max)>0)strcpy(max,s[i]);if(strcmp(min,s[i])>0)strcpy(min,s[i]);}cout<<"最大字符串是:"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
if(strcmp(s[i],max)>0)
strcpy(max,s[i]);
if(strcmp(min,s[i])>0)
strcpy(min,s[i]);
cout<<"最大字符串是:
"<cout<<"最小字符串是:"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<<"最小字符串是:
"<}2.用指针的方法将一个字符串“china”的单个字符依次输出。程序设计如下:#include"iostream.h"voidmain(){char*p="china";for(inti=0;p[i]!='\0';i++)cout<}3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。输入不是1~12时,则退出程序。程序设计如下:#include"iostream.h"voidmain(){ //C++语言中续行符用"\"表示char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};inti;while(1){cout<<"请输入月份号:"cini;if(i<1‖i>12){cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
2.用指针的方法将一个字符串“china”的单个字符依次输出。
#include"iostream.h"
char*p="china";
for(inti=0;p[i]!
='\0';i++)
cout<
3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。
输入不是1~12时,则退出程序。
{ //C++语言中续行符用"\"表示
char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};
inti;
while
(1)
cout<<"请输入月份号:
"cini;
if(i<1‖i>12)
cont<<"错误的月份号"<break;}cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
break;
cont<<"……>"<}}4.编写程序将n个数按逆序输出,要求使用指针。思考:可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。程序设计如下:#include"iostream.h"voidmain(){constintN=5;inta[N],*p=a,*q,t;for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
4.编写程序将n个数按逆序输出,要求使用指针。
思考:
可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。
constintN=5;
inta[N],*p=a,*q,t;
for(inti=0;icin*p++;//输入数组元素p--;//将p指向最后一个数组元素for(q=a;q{t=*p;*p=*q;*q=t;}p=a;for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cin*p++;//输入数组元素
p--;//将p指向最后一个数组元素
for(q=a;q
t=*p;*p=*q;*q=t;
p=a;
for(i=0;icout<<*(p+i)<<"\t";cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<<*(p+i)<<"\t";
cout<}5.有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。程序设计如下:#include"iostream.h"voidmain(){inti,k,m,n,num[50],*p;cout<<"inputnumberofperson:n=";cinn;p=num;for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
5.有n个人围成一个圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。
inti,k,m,n,num[50],*p;
cout<<"inputnumberofperson:
n=";
cinn;p=num;
for(i=0;i*(p+i)=i+l;//从1到n对每个人进行编号i=0;//i为每次循环时的计数变量k=0;//k为按1,2,3报数时的计数变量m=0;//m为退出人数while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
*(p+i)=i+l;//从1到n对每个人进行编号
i=0;//i为每次循环时的计数变量
k=0;//k为按1,2,3报数时的计数变量
m=0;//m为退出人数
while(m{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置为0{*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;//报数到尾后,i恢复为0}while(*p=0)p++;cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
if(*(p+i)!
=0)k++;
if(k==3)//对退出的人的编号置为0
*(p+i)=0;k=0;m++;
i++;
if(i==n)i=0;//报数到尾后,i恢复为0
while(*p=0)p++;
cout<"<<*p;}运行结果为:inputnumberofperson:n=8thelastoneisNO:7 习题6参考答案一、选择题1.A 2.C 3.A二、填空题1.局部,全部2.允许,不允许3.main4.inline5.可以在同名部变量的作用域中访问全局变量三、编程题1.编写程序,计算1+2+3+…+n的值。其中n是自然数。分析:n1为1,n2为100即可程序设计如下:#includeintGetSum(intn);voidmain(){intnum;intsum=0;cout<<"Pleaseenteranumber:";cinnum;sum=GetSum(num);cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
"<<*p;
运行结果为:
inputnumberofperson:
n=8
thelastoneisNO:
7
习题6参考答案
1.A 2.C 3.A
1.局部,全部
2.允许,不允许
3.main
4.inline
5.可以在同名部变量的作用域中访问全局变量
1.编写程序,计算1+2+3+…+n的值。
其中n是自然数。
分析:
n1为1,n2为100即可
intGetSum(intn);
intnum;
intsum=0;
cout<<"Pleaseenteranumber:
cinnum;
sum=GetSum(num);
cout<while(1){}return0;}intGetSum(intn){ints=0;for(inta=0;a<=n;a++)s+=a;returns;} 2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。程序设计如下:#include"iostream.h"#include"math.h"introot(float,float,float);floatxl,x2;voidmain(){floata,b,c;cout<<"请输入a,b,c的值:";cinabc;if(root(a,b,c))cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
(1){}
return0;
intGetSum(intn)
ints=0;
for(inta=0;a<=n;a++)
s+=a;
returns;
2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。
例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。
#include"math.h"
introot(float,float,float);
floatxl,x2;
floata,b,c;
cout<<"请输入a,b,c的值:
cinabc;
if(root(a,b,c))
cout<<"x1="<}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]中所有值为奇数的元素个数和所有值为偶数的元素个数。程序设计如下:#includeintGetcount(char*p){intcount=0;//记录大写字母字符个数的变量,设初值为0while(*p!=NULL)//如为大写字母,则总数加1{if(*p>='A'&&*p<='z')count++;p++;}returncount;}void Func(int a[],intn,int'&ox,int&ex){inti=0;ox=0;//参数引用,返回数组中值为奇数的元素个数ex=0;//参数引用,返回数组中值为偶数的元素个数while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
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;
3.编写一个函数,分别求出一维整型数组a[n]中所有值为奇数的元素个数和所有值为偶数的元素个数。
intGetcount(char*p)
intcount=0;//记录大写字母字符个数的变量,设初值为0
while(*p!
=NULL)//如为大写字母,则总数加1
if(*p>='A'&&*p<='z')
count++;
p++;
returncount;
void Func(int a[],intn,int'&ox,int&ex)
inti=0;
ox=0;//参数引用,返回数组中值为奇数的元素个数
ex=0;//参数引用,返回数组中值为偶数的元素个数
while(i{if(a[i]%2==0)ex++;elseox++;i++;}} 4.编写一个函数,求输入的两个自然数的最大公约数。程序设计如下:intFunc(intMax,intMin){intTemp,Num;if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
if(a[i]%2==0)
ex++;
ox++;
4.编写一个函数,求输入的两个自然数的最大公约数。
intFunc(intMax,intMin)
intTemp,Num;
if(Max{Temp=Max;Max=Min;Min=Temp;}do{Num=Max%Min;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个人多少岁?用递归调用实现。程序设计如下:#include"iostream.h"intyear(int);voidmain(){intn;cout<<"请输入:第一个人的年龄(30):";cinn;cout<<"第四个人的年龄是:"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
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;
cout<<"请输入:
第一个人的年龄(30):
";cinn;
cout<<"第四个人的年龄是:
"<}intyear(intn){staticinty=n,m=0;if(m==3)returny;else{m++;y=year(y)+2;}}6.求一元二次方程的实根程序。程序设计如下:#include"iostream.h"intfun(int,int);voidmain(){intn1,n2;cout<<"输入两个正整数且前者要小于后者:"; cinn1n2;cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
intyear(intn)
staticinty=n,m=0;
if(m==3)
returny;
m++;y=year(y)+2;
6.求一元二次方程的实根程序。
intfun(int,int);
intn1,n2;
cout<<"输入两个正整数且前者要小于后者:
"; cinn1n2;
cout<<"从"<"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
"<}intfun(intm,intn){if(m=n)returnn;elsereturnn+fun(m,n-1);} 习题7参考答案一、选择题1.C 2.B二、编程题1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。程序设计如下:#include"iostream.h"#include"math.h"#definemax(x,y)x>y?x:y;voidmain(){intx,y,z,absmax;cinxyz;absmax=max(abs(x),abs(y));absmax=max(abs(absmax),abs(z));cout<<"Theabsolutevalueofmaximalnumberis:";cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
intfun(intm,intn)
if(m=n)
returnn;
returnn+fun(m,n-1);
习题7参考答案
1.C 2.B
二、编程题
1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。
#include"math.h"
#definemax(x,y)x>y?
x:
y;
intx,y,z,absmax;
cinxyz;
absmax=max(abs(x),abs(y));
absmax=max(abs(absmax),abs(z));
cout<<"Theabsolutevalueofmaximalnumberis:
cout<}2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。程序设计如下:#include#defineN4intmain(){int[N][N];for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。
#defineN4
intmain()
int[N][N];
for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
for(intj=0;j*(*(a+i)+j)=i+j;for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
*(*(a+i)+j)=i+j;
for(i=0;i{for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
for(intj=0;jcout<<*(*(a+i)+j)<<" ";cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
cout<<*(*(a+i)+j)<<" ";
cout<}return0;}程序运行的结果:0 1 2 31 2 3 42 3 4 53 4 5 63.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。程序设计如下:#include"stdio.h"#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
程序运行的结果:
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
3.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。
#include"stdio.h"
#defineMIN(m,n) mm:n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
m:
n//定义宏名MIN替换运算mm:nvoidmain(){floatt=36.712,u=18.645;//定义实型变量t,ufloatmin;min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
n
floatt=36.712,u=18.645;//定义实型变量t,u
floatmin;
min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值
cout<}运算结果是:18.645 习题8参考答案一、选择题1.C 2.C 3.D 4.D 5.D二、填空题1.可以2.不允许3.为0,加14.结构体变量名。成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名5.一
运算结果是:
18.645
习题8参考答案
1.C 2.C 3.D 4.D 5.D
1.可以
2.不允许
3.为0,加1
4.结构体变量名。
成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名
5.一
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2