中南大学C++程序设计实践思考题答案.doc_第1页
中南大学C++程序设计实践思考题答案.doc_第2页
中南大学C++程序设计实践思考题答案.doc_第3页
中南大学C++程序设计实践思考题答案.doc_第4页
中南大学C++程序设计实践思考题答案.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

23实验1 C+基础6编写程序,输入某大写字母的ASCII码值,输出该字母的对应小写字母。#includeusing namespace std;int main()int i;cini;if(i=65 & 1=90 )coutchar(i-A+a)endl;elsecout输入有误endl;return 0; 实验2三、实验思考1.输入直角三角形的两条直角边长,调用平方根库函数sqrt来求斜边的长度#include#includeusing namespace std;int main() float a,b,c; coutab; c=sqrt(a*a+b*b); cout直角三角形的斜边=cendl; return 0;2从键盘输入一个字符,如果输入的是英文大写字母,则将它转换成小写字母后输出,否则输出原来输入的字符。#includeusing namespace std;int main() char c; coutc; if(c=A& c=Z)c+=a-A; coutcendl; return 0;3输入一个学生的成绩,如高于60分,则输出“pass”;否则,输出“failed”。#includeusing namespace std;int main() float grade; coutgrade; if(grade=60) coutpassendl; else coutfailed; return 0;4. 计算分段函数#include #include using namespace std;int main() double x,y; coutx; if(!x) y=cos(x)-pow(x,2)+3*x; else y=sin(x)+sqrt(pow(x,2)+1)+3*x; couty=yendl; return 0;5. 从键盘上输入17之间的一个数字,输出其对应星期几的英文表示。#include using namespace std;int main() char c; coutc; switch(c) case 1:coutMonday;break; case 2:coutTuesdag;break; case 3:coutWenesday;break; case 4:coutThursday;break; case 5:coutFriday;break; case 6:coutSaturday;break; case 7:coutSunday;break; default: cout wrong number; coutendl; return 0;6. 设计一个简单的计算器程序,能够进行加、减、乘、除简单运算并显示结果。#include using namespace std;int main() coutleftOperandOperatorrightOperand; int result; switch(Operator) case +: result=leftOperand+rightOperand;break; case -: result=leftOperand-rightOperand;break; case *: result=leftOperand*rightOperand;break; case /: if(rightOperand!=0) result=leftOperand/rightOperand; else cout除数为0,除法不能进行endl;return 0; break; default: coutOperator是本程序不支持的操作。endl; return 0; coutleftOperandOperatorrightOperand=resultendl; return 0; 实验3三、思考题参考程序1编程计算表达式的值。#include using namespace std;int main() int n,k=1,sum=0,mean; coutn; while(k0) mean=sum/n; else mean=0; cout1n个整数平方和的均值=meanendl; return 0;2输入两个正整数,判别它们是否互为互质数。所谓互质数,就是最大公约数是1。#include using namespace std;int main() int m,n,r; coutmn; coutm”和”n; if(mn) r=m;m=n;n=r; while(r=m%n) m=n; n=r; if(n=1) cout是互质数 endl;else cout”不是互质数”endl; return 0;3编写程序,输出从公元2000年至3000年间所有闰年的年号。#include using namespace std;int main() int year; cout公元2000年至3000年间闰年的年号:n; for(year=2000;year=3000;year+) if(year%4=0 & year%100 !=0)|(year%400=0) coutyeart; coutendl; return 0;4编写程序模拟猴子吃桃子问题:猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天将剩下的桃子又吃了一半,又多吃一个。以后每天都吃了前一天剩下的一半零1个。到了第10天,只剩下了一个桃子。请问猴子第一天共摘了多少个桃子?方法1:#include using namespace std;int main() int day,qian,hou=1; for(day=9;day=1;day-) qian=(hou+1)*2; hou=qian; coutqianendl; return 0;运行结果:1534方法2:#include using namespace std;int main() int day,number=1; for(day=9;day=1;day-) number=(number+1)*2; coutnumberendl; return 0;方法3:#include using namespace std;int peach(int);int main() cout第1天共摘了peach(1)个endl; return 0;int peach(int day) int number; if(day=10) number=1; else number=2*(peach(day+1)+1); return number;5计算s=1+(1+2)+(1+2+3)+(1+2+3+4)+ +(1+2+3+ +n)的值。方法1:#include using namespace std;int main() int i,j,n; long int sum,total(0); coutn; for(i=1;i=n;i+) sum=0; for(j=1;j=i;j+) sum+=j; total+=sum; couts=totalendl; return 0;#include using namespace std;int main() int i,n; long int sum(0),total(0); coutn; for(i=1;i=n;i+) sum+=i; total+=sum; couts=totalendl; return 0;6马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆用餐,其中有男人、女人和小孩。每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花了50先令。请问男人、女人以及小孩各有几个人?#include using namespace std;int main() int x,y,z; for(x=1;x=16;x+)for(y=1;y=24;y+) z=30-x-y; if(3*x+2*y+z=50) coutMen are x,women are y ,children are z.endl; return 0;实验4 常用程序设计算法三、实验思考1读入一个整数N,若N为非负数,则计算N到2N之间的整数和;若N为负数,则求2N到N之间的整数和。分别利用for和while写出两个程序。#includeusing namespace std;int main()int N;cinN;int i=N;long sum=0;if(N=0)for(;i=2*N;i-)sum+=i;coutsumendl;return 0; #includeusing namespace std;int main()int N;cinN;int i=N;long sum=0;if(N=0)while(i=2*N)sum+=i;i-;coutsumendl;return 0;2设,求与8最接近的s的值及与之对应的n值。#includeusing namespace std;int main()float s=1.0;int n=1;do +n;s+=1.0/n;while(s(8-(s-1.0/n)couts=s-1.0/n n=n-1endl; elsecouts=s n=nBC,且A+B+C100,求满足的共有多少组。#include using namespace std;int main()int A,B,C; int count=0; for(C=0;C!=33;+C )for(B=100; BC;-B )for(A=100; AB; -A)if(A + B + C 100) & (A * A * B * B) = (A * A + B * B) * C * C) cout A B C endl; + count;cout count is: count endl;return 0;4一司机出车祸后驾车逃离现场,第一位目击者记得车牌号前两位数字相同,且后两位数字也相同;第二位目击者是一位数学家,他看出车牌号是四位完全平方数。试推算肇事车的车牌号。#includeusing namespace std;int main()int n,i;for(i=32;i100;i+)n=i*i;if(n%10 = n%100/10 & n/1000 = n/100%10)coutnendl;return 0;5编程验证“四方定理”:所有自然数至多只要用4个数的平方和就可以表示。#includeusing namespace std;int main()int number,i,j,k,l;coutnumber;for(i=1;inumber/2;i+) for(j=0;j=i;j+)for(k=0;k=j;k+)for(l=0;l=k;l+)if(number=i*i+j*j+k*k+l*l) coutnumber=i*i+j*j+k*k+l*lendl;exit(0);return 0;6编程验证“角谷猜想”:任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数,然后按同样的方法继续运算,若干次运算后得到的结果必然为1。#includeusing namespace std;int main()int n,flag;flag=1;coutplease input n:n; while(flag)if(n%2=0)n=n/2;else n=n*3+1;if(n=1)flag=0; coutsuccess!endl;return 0;实验5 函数和编译预处理三、实验思考1. 参考程序如下:#include using namespace std;long int Fibonacci(int n); void main()int i; long int t,t1;coutplease input t:t;for (i=2;i+)t1=Fibonacci(i);if (t1t) coutmin Fibonacci=t1endl;break;long int Fibonacci(int n)if (n=0) return 1;else if (n=1) return 1;else return Fibonacci(n-1)+Fibonacci(n-2);2. 参考程序如下:#include using namespace std;int num_n(int n,int a) /由n个a组成的多位数的计算if (n=1) return a;else return num_n(n-1,a)*10+a;void main()int i,n; long int sum=0;coutplease input n:n;for (i=1;i=n;i+)coutnum_n(i,2)endl; sum+=num_n(i,2);coutn=n:sum=sumendl;3. 参考程序如下:#include using namespace std;int isprime(int n) /判断n是否为素数的函数int i;for (i=2;in-1;i+) if (n%i=0) return 0;/非素数,函数值返回0return 1;/素数,函数值返回1void main()int i,min_prime,max_prime;for (i=1000;i=2000;i+)if(isprime(i)=1) cout最小素数=i=1000;i-)if(isprime(i)=1) cout最大素数=iendl; break;4. 参考程序如下:#include using namespace std;int sum(int n) static s=0;s=s+n;return s; void main()int i, n,s;coutn;for (i=1;i=n;i+)s=sum(i);cout1n之和=sendl; 5. 参考程序如下:#include using namespace std;int is_h(int n) /判断参数n是否为回文int i,m,fn;/i用来记录n的某一位数字,m初值为n,fn用于记录n的倒序数m=n;fn=0;while(m!=0)i=(m%10);fn=(fn*10+i);m=m/10;if(fn=n) return 1; /是回文数返回1else return 0; /不是回文数返回0void main()int i;int t; cint; for (i=1;i=t;i+)if (is_h(i)=1)cout回文数:iendl; 6. 参考程序如下:#include using namespace std;#define X (a+b)/2#define AREA X*hvoid main()float a,b,h,s;cout请分别输入a,b,h的值,用空格分隔!abh; s=AREA;coutAREAendl; 实验六 数组 三、实验思考题 参考源代码思考题1. shi_6_3_1.cpp#include #define N 5int lookup(int ,int ,int ); /函数说明void main() int i, aN,index,yLooked; cout请输入N(=5)个整数:endl; for(i=0;iai; cout请输入您要找的整数:yLooked;index=lookup(a,N,yLooked); /函数调用if(index!=-1) cout您要找的数下标为:indexendl;else cout没有找到yLookedendl; coutn谢谢使用本程序,再见!endl; cin.get(); cin.get();int lookup(int x,int n,int y) /函数定义int flag=-1; /首先假设找不到int i; for(i=0;in;i+)if(xi=y)flag=i; break; /找到了则不必再往后找return flag;-思考题2. shi_6_3_2.cpp#include #define N 5int max(int ,int ); /函数说明void main() int i, aN,xMax; cout请输入N(=5)个整数:endl; for(i=0;iai;xMax=max(a,N);cout数组中最大的的整数:xMaxendl;coutn谢谢使用本程序,再见!endl;cin.get();cin.get();int max(int x,int n)int i,r=x0; /首先假设 x0 最大, 且存于 r 中for(i=1;in;i+) / 也可写成 for(i=0;ir) r=xi; / 发现了更大 的则 修改 rreturn r; / r 中 存有最大 元素的值-思考题3. shi_6_3_3.cpp#include #define N 5void invert(int ,int); /函数说明void main() int i, aN; cout请输入N(=5)个整数:endl; for(i=0;iai; invert(a,N);coutn 这些数 逆序输出如下:nendl; for(i=0;iN;i+) coutai ;coutn谢谢使用本程序,再见!endl;cin.get();cin.get();void invert(int x,int n)int i=0, j=n-1,t; /while(ij)t=xi; xi=xj; xj=t; i+;j-;return; -思考题4. shi_6_3_4.cpp#include #define M 3 /M 行#define N 4 /N 列 void main() int numMN; /=1,6,9, 3,5,4, 2,7,8; int i,j,it,itt, t,jt,exist=0; cout请输入 3 行 4 列 的 二维 数组: endl; for (i=0;iM;+i) for (j=0;jnumij; for (i=0;iM;+i) t=numi0; jt=0; for (j=0;jN;+j) if ( tnumij) t=numij, jt=j; itt=i; for(it=0;itnumitjt) t=numitjt, itt=it; if (i=itt) exist=1;break; if (exist) cout鞍点为 tendl;else cout无鞍点 endl;coutn谢谢使用本程序,再见!endl;cin.get();cin.get(); -思考题5. shi_6_3_5.cpp改正: 题目中添加 3 字5对数组A中的N个整数从小到大进行连续编号,要求不能改变这N个数在数组A中的存放顺序,且相同的数编号也相同。例如,若数组A中数为(5,3,4,7,3,5,6),则输出为(3,1,2,5,1,3,4)。分析:采用3个数组,它们元素值含义如下:#define N 7#include #include using namespace std;int main( )int i,j,t,k,ik;int aN,bN,cN;coutplease input N numbers:endl;for (i=0;iai; /从键盘上输入N个元素,a0保存第一个数据couta数组各元素的值:n;for(i=0;iN;i+) coutsetw(6)ai;coutendl;for (i=0;iN;i+) bi=i;for (i=0;iN-1;i+) /排序,使 ab0ab1 、.、abN-1 k=i; /每轮选择过程开始时假定 abi 最小,将下标i保存在k中 for (j=i+1;jabj) k=j; /若发现某个abj小于abk,则将k修改为j if (k!=i) t=bi; bi=bk; bk=t; coutb数组各元素的值:n;for(i=0;iN;i+) coutsetw(6)bi;coutendl;ik=1;cb0=ik;for (i=1;iN;i+) if (abi!=abi-1) / abi=abi-1时,它们的编号相同 ik+; cbi=ik; co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论