c++实验答案
更新时间:2024-03-02 17:49:02 阅读量: 综合文库 文档下载
实验答案 实验一实验一 1.实验目的 通过本次实验
(1)掌握用VC++集成开发环境编辑源程序的方法。
(2)掌握在VC++集成开发环境中编译、调试与运行程序的方法。 (3)理解数据类型、变量、运算符、表达式的概念。 (4)学会使用cin进行数据输入操作。
(5)学会用算术表达式、关系表达式、赋值表达式完成数据处理工作。 (6)学会使用cout进行数据输出操作。 2.实验要求
(1)编写实验程序;
(2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)写出运行结果。 3.实验内容
(1)设计一个C++程序,输出以下信息: *************** Hello!
***************
(2)设计一个C++程序,输入三个职工的工资,求工资总额。 实验数据:1500,2000,2500
(3)设计一个程序,从键盘输入一个矩形的长与宽,求其周长和面积。 实验数据:50,40
(4)设计一个程序,输入一个华氏温度值,要求输出其对应的摄氏温度值。温度转换公式为:c=(f-32)*5/9。 实验数据:33
(5)从键盘输入一个四位整数n=abcd,从左到右用a、b、c、d表示各位的数字,现要求依次输出从右到左的各位数字,即输出另一个三位数m=dcba,试设计程序。 实验数据:1234 4.解答参考
(1)新建工程为myproject1,新建c++源程序,文件名为myfile1.cpp,输入以下内容: # include
{ cout<<\ cout<<\ Hello!\
cout<<\}
运行结果:
*************** Hello!
*************** (2)算法分析提示:
存放每个职工的工资变量应该是一个实型数,故工资总额变量也应该是实型数。程序如下。
# include
{ int sa1,sa2,sa3,sum;
cout<<\请输入三个职工的工资:\ cin>>sa1>>sa2>>sa3; sum=sa1+sa2+sa3;
cout<<\工资总额是:\}
运行结果:
请输入三个职工的工资:1500 2000 2500 工资总额是:6000 (3)程序如下:
# include
cout<<\请输入一个矩形的长与宽:\ cin>>a>>b; L=(a+b)*2; S=a*b;
cout<<\矩形的长与宽: \’和’<
运行结果:
请输入一个矩形的长与宽: 8 12
矩形的长与宽:8 和12 矩形的周长: 40 矩形的面积: 96 (4) 程序如下:
# include
cout<<\请输入华氏温度:\ cin>>f; c=(f-32)*5/9;
cout<<\摄氏温度是: \}
运行结果:
请输入华氏温度:95 摄氏温度是: 35.0 (5)算法分析提示:
一个四位数如1234,它的千位数a是1,求解的方法是1234/1000,因为两个整数相除结果是取整了,所以可求出千位,而它的个位d是4,求解的方法是1234,余数恰好是结果,
至于百位数b和十位数c采用的方法是多样的,见程序。输出值为d*1000+c*100+b*10+a 程序如下:
# include
{ int a,b,c,d,n,m;
cout<<\请输入四位十进制整数: \ cin>>n; a=n/1000;
b=n00/100; c=n0/10; d=n;
m=d*1000+c*100+b*10+a; cout<<\}
运行结果:
请输入四位十进制整数: 1234 m=4321
实验二 1.实验目的 通过本次实验
(1)初步学会VC++开发环境中,单步执行程序的方法。
(2)掌握if语句的格式与使用方法,学会两路分支程序设计方法; (3)掌握嵌套if语句的格式与用法,学会多路分支程序的设计方法。 (4)掌握switch语句的格式与使用方法,学会编写多路分支程序。 2.实验要求
(1)编写实验程序
(2)在VC++运行环境中,输入源程序 (3)单步执行程序 (4)编译运行源程序
(5)输入实验数据,写出运行结果。 3.实验内容
(1)演示单步执行程序的方法;
(2)设计一个程序,判断从键盘输入的整数的正负性和奇偶性。 实验数据:-3 与 5 (3)有下列函数:
-x+3.5 (x<5)
y= 20-3.5(x+3)2 (5≤x<10) -3.5+sin(x) (x≥10)
设计一个程序,从键盘输入x的值,输出y的值。 实验数据:6 与 11 (4)奖金税率如下:(a代表奖金,r代表税率)
a<100(元) r=0%
100≤a<200 r=2% 200≤a<400 r=4% 400≤a<800 r=8% a≥800 r=10% 输入一个奖金数,求税率、应交税款及实得奖金数。 实验数据:400 与 900 4.解答参考
(2) 算法分析提示:首先判断一个数是否是正数,在此基础上判断它是否是偶数。 算法描述如下:
①定义一个整数变量x。 ②输入该整数x。
③如果x>0,继续判断如果x%2=0,这时表明该数是一个正偶数,否则是一个正奇数。 ④否则表明是一个负数,再继续判断如果x%2=0,表明该数是一个负偶数,否则是一个负奇数。
# include
cout<<\请输入一个整数:\ cin>>i; if (i>0)
if(i%2==0)
cout<
cout<
if(i%2==0)
cout<
cout<
运行结果:
请输入一个整数:-6 -6 is negative even number
(3) 流程图如图3.1所示。程序如下: 图3.1 分段函数流程图 假 开始 输入x x≥5 x≥10
y=x/2-3.5+sin(x) 输出y
y=20-3.5 (x+3)2
y=-x+3.5 结束 假 真 真
#include
cout<<\ cin>>x; if (x>=5) if (x>=10)
y=x/2-3.5+sin(x); else
y=20-3.5*(x+3)*(x+3); else
y=-x+3.5;
cout<<\}
运行结果:
Input x: -3 y=6.5
(4) 算法分析提示:由于判断的条件比较多,所以考虑用switch语句。根据奖金额有被100除的特点,可以给变量b=a/100,不同的情况下税率不同。 算法描述如下:
① 定义四个变量a,b,r分别表示奖金额,情况变量,税率。 ② 输入奖金额a。
③ 如果a>=800则 r=10。 ④ 否则 b=a/100。
⑤ 根据b的值,得到r。
⑥ 输出时输出税率r,应交税款 a*r/100,实得奖金额a*(1-float(r)/100)。 # include
cout<<\ cin>>a;
if (a>=800) r=10; else
{ b=a/100; switch (b)
{ case 0: r=0;break; case 1: r=2;break;
case 2:
case 3: r=4;break; case 4: case 5: case 6:
case 7: r=8;break;
default :cout<<\ } }
cout<<\ cout<<\
cout<<\}
运行结果:
please Input prize :400 Tax rate: 8% Tax: 32 Prise: 368 运行结果:
please Input prize :900 Tax rate: 10% Tax: 90 Prise: 810 实验三
1.实验目的 通过本次实验
(1)掌握while语句的格式与使用方法,学会当型循环程序设计方法; (2)掌握for语句的格式与用法,学会当型循环程序设计方法;
(3)掌握do?while语句的格式与使用方法,学会直到型循环程序设计方法; (4)学会求常用级数的编程方法; 2.实验要求
(1)编写实验程序
(2)在VC++运行环境中,输入源程序 (3)编译运行源程序
(4)输入实验数据,写出运行结果。 3.实验内容
(1)输入一行字符,分别统计出其中英文字母、空格、数字字符和其它字符的个数。 提示:用cin.get(c)函数从键盘上输入一个字符给变量c,直到输入回车换行字符'\\n'为止。 (2)设有一个数列,它的前四项为0、0、2、5,以后每项分别是其前四项之和,编程求此数列的前20项。
(3)求π近似值的公式为:
其中,n=1、2、3?设计一个程序,求出当n=1000时的π的近似值。
(4) 求出1~599中能被3整除,且至少有一位数字为5的所有整数。如15、51、513均是满足条件的整数。
提示:将1~599中三位整数i分解成个位、十位、百位,分别存放在变量a、b、c中。然后判断a、b、c中是否有5。将三位整数i
(设i=513)分解成个位、十位、百位的方法是: c=i; //c= i=513=3 a=i/10; //a= i/10=51
b=a; //b=a=51=1 a=a/10; //a=a=51/10=5 4.解答参考
(1) # include
int i,letter=0,number=0,blank=0,other=0; cout<<\请输入字符串:\
cin.get(c); //get(c)函数用于从键盘上提取一个字符 while(c!='\\n')
{ if ('a'<=c && c<='z' || 'A'<=c && c<='Z') letter++; else if ('0'<=c && c<='9') number++; else if (c==' ') blank++; else other++; cin.get(c); }
cout<<\ cout<<\ cout<<\ cout<<\}
运行结果:
请输入字符串:I am Student 1234 letter=10 number=4 blank=3 other=0
(2) 数列前四项值存放在变量 f1=0、f2=0、f3=2、f4=5中 第5项的值用f1表示,则f1= f1+f2+f3+f4; 第6项的值用f2表示,则f2= f2+f3+f4+f1; 第7项的值用f3表示,则f3= f3+f4+f1+f2; 第8项的值用f4表示,则f4= f4+f1+f2+f3; 共进行5次,即可求出此数列的前20项。 # include
f1=0; f2=0; f3=2; f4=5; for (i=1;i<=5;i++)
{ cout< 运行结果: 0 0 2 5 7 14 28 54 103 199 384 740 1426 2749 5299 10214 19688 37950 73151 141003 (3) # include cout<<\ cin>>m; for(n=1;n<=m;n++) { pi=pi*(2.0*n/(2.0*n-1)*2.0*n/(2.0*n+1)); } cout<<\} 运行结果: Please Input m:1000 pi=3.14081 运行结果: Please Input m:10000 pi=3.14151 (4) # include { int i,a,b,c,j=1; for (i=1;i<=599;i++) if (i%3==0) { a=i/100; b=i0/10; c=i0; if ((a==5) || (b==5) || (c==5)) { cout< if (j%5==0) cout< } } cout< 实验四 1.实验目的 通过本次实验 (1)掌握一维数组的定义、初始化赋值、数组元素的引用方法; (2)掌握二维数组的定义、初始化赋值、数组元素的引用方法; (3)学会求数组元素中的最大值、最小值、平均值的方法; (4)学会数组元素排序的两种编程方法。 2.实验要求 (1)编写实验程序; (2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)输入实验数据,写出运行结果 3.实验内容 (1)某班第1组有10个学生,进行了C++考试,编写程序将考试成绩输入一维数组,并求出C++的平均成绩及优(90~100)、良(80~89)、中(70~79)、及格(60~69)与不及格(0~59)学生的人数。 实验数据:90、85、80、75、70、65、60、55、50、45 (2)某班第1组有10个学生,进行了C++考试,编写程序将考试成绩输入一维数组,并将C++成绩用冒泡法、选择法两种排序算法,由低到高的顺序排序后输出。 实验数据:90、85、80、75、70、65、60、55、50、45 (3)输入一个5行5列的二维数组,编程实现: 求出其中的最大值和最小值及其对应的行列位置; 求出对角线上各元素之和。 实验数据: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 (4)设A、B、C为m行n列矩阵。设计矩阵加法程序,能完成C=A+B的操作。并输出C的元素值。m与n用define定义为常量,取值3、3。A、B矩阵的元素值如下: 1 2 3 A= 4 5 6 7 8 9 3 2 1 B= 6 5 4 9 8 7 4.解答参考 (1) #include int i,b[]={0,0,0,0,0},a[N]; cout<<\ for (i=0;i<=N-1;i++) cin>>a[i]; for (i=0;i<=N-1;i++) { sum=sum+a[i]; switch (a[i]/10) { case 10: case 9: b[0]++;break; case 8: b[1]++;break; case 7: b[2]++;break; case 6: b[3]++;break; default: b[4]++; } } cout<<\优: \ cout<<\良: \ cout<<\中: \ cout<<\及格: \ cout<<\不及格: \ cout<<\平均分: \ cout< 运行结果: Input 10 score: 90 85 80 75 70 65 60 55 50 45 优: 1 良: 2 中: 2 及格:2 不及格: 3 平均分: 67.5 (2)算法分析:排序是指将一组无序的数据按从小到大(升序)或从大到小(降序)的次序重新排列。下面算法采用的是冒泡法排序。 #include for i=0 to N-1 输入a[i] for i=1 to N-1 for j=0 to N-i-1 真假 a[j]与a[j+1]交换 for i=0 to N-1 输出a[i] 图5.1 冒泡法排序流程图 a[j]>a[j+1] #include cout<<\ for (i=0;i<=N-1;i++) cin>>a[i]; for (i=1;i<=N-1;i++) for (j=0;j<=N-i-1;j++) if (a[j]>a[j+1]) { temp=a[j]; a[j] =a[j+1]; a[j+1]=temp; } for (i=0;i<=N-1;i++) cout< cout<<\ for (i=0;i<=N-1;i++) cin>>a[i]; for(i=0;i for (i=0;i<=N-1;i++) cout< Input score:90 78 68 96 88 75 67 85 92 84 68 75 78 84 85 88 90 92 96 (3) #include { float a[N][N],max,min,sum; int i,j,r1=0,r2=0,c1=0,c2=0; cout<<\ for(i=0; i for(i=0; i { max= a[i][j]; r1=i;c1=j; } else if (a[i][j] if (i==j || i+j==N-1) sum+=a[i][j]; } cout<<\ cout<<\ cout<<\} 运行结果: Input a[5][5]: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 max=9 row1=4 col1=4 min=1 row2=0 col2=0 sum=45 (4) #include { int a[M][N],b[M][N],c[M][N],i,j; cout<<\ for (i=0;i cout<<\ for (i=0;i c[i][j]= a[i][j]+b[i][j]; for (i=0;i cout< 运行结果: Input a[M][N]: 1 2 3 4 5 6 7 8 9 Input b[M][N]: 3 2 1 6 5 4 9 8 7 4 4 4 10 10 10 16 16 16 实验五 1.实验目的 通过本次实验 (1)初步掌握有序数组的查找、增加、删除的编程方法; (2)初步掌握字符数组的定义、赋初值与字符串处理函数的使用方法; (3)初步掌握字符串复制、连接、测长等程序的编写方法; (4)学会打印杨辉三角形的编程方法; (5)学会二维数据表的排序编程方法。 2.实验要求 (1)编写实验程序; (2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)已有一按从小到大次序排序好的数组,现输入一数,要求用折半查找法找出该数在数组中的位置。 实验数据: 数组值为:10,12,14,16,18,20,22,24,26,28 输入数: 16 (2)编写程序,实现str=str1+str2的操作,此处运算符“+”表示将两个字符串str1、str2连接成一个字符串str。用键盘将两个字符串输入字符数组str1与str2中,连接后的字符串存放在字符数组str中,并输出连接后的字符串str。 1)用C++提供的字符串处理函数完成上述要求。 2)不用C++提供的字符串处理函数完成上述要求。 实验数据:abcde fghij (3)设计一个程序,按习题4.12的要求打印杨辉三角形。 (4)在表4.4中求每个学生的平均成绩及每门课的最高分与最低分,对学生成绩表用擂台法按平均成绩降序排序后输出。 表4.4 学生成绩情况表 学 号数 学语 文外 语平均成绩 1001908085 1002707580 1003657075 1004855060 1005809070 最高分 最低分 4.解答参考 (1)分析:对已排好序的数,折半查找法总是将要找的数与中间的元素比较,若大于它,则到后半部分去找,否则到前半部分去找。 #include int low,high,i,mid; cout<<\:\ //输入10个有序数 for(i=0;i cout<<\ //输入要查找的数 cin>>b; low=0; //设置查找的区间,开始时是全部 high=i-1; mid=(low+high)/2; while(a[mid]!=b&&low if (b==a[mid]) //找到 cout< else //没找到 cout<<\} 运行结果: Input sort array a[10]: 10 12 14 16 18 20 22 24 26 28 Input number b: 16 16 is on 3 (2) 解:解法一 #include { char str1[N],str2[N],str[2*N]; cout<<\ first String\ cin>>str1; cout<<\ second String\ cin>>str2; strcpy(str,str1); strcat(str,str2); for (i=0;i cout<<\} 方法三 (数组方式,指针变量的数组形式,用 p[i]访问元素) #include { float a[N],sum,*p=a; int i; cout<<\ for (i=0;i for (i=0;i cout<<\} 方法四 (指针方式,数组名+位移,用 *(a+i)访问元素) #include cout<<\ for (i=0;i for (i=0;i cout<<\} 程序运行结果: Input data: 10 20 30 40 50 60 70 80 90 100 average=55 (2) #include { float a[3][3],sum=0; int i,j; cout<<\ for (i=0;i<3;i++) for (j=0;j<3;j++) cin>>*(a[i]+j); //用行首地址+位移,即a[i]+j for (i=0;i<3;i++) for (j=0;j<3;j++) if (i==j||i+j==2) sum+=*(a[i]+j); cout<<\} 程序运行结果: Input Data: 10 25 90 80 70 35 65 40 55 sum=290 (3) # include int str_cmp(char *p1,char *p2) { while(*p1==*p2) {p1++; p2++; } if (*p1>*p2) return 1; else if (*p1==*p2) return 0; else return -1; } void str_cat(char *p1,char *p2) //将p2所指的字符串连接到p1所指的字符串串末尾 { while(*p1++); p1--; while(*p2!=0) *p1++=*p2++; *p1=0; } int str_len(char *p) { int length=0; while(*p!=0) { p++; length++; } return length; } void main(void) { char s1[20],s2[40]; cout<<\ cin>>s1; cout<<\ cin>>s2; if (str_cmp(s1,s2)==1) cout<<\ else if (str_cmp(s1,s2)== -1) cout<<\ else cout<<\ str_cat(s1,s2); cout<<\ cout<<\} 程序运行结果: Input String1: Visual C++ Input String2: Visual Basic String1>String2 String1+String2 =Visual C++ Visual Basic String1 Length=23 (4) #include void sort1( int a[ ],int n) { int i,j,k,temp; for (i=0;i for (j=i+1;j void sort2( int *p,int n) { int i,j,k,temp; for (i=0;i for (j=i+1;j if (*(p+k)<*(p+j)) k=j; //形参为数组名 //形参为指针 if (k!=i) { temp=*(p+i); *(p+i)=*(p+k); *(p+k)=temp; } } } void sort3( int a[ ],int n) //形参为数组名 { int i,j,k,temp; for (i=0;i for (j=i+1;j { temp=*(a+i); *(a+i)=*(a+k); *(a+k)=temp; } } } void sort4( int *p,int n) // 形参为指针 { int i,j,k,temp; for (i=0;i for (j=i+1;j { temp=p[i]; p[i]=p[k]; p[k]=temp; } } } void main( void) { int a1[10]={1,3,2,5,4,6,7,8,9,10},a2[10],a3[10],a4[10],*pi,i; cout<<\ for (i=0;i<10;i++) { cin>>a1[i]; a2[i]=a3[i]=a4[i]=a1[i]; } sort1(a1,10); //实参为数组名,形参为数组 sort2(a2,10); //实参为数组名,形参为指针变量 pi=a3; sort3(pi,10) ; //实参为指针变量,形参为数组 pi=a4; sort4(pi,10) ; //实参为指针变量,形参指针变量 cout<<\ for (i=0;i<10;i++) cout< 10 25 90 80 70 35 65 40 55 5 a1[0~9]={ 90 80 70 65 55 40 35 25 10 5} a2[0~9]={ 90 80 70 65 55 40 35 25 10 5} a3[0~9]={ 90 80 70 65 55 40 35 25 10 5} a4[0~9]={ 90 80 70 65 55 40 35 25 10 5} 实验八 1.实验目的 (1)初步学会指针数组的定义与使用方法。 (2)了解指向一维数组的指针变量的概念,能用指向一维数组的指针变量按行处理二维数组的问题。 (3)理解返回指针值函数的概念、定义格式,学会用返回指针值函数处理字符串问题。 (4)理解函数指针与函数指针变量的概念,学会用函数指针变量处理不同函数数学计算问题。 2.实验要求 (1)编写实验程序 (2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)输入测试数据进行程序测试; (5)写出实验输入数据与运行结果。 3.实验内容 (1)定义一个二维字符数组s[3][80]及指针数组p[3],用cin.getline(s[i],80) 输入3个字符串到二维数组3行中,然后用指针数组p对字符串进行降序排列(要求用擂台法),最后用指针数组p输出排序后的结果,用字符数组s输出排序前的三个字符串。 实验数据:\,\,\ (2)输入一个二维数组a[3][3],设计一个函数,用指向一维数组的指针变量和二维数组的行数作为函数的参数,求出平均值、最大值和最小值,并输出。 实验数据:10,25,90,80,70,35,65,40,55 (3)设计程序,用函数指针变量完成两个操作数的加、减、乘、除、取余运算。 实验数据:10 + 20 10 - 5 10 * 15 10 / 2 10 % 3 (4)设计一个用梯形法求定积分的通用函数,被积函数的指针、积分的上限、积分的下限 和积分的区间等分数作为函数的参数。分别求出下列定积分的值。 4.解答参考 (1) #include char *p[3]={s[0],s[1],s[2]}; char *pc; int i,j,k; cout<<\ for (i=0;i<3;i++) cin>>p[i]; for (i=0;i<2;i++) { k=i; for (j=i+1;j<3;j++) if (strcmp (p[i],p[j])<0) k=j; if (k!=i) { pc=p[i];p[i]=p[k];p[k]=pc; } } for ( i=0;i<3;i++) cout< 程序运行结果: Input 3 String: Visual Basic Visual C++ Delphi Visual C++ Visual Basic Delphi Visual Basic Visual C++ Delphi (3) 解: # include { return x-y;} int mul(int x,int y) { return x*y;} int div(int x,int y) { return x/y;} int res(int x,int y) { return x%y;} void main(void) { int x,y; char operate; int (*f)(int,int); cout<<\ cout<<\ while(1) { cin>>x>>operate>>y ; switch (operate) { case '+': f=add; break; case '-': f=sub; break; case '*': f=mul; break; case '/': f=div; break; case '%': f=res; break; default: return; } cout< 程序运行结果: input three 0 end Input x operate y= 10 + 20 10+20=30 10 - 5 10-5=5 10 * 15 10*15=150 10 / 2 10/2=5 10 % 3 10%3=1 0 0 0 (3) 方法一:用指向一维数组的指针变量和二维数组的行数作为函数的参数 #include float ave(float (*p)[3],float *max,float *min) { float sum=0; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum+=(*p)[j]; if (*max<(*p)[j]) *max=(*p)[j]; if (*min>(*p)[j]) *min=(*p)[j]; } p++; } return sum/9; } void main(void) { float a[3][3],max,min,average; int i,j; cout<<\ for (i=0;i<3;i++) for (j=0;j<3;j++) cin>>a[i][j]; max=min=a[0][0]; average=ave(a+0,&max,&min); cout<<\ cout<<\ cout<<\} 方法二:用数组名为函数参数,在函数内用指向一维数组的指针变量,求出平均值、最大值和最小值,并输出。 解: #include { float max,min,sum=0,(*p)[3]; int i,j; max=min=a[0][0]; for(i=0;i<3;i++) { p=a+i; for(j=0;j<3;j++) { sum+=(*p)[j]; if (max<(*p)[j]) max=(*p)[j]; if (min>(*p)[j]) min=(*p)[j]; } } cout<<\} void main(void) { float b[3][3]; int i,j; cout<<\ for (i=0;i<3;i++) for (j=0;j<3;j++) cin>>b[i][j]; fun(b); } 程序运行结果: Input Data:10 25 90 80 70 35 65 40 55 ave=52.2222 max=90 min=10 (4) 图 用梯形法求定积分面积 y y=f (x) yn-1 y2 yn y1 y0 △s0 △s1 △s2 ? △sn-1 x=a x=b x0 x1 x2 x3 xn-1 xn x 0 a h b 分析:由高等数学可知, 的定积分值等于由曲线y=f(x)、直线x=a 、x=b、 y=0所围曲边梯形的面积s,如下图所示。现将曲边梯形划分成n个小曲边梯形△s0、△s1、△s2、?、△sn-1。每个曲边梯形的高均为h=(b-a)/n,用矩形近似曲边梯形后各曲边梯形的面积近似为: △s0=y0*h △s1=y1*h △s2 =y2*h ? △sn-1=yn-1*h s =△s0+△s1+△s2+?+△sn-1=(y0+y1+y2+?+yn-1)*h =((f (x0)+(f (x1)+f (x2)+…+f (xn-1))*h ∵x0=a ,xn=b,xi=a+i*h ∴用梯形法求定积分面积的公式为: 其中:a、b分别为积分的下、上限,n为积分区间的分隔数,h=(b-a)/n,h为积分步长;f(x)为被积函数。 程序编写如下: # include { return (1+log(x)+x*x*x);} float f2(float x) { return (1/(1+x*x));} float f3(float x) { return (x+exp(x))/(1+sin(x)+x*x);} float integral(float (*f)(float),float a,float b,int n) { float y,h; int i; y=0; h=(b-a)/n; for (i=0;i void main (void ) { cout<<\ cout<<\ cout<<\} 程序运行结果: s1=5.13245 s2=2.11232 s3=3.31222 实验九 1.实验目的 (1)初步学会用枚举类型变量处理有限元素组成的集合问题。 (2)掌握结构体类型、结构体变量、结构体数组的定义格式。 (3)学会使用结构体变量与结构体数组处理如职工档案、职工工资等问题。 2.实验要求 (1)编写实验程序; (2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)从A、B、C、D四个字母中任取3个不同的字母,共有多少种取法?编写程序,输出 所有取法中字母排列。 (2)定义职工工资结构体类型,描述职工工资的信息有:工号(num)、姓名(name)、基本工资(base_salary)、岗位工资(post_salary)、医疗住房基金(fund)、税金(tax)与实发工资(fact_salary)。用工资结构体类型定义工资结构体变量。用初始化方式输入职工工资各数据成员内容,然后输出职工工资内容。 实验数据:1001,张明,1200,1800,300,100,2600 (3)用实验(2)中的职工工资结构体类型定义某车间职工工资结构体数组。编写四个函数分别用于: ① 输入全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金与税金。 ② 计算每一个职工实发工资,计算公式: 实发工资=基本工资+岗位工资-医疗住房基金-税金。 ③ 按实发工资降序排序。 ④ 输出全车间职工的工号、姓名、基本工资、岗位工资、医疗住房基金、税金与实发工资。 在主函数中定义职工工资数组,调用四个函数完成输入、计算实发工资、排序、输出工作。 实验数据: 1001,张明,1200,1800,300,100 1002,周明,1300,2000,310,110 1003,李明,1400,2200,320,120 1004,陈明,1500,2400,330,130 1005,赵明,1600,2600,340,140 (4)定义描述复数的结构体类型Complex,编写加法函数Add()完成两个复数的加法运算。在主函数中定义复数类型变量sum与数组c[5]。用循环语句给数组c的5个元素输入复数值,并调用Add()函数完成sum=c[0]+c[1]+c[2]+c[3]+c[4]的操作,最后输出数组c的5个复数值,及其复数sum的值。 实验数据: c[0]=10+10i,c[1]=20+20i,c[2]=30+30i,c[3]=40+40i,c[4]=50+50i (5)定义描述矩形的结构体类型,该结构体类型的数据成员为矩形的左上角坐标(x1,y1),矩形的长length与宽width。编写函数Area()计算出矩形的周长与面积。在主函数中定义矩形结构体变量,输入矩形的左上角坐标与矩形的长与宽,调用Area()计算出矩形的周长与面积,并输出矩形的左上角坐标、周长与面积。 实验数据: 100,100,200,50 4.解答参考 (1) # include void show(letter c) { switch(c) { case A : cout<<\ case B : cout<<\ case C : cout<<\ case D : cout<<\ } cout<<'\\t'; } void main(void) { letter c1,c2,c3; for(c1=A ;c1<=D;c1=letter(int (c1) +1)) for(c2=A ;c2<=D;c2=letter(int (c2) +1)) for(c3=A ;c3<=D;c3=letter(int (c3) +1)) { if (c1!=c2 && c1!=c3 && c2!=c3) { show(c1); show(c2); show(c3); cout<<'\\n'; } } cout<<\共有 \种取法!\} 程序运行结果: A B C A B D A C B A C D A D B A D C B A C B A D B C A B C D B D A B D C C A B C A D C B A C B D C D A C D B D A B D A C D B A D B C D C A D C B 共有 24 种取法! (2) # include struct employee { int num ; char name[8]; float base_salary,post_salary,fund,tax,fact_salary; }; void main(void) { employee w={1001,\张明\ cout<<\工号:\ cout<<\姓名:\ cout<<\基本工资:\ cout<<\岗位工资:\ cout<<\医疗住房基金:\ cout<<\税金:\ cout<<\实发工资:\} 程序运行结果: 工号:1001 姓名:张明 基本工资:1200 岗位工资:1800 医疗住房基金:300 税金:100 实发工资:2600 (3) # include float base_salary,post_salary,fund,tax,fact_salary; }; void input(employee s[],int n) { int i; cout<<\ for(i=0;i cin>>s[i].num>>s[i].name>>s[i].base_salary >>s[i]. post_salary >>s[i].fund >>s[i].tax ; } void calcu(employee s[],int n) { int i; for(i=0;i s[i].fact_salary = s[i].base_salary +s[i].post_salary-s[i].fund -s[i].tax ; } void sort(employee s[],int n) { int i,j,k; employee temp; for(i=0;i for (j=i+1;j if (s[k].fact_salar { temp=s[i];s[i]=s[k];s[k]=temp;} } } void output(employee s[],int n) { int i; cout< cout< < void main(void) { employee w[N]; input(w,N); calcu(w,N); sort(w,N); output(w,N); } 程序运行结果: Input employee data: 1001 张明 1200 1800 300 100 1002 周明 1300 2000 310 110 1003 李明 1400 2200 320 120 1004 陈明 1500 2400 330 130 1005 赵明 1600 2600 340 140 Num Name Base_salary Post_salary Fund Tax Fact_salary 1005 赵明 1600 2600 340 140 3720 1004 陈明 1500 2400 330 130 3440 1003 李明 1400 2200 320 120 3160 1002 周明 1300 2000 310 110 2880 1001 张明 1200 1800 300 100 2600 (4) 算法分析提示: (1)定义描述复数类型的结构体变量,描述复数的成员有两个:描述复数实部的real,描述复数虚部的image; (2)实现复数加法函数add(),函数的实参肯定是c1和c2。形参是复数类型的任何两个变量如x,y,实现复数加时假设有第三变量z,即: z.real=x.real-y.real; z.image=x.image-y.image; 函数返回为第三变量z; (4)在主函数中定义复数类型变量sum与数组c[5]。用循环语句给数组c的5个元素输入复数值,并调用add()函数完成sum=c[0]+ c[1]+ c[2]+ c[3]+c[4] 操作, (5)最后输出数组c的5个复数值,及其复数sum的值。最后输出c3、c4复数值。 # include complex add(complex c1,complex c2) { complex z; z.real=c1.real+c2.real; z.image=c1.image-c2.image; return z; } void main(void) { complex c[5],sum={0,0}; int i; cout<<\ for (i=0;i<5;i++) cin>>c[i].real>>c[i].image; for (i=0;i<5;i++) sum=add(sum,c[i]); for (i=0;i<5;i++) cout<<\ cout<<\} 程序运行结果: input 5 complex data: 10 10 20 20 30 30 40 40 50 50 c[0]=10+10i c[1]=20+20i c[2]=30+30i c[3]=40+40i c[4]=50+50i sum=150+150i (5) # include float length,width; }; void Area(Rectangle a) { float wlength,area; wlength=(a.length+a.width)*2; area=a.length*a.width; cout<<\ cout<<\ cout<<\ } void main(void) { Rectangle Rect; cout<<\ cin>>Rect.x1>>Rect.y1; cout<<\ cin>>Rect.length>>Rect.width; Area(Rect); } 程序运行结果: Ipunt Rect(x1,y1):100 100 Ipunt Rectangle length and width:200 50 Rectangle left-top point: 100 100 whole length= 500 Area= 10000 Press any key to continue 实验十 1.实验目的 (1)理解链表的概念及使用链表的优点。 (2)学会链表的建立、查询、输出、删除、排序等操作。 (3)初步学会用链表处理职工工资等实际问题。 2.实验要求 (1)编写实验程序; (2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)建立一个描述职工工资的无序链表,各结点内容如表8.4所示。计算出各职工的实发工资,并输出链表中各职工结点的内容。最后删除链表,回收链表占用空间。建立无序链表、计算实发工资(实发工资=应发工资-税金)、输出链表、删除链表各用一个函数实现。在主函数中调用四个函数完成上述操作。 表8.4 职工工资表 no(工号)name[8] (姓名)dsalary (应发工资) tax(税金)fsalary (实发工资) 1001Zhang190085 1002Wang180080 1003Li170070 1004Zhou200090 (2)在实验(1)的基础上,再编写能删除指定工号结点的函数,能在指定工号结点前插入新职工结点的函数。在主函数中输入要删除与插入结点的工号,并调用删除与插入函数删除与插入指定结点。插入新职工的信息在插入函数内输入。 (3)建立一个描述职工工资的有序链表,各结点内容如表8.4所示,输入职工信息时自动计算实发工资,链表按实发工资升序排列。输出有序链表各结点内容,最后删除链表。 4.解答参考 (1) # include char name[8]; float salary,tax; float fsalary; node *next; }; node * Create(void ) { int no; //定义输入职工工号的临时变量no node *head,*pn,*pt; //定义链表头指针、新结点指针、尾指针head、pn、pt。 head=0; //链表头指针赋0,表示链表为空。 cout<<\产生无序链表,请输入工号、姓名、应发工资、税金, 以工号为-1结束:\ cin>>no; //输入职工工号 while (no!= -1) //工号为-1时结束输入 { pn= new node; //动态分配新结点内存空间,并将结点地址赋给pn。 pn->no=no; //将职工工号输入新结点 cin>>pn->name ; //职工姓名输入新结点 cin>>pn->salary ; //应发工资输入新结点 cin>>pn->tax ; //税金输入新结点 if (head==0) //若链表为空 { head=pn; //则将新结点地址由pn赋给头指针head与尾指针pt pt=pn; //使新结点加入到链首 } else //否则链表非空 { pt->next=pn; //将新结点地址由pn赋给链尾的next指针与尾指针pt pt=pn; //使新结点加入到链尾 } cin >>no; //输入职工工号 } pt->next=0; //链尾指针变量赋0 return (head); //返回链表的头指针 } void Calcu(node *head) { node *p; p=head; while (p!=0 ) { p->fsalary=p->salary-p->tax; p=p->next; } } void Print(const node *head) { const node *p; p=head; cout<<\输出链表中各结点值:\ while (p!=0 ) { cout< void Delchain(node * head) { node * p; p=head; //链表头指针赋给p while (head) //当链表非空时删除结点 { head=p->next; //将链表下一个结点指针赋给head delete p; //删除链表第一个结点 p=head; //再将头指针赋给p } } void main(void) //主函数 { node * head; head=Create(); //产生无序链表 Calcu(head); Print(head); //输出无序链表 Delchain(head); //删除整个链表 } 程序运行结果: 产生无序链表,请输入工号、姓名、应发工资,税金,以工号为-1结束: 1001 zhang 1900 85 1002 wang 1800 80 1003 li 1700 70 1004 zhou 2000 90 -1 输出链表中各结点值: 1001 zhang 1900 85 1815 1002 wang 1800 80 1720 1003 li 1700 70 1655 1004 zhou 2000 90 1910 (2) # include char name[8]; float salary,tax; float fsalary; node *next; }; node * Create(void ) { int no; //定义输入职工工号的临时变量no node *head,*pn,*pt; //定义链表头指针、新结点指针、尾指针head、pn、pt。 head=0; //链表头指针赋0,表示链表为空。 cout<<\产生无序链表,请输入工号、姓名、应发工资、税金,以工号为-1结束:\ cin>>no; //输入职工工号 while (no!= -1) //成绩为-1时结束输入 { pn= new node; //动态分配新结点内存空间,并将结点地址赋给pn。 pn->no=no; //将职工工号输入新结点 cin>>pn->name ; //职工姓名输入新结点 cin>>pn->salary ; //应发工资输入新结点 cin>>pn->tax ; //税金输入新结点 if (head==0) //若链表为空 { head=pn; //则将新结点地址由pn赋给头指针head与尾指针pt pt=pn; //使新结点加入到链首 } else //否则链表非空 { pt->next=pn; //将新结点地址由pn赋给链尾的next指针与尾指针pt pt=pn; //使新结点加入到链尾 } cin >>no; //输入职工工号 } pt->next=0; //链尾指针变量赋0 return (head); //返回链表的头指针 } void Calcu(node *head) { node *p; p=head; while (p!=0 ) { p->fsalary=p->salary-p->tax; p=p->next; } } void Print(const node *head) { const node *p; p=head; cout<<\输出链表中各结点值:\ while (p!=0 ) { cout< void Delchain(node * head) { node * p; p=head; //链表头指针赋给p while (head) //当链表非空时删除结点 { head=p->next; //将链表下一个结点指针赋给head delete p; //删除链表第一个结点 p=head; //再将头指针赋给p } } node *Del( node *head, int no) { node *pc,*pa,*headtemp; headtemp=pc=pa=head; if (head=NULL) //链表为空的情况 { cout << \链表为空,无结点可删!\\t\ return NULL; } if (pc->no==no) // 第一个结点为要删除结点的情况 { head=pc->next; //将第二个结点的地址赋给head, //使首结点从链表中分离出来 delete pc; //删除首结点 cout<<\删除了一个结点!\\n\ } else //第一个结点不是要删除的结点 { while (pc->no!=no && pc->next!=0 ) //查找要删除的结点 { pa=pc; //当前结点地址由pc赋给pa pc=pc->next; //pc指向下一个结点 } if (pc==NULL) //若pc为空表示链表中无要删除的结点 cout << \链表中没有要删除的结点!\\n\ else { pa->next=pc->next;//将下结点地址赋给上结点,使删除结点从链表分离出来 delete pc; //删除指定结点 cout<<\删除一个结点!\\n\ } head=headtemp; } return head; //返回链表头指针 } node * Insert(node * head, int no) { node *pc,*pa,*pn; //定义指向插入点前、后的指针pc与pa pn=new node; cout<<\请输入工号、姓名、应发工资、税金 :\ cin>>pn->no>>pn->name>>pn->salary>>pn->tax; pn->fsalary=pn->salary+pn->tax; pc=pa=head; if (head==0) //若链表为空,则新结点插入到链表首 { head=pn; pn->next=0; return head; } if (pc->no==no) // 第一个结点为要插入结点的情况 { pn->next=head; head=pn; return head; } else //第一个结点不是要插入的结点 { while (pc->no!=no && pc->next!=0 ) //查找要插入的结点位置 { pa=pc; //当前结点地址由pc赋给pa pc=pc->next; //pc指向下一个结点 } pc->next=pn; //新结点插入到链尾 pn->next=0; } return head; //返回链表头指针 } void main(void) //主函数 { node * head; int no; head=Create(); //产生无序链表 Calcu(head); Print(head); //输出无序链表 cout<<\输入要删除结点上职工工号:\\n\ cin>>no; head=Del(head,no); //删除指定工号的结点 Print(head); //输出显示删除后的链表。 cout<<\输入要插入结点职工工号:\\n\ cin>>no; head=Insert(head,no); //插入指定工号的结点 Print(head); //输出显示更新后的链表。 } 程序运行结果: 产生无序链表,请输入工号、姓名、应发工资、税金,以工号为-1结束: 1001 Zhang 1900 85 1002 Wang 1800 80 1003 Li 1700 70 1004 Zhou 2000 90 -1 输出链表中各结点值: 1001 Zhang 1900 85 1815 1002 Wang 1800 80 1720 1003 Li 1700 70 1630 1004 Zhou 2000 90 1910 输入要删除结点上职工工号: 1003 删除一个结点! 输出链表中各结点值: 1001 Zhang 1900 85 1815 1002 Wang 1800 80 1720 1004 Zhou 2000 90 1910 输入要插入结点职工工号: 1005 请输入工号、姓名、应发工资、税金 : 1005 wu 2100 100 输出链表中各结点值: 1001 Zhang 1900 85 1815 1002 Wang 1800 80 1720 1004 Zhou 2000 90 1910 1005 wu 2100 100 2000 (3) # include char name[8]; float salary,tax; float fsalary; node *next; }; void Print(const node *head) { const node *p; p=head; cout<<\输出链表中各结点值:\ while (p!=0 ) { cout< void Delchain(node * head) { node * p; p=head; //链表头指针赋给p while (head) //当链表非空时删除结点 { head=p->next; //将链表下一个结点指针赋给head delete p; //删除链表第一个结点 p=head; //再将头指针赋给p } } node * Insert(node * head, node *pn) { node *pc,*pa; //定义指向插入点前、后的指针pc与pa pc=pa=head; if (head==0) //若链表为空,则新结点插入到链表首 { head=pn; pn->next=0; return head; } if (pn->fsalary<=head->fsalary) //若新结点实发工资≥首结点实发工资, //则新结点插在链首 { pn->next=head; head=pn; return head; } while (pc->next!=0 && pn->fsalary>=pc->fsalary) //若链表非空,则按实发工资查找插 //入点 { pa=pc; // pc、pa移到插入点前、后结点处 pc=pc->next; } if (pn->score >= pc->score) //新结点插入到链尾 { pc->next=pn; pn->next=0; } else //新结点插入到链表中间 { pn->next=pc; pa->next=pn; } return head; //返回链表头指针 } node *Create_sort( void) { node *pn,*head=0; //定义指向新结点的指针变量pn及链表头指针head int no; //定义输入职工工号临时变量no cout<<\产生一条有序链表,请输入数据,以-1结束!\\n\ cin>>no; //输入职工工号 while (no!= -1) //工号不等于-1则循环 { pn=new node; //动态分配node类型结点空间,并将其地址赋给pn pn->no=no; cin>>pn->name; //输入职工姓名 cin>>pn->salary; cin>>pn->tax; pn->fsalary=pn->salary-pn->tax; head=Insert(head,pn); //调用结点插入函数,将新结点按实发工资降序插入链表 cin>>no; //输入职工工号 } return head; //返回链表头指针 } void main(void) //主函数 { node * head; head=Create_sort(); //产生一个有序链表 Print (head); //输出显示有序链表 Delchain(head); //删除整个链表 } 程序运行结果: 产生一条有序链表,请输入数据,以-1结束! 1001 Zhang 1900 85 1002 Wang 1800 80 1003 Li 1700 70 1004 Zhou 2000 90 -1 输出链表中各结点值: 1003 Li 1700 70 1630 1002 Wang 1800 80 1720 1001 Zhang 1900 85 1815 1004 Zhou 2000 90 1910 实验十一 1.实验目的
正在阅读:
c++实验答案03-02
让座的感觉真好作文500字07-07
天猫精灵作文400字06-24
1999艺术欣赏试题08-18
九年级英语上册第一单元知识点汇总(二)03-07
消防工程合同书2019新 doc03-05
中考历史(山西)总复习练习:主题02 统一国家的建立、04-08
我的《民法》期末考试03-21
银饰销售工作总结(精选多篇)03-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- c++
- 答案
- 实验
- 2014全国年节及纪念日放假办法
- 求给定命题公式的真值表并根据真值表求公式的主范式
- 高一地理人教版必修二2018年5月学考适应性测试试题解析
- 珍宝岛之战背后的中苏博弈
- 心理健康教育课程标准
- 电弧焊基础 - 图文
- 反射炉工序
- 北师版四年级语文下册第十一单元提升练习
- 人民卫生出版社第7版《基础化学》教学指导第十二章
- 论文:ERP的应用与实施
- 高新技术企业五种常见税务风险应对措施
- 公司例会通知
- 全新版大学英语2课后选词填空加翻译解释
- 整合营销案例—罗炜雄
- 搬罾初级中学五年发展规划2011-2015
- 法律文书考试复习题及答案
- 基础会计 会计职业能力训练 整本习题
- 武汉理工大学《财务分析》重点详细版
- Fluent模拟太阳辐射的问题
- 过桥施工方案