C++实验2报告Word格式文档下载.docx
- 文档编号:19203047
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:173.18KB
C++实验2报告Word格式文档下载.docx
《C++实验2报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++实验2报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
1
一、
实验内容
第一题
1.计算显示立方值
关键提要:
内联函数,输出流控制
用内联函数编程,计算并显示0.5,1,1.5,2,3,…..,19.5,20,……的立方值。
(终止值请自行指定,但应>
20)
要求:
1.主函数中输出提示信息,主函数输出计算结果,每行输出3个立方值。
2.输出计算结果时要设定输出格式,各列数据要紧凑对齐,样式为:
0.5立方值=0.125||1立方值=1||……
3.计算立方值的函数用内联函数编程实现。
4.为便于理解题意,程序执行结果可参考下图。
编程设计思想:
由终止值确定最大的有多少位数,最大就是(终止值-0.5)的三次方,它的位数最多。
使用setprecision()的时候就把确定的位数带入括号当中。
内联函数使用的时候,分别带入就行了。
如果是3的倍数的时候,则换行。
编程如下:
#include<
iostream.h>
iomanip.h>
inlinedoublecube(doublex)
{
returnx*x*x;
}//设置一个内联函数//
voidmain(void)
doublea=0.5;
intn;
intb;
intc;
intd=3;
//因为一个小数位数最多的只是有3个小数//
cout<
<
"
输入终止值(大于等于20的整数)"
endl;
cin>
>
b;
下面程序输出0,0.5,1,1.5,......"
b<
的立方值:
c=cube(b);
//带入内联函数//
while(c>
0)
{
c=c/10;
d++;
}//判断一个数的位数//
for(n=1;
n<
=(b*2);
n++)
cout<
setiosflags(ios:
:
right)<
setw(9)<
a<
立方值"
="
;
//打印并右对齐//
resetiosflags(ios:
left)<
setprecision(d)<
cube(a)<
left);
//先重新右对齐在设置左对齐//
if(n%3!
=0)//没有3个的时候打印||//
{
cout<
||"
}
if(n%3==0)//当有3个的时候就换行//
a+=0.5;
}
}
结果如下:
输入终止值(大于等于20的整数)
34
下面程序输出0,0.5,1,1.5,......34的立方值:
0.5立方值=0.125||1立方值=1||1.5立方值=3.375
2立方值=8||2.5立方值=15.625||3立方值=27
3.5立方值=42.875||4立方值=64||4.5立方值=91.125
5立方值=125||5.5立方值=166.375||6立方值=216
6.5立方值=274.625||7立方值=343||7.5立方值=421.875
8立方值=512||8.5立方值=614.125||9立方值=729
9.5立方值=857.375||10立方值=1000||10.5立方值=1157.625
11立方值=1331||11.5立方值=1520.875||12立方值=1728
12.5立方值=1953.125||13立方值=2197||13.5立方值=2460.375
14立方值=2744||14.5立方值=3048.625||15立方值=3375
15.5立方值=3723.875||16立方值=4096||16.5立方值=4492.125
17立方值=4913||17.5立方值=5359.375||18立方值=5832
18.5立方值=6331.625||19立方值=6859||19.5立方值=7414.875
20立方值=8000||20.5立方值=8615.125||21立方值=9261
21.5立方值=9938.375||22立方值=10648||22.5立方值=11390.625
23立方值=12167||23.5立方值=12977.875||24立方值=13824
24.5立方值=14706.125||25立方值=15625||25.5立方值=16581.375
26立方值=17576||26.5立方值=18609.625||27立方值=19683
27.5立方值=20796.875||28立方值=21952||28.5立方值=23149.125
29立方值=24389||29.5立方值=25672.375||30立方值=27000
30.5立方值=28372.625||31立方值=29791||31.5立方值=31255.875
32立方值=32768||32.5立方值=34328.125||33立方值=35937
33.5立方值=37595.375||34立方值=39304||Pressanykeytocontinue
第二题
2.字符串中找数字
输入输出流控制
编写程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字提取出来,例如输入“asd12345rt456,fg9crp”,则产生的数字分别是12345,456和9输出这些数字字符。
1.连续的数字字符在同行输出,不连续的数字字符在不同输出。
2.为便于理解题意,程序执行结果可参考下图。
先输入一串字符,然后分别判断这些字符串是不是数字,如果是数字用整型数组计数,然后再把它存到字符数组当中,然后比较计数谁最大,在打印前面的空格的时候,就把最大的数字减去一连串数字的个数就等于打印空格的数目。
string.h>
#include<
string>
ctype.h>
chars[100];
charh[100];
intm[100]={0};
intg;
intv;
intsum=0;
inty=0;
intc=0;
intl=0;
intcounter1;
intcounter2=0;
intu=0;
输入串"
cin.getline(s,100);
输出结果:
n=strlen(s);
for(counter1=0;
counter1<
=n;
counter1++)
if(isdigit(*(s+counter1))!
=0)//判断这个字符是不是数字,如果是数字则计数//
m[c]++;
//用一个整型数组记录每串数字的个数//
=0&
&
isdigit(*(s+counter1+1))==0)//当一串数字结束了,然后C就加1//
c++;
for(g=0;
g<
=c-1;
g++)
if(m[g]>
v)
v=m[g];
//判断一串数字里面位数最多的一个,并记录在V当中//
sum=sum+m[g];
//计算所有数字的个数之和//
=0)
h[u]=*(s+counter1);
//把每个数字都存放在字符数组里面//
u++;
=v-m[0]-1;
"
}//在第一个数字串之前打印空格//
=sum-1;
h[counter1];
l++;
if(l==m[y]){
for(g=0;
=v-m[y+1]-1;
g++)//在每个字符串里面打印相应的空格数//
{
cout<
}
y++;
l=0;
输入串
1239812398192839qwe1238123aer123we21i2
1239812398192839
1238123
123
21
2
Pressanykeytocontinue
结果如图:
3.学生成绩排名
动态内存分配,输入输出刘控制
采用动态内存分配方法(要求用NEW和DELETE,不用MALLOC和FREE)设计一个学生成绩处理程序,要求程序提示用户输入任意数量学生的学号,姓名和四门课的成绩(INT型),并按平均成绩由高到低顺序输出每个学生的学号,姓名,四门课的成绩,总成绩,平均成绩(保留1位小数),名次。
1.相同平均分的名次应相同,例如:
knife,tiger,trigger,tank的平均成绩分别为95.3,95.3,87,100,则他们的名次依次为2,2,4,1.
2.输出数据时模仿表格方式。
有行标题,列标题,每名学生的数据保持在同一行,同意列,输出的每个数据应与相应的行标题,列标题相符,设置列宽以满足显示需要,用空格和适当字符填充在相邻数据间以行测表格单元间的显示分隔。
控制输出格式,使输出的输出的数据行,列正对齐(setw()).
3.输出数据由贬值的输出函数完成,主函数调用该输出函数。
4.生成的程序执行结果,应有4-8名学生的信息。
5.为便于理解题意,程序执行结果可参考下图。
设计一个student的结构体,然后用NEW给STUDENT的结构体给赋给相应的内存,然后输入数据的时候,把数据分别存储到student结构体的相应的数据成员当中。
在排名的时候先把总分算出来,再用冒泡排序把名次排出来,如果有相同分数的则往后面退一位,然后在分别打印出相应的数据。
stdlib.h>
structstudent
intxuehao;
charxingming[10];
doublechengji1;
doublechengji2;
doublechengji3;
doublechengji4;
doublezongchengji;
doublepingjunchengji;
intmingci;
};
//定义一个结构体,方便下面对每个同学的信息进行输入并且存储//
voiddayin1(studentn);
voiddayin2(studentn);
intm;
inti;
studenttemp;
student*stu;
//定义一个student型的指针//
inth=0;
输入学生的数目"
c;
stu=newstudent[c];
//定义相应的C个数组//
for(n=0;
=(c-1);
请顺序录入第"
n+1<
位学生的信息"
学号(小于等于8位):
cin>
stu[n].xuehao;
//输入到数组.xuehao里面//
姓名(小于等于10个字符):
stu[n].xingming;
面向对象程序设计,大学英语,概率论,哲学的成绩:
stu[n].chengji1>
stu[n].chengji2>
stu[n].chengji3>
stu[n].chengji4;
//把成绩分别输入到相应的位置//
stu[n].zongchengji=stu[n].chengji1+stu[n].chengji2+stu[n].chengji3+stu[n].chengji4;
//算出相应的总成绩//
stu[n].pingjunchengji=stu[n].zongchengji/4;
//算出平均值//
}
录入完毕,原始数据输出如下:
setw(8)<
学号"
|"
|姓名"
|面向对象"
|大学英语"
|概率"
|哲学"
|总成绩"
|平均成绩"
|名次"
for(m=0;
m<
m++)
dayin1(stu[m]);
//调用打印函数//
m++)
{
for(i=0;
i<
c-1;
i++)
if(stu[i].zongchengji<
=stu[i+1].zongchengji)
{temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}//用冒泡排序,总成绩高排在前面,总成绩低的排在后面//
=c;
if(stu[m].zongchengji>
stu[m+1].zongchengji)//对名次进行输入如果前面一个大于后面则分配给相应的值//
stu[m].mingci=m+1;
stu[m+1].mingci=m+2;
if(stu[m].zongchengji==stu[m+1].zongchengji)//如果总成绩相同,那么名次都相同//
stu[m].mingci=stu[m+1].mingci=m+1;
h++;
m=m+h;
//有排名相同的h个,则后面排名时候就相应的后退h名//
dayin2(stu[m]);
deletestu;
voiddayin1(studentn)//定义一个只打印函数//
n.xuehao<
n.xingming<
n.chengji1<
n.chengji2<
setw(7)<
n.chengji3<
n.chengji4<
voiddayin2(studentn)//定义另一个打印的函数//
n.zongchengji<
showpoint)<
setprecision(3)<
n.pingjunchengji<
setw(6)<
n.mingci<
输入学生的数目
4
请顺序录入第1位学生的信息
20085501
knife
979810070
请顺序录入第2位学生的信息
20085502
tiger
100908788
请顺序录入第3位学生的信息
20085503
trigger
99959292
请顺序录入第4位学生的信息
20085504
tank
95908075
结果如下:
学号||姓名|面向对象|大学英语|概率|哲学|总成绩|平均成绩|名次
20085501|knife|97|98|100|70|||
20085502|tiger|100|90|87|88|||
20085503|trigger|99|95|92|92|||
20085504|tank|95|90|80|75|||
20085503|trigger|99|95|92|92|378|94.5|1
20085501|knife|97|98|100|70|365|91.3|2
20085502|tiger|100|90|87|88|365|91.3|2
20085504|tank|95|90|80|75|340|85.0|4
Pressanykeytocontinue
二.实验体会
经过实验2的训练,让我熟悉了内联函数的运用,从字符串中提取字符,更加理解了动态内存分配的使用方法。
在做字符串提取数字串的实验当中,遇到了很多困难,在最后给每个数字串添加空格的时候,由于循环用的不恰当,使得结果一直差几个空格,在做实验2的那个选作的时候,发现自己对指针和二位数组用的特别不好,需要多看看例子和定义。
编程不懂就要问,不是询问所有的代码,而是一点点的提醒。
这次实验,在做选作的时候,发现自己没思路,小朱同学给我指点了一下,然后思绪一下子就豁然开朗了。
三.思考题
1.请结合实验,说明模仿表格的输出控制。
答:
在用COUT的时候,SETW所取的值先自己顶一个,然后根据实验的结果,再调整SETW的值,一步一步的调正就能把表格的输出的值正好跟上面的项目对齐。
2.举例或结合实验,说明内联函数的工作机制及作用。
内联函数在调用过程不存在程序流程的跳转和返回问题。
对于一个简单的函数,提高了程序的运行速度,节省了开销。
3.请举例或结合实验,说明动态内存的分配的工作机制。
动态内存分配,就是用户能够指定虚拟操作系统启动的RAM容量,并将平台可用的内存最大化。
当不用的时候,又可以用DELETE释放内存。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实验 报告