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;}

这里写图片描述

原创粉丝点击