CC++编程题目和代码3.docx

上传人:b****5 文档编号:6528535 上传时间:2023-01-07 格式:DOCX 页数:81 大小:53.91KB
下载 相关 举报
CC++编程题目和代码3.docx_第1页
第1页 / 共81页
CC++编程题目和代码3.docx_第2页
第2页 / 共81页
CC++编程题目和代码3.docx_第3页
第3页 / 共81页
CC++编程题目和代码3.docx_第4页
第4页 / 共81页
CC++编程题目和代码3.docx_第5页
第5页 / 共81页
点击查看更多>>
下载资源
资源描述

CC++编程题目和代码3.docx

《CC++编程题目和代码3.docx》由会员分享,可在线阅读,更多相关《CC++编程题目和代码3.docx(81页珍藏版)》请在冰豆网上搜索。

CC++编程题目和代码3.docx

CC++编程题目和代码3

=======================================================================================================================

1.矩阵左转

输入一个2*3的矩阵,将这个矩阵向左旋转90度后输出

比如现在有2*3矩阵:

123

456 

向左旋转90度后的矩阵变为:

36

25

14

要求:

除了矩阵创建和数据输入可以使用数组和数组下标的方法,其他过程对矩阵的任何访问都必须使用指针

提示:

m行n列的二维矩阵,第i行第j列的元素与首元素的距离为i*n+j,序号从0开始计算

输入

第一行输入t表示有t个测试实例

连续两行输入一个2*3的矩阵的数据

依次输入t个实例

输出

依次输出左转后的矩阵结果

在输出的每行中,每个数据之间都用空格隔开,最后一个数据后面也带有空格

样例输入

2

123

456

456

789

样例输出

36

25

14

69

58

47

#include

usingnamespacestd;

voidchange(int*p,int*q);

intmain()

{

inta[2][3],b[3][2];

inti,j,t;

cin>>t;

while(t--)

{

for(i=0;i<2;i++)

for(j=0;j<3;j++)

cin>>a[i][j];

change(a[0],b[0]);

}

}

voidchange(int*p,int*q)

{

inti,j;

for(i=0;i<2;i++)

for(j=0;j<3;j++)

*(q+4-2*j+i)=*(p+3*i+j);

//b[2-j][i]=a[i][j];

for(i=0;i<3;i++)

{

for(j=0;j<2;j++)

cout<<*(q+2*i+j)<<"";

cout<

}

}

=======================================================================================================================

2.函数指针(函数调用)

定义并实现三个函数:

第一个函数是整数函数,返回类型为整数,参数是一个整数变量,操作是求该变量的平方值

第二个函数是浮点数函数,返回类型为浮点数,参数是一个浮点数变量,操作是求该变量的平方根值。

求平方根可以使用函数sqrt(浮点参数),将返回该参数的平方根,在VC中需要头文件cmath。

第三个函数是字符串函数,无返回值,参数是一个字符串指针,操作是把这个字符串内所有小写字母变成大写。

要求:

定义三个函数指针分别指向这三个函数,然后根据调用类型使用函数指针来调用这三个函数。

不能直接调用这三个函数。

如果类型为I,则通过指针调用整数函数;如果类型为F,则通过指针调用浮点数函数;如果类型为S,则通过指针调用字符串函数

输入

第一行输入一个t表示有t个测试实例

每行先输入一个大写字母,表示调用类型,然后再输入相应的参数

依次输入t行

输出

每行输出调用函数后的结果

样例输入

5

Sshenzhen

I25

F6.25

I31

SChina

样例输出

SHENZHEN

625

2.5

961

CHINA

#include

#include

#include

usingnamespacestd;

intfuck1(inta);

floatfuck2(floata);

voidfuck3(char*a);

intmain()

