C++期末复习练手题
来源:互联网 发布:mac响声很大 编辑:程序博客网 时间:2024/06/07 00:23
1 . 输出字符 ‘A’ 和 ‘a’ 的ASCII码值。
#include <iostream>using namespace std;int main(){ int i,j; i='A'; j='a'; cout<<"ASCII of 'A'="<<i<<endl<<"ASCII of 'a'="<<j<<endl; return 0;}
输出:
ASCII of ‘A’=65
ASCII of ‘a’=97
2 . 输入两个小写字符,将其转换为大写
#include <iostream>using namespace std;int main(){ char c1,c2; cout<<"input two char: "; cin>>c1>>c2; c1=c1-32; c2=c2-32; cout<<"c1="<<c1<<endl<<"c2="<<c2<<endl;}
输入:input two char: lc
输出:
c1=L
c2=C
3.输入两个浮点型数字,但要求输出的是整型
#include <iostream>using namespace std;int main(){ float c1,c2; cout<<"input two float: "; cin>>c1>>c2; c1=(int)c1; //方法一 c2=int(c2); //方法二 cout<<"c1="<<c1<<endl<<"c2="<<c2<<endl;}
输入:input two char: 3.97 7.56
输出:
c1=3
c2=7
4.【密码编译题】输入字符串”CHINA”, 每个字母往后加4个ASCII字符后
#include <iostream>using namespace std;int main(){ char a[6]; //定义一个字符型数组 for(int i=1;i<6;i++) { cin>>a[i]; a[i]=a[i]+4;//字符型数组的加法是对其ASCII码进行加减 } for(int i=1;i<6;i++) cout<<a[i]; cout<<endl; return 0;}
输入:CHINA
输出:GLMRE
5 . 输出整数179的十六进制和八进制表达结果。
#include <iostream>using namespace std;int main(){ int a=179; cout<<"hex="<<hex<<a<<endl<<"oct="<<oct<<a<<endl;}
输出:
hex=b3
oct=263
6 . 控制符下的输出
#include <iostream>#include <iomanip> //使用控制符输出要加头文件using namespace std;int main(){ int a=179; cout<<setfill('+')<<setw(10)<<a<<endl; //输出宽度为10位,空的位数用"+"填充}
输出:+++++++179
7.单个字符的输入输出
#include <iostream>using namespace std;int main(){ char a,c; a=getchar();.//从终端输入一个字符 c=a-32; putchar(c); putchar(10);//输出一个换行符,与putchar('\n')同义,10是'\n'的ASCII码值}
输入:b
输出:B
8 . if的嵌套
在if的嵌套中,也可以加花括号来表示层级匹配关系,特别是在if与else数目不一样的情况下:
if() {if() 语句1} else 语句2
9 . 判断某年是否为闰年
#include <iostream>using namespace std;int main(){ int year; cout<<"input the year:"; cin>>year; if ((year%400==0)||(year%100!=0 && year%4==0))//核心代码就这一句话 cout<<year<<"is leap year"<<endl; else cout<<year<<" is not leap year"<<endl; return 0;}
输入:input the year:1900
输出:1900 is not leap year
10.【递归】用递归方法求n阶勒让德多项式的值,递归公式见书p123,习题8。
#include <iostream>using namespace std;int main(){ double Legendre(double x,int n); double a; int b; cout<<"input the value of x: "; cin>>a; cout<<"input the value of n: "; cin>>b; cout<<"the value of "<<b<<"-class "<<"Legendre is: "<<Legendre(a,b)<<endl;}double Legendre(double x,int n){ double lgd; if(n==0) lgd=1; else if (n==1) lgd=x; else lgd=((2*n-1)*x*Legendre(x,n-1)-(n-1)*Legendre(x,n-2))/n; return lgd;}
11.【函数嵌套】写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和,如10=3+7,在主函数中输入一个不小于6的偶数,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,prime函数用于判断是否素数。
#include <iostream>#include <cmath>using namespace std;int main(){ int gotbaha(int ); int a; cout<<"input the even number y: "; cin>>a; gotbaha(a); return 0;}int gotbaha(int y){ int prime(int ); int j; for (int i=2;i<=ceil(y/2);i++) { j=y-i; if (prime(i) && prime(j)) { cout<<y<<"="<<i<<"+"<<j<<endl; break;//满足条件后跳出循环 } } return 0;}int prime(int x){ bool pr=true; for (int i=2;i<x;i++) if (x%i==0) pr=false; return pr;}
输入:input the even number y: 34
输出:34=3+31
12 . 【函数调用】
#include <iostream>#include <cmath>using namespace std;int main(){ int area(int ,int ,int ); int x,y,z; cout<<"input the 3 edges: "; cin>>x>>y>>z; if (x+y>z && x+z>y && y+z>x) cout<<"area="<<area(x,y,z)<<endl;//三角形判别条件 else cout<<"it is not a triangle"<<endl;}int area(int a,int b,int c){ int s; int ar; s=(a+b+c)/2; ar=sqrt(s*(s-a)*(s-b)*(s-c)); return ar;//尤其注意被调用函数的返回值}
13 . 【阶乘的递归实现】求a!+b!+c!的值,用一个函数fact(n)求n!。a,b,c的值由主函数输入,最终得到的值在主函数中输出。
#include <iostream>using namespace std;int main(){ int fact(int n); int a,b,c,sum; cin>>a>>b>>c; sum=fact(a)+fact(b)+fact(c); cout<<sum;}int fact(int n){ int f; if(n==1) f=1; else f=fact(n-1)*n; return f;}
14 . 【while循环 · 迭代法】用牛顿迭代法求方程的根。方程为
ax^3+bx^2+cx+d=0,系数a,b,c,d的值依次为4,3,2,1,由主函数输入。求x在1附近个一个实根。求出根后由主函数输出。
注:牛顿迭代法公式:x2=x1-f1/f2
//心得:往往写while循环都在循环体外和循环体内把函数写两遍#include <iostream>#include <cmath>using namespace std;int main(){ double newton(int a,int b,int c,int d); cout<<newton(4,3,2,1)<<endl;}double newton(int a,int b,int c,int d){ double f1,f2,x,x1,x2,m; f1=a*x1*x1*x1+b*x1*x1+c*x1+d; f2=3*a*x1*x1+2*b*x1+c;//f2是f1的导数 x1=1; //赋一个初值,随便找一个值开始 x2=x1-f1/f2;//迭代关键 while(abs(x1-x2)>0.00001) //结束循环的条件 { x1=x2; f1=a*x1*x1*x1+b*x1*x1+c*x1+d; f2=3*a*x1*x1+2*b*x1+c; x2=x1-f1/f2; } return x2;}
15.
#include <iostream>using namespace std;int main(){ char c; while((c=getchar())!='\n') { if(('z'>=c && c>='w') || ('Z'>=c && c>='W')) c=c-22; if(('v'>=c && c>='a') || ('W'>=c && c>='A')) c=c+4; cout<<c; //小心:在C++语言中没有连等的表达 } cout<<endl;}
输入:I am going to Beijing!
输出:M eq ksmrk xs Fimnmrk!
16 . 【循环应用题】猴子当天吃掉的桃子数为前一天剩下桃子数的一半再多一个,到第10天时,只剩下一个桃子了,求:第一天的桃子数
分析:写出通项公式是关键
S1-1/2*S2-1=S2,设S1为前一天所剩桃子数,S2为当天所剩桃子数
==>S1=2*S2+2
#include <iostream>using namespace std;int main(){ int s=1,n=1; while(n<10) { n++; s=2*s+2; } cout<<s<<endl;}
17 . 有3个国家名,要求找出按字母顺序排在最前面的国家。要求用函数调用。
#include <iostream>#include <string>using namespace std;int main()//step 1:输入三个国家的字符串{ void stringcmp(char string[][]); char str[4][20]; for(int i=1;i<4;i++) cin>>str[i]; stringcmp(str);}// step 2:调用字符串比较函数void stringcmp(char string[][]){ char min[20]; strcpy(min,string[1]);//将min数组设为常数字符 for(int i=1;i<3;i++) { if(strcmp(string[i+1],min)<0)//strcmp()函数要求第二个参数为常数 strcpy(min,string[i+1]);//给数组赋值只能采用strcpy()函数 } cout<<min<<endl;}
输入:GERMANY FRANCH CHINA
输出:CHINA
18 . 逆序输出CHINA
#include <iostream>#include <string>using namespace std;int main(){ char word[6]; int n=5;//定义n变量,表示字符串长度,即该字符数组中含有多少个字符 for(int i=1;i<6;i++) cin>>word[i]; while(n!=0) { cout<<word[len]; n--; } return 0;}
输入:CHINA
输出:ANIHC
19 . 10个数选择排序法(从大到小)
原理:
1) 外循环执行n-1次,内循环每次比较和交换n-i次(i为第i次外循环)
2) 从数组第一位开始循环,后面从第二个元素开始直到访问完数组中最后一个元素为止,遇到最小值则与之交换;然后进行第二次循环,从数组第二个元素开始,从第三个元素开始访问之后的所有元素,遇到最小值则与之交换……
#include <iostream>using namespace std;int main(){ void quicksort(int b[]); int a[11]; cout<<"input 10 numbers: "; for(int i=1;i<11;i++) cin>>a[i]; quicksort(a); for(int i=1;i<11;i++) cout<<"sorted array: "<<a[i]<<endl; return 0;}void quicksort(int b[]){ for (int i=1;i<10;i++) { int max=b[i],m=i;//初始值很关键 for (int j=(i+1);j<11;j++) { if (b[j]>max) { max=b[j]; m=j; } }//最里面一层循环是把i之后元素的最大值及其脚标找到 b[m]=b[i]; b[i]=max; }//最外层循环的作用是交换元素}
20 . 折半查找(二分查找)
given:一个由大到小排好序的10个元素的数组
求:输入一个元素,查找该元素在数组中位置,即索引
· 思想:
step1: 每次从数组的中间元素开始找起
step2: 然后根据目标数字与中间元素的大小关系,锁定该中间元素的左区间或右区间
step3:重复步骤2,直至目标元素=中间元素
#include <iostream>#include <cmath>using namespace std;int main(){ void binary_search(int t,int b[],int n); int a[11]={0,20,19,17,15,9,6,5,3,2,1},len=10; int target;//注意这里的处理技巧,10个数,使得a[1]~a[10]有意义,则第一个元素必须是0 cout<<"input a number that you want to search: "; cin>>target; binary_search(target,a,len); return 0;}void binary_search(int t,int b[],int n){ int lb=1,ub=10,bn; bn=ceil((lb+ub)/2); while(b[bn]!=t) { if (t>b[bn]) { ub=bn-1; bn=ceil((lb+ub)/2); } else { lb=bn+1; bn=ceil((lb+ub)/2); } } cout<<"the index of this item is: "<<bn<<endl;}
21 . 找一个五个元素数组中的第二大的值
#include <iostream>using namespace std;int main(){ int a[6]={0,1,2,3,4,5}; //第一次循环先找最大值 int max=a[1],sec=a[1]; for (int i=2;i<6;i++) if (max<a[i]) max=a[i]; //第二次循环找次大值 for (int i=2;i<6;i++) if (sec<a[i] && a[i]<max) sec=a[i]; cout<<"max="<<max<<" , sec="<<sec<<endl; return 0;}
22 . 生成随机整数
//产生[1,10的随机整数]#include <iostream>using namespace std;int main(){ int x; for (int i=1;i<11;i++) { x=(rand()%10)+1; cout<<x<<" "; }}
//产生[0,10的随机整数]#include <iostream>using namespace std;int main(){ int x; for (int i=1;i<11;i++) { x=(rand()%11); cout<<x<<" "; }}
23 . 分解质因数
#include <iostream>using namespace std;int main(){ void prime_factor(int b); int a; cout<<"input a number: "; cin>>a; prime_factor(a); return 0;}void prime_factor(int b){ for (int i=2;i<=b;i++) { while (b%i==0) { b=b/i; cout<<i<<" "; } }}
24 . 最大公因数gcd和最小公倍数lcm
#include <iostream>using namespace std;int main(){ void gcd_lcm(int m,int n); int a,b; cout<<"input two number: "; cin>>a>>b; gcd_lcm(a,b);}void gcd_lcm(int m,int n){ int de,gcd,lcm,mul; mul=m*n; while(m%n!=0) { de=m%n; m=n; n=de; } gcd=n;//辗转相除以后,最大公因数gcd为n lcm=mul/gcd; cout<<"gcd="<<gcd<<" lcm="<<lcm<<endl;
25 . 重载之复数加法
#include <iostream>using namespace std;class complex{ public: complex (int a=0,int b=0); friend complex operator+(complex n1,complex n2); void display(); private: int real,imag;};complex::complex (int a,int b){ real=a; imag=b;}complex operator+(complex n1,complex n2){ complex n3; n3.real=n1.real+n2.real; n3.imag=n1.imag+n2.imag; return n3;}void complex::display(){ cout<<"("<<real<<","<<imag<<"i"<<")"<<endl;}int main(){ complex c1(3,4),c2(5,6),c3; c3=c1+c2; cout<<"c3="; c3.display();}
26 . 重载之复数乘法
#include <iostream>using namespace std;class complex{public: complex(int a=0,int b=0); //第一个函数:构造函数,与类同名,参数为每个对象中的成员变量 friend complex operator*(complex n1,complex n2); //第二个函数:重载函数,参数为对象 void display(); //第三个函数:成员函数,功能是用以输出private: int real,imag;};// 1) 构造函数complex::complex(int a,int b){ real=a; imag=b;}// 2) 重载函数complex operator*(complex n1,complex n2){ complex n3; n3.real=n1.real*n2.real-n1.imag*n2.imag; n3.imag=n1.real*n2.imag+n1.imag*n2.real; return n3;}// 3) 输出成员函数void complex::display(){ cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main(){ complex c1(3,4),c2(5,6),c3; c3=c1*c2; cout<<"c3="; c3.display();}
27、定义一个具有26个下标变量的字符数组,初始值为”A”到”Z”的26个英文字母,用户从键盘输入 任意4个数(1到26之间,表示对应字符的位置),显示对应序号上的字符。例如输入1 3 2 4,显示 ACBD。
#include <iostream>using namespace std;int main(){ int a[4]; char b[4]; cout<<"input 4 numbers: "; for(int i=0;i<4;i++) { cin>>a[i]; b[i]=a[i]+64; cout<<b[i]<<" "; } cout<<endl;}
28 . 自定义一个函数(VB)或类的方法(JAVA、C++),功能:按两个参数(直角三角形的直角 边的长度)的值,计算并返回三角形的面积值。再定义一个程序,功能:从键盘输入两个数(直 角三角形的直角边的长度),调用上述自定义函数或方法,计算并输出三角形的面积值。
有一个小小的心得:如果想要用成员函数传递参数时,这时候就不要写成员函数了,直接写构造函数就好了,当然,如果不要传递参数,那么成员函数还是可以用的。
方法一:无参的成员函数,无构造函数
#include <iostream>using namespace std;class t{ public: void tr(); void area(); private: int edge1,edge2;};void t::tr(){ int a,b; cout<<"input two edges: "; cin>>a>>b; edge1=a;edge2=b;}void t::area(){ int ta; ta=(edge1*edge2)/2; cout<<"the area of the triangle is: "<<ta<<endl;}int main(){ t t1; t1.tr(); t1.area(); return 0;}
方法二:定义构造函数,带参数
//说明:比起上面一段代码而言,就改动了如下地方:成员函数 --> 构造函数#include <iostream>using namespace std;class t{ public: t(int a=0,int b=0);//声明成员函数的地方变成了构造函数 void area(); private: int edge1,edge2;};t::t(int a,int b)//在类体外定义成员函数的代码变成了定义构造函数的代码{ cout<<"input two edges: "; cin>>a>>b; edge1=a;edge2=b;}void t::area(){ int ta; ta=(edge1*edge2)/2; cout<<"the area of the triangle is: "<<ta<<endl;}int main(){ t t1; t1.area(); return 0;}
29 .
从键盘上输入任意6个整数,分别计算并显示出奇、偶数的和。
#include <iostream>using namespace std;int main(){ int a[6],even=0,odd=0; cout<<"input 6 integers: "; for(int i=1;i<7;i++) { cin>>a[i]; if (a[i]%2==0) even=even+a[i]; else odd=odd+a[i]; } cout<<"sum of even is: "<<even<<endl<<"sum of odd is: "<<odd<<endl;}
30 . 找出并显示出1-200之间所有能被7整除但不能被5整除的整数。
代码一:什么格式都不控制
#include <iostream>#include <iomanip>using namespace std;int main(){ for(int i=1;i<200;i++) if(i%7==0 && i%5!=0) cout<<i<<" ";}
#include <iostream>#include <iomanip>using namespace std;int main(){ int s=0; for(int i=1;i<200;i++) { if(i%7==0 && i%5!=0) { cout<<i<<setw(2)<<" ";//每个数字占有2个单位长度 s++; //定义一个自加变量,用于控制没行输出个数 if (s%5==0) cout<<endl; //每行输出五个 } }}
31、用户从键盘上输入一组整数(a1,a2,…,a10)和另一组整数(b1,b2,…,b10),假设这两组整数中的每 一个整数的取值范围为0-30(包含0和30),计算并显示a1*b10+a2*b9+a3*b8+…+a10*b1和 a1*b1+a2*b2+a3*b3+…+a10*b10的值。
#include <iostream>using namespace std;int main(){ int sum1(int m[],int n[],int len); int sum2(int m[],int n[],int len); int a[6],b[6]; cout<<"input array a[]: "; for (int i=1;i<6;i++) cin>>a[i]; cout<<"input array b[]: "; for (int i=1;i<6;i++) cin>>b[i]; cout<<"sum1="<<sum1(a,b,5)<<endl; cout<<"sum2="<<sum2(a,b,5)<<endl;}int sum1(int m[],int n[],int len){ int ss1[len+1],s=0; for(int i=1;i<(len+1);i++) { ss1[i]=m[i]*n[len-i+1]; s=s+ss1[i]; } return s; }int sum2(int m[],int n[],int len){ int ss2[len+1],s=0; for(int i=1;i<(len+1);i++) { ss2[i]=m[i]*n[i]; s=s+ss2[i]; } return s;}
32、计算并显示1-2-3+4-5-6+7-8-9+…n的值。其中n为程序运行时用户从键盘上输入的一个100-200 之间的整数。
#include <iostream>using namespace std;int main(){ int n,s=0,j; cout<<"input a number(100~200): "; cin>>n; for(int i=1;i<(n+1);i++) { if (i%3==0 || (i+1)%3==0) j=i*(-1); else j=i;//小心:这里要用另一个变量保存i的值 s=s+j; } cout<<"the sum is: "<<s<<endl;}
33 . 编写一个函数(或者是方法),其功能为:用户从键盘上输入一个字符串,输出该字符串的 第3个字符。
#include <iostream>#include <string>using namespace std;int main(){ string word; cout<<"input a string: "; cin>>word; cout<<"the third item of this string is:"<<word[2]<<endl;}
- C++期末复习练手题
- C语言期末复习
- java期末复习---概念题
- 期末复习
- 期末复习
- 期末复习
- 期末复习
- 期末复习
- 期末复习
- c语言期末编程题
- LINUX期末复习---线程
- 期末复习2
- 软件工程期末复习笔记
- 毛中特期末复习程序
- 马克思期末复习程序
- j2ee期末复习概要
- 关于期末复习数据库
- 山东师范大学eda 期末复习
- UE4中类自动生成代码解析
- Grouping测试-Storm
- ubuntu开发环境
- 6-13总结
- 无线OSS-高精度整数加法(加数可以为负数,应实现高精度加减法)
- C++期末复习练手题
- arttemplate模板--绑定集合
- idea集成svn
- 实际工作中:----mybatis长用的mapper.xml
- 数据备份——PHP
- 加载png图片按钮GdipButton按钮类
- org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.s
- springMVC整合Junit4进行单元测试
- 前端知识点总结(四)