




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+程序设计应用教程上机实训、习题参考答案为了便于区分,把上机训练、习题中的题目也放进来,红色部分为参考答案。此外,有个别题目稍作修改。(参考答案只是部分题目,并不是所有题目)第一章1.5 习 题1. C+语言的特点有哪些。C+语言有很多特点,但主要有以下几个方面:(1) C+语言保持与C兼容,很多C代码不经修改就可以在C+环境中使用。(2) 用C+编写的程序可读性更好,代码的结构更合理。(3) C+支持面向对象的机制,具有现代面向对象语言的特点,同时又具有面向过程语言的功能,有利于软件开发人员从面向过程的编程方法到面向对象编程方法的转变。(4) C+软件具有可重用性及可扩充性,有很好的继承功
2、能。(5) C+生成的代码质量比较高,运行效率仅比汇编语言代码段慢10%到20%。2一个完整的C+程序包括哪几部分。一个完整的C+程序主要包括以下几个部分:(1) C+程序由函数构成,函数是C+程序的基本单位。C+程序必须包含一个名为的main()主函数。(2) C+函数由函数的说明部分和函数体两部分组成。函数的说明部分包括函数类型、函数名、函数参数。函数体就是在函数说明部分下面的大括号内的部分。(3) C+中每个语句和数据定义必须以分号(;)结束(4) 可以使用/*/或 / 对C+程序中的任何部分注释。3分析下列程序的运行结果:#includevoid main() int x,y,z; f
3、loat average; x=12,y=32,z=19; average=(x+y+z)/3.0; cout”average=”averageendl;程序运行结果:average=21分析:(1) 程序定义三个整型变量,并对这三个变量进行赋值。 (2) 程序是求三个变量的平均值,由于平均值可能是含有小数,因此,定义average为实型变量。(3) 由于x、y、z三个变量是整型变量,因此,必须除以3.0,不能除以3,否则将进行整数运算,丢失小数部分。4练习使用cout输出下列的内容:Hello! How are you!I am a student. #includevoid main()
4、cout”Hello! How are you!”endl; cout” I am a student.”endl;5编一程序,从键盘输入三个数给x,y,z,输出它们的最小值。#includeint mymin(int x,int y) int z; if (xy) z=x; else z=y; return z; void main() int x,y,z,min; coutxyz; min=mymin(x,y); min=mymin(min,z); coutThe min is:minendl; 第二章2.4 上机训练2实训内容(3) 编写一程序,将字符串 “Word”转换为 “Bywi”
5、(提示:将字符加上某个整数,如A+5即可得到F,但要注意,当字符加上某个整数后超过Z,则应该怎样处理)。#includevoid main() char ch1,ch2,ch3,ch4; ch1=W; ch2=o; ch3=r; ch4=d; ch1=ch1+5-26 ch2=ch2+10; ch3=ch3+5; ch4=ch4+5; coutch1ch2ch3ch4endl;分析:ch1的值为W,ch1+5已经超过Z,因此,必须减去26。2.5 习 题1判断下列的标识符是否合法:4abc,int,Abc,max,x8,_len,void,a*b,MIN,char,9y4,s8p根据C+对标识
6、符的规定,合法的标识符为:Abc,max,x8,_len,MIN,s8p2. 将下列的常量进行归类。45L,A,”12345”,34.67,5e2,0x123,032,-12.78,i,2.3E-2,23u整型常量:45L,0x123,032,23u。实型常量:34.67,5e2,-12.78,2.3E-2。字符常量:A,i。字符串常量:” 12345”。3. 简要回答下列问题:(1)变量与常量有何区别?答:在程序运行过程中,其值不能被改变的量称为常量。反之,其值可以变化的量称为变量。(2)什么叫符号常量?使用符号常量要注意哪些问题?答:通过定义字符表示的常量,称为符号常量或标识符常量,符号常
7、量可以使用#define进行宏定义,也可以使用const进行声明。由于符号常量是不能被改变的,因此,不能给符号常量重新赋值。(3)字符常量与字符串常有何区别?答:字符常量是用单引号括起来的一个字符。字符串常量是用双引号括起来的一串字符。C+处理字符常量与字符串常量的方式是不同的,对于字符常量,可用字符型变量来存放,在内存中只占一个字节,而字符串常量,是用一维字符数组来存储,在内存中要占多个字节,而且,C+的每个字符串除存储给定的字符序列外,都有一个结束符0。(4)转义字符的作用是什么?答:C+定义了一些特别功能,如换行、回车等。其表示形式是以开头,后面跟着一个字符,这些字符主要起到某种控制作用
8、,称为转义字符。4运行下列程序,分析程序的运行结果。#includevoid main() int x,y; short m; x=0xa78; y=0341; m=x+y; cout”x=”xendl; cout”y=”yendl; cout”m=”mendl;程序运行结果:x=2680y=225z=2905分析:0xa78是一个十六进制数,而输出默认是十进制数,则将0xa78转换成十制数为:10*162+7*16+8=2560+112+8=2680。5. 运行下列程序,注意输出格式。#includevoid main() int m,n,s; double t; m=23,n=19; s=
9、m*n; t=s+23.12; coutm”t”nendl; cout”s=”s” ”; cout”t=”tendl;程序运行结果: 23 19 s=437 t=460.12分析:(1)第一个cout语句m与n之间用一个转义字符t分隔,根据t的控制功能,m与n在不同的输出区输出。(2)第二个cout由于没有使用“endl”换行,因此,下一个cout语句的输出结果跟在第二个cout输出结果的后面。6. 运行下列程序,分析其输出结果。#includevoid main() char ch1,ch2,ch3,ch4; ch1=B; ch2=ch1+5; ch3=ch2-2; ch4=M+3; cou
10、tch1ch2ch3ch4endl;程序运行结果:BGEP分析:字符变量与整型变量在一个字节的范围内,存储方式一样,因此,可以进行混合运算。ch1的值为B,当加上5以后,变成G,依此类推。7. 已经圆的直径为10,编一程序求出圆的面积及周长。园的面积为:area=r2园的周长为:girth=2r#include#define PI 3.14159void main() int r=10/2;float area,girth;area=PI*r*r;girth=2*PI*r;coutarea=areaendl;cout”girth=”girthendl; 3.4 上机训练2实训内容 (1) 调试
11、运行下列程序,注意分析程序的运行结果。#includevoid main() int x,x1,x2,x3; int y,y1,y2,y3; x=4925;y=3216; x1=x%1000; x2=x%100; x3=x%10; y1=y/1000; y2=y/100; y3=y/10;cout”x1=”x1endl;cout”x2=”x2endl;cout”x3=”x3endl;cout”y1=”y1endl;cout”y2=”y2endl;cout”y3=”y3endl; 程序运行结果:x1=925x2=25x3=5y1=3y2=32y3=321分析:本题主要是让读者理解求余数与整除的区
12、别,通过求余数,可以分离出每一位数。(2) 编一程序,交换任意输入一个4位数中的个位与百位,如4129变成4921。要想实现本题的要求,必须将每一位数分离出来,再对数据进行组合。#includevoid main() int x,t1,t2,t3,t4,y; cinx; t1=x/1000; t2=(x/100)%10; t3=(x/10)%10; t4=x%10; y=t1*1000+t4*100+t3*10+t2;cout”x=”xendl;cout”y=”yendl; (3) 调试运行下列程序,掌握自增自减运算符的作用。#include void main() int x,y,m,n;
13、int s,t;x=16,y=23,m=11; m+=x+; n=x+(+y); s=+m-n; t=x*y; cout”x=”xendl;cout”y=”yendl;cout”m=”mendl;cout”n=”nendl;cout”s=”sendl;cout”n=”tendl;程序运行结果:x=17y=24m=28n=41s=-13n=408(4) 调试运行下列程序,分析程序运算结果。#include void main() int x,y,z;int m,n; x=12,y=7; z=x|y; m=x2;n=x&y3; cout”z=”zendl;cout”m=”mendl;cout”n=
14、”n2,表示将x的值按位右移两位,变成,则结果为3。(3)n=x&y3,首先进行x&y,则运算如下:&接着将结果与3进行异或,运算如下:最后n=73.5 习 题1已知x=4,y=9,z=3,写出下列算术表达式的值:(1) x%2+y*218(2) x*y%3+z3(3) y/x*24.5(4) (x+y+z)%2*302已知m,n为整型变量,其值为m=13,n=19,分别求下列y的值。(1)y=(m+)-5 y=8(2)y=-n*2+(+m)y=50(3)y=(m-)*3y=39(4)y=(n+)-my=63. 已知x=3,y=7,分别求出下列m的值。(1)m=xy & x9m=1(3)m=y
15、x1m=0(4)m=x=3 | y=30m=14写出下列程序的运行结果。#includevoid main() int i,j,k;i=8,j=3;-j;k=(i*j,i=+i+3,i*j);cout”i=”iendl;cout”j=”jendl;cout”k=”kendl;程序运行结果:i=12j=2k=24分析:(1)程序中-j使j 的值变为2。(2)k=(i*j,i=+i+3,i*j)是一个逗号表达式,首先计算i*j,接着计算i=+i+3,则 i 的值变为12,再计算i*j。根据逗号表达式的运算规则,逗号表达式的值为 i*j 的结果,则k=24。5. 位运算与普通运算有何区别?写出下列位
16、运算的结果。位运算主要是对数据的二进制位进行运算,如进行位的与运算、位的或运算等。而普通运算直接对数据进行运算,如数据的加、减、乘、除等。(1) x=7&8x=0(2) x=12|3x=15(3) x=56x=3(4) x=42x=26. 输入一个四位的整数,将该数重新组合,千位变个位,百位变十位,如1234变成4321。#includevoid main() int x,t1,t2,t3,t4,y; cout”请输入一个四位的整数:”x; t1=x/1000; t2=(x/100)%10; t3=(x/10)%10; t4=x%10; y=t1*1000+t2*100+t3*10+t4;co
17、ut”x=”xendl;cout”y=”yendl; 7编写一程序,将500分钟表示成小时及分钟。因为每小时共有60分钟,可以将500直接除以60求得小时数,然后,再将500求余60,得到剩余的时间。#includevoid main() int minute=500,x,y; x=minute/60; y=minute%60; cout”500分钟等于:”;coutx”小时 ”;couty”分”endl; 4.4 上机训练2实训内容(1)工厂代客户加工产品,根据加工的数量决定加工费,1000件以下,每件加工费为100元,1001-2000件,每件加工费为95元,2001-4000件,每件加工
18、费为87元,4001-5000件,每件加工费83元,5000件以上每件80元,请分别用if语句及switch语句编写程序。用if语句编写程序#includevoid main()int n; float cost;coutn; if(n1000 & n2000 & n4000 & n=5000) cost=n*83;else cost=n*80; cout “加工费为:”costendl;用switch语句编写程序#includevoid main()int n; float cost;coutn; switch(n-1)/1000)case 0: cost=n*100;break;case
19、1: cost=n*95;break;case 2: case 3: cost=n*87;break;case 4: cost=n*83;break;default: cost=n*80;break;cout “加工费为:”costendl;(2)编写一程序,求300-500之间的所有素数。由于偶数不可能是素数,因此,从301开始进行判断,而且每次加2。#include#includevoid main() int m,i,t;for(m=301;m=500;m=m+2) t=sqrt(m); for(i=2;i=t+1) coutm“ ”; coutendl;(3)编写一程序,输出所有的“水
20、仙花数”,所谓“水仙花数”是指一个三位数,其各位数立方之和等于该数本身,如153=13+33+53 。#includevoid main() int i,j,k,m; cout“水仙花数是:”endl;for(m=100;m1000;m+) i=m/100;j=(m%100)/10; k=m%10; if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)coutmendl; coutendl;4.5 习 题1编写程序,输入一个整数,判断该数是偶数还是奇数。#includevoid main() int x;cout“请输入一个整数”x;if(x%2=0) cout”该数为偶数!”
21、endl; else cout”该数为奇数!”endl;2从键盘输入一个字符,如果是大写字母,则转换为小写字母,如果是小写字母,则转换为大写字母,如果是其它字符,原样输出。#includevoid main() char ch; cout”请输入一个字符:”ch; if(ch=A & ch=a & ch=z) ch=ch-32; else ch=ch; coutchendl;3分析下列程序的运行结果。#includevoid main() int a,b,c,d,min; a=23,b=-9,c=14,d=-5; min= ab?(ac?a:c):(bc?b:c); min=mind?min:
22、d; coutmin=minendl;程序运行结果:min=-9分析:(1)min=ab? (ac?a:c):(bc?b:c);是一个条件表达式,当ab条件满足时,再将a与c比较,否则将b与c比较,也就是求出a,b,c三个变量的最小值。(2)min=mind?min:d;是将求出的a,b,c的最小值再与d比较,最后得到a,b,c,d四个变量的最小值。4. 编一程序求n!,要求从键盘输入n的值。#includevoid main() int n,i; long m=1; cout”请输入一个整数:”n; for(i=1;i=n;i+) m=m*i; coutn 的阶乘为:mendl;5编程打印九
23、九乘法表,要求按下面格式输出。1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 #includevoid main()int x,y; for(x=1;x10;x+) for(y=1;y=x;y+) coutx*y=x*y ; coutendl; 6从键盘输入一个以+为结尾的字符串,分别统计数字,字母及其它字符的个数。#includevoid main()char ch;int digit=0,letters=0,other=0;cout请输入一行字符:ch; while(ch!=+) if(ch=0 & ch=a & ch= A & chch;cout数字数=digit
24、endl;cout字母数=lettersendl;cout其它字符数=otherendl;7计算m=1+1/2+2/3+3/4+.+100/101#includevoid main()float i;float s=1; for(i=1;i=100;i+) s=s+i/(i+1); couts=sendl;8计算s=1+(1+2)+(1+2+3)+.+(1+2+3+.+n),n从键盘输入。#includevoid main()int x,y,n;long s=0,t=0;cout输入一个n值n; for(x=1;x=n;x+) for(y=1;y=x;y+) t=t+y; coutt=tend
25、l;5.4 上机训练2实训内容 (3) 定义一个关于学生的结构体,包括学号、姓名、及5门课程的成绩,要求从键盘输入10名学生的信息,求每个学生的平均成绩及每门课程的最高分。#include struct student int num;char name20; int score5; float aver; m10;void main()int max5,sum;int i,x;for(i=0;; for(x=0;xmi.scorex; for(i=0;i10;i+) sum=0; for(x=0;x5;x+) sum+=mi.scorex; mi.aver=sum
26、/5.0; for(i=0;i5;i+) maxi=m0.scorei; for(x=0;x10;x+) if(maximx.scorei) maxi=mx.scorei; cout每个同学成绩平均分:endl; for(i=0;i10;i+) coutmi.num mi.averendl; cout每门课的最高分:endl; for(i=0;i5;i+) cout课程i+1为:maxiendl;5.5 习 题1编程序输出下列数据序列的最大值及最小值:38,-9,12,29,-8,15,76,3,8。#includevoid main()int i,min,max;int nu
27、m9=38,-9,12,29,-8,15,76,3,8;min=max=num0;for(i=1;inumi) min=numi; if(maxnumi) max=numi; cout”min=”minendl; cout”max=”maxendl; 2将数组中的值按逆序重新存放。如原来的顺序为2,4,6,8,10,要求改为:10,8,6,4,2。#includevoid main()int i,j,m10,temp;cout”请输入10个整数:”endl;for(i=0;imi;cout”交换前数据: ”;for(i=0;i10;i+) coutmi“ ”;coutendl;for(i=0,
28、j=9;i10/2;i+,j-) temp=mi; mi=mj; mj=temp; cout”交换后数据: ”;for(i=0;i10;i+) coutmi “ ”;coutendl;3有一数组,内放8个整数,要求找出最大的数和它的下标,然后将它与最后一个元素互换。#includevoid main()int i,max,s,temp;int m8;cout”请输入8个整数:”endl;for(i=0;imi;max=m0;for(i=0;i8;i+) if(maxmi) max=mi,s=i;temp=m7;m7=ms;ms=temp;cout”交换后数据:”endl;for(i=0;i8;
29、i+) coutmi“ ”;coutendl;4编一程序,将一个44二维数组行和列元素互换,存到另一个二维数组中。#includevoid main() int m44=1,3,5,7,2,4,6,8, 3,5,7,9,4,6,8,10;int n44,x,y;cout互换前数组endl; for(x=0;x4;x+) for(y=0;y4;y+) coutmxy ; nyx=mxy; coutendl; cout互换后数组endl; for(x=0;x4;x+) for(y=0;y4;y+) coutnxy ; coutendl; 5编一程序,求一个55二维数组每一列元素的平均值。#incl
30、udevoid main() int m55=12,4,7,15,20,22,34,6,18,9,32,16,78,45,3, 13,57,21,9,30,14,36,58,19,5;int x,y,sum; for(x=0;x5;x+) sum=0;for(y=0;y4;y+) sum+=myx; cout”第”x+1”列的平均值为:”sum/5.0endl; 6编一程序,从字符串中删除给定的字符。如“abbcde”,删除其中的b,变成 “acde”。#includevoid main() char str80,x; int i=0,j=0; cout请输入一串字符:str; cout请输入
31、需删除的字符:x; while(stri!=0) while(stri=x) i+; strj=stri; i+,j+; strj=0; cout删除后的字符串:endl; coutstrendl; 7编一程序,将字符串复制到字符数组中。#includevoid main() char str180; char str280=”I am a student”; int i; for(i=0;str2i!=0;i+) str1i=str2i; str1i=0; cout”复制后字符数组的内容:”endl; coutstr1endl; 8建立一个具有编号、书名、出版社、作者、价格等5个成员的结构体
32、,输入10本书的内容,输出最贵一本书的信息,并求出十本书平均价格。#include struct student char num15;char bookname30; char chub30; char author10; float price; m10;void main()float costly,sum=0.0; int i,t=0; cout请输入10本书的信息:endl;for(i=0;imi.nummi. booknamemi. chubmi.authormi.price; costly=m0.price; for(i=0;i10;i+) sum+=mi.price; if(c
33、ostlymi.price) costly=mi.price,t=i; cout最贵一本书的信息是:endl; cout 编号:mt.numendl; cout 书名:mt.booknameendl; cout 出版社:mt.chubendl; cout 作者:mt.authorendl; cout 价格:mt.priceendl; cout十本书的平均价格为:endl; coutsum/10endl;6.4 上机训练2实训内容(1)运行并分析下列程序:#includevoid main()int i,t;int x10=12,4,45,18,-30,-7,9,10,8,23,*p;p=x;f
34、or(i=0;ixi) *p=xi;t=i; cout*pendl;coutt+1endl;程序运行结果:-305分析:(1)本程序定义一个指针变量p,将数组的首地址赋给指针变量。(2)程序利用指针变量求出数组的最小值及其位置。(2)编写并调试程序,利用指针,分别统计键盘输入一行字符中,大写字母、小写字母、数字及其它字符的个数。#includevoid main()char string80;int uppercase=0,lowercase=0,digit=0,other=0; char *p;cout请输入一行字符:string; p=string; while(*p!=0) if(*p=
35、A & *p=a & *p=0 & *p=9) digit+; else other+; p+; cout大写字母数=uppercaseendl;cout小写字母数=lowercaseendl;cout数字数=digitendl;cout其它字符数=otherendl;(3)编写并调试程序,利用指针,按照起泡排序法实现对一组字符串的排序。#include#includevoid main()char *m=begin,student,Wednesday,high,Of,the,when,school,for;char *t;int i,j; for(i=0;i8;i+) for(j=0;j=0
36、) t=mj; mj=mj+1; mj+1=t; for(i=0;i9;i+) coutmi ; coutendl;6.5 习 题1编一程序,利用指针,将键盘输入的三个整数,从大到小排列。#includevoid main()int x,y,z,t;int *px,*py,*pz;px=&x,py=&y,pz=&z;cout请输入三个整数:*px*py*pz;if(*px*py) t=*px;*px=*py;*py=t;if(*px*pz) t=*px;*px=*pz;*pz=t;if(*py*pz) t=*py;*py=*pz;*pz=t;cout排序后三个整数为:endl;cout*pxt
37、*pyt*pzendl;2分析下列程序的运行结果。#includevoid main() int x=15,y=40,z; int *px ,*py, *pz; px=&x,py=&y,pz=&z; y+=*px; *pz=*px+(*py); cout*px=*pxendl; cout*py=*pyendl; cout*pz=*pzendl;程序运行结果:*px=15*py=55*pz=70分析:本程序将x,y,z三个变量的地址赋给指针变量,再利用指针变量对变量地址单元的值进行相加。3利用指针,求出下列数据序列的最大值及其位置。34,-13,61,-32,70,3,9,12,0,23#inc
38、ludevoid main()int i,t,max;int x10= 34,-13,61,-32,70,3,9,12,0,23,*p;p=&max;p=x;for(i=0;i10;i+) if(*pxi) *p=xi;t=i; cout*pendl;coutt+1endl;4利用指针,输出下列数据能够同时被3与7整除的数。18,21,63,9,14,105,17,-84,29#includevoid main()int i;int x10= 18,21,63,9,14,105,17,-84,29,*p;p=x;for(i=0;i9;i+,p+) if(*p%3=0 & *p%7=0) cou
39、t*pt; coutendl;5利用指针,求出下列数据的最大值,并将最大值与第一个元素交换。13,45,38,9,-3,61,6,25,-17,21#includevoid main()int i,max,temp;int x10= 13,45,38,9,-3,61,6,25,-17,21,*p;max=x0;for(i=0;i10;i+) if(maxxi) max=xi;p=ξ temp=*p; *p=x0; x0=temp;coutmax=maxendl; for(i=0;i10;i+) coutxi ;coutendl;6利用指针,将两个字符串联接起来。#includevoid main()char str50=AAAAA;char *pstr=BBBBBBB,*p;int i=0;p=str;while(stri!=0) i+,p+;while(*pstr!=0) *p=*pstr; p+,pstr+; cout strendl;7利用指针,将字符数组中的字符按相反顺序存放。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 飞机雷达安装工沟通考核试卷及答案
- 轨道作业车司机继续教育学时核查考核试卷及答案
- 应届生就业三方协议书
- 送配电线路架设工工作质量达标率考核试卷及答案
- 不履行协议书怎么办
- 旅店服务员工艺技术规程
- 2026届安徽阜阳市数学九年级第一学期期末经典模拟试题含解析
- 2025委托开发合同示范文本
- 2026届天津市河东区数学七上期末质量跟踪监视模拟试题含解析
- 2025铲车租赁合同
- 汉语言文学毕业论文-鲁迅小说中的知识分子形象
- 长期供应商供货合同书
- 如何缓解焦虑和压力
- 垃圾分类志愿服务
- 高教版中职物理(类)电子教案402第二节 全电路欧姆定律
- ccusg重症超声培训班题库
- 冀教版八年级数学 13.4 三角形的尺规作图(学习、上课课件)
- 2024年锅炉操作工(技师)职业鉴定理论考试题库(含答案)
- 蓄水池工程施工方案全套资料
- 国开(陕西)2024年秋《社会调查》形考作业1-4答案
- 老人存款委托儿女代管协议书
评论
0/150
提交评论