{

int(*INT)(int);

float(*FLOAT)(float);

void(*CHAR)(char*a);

charch,b[30];

inta,t;

floatc;

cin>>t;

while(t--)

{

cin>>ch;

if(ch=='I')

{

INT=fuck1;

cin>>a;

cout<

}

elseif(ch=='F')

{

FLOAT=fuck2;

cin>>c;

cout<

}

elseif(ch=='S')

{

CHAR=fuck3;

cin>>b;

CHAR(b);

cout<

}

}

}

intfuck1(inta)

{

returna*a;

}

floatfuck2(floata)

{

returnsqrt(a);

}

voidfuck3(char*a)

{

inti,l=strlen(a);

for(i=0;i

if(*(a+i)>='a'&&*(a+i)<='z')

*(a+i)=*(a+i)-32;

}

=======================================================================================================================

3.数字判断(指针为函数参数)

输入一个字符串,判断这个字符串是否一个完全整数值的字符串,例如输入"1234",那么表示整数1234,输入"12a3"就表示只是一个字符串,不是一个整数

要求编写函数isNumber,参数是一个字符指针,返回值是整数类型

如果字符串表示一个整数,则计算出这个整数并且返回

如果字符串不是表示一个整数,则返回-1

主函数必须调用isNumber来判断字符串,不能使用任何C++自带或第三方的类似函数

输入

输入t表示有t个测试实例

每行输入一个字符串

依次输入t行

输出

每行输出判断结果

样例输入

3

1234

567a

0890

样例输出

1234

-1

890

#include

#include

usingnamespacestd;

intisnumber(char*a);

intmain()

{

    intl,k=0,t;

    chara[20];

    char*p;

    p=a;

    cin>>t;

    while(t--)

    {

    cin>>a;

    cout<

 

    }

 

}

intisnumber(char*a)

{

    inti,j,l,m=0;

     

    l=strlen(a);

    for(i=0;i

    {

        if(isdigit(a[i]))

            m=m*10+a[i]-'0';

        else

            return-1;

    }

returnm;

 

}

=======================================================================================================================

4.字符串比较(字符指针)

编写一个函数比较两个字符串,参数是两个字符指针(要求显式定义,例如char*S,char*T),比较字符串S和T的大小。

如果S大于T,则返回1,如果S小于T则返回-1,如果S与T相等则返回0。

比较规则:

1.把两个字符串的相同位置上的字符进行比较,字符的大小比较以ASCII值为准

2.在比较中,如果字符串S的字符大于字符串T的字符的数量超过小于的数量,则认为S大于T,如果等于则S等于T,如果小于则S小于T

例如S为aaccdd,T为eebbbb,每个位置比较得到S前两个字母都小于T,但后4个字母都大于T,最终认为S大于T

3.如果两个字符串长度不同,则更长的字符串为大

在主函数中输入两个字符串,并调用该函数进行判断,在判断函数中必须使用函数参数的指针进行字符比较

输入

输入t表示有t个测试实例

接着每两行输入两个字符串

依次输入t个实例

输出

每行输出一个实例的比较结果

样例输入

3

aaccdd

eebbbb

AAbb++

aaEE*-

zznnkk

aaaaaaa

样例输出

1

0

-1

#include

#include

usingnamespacestd;

intbijiao(char*a,char*b);

intmain()

{

    chara[30],b[30];

    intt;

    cin>>t;

    while(t--)

    {

    cin>>a>>b;

    cout<

    }

}

 

intbijiao(char*a,char*b)

{

    inti,x=0,y=0,m,n;

    m=strlen(a);

    n=strlen(b);

    if(m>n)return1;

    elseif(m

    else

        for(i=0;*(a+i)!

='\0';i++)

        {

            if(*(a+i)>*(b+i))

                x++;

            else

                y++;

        }

        if(x>y)

            return1;

        elseif(x==y)

            return0;

        else

            return-1;

 

}

=======================================================================================================================

5.秘钥加密法(指针应用)

有一种方式是使用密钥进行加密的方法,就是对明文的每个字符使用密钥上对应的密码进行加密,最终得到密文

例如明文是abcde,密钥是234,那么加密方法就是a对应密钥的2,也就是a偏移2位转化为c;明文b对应密钥的3,就是b偏移3位转化为e,同理c偏移4位转化为g。

这时候密钥已经使用完,那么又重头开始使用。

因此明文的d对应密钥的2,转化为f,明文的e对应密钥的3转化为h。

所以明文abcde,密钥234,经过加密后得到密文是cegfh。

如果字母偏移的位数超过26个字母范围,则循环偏移,例如字母z偏移2位,就是转化为b,同理字母x偏移5位就是转化为c

要求:

使用三个指针p、q、s分别指向明文、密钥和密文,然后使用指针p和q来访问每个位置的字符,进行加密得到密文存储在指针s指向的位置。

除了变量定义和输入数据,其他过程都不能使用数组下标法,必须使用三个指针来访问明文、密钥和密文。

提示:

当指针q已经移动到密钥的末尾,但明文仍然没有结束,那么q就跳回密钥头

输入

第一行输入t表示有t个测试实例

第二行输入一个字符串,表示第一个实例的明文

第三行输入一个数字串,表示第一个实例的密钥

依次输入t个实例

输出

每行输出加密后的密文

样例输入

2

abcde

234

XenOS

56

样例输出

cegfh

CksUX

#include

#include

usingnamespacestd;

voidchange1(char*d,int*b);

voidchange2(char*a,int*b,char*c,intl);

intmain()

{

    chara[30],d[30],c[30],*p,*s;

    inti,l,b[30],*q,t;

    cin>>t;

    while(t--)

    {

    cin>>a>>d;

    change1(d,b);

    l=strlen(d);

    change2(a,b,c,l);

    for(i=0;*(c+i)!

='\0';i++)

        cout<

    cout<

    }

 

}

voidchange1(char*d,int*b)

{

    inti,l=strlen(d);

    for(i=0;i

        b[i]=d[i]-'0';

}

 

voidchange2(char*a,int*b,char*c,intl)

{

    inti,j;

    for(i=0;*(a+i)!

='\0';i++)

    {

        if(*(a+i)>='a'&&*(a+i)<='z')

            *(c+i)=((*(a+i)+*(b+i%l)-97)%26+97);

        else

            *(c+i)=((*(a+i)+*(b+i%l)-65)%26+65);

 

    }

    *(c+i)='\0';

 

}

=======================================================================================================================

6.谁是老二(结构体)

题目描述

定义一个结构体,包含年月日,表示一个学生的出生日期。

然后在一群学生的出生日期中找出谁的出生日期排行第二

要求:

出生日期的存储必须使用结构体,不能使用其他类型的数据结构。

要求程序全过程对出生日期的输入、访问、输出都必须使用结构。

输入

第一行输入t表示有t个出生日期

每行输入三个整数,分别表示年、月、日

依次输入t个实例

输出

输出排行第二老的出生日期,按照年-月-日的格式输出

样例输入

6

198056

198183

1980319

198053

1983912

19811123

样例输出

1980-5-3

#include

usingnamespacestd;

intsheng(inty,intm,intd);

structstudent

{

    intyear;

    intmonth;

    intday;

    intsheng;

};

 

intmain()

{

 

    studenta[10];

    studentb;

    intn,i,j; 

    cin>>n;

    for(i=0;i

    {

        cin>>a[i].year;

        cin>>a[i].month;

        cin>>a[i].day;

    }

    for(i=0;i

        for(j=0;j

            if(a[j].year>a[j+1].year)

            {b=a[j],a[j]=a[j+1],a[j+1]=b;}

 

    for(i=0;i<3;i++)

        a[i].sheng=sheng(a[i].year,a[i].month,a[i].day);

 

    for(i=0;i<2;i++)

        for(j=0;j<2-i;j++)

            if(a[j].sheng>a[j+1].sheng)

            {b=a[j],a[j]=a[j+1],a[j+1]=b;}

 

 

 

    cout<

    cout<

    cout<

 

 

     

 

}

intsheng(inty,intm,intd)

{

    intdis=0;

    switch(m)

    {

    case1:

dis+=31;

    case2:

        if(y%400==0||y%4==0&&y%100!

=0)

            dis+=29;

        else

            dis+=28;

    case3:

dis+=31;

    case4:

dis+=30;

    case5:

dis+=31;

    case6:

dis+=30;

    case7:

dis+=31;

    case8:

dis+=31;

    case9:

dis+=30;

    case10:

dis+=31;

    case11:

dis+=30;

    case12:

dis+=31;

    }

    returndis-d;

}

=======================================================================================================================

 

7.抄袭查找(结构体+指针+函数)

 

题目描述

已知一群学生的考试试卷,要求对试卷内容进行对比,查找是否有抄袭。

每张试卷包含:

学号(整数类型)、题目1答案(字符串类型)、题目2答案(字符串类型)、题目3答案(字符串类型)

要求:

使用结构体来存储试卷的信息。

定义一个函数,返回值为一个整数,参数是两个结构体指针,函数操作是比较两张试卷的每道题目的答案,如果相同题号的答案相似度超过90%,那么就认为有抄袭,函数返回抄袭题号,否则返回0。

相似度是指在同一题目中,两个答案的逐个位置上的字符两两比较,相同的数量大于等于任一个答案的长度的90%,就认为抄袭。

输入

第一行输入t表示有t张试卷

第二行输入第1张试卷的学生学号

第三行输入第1张试卷的题目1答案

第四行输入第1张试卷的题目2答案

第五行输入第1张试卷的题目3答案

每张试卷对应4行输入

依次输入t张试卷的数据

输出

在一行中,把发现抄袭的两个学号和题目号,数据之间用单个空格隔开

如果发现是题目1抄袭,题目号为1,以此类推

输出顺序按照输入的学号顺序进行输出

样例输入

5

2088150555

aabcdef11

ZZ887766dd

cc33447799ZZ

2088150333

abcdef00

AABBCCDDEE

ZZ668899cc

2088150111

AABBCCDDEE

ZZ668899cc

abcdef00

2088150222

AABBCFDDeE

ZZ889966dd

abcdef000

2088150444

aabcdef00

AABBCDDDEE

cc668899ZZ

样例输出

208815033320881504442

208815011120881502223

 

#include

#include

usingnamespacestd;

intxiao(inta,intb);

structpaper

{

    intno;

    chara[100];

    charb[100];

    charc[100];

};

intcompare(paper*p,paper*q);

 

 

intmain()

{

    paper*a;

    intn,i,j,k;

// freopen("c:

\\123.txt","r",stdin);

    cin>>n;

    a=newpaper[n];

    for(i=0;i

    {

        cin>>a[i].no;

        cin>>a[i].a;

        cin>>a[i].b;

        cin>>a[i].c;

    }

    for(i=0;i

        for(j=i+1;j

        {

            k=compare(&a[i],&a[j]);

            if(k!

=0)

                cout<

        }

 

 

}

intcompare(paper*p,paper*q)

{

    inti,l,m,x=0;

    l=strlen(p->a);

    m=strlen(q->a);

    l=xiao(l,m);

    for(i=0;i

        if(p->a[i]==q->a[i])

            x++;

    if(x>=l*9/10)

        return1;

    x=0;

    l=strlen(p->b);

    m=strlen(q->b);

    l=xiao(l,m);

    for(i=0;i

        if(p->b[i]==q->b[i])

            x++;

    if(x>=l*9/10)

        return2;

    x=0;

    l=strlen(p->c);

    m=strlen(q->c);

    l=xiao(l,m);

    for(i=0;i

        if(p->c[i]==q->c[i])

            x++;

    if(x>=l*9/10)

        return3;

    return0;

}

intxiao(inta,intb)

{

    if(a

        returna;

    else

        r

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1