西南交通大学C++实验报告
计算机程序设计基础(C++)
实验1
一、实验目的
1.熟悉C++程序的集成开发环境;
2.学习新建和打开控制台应用程序的方法;
3.掌握简单数据运算,以及输入与输出方法。
二、实验任务
1.输入一摄氏温度,输出显示所转换的华氏温度。
(提示:摄氏温度=(华氏温度-32)×5/9)
2.画出一头威武雄壮的雄狮。
,%%%%%%
,%%/\%%%%/\%
,%%%\c "" J/%%%
%. %%%%/ o o \%%%
`%%. %%%% _ |%%
`%% `%%%%(__Y__)%
// ;%%%%`\-/%%%'
(( / `%%%%%%%'
\\ .' |
\\ / \ | |
\\/ ) | |
\ /_ | |__
(___________)))))))
三、实验结果(源程序+ 注释)
1.
源程序
#include
using namespace std;
void main()
{
double a,b;
cout<<"请输入一摄氏温度:"< cin>>a; b=a*9/5+32; cout<<"转换的华氏温度为:"< } 2. 源程序 #include using namespace std; void main() { cout<<" ,%%%%%% "< cout<<" ,%%/\%%%%/\% "< cout<<" ,%%%\c "" J/%%% "< cout<<"%. %%%%/ o o \%%% "< cout<<"`%%. %%%% _ |%% "< cout<<" `%% `%%%%(__Y__)% "< cout<<" // ;%%%%`\-/%%%' "< cout<<"(( / `%%%%%%%' "< cout<<" \\ .' | "< cout<<" \\ / \ | | "< cout<<" \\/ ) | | "< cout<<" \ /_ | |__ "< cout<<" (___________))))))) "< } 实验2 一、实验目的 1.掌握对一般数据的输入和输出格式控制方法; 2.掌握对实型数据输出形式的设置和小数位数的控制方法; 3.了解数据输入的相关注意事项。 二、实验任务 1. 键盘输入某台计算机的编号和该计算机的价格,并输出这些信息。 要求:编号为11位数字构成,如10987654321;价格含有小数部分,如 998.0元;输出的编号只是由数字组成,不应该出现小数点等非数字符号。 2. 有一种加密方法是用原来字母的第n个字母代替原来的宁母。例如把A 用其后第4个字母E来替代。现在有一密文内容为wigvix,编程求出它 的原文是什么?(提示:可根据上述加密原理,使用若干字符型变量来实 现)。 3.编程实现:在计算机的提示下输入某学生的学号、英语成绩、高等数学成 绩、线性代数成绩,计算得出三门课程平均成绩,并按如下格式输出显示。 成绩单 学号20100002 **************************************** 科目成绩 ----------------------------------------------------------------- 英语85 高等数学90 线性代数88.5 **************************************** 平均成绩87.8 三、实验结果(源程序+ 注释) 1. 源程序 #include using namespace std; void main() { double a,b; cout<<"请输入某台计算机的编号和该计算机的价格:"< cin>>a>>b; cout.precision(11); cout<<"该计算机的编号和价格分别为:"< cout< } 2. 源程序 #include using namespace std; void main() { char c1,c2,c3,c4,c5,c6; cout<<"请输入密码内容:"< cin>>c1>>c2>>c3>>c4>>c5>>c6; c1=c1-4; c2=c2-4; c3=c3-4; c4=c4-4; c5=c5-4; c6=c6-4; cout<<"原文是:"< cout< } 3. 源程序 #include #include using namespace std; void main() { float score1,score2,score3,average; cout<<"请输入三门课程的成绩"< cin>>score1>>score2>>score3; average=(score1+score2+score3)/3; cout<<"成绩单"< cout<<"学号 20100002"< cout<<"****************************************"< cout<<"----------------------------------------"< cout<<"高等数学"< cout<<"线性代数"< cout<<"****************************************"< cout.precision(1); cout<<"平均成绩"< } 实验3 一、实验目的 1. 掌握“处理某一或某些操作只有在特定条件成立的情况下才会被执行”的编程思路和方法; 2. 掌握简单分支程序设计,以及if 和if-else 语句的使用方法。 二、实验任务 1. 已知一函数?? ???>=-<<=-<=)10(113)101(12)1(x x x x x x y ,输入x 的值,求解并输出相应的y 值。 2. 求一元二次方程ax2+bx+c=0的根,其中a 、b 、c 为实数,由键盘输入。 三、实验结果(源程序 + 注释) 1. 源程序 #include using namespace std; void main() { double x,y; cout<<"请输入x的值:"< cin>>x; if(x<1) y=x; if(x>=1&&x<10) y=2*x-1; if(x>=10) y=3*x-11; cout<<"输出相应的y值为:"< } 2. 源程序 #include #include using namespace std; void main() { double a,b,c,delta,x,x1,x2; cout<<"求一元二次方程ax2+bx+c=0的根"< cout<<"请输入a,b,c的值:"< cin>>a>>b>>c; delta=b*b-4*a*c; if(delta<0) cout<<"一元二次方程无实根"< else if(delta==0) { x=-b/(2*a); cout<<"一元二次方程ax2+bx+c=0的根为a:"<<"x1=x2="< { x1=(-b-sqrt(delta))/(2*a); x2=(-b+sqrt(delta))/(2*a); cout<<"一元二次方程ax2+bx+c=0的根为:"<<"x1="< "<<"x2="< } 实验4 一、实验目的 1.掌握多路分支结构的程序设计,以及switch语句的使用方法; 2.学习通过程序调试来跟踪程序运行过程,查看程序运行过程中各个变量的取值变化 情况。 二、实验任务 1.某公司进行产品销售,既零售也批发,零售的价格与批发的价格不同,购 要求编写一程序,输入客户购买产品的数量,输出客户类型(批发或零售客户)、产品单价及应付的总额。 2. 给学生写评语,需将学生的考试成绩由百分制转换为5级制,标准为: 等级分数段 A 95. - 100分 B 85.-94.分 C 75.-84.分 D 60.-74.分 E 60.分以下 3. 输入年号y和月份m, 输出y年的m月有多少天。 三、实验结果(源程序+ 注释) 1. 源程序 #include using namespace std; void main() { int x,y; cout<<"请输入客户购买产品的数量:"< cin>>x; y=x/10; switch(y) { case 0: case 1: cout<<"客户类型为零售商,产品单价为18元/个,应付的总额为:"<<18*x< case 2: case 3: cout<<"客户类型为零售商,产品单价为15元/个,应付的总额为:"<<15*x< case 4: cout<<"客户类型为零售商,产品单价为12元/个,应付的总额为:"<<12*x< } if(50<=x&&x<200) cout<<"客户类型为批发商,产品单价为10元/个,应付的总额为:"<<10*x< if(x>=200) cout<<"客户类型为批发商,产品单价为8元/个,应付的总额为:"<<8*x< } 2. 源程序 #include using namespace std; void main() { int a,b; cout<<"请输入一学生的考试成绩:"< cin>>a; b=a/5; switch(b) { case 20: case 19: cout<<"该学生的考试成绩等级为A:"< case 18: case 17: cout<<"该学生的考试成绩等级为B:"< case 16: case 15: cout<<"该学生的考试成绩等级为C:"< case 14: case 13: case 12: cout<<"该学生的考试成绩等级为D:"< default: cout<<"该学生的考试成绩等级为E:"< } } 3. 源程序 #include using namespace std; void main() { int y,m; cout<<"请输入输入年号y和月份m:"< cin>>y>>m; switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout< case 4: case 6: case 9: case 11: cout< } if (m==2) { if ((y%4==0&&y%100!=0)||(y%100==0&&y%400==0)) cout< else cout< } } 实验5 一、实验目的 1.理解“处理某一或某些操作需要被有条件地重复执行”的编程思路和方 法; 2.掌握循环结构的程序设计,以及while 、do-while 和for 循环语句的使用 方法。 二、实验任务 1.计算4π=1-31+51-7 1+…直到最后一项小于10-6。 2.编程实现阿基里德算法求解两个整数的最大公约数和最小公倍数。 ( 提示:设两个整数m 、n (m>=n ),用m 除以n ,求得余数q 。 若q 为零,n 即为所求的最大公约数; 若q 不为零,则更新除数和被除数(n →m,q →n )再做除法,直 至余数q 为零止。这时,相应的n 即为所求的最大公约数。 而最小大公倍数=原始m 与n 值的乘积/最大公约数。 ) 3. 编程实现十进制整数和二进制整数之间的转换。 三、实验结果(源程序 + 注释) 1. 源程序 #include using namespace std; void main() { int i=1; double n=1,j=1,k=0,pi=0; do{k=k+j; n=n+2; i=-i; j=i/n; }while(j>=1.0e-6||j<=-1.0e-6); pi=4*k; cout<<"π/4="< cout<<"π="< } 2. 源程序 #include using namespace std; void main() { int m,n,q,i,j,k; cout<<"请输入两个整数:"< cin>>m>>n; i=m; j=n; q=i%j; if(q==0) cout<<"所求的最大公约数为:"< if(q!=0) do{ i=j; j=q; q=i%j; }while(q!=0); k=(m*n/j); cout<<"所求的最大公约数为:"< cout<<"所求的最小公倍数为:"< } 3 源程序 #include using namespace std; void main() { int i=10,j=1,m,n=0; cout<<"请输入一个二进制整数:"< cin>>m; do{n+=j*(m%i); m/=i; j*=2; }while(m!=0); cout <<"转换为十进制整数是:"< } 实验6 一、实验目的 1.掌握循环与选择结构的嵌套的使用方法; 2.掌握嵌套循环的使用方法; 二、实验任务 1. 设计一个程序,求出n-m之间(m>n)的所有素数,要求:每行输出5个。 2. 键盘输入一行字符,统计字符总个数,以及其中的英文字母个数,如果 是数字,则统计它们所构成的数据中,奇数个数和偶数个数分别是多少。 提示:可使用以下程序段,连续输入若干字符直到输入'\n'时停止。 while(1) { ch=getchar(); if(ch=='\n')break; 。。。。。。 } 3. 两个乒乓球队进行比赛,各出3人。甲队为A、B、C共3人,乙队为X、Y、 Z共3人,并以抽签方式决定比赛名单。有人向队员打听比赛的名单,A说 他不和X比,C说他不和X、Z比,请给出3对赛手的名单。 4. 用循环结构语句编程并输出下图,其行数有键盘给出。 例如:键盘输入:5,则运行结果如下 1 22 333 4444 555555555 4444 333 22 1 三、实验结果(源程序+ 注释) 1. 源程序 #include #include using namespace std; void main() { int m,n,x,y,k=0; cout<<"请输入两个不等的整数:"< cin>>n>>m; cout<<"它们之间的所有素数为:"< for(x=n;x<=m;x++) {for(y=2;y<=x-1;y++) if(x%y==0)break; if(x==y) {cout<<" "< k=k+1; if(k%5==0) cout<<"\n";} } } 2. 源程序 #include using namespace std; #include void main() { char ch; int i=0,ch_num=0,odd_num=0,even_num=0; cout<<"请输入一行字符:"< while(1) { ch=getchar(); if(ch=='\n')break; else { i=i+1; if(ch>='a'&&ch<='z'|| ch>='A'&&ch<='Z') ch_num+=1; else if(ch>='1'&&ch<='9') if(ch%2==0) even_num+=1; else odd_num+=1; } } cout<<"输入的字符总个数为:"< cout<<"其中英文字符个数为:"< cout<<"奇数个数为:"< cout<<"偶数个数为:"< } 3. 源程序 #include using namespace std; void main() { char i,j,k; for(i='X';i<='Z';i++) for(j='X';j<='Z';j++) if(i!=j) for(k='X';k<='Z';k++) if(i!=k&&j!=k) if(i!='X'&&k!='X'&&k!='Z') cout<<"3对选手的名单为:"<<"A--"< } 4. 源程序 #include #include using namespace std; void main() { int i,j,a; cout<<"请任意输入一个整数:"; cin>>a; for(i=1;i<=a;i++) {for(j=1;j<=2*a-1;j++) if(j<=2*a-1-i) if(i!=a) cout<<" "; else cout< else cout< cout< for(i=1;i<=a-1;i++) {for(j=1;j<=a-1;j++) if(j<=a-i) cout< else cout<<" "; cout< } 实验7 一、实验目的 1.掌握数值型一维数组的使用方法; 2.掌握对一组同类型的数据进行插入、删除、排序和查找等的常用算法。 二、实验任务 1. 对两个无序的数组(其中数组a长度为n,数组b长度m),采用选择法(或起泡法)分别将这两个数组转为有序(元素值从小到大有序)。要求:a和b 数组长度及其元素均由键盘获取。 2. 将以上任务1构建的两个有序的数组a和b,进行有序合并,即将这两个数组进行合并的过程中其数据始终保持有序。 (提示:数据结构:三个一维数组a,b,c 将a[ia]和b[ib]比较,谁小就把谁放入c[ic](c数组用于存放合并后的数据), 谁放入了c[ic]中谁的下标就加1,同时ic(c中当前存放数据的下 标)加1,如下图所示。) 3. 计算以上任务2中c数组元素的平均值,并删除c中所有低于平均值的那些元素。 三、实验结果(源程序+ 注释) 1. 源程序 #include using namespace std; void main(void) { int i,j,t,n,m,a[100],b[100]; cout<<"请输入数组a中数字的个数:"; cin>>n; cout<<"请输入数组a的"< for(i=0;i cin>>a[i]; for(i=0;i for(j=i+1;j if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;} cout<<"数组从小到大排列为:"< for(j=0;j cout< cout< cout<<"请输入数组b中数字的个数:"; cin>>m; cout<<"请输入数组b的"< for(i=0;i cin>>b[i]; for(i=0;i for(j=i+1;j if(b[i]>b[j]) {t=b[i];b[i]=b[j];b[j]=t;} cout<<"数组b从小到大排列为:"< for(j=0;j cout< cout< } 2. 源程序 #include using namespace std; void main(void) { int i,j,t,n,m,a[100],b[100]; cout<<"请输入数组a中元素的个数:"; cin>>n; cout<<"请输入数组a的"< for(i=0;i cin>>a[i]; for(i=0;i for(j=i+1;j if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}