首页 > 其他分享 >实验题集三:指针和引用 所有题

实验题集三:指针和引用 所有题

时间:2024-04-05 15:04:48浏览次数:17  
标签:输出 repeat int 样例 题集 引用 字符串 输入 指针

R7-1 冒泡

鸿鸿哥最近学习了指针,感觉这个知识点有点难以理解,于是想要通过编程实践来掌握它。鸿鸿哥以前学习数组(第7章)的时候已经掌握了冒泡排序的一般写法,现在他想用指针来实现排序的功能函数。但是他遇到了困难,你能帮帮他吗?

指针实现冒泡排序函数,函数名统一用void bubbleSort(int *p,int c)。
具体方法自己实现。

输入格式:

一组输入,第一行是待排数据个数n, 第二行是数据的具体值。

输出格式:

输出排序后的数,两个数之间以空格间开,最后一个数字末尾有空格

输入样例:

在这里给出一组输入。例如:

5
503 87 512 61 908

输出样例:

在这里给出相应的输出。例如:

61 87 503 512 908 

#include <iostream>
using namespace std;
void bubbleSort(int *p,int c)
{
    for(int i=0;i<c-1;i++)
    {
        for(int j=0;j<c-1-i;j++)
        {
            if(*(p+j)>*(p+j+1))
            {
                int t;
                t=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=t;
                
            }
        }
    }
}
int main()
{
    int *p,n,a[n];
    p=a;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    bubbleSort(p,n);
    for(int j=0;j<n;j++)
    {
        cout<<*(p+j)<<" ";
    }
    return 0;
}

R7-2 在数组中查找指定元素

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入一个正整数 n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,如果找到则输出相应元素的最小下标,否则输出"Not found"。

要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数形参 list 的类型是整型指针,形参n和x的类型是int,函数的类型是int。

输出格式语句:printf("index = %d\n", );

输入输出示例:括号内为说明,无需输入输出

输入样例:

2              (repeat=2) 
3              (n=3)
1 2 -6		
2              (x=2)
5              (n=5)
1 2 2 5 4
0              (x=0)

输出样例:

index = 1
Not found
#include <iostream>
using namespace std;
int search(int *list,int n,int x)
{
    for(int i=0;i<n;i++)
    {
        if(*(list+i)==x)
        {
            return i;
        }
    }
    return -1;
}
int main()
{
    int repeat,n,x,a[n];
    int *p=a;
    cin>>repeat;
    while(repeat--)
    {
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        cin>>x;
        int b;
        b=search(p,n,x);
        if(b==-1)
        {
            cout<<"Not found"<<endl;
        }
        else
        {
            printf("index = %d\n",b);
        }
    }
    return 0;
}

R7-3 使用函数删除字符串中的字符

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。

要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。

输入输出示例:括号内为说明,无需输入输出

输入样例:

3               (repeat=3)
happy new year  (字符串"happy new year")
a               (待删除的字符'a')
bee             (字符串"bee")
e               (待删除的字符'e')
111211          (字符串"111211")
1               (待删除的字符'1')

输出样例:

result: hppy new yer    (字符串"happy new year"中的字符'a'都被删除)
result: b               (字符串"bee"中的字符'e'都被删除)
result: 2               (字符串"111211"中的字符'1'都被删除)

#include <iostream>
#include <string>
using namespace std;
void delchar(string &str,char c)
{
    while(str.find(c)!=-1)
    {
        str=str.erase(str.find(c),1);
    }
}
int main()
{
    int repeat;
    string str;
    char c;
    cin>>repeat;
    cin.get();
    while(repeat--)
    {
        getline(cin,str);
        cin>>c;
        delchar(str,c);
        cout<<"result: "<<str<<endl;
    }
    return 0;
}

R7-4 使用函数实现字符串复制

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,再输出字符串 s。

要求定义并调用函数 strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,函数形参s和t的类型是字符指针,形参m的类型是int,函数类型是void。

输入输出示例:括号内为说明,无需输入输出

输入样例:

3              (repeat=3)
happy new year
7
happy
1
new
4

输出样例:

new year        (从"happy new year"第7个字符开始组成的新字符串为"new year")
happy           (从"happy"第1个字符开始组成的新字符串为"happy")
error input     ("new"的长度小于4)
#include <iostream>
using namespace std;
#include <string>
void strmcpy(string &s,const string &t,int m)
{
    if(m>=0&&m<=t.length())
    {
        s=t.substr(m-1,t.length()-m+1);
    }
    else{
        s="";
    }
}
int main()
{
    int repeat,m;
    cin>>repeat;
    string t,s;
    while(repeat--)
    {        
        cin.get();
        getline(cin,t);        
        cin>>m;
        strmcpy(s,t,m);
        if(s=="") cout<<"error input"<<endl;
        else cout<<s<<endl;
    }
    return 0;
}

R7-5 找最大的字符串

输入5个字符串,输出其中最大的字符串。

输出格式: printf("Max is: %s\n", );

输入输出示例:括号内为说明,无需输入输出

输入样例:

peach 
pear
melon
orange
berry

输出样例:

Max is: pear
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char a[100];
    char Max[100]={0};
    for(int i=0;i<5;i++)
    {
        scanf("%s",a);
        if(strcmp(a,Max)>0)
        {
            strcpy(Max,a);
        }
    }
    printf("Max is: %s\n",Max);
    return 0;
}

R7-6 组织星期信息

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3) :

3
Tuesday
Wednesday
year

输出样例:

3
4
-1

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int repeat;
    const string a[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    string b[10];
    cin>>repeat;
    cin.get();
    for(int i=0;i<repeat;i++)
    {
        int A=-1;
        cin>>b[i];
        for(int j=0;j<7;j++)
        {
            if(b[i]==a[j])
            {
                A=j+1;
                break;
            }
            
        }
        cout<<A<<endl;
        
    }
    return 0;
}

R7-7 查找奥运五环色的位置

奥运五环的5种颜色的英文单词按一定顺序排列{"red", "blue", "yellow", "green", "black" },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。

输入格式:

输入一个代表颜色的单词。

输出格式:

输出单词对应的位置值,如果未找到,输出Not Found。

输入样例:

yellow

输出样例:

3

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    const char *a[5]={"red","blue","yellow","green","black"};
    char c[20];
    cin>>c;
    int i;
    for( i=0;i<5;i++)
    {
        if(strcmp(c,a[i])==0)
        {
            cout<<i+1<<endl;
            break;
        }
    }
        if(i==5)
        {
            cout<<"Not Found";
        }
    return 0;
}

R7-8 字符串的连接

本题要求编写程序,使用指针方式实现两个字符串的连接(不能使用strcat函数),并将连接后的字符串输出。

输入格式:

输入一行以回车结束的非空字符串(不超过40个字符),再输入一行以回车结束的非空字符串(不超过40个字符)。

输出格式:

一行输出俩字符串连接后新的字符串。

输入样例:

Beijing_
China

输出样例:

Beijing_China

#include <iostream>
#include <string>
using namespace std;
int main()
{
    char a[41],b[41];
    scanf("%s%s",a,b);
    printf("%s%s",a,b);
    return 0;
}

R7-9 实数排序

本题要求编写程序,输入n个实数,使用指针引用的方式将它们按从大到小的顺序排列。

输入格式:

输入第一行给出一个正整数n(2≤n≤10),输入第二行给出n个实数,其间以空格分隔。

输出格式:

输出从大到小排好序的n个数(保留2位小数),每个数之间空一格,行末没有空格。

输入样例:

在这里给出一组输入。例如:

5
3.2 5.4 6.12 2.51 4.23

输出样例:

在这里给出相应的输出。例如:

6.12 5.40 4.23 3.20 2.51

#include <iostream>
#include <iomanip>
using namespace std;
void bigtosmall (double *p,int c)
{
     for(int i=0;i<c-1;i++)
     {
         for(int j=0;j<c-1-i;j++)
         {
             if(*(p+j)<*(p+j+1))
             {
                 double t;
                 t=*(p+j);
                 *(p+j)=*(p+j+1);
                 *(p+j+1)=t;
             }
         }
     }
}
int main()
{
    int n;
    double a[10];
    cin>>n;
    for(int i=0;i<n;i++)
    {
         cin>>a[i];
    }
    bigtosmall(a,n);
    for(int i=0;i<n;i++)
    {
        cout<<fixed<<setprecision(2)<<*(a+i);
        if(i<n-1)
        {
            cout<<" ";
        }
    }
    cout<<endl;
    return 0;
} 

标签:输出,repeat,int,样例,题集,引用,字符串,输入,指针
From: https://blog.csdn.net/2302_81013820/article/details/137400202

相关文章

  • LeetCode-142. 环形链表 II【哈希表 链表 双指针】
    LeetCode-142.环形链表II【哈希表链表双指针】题目描述:解题思路一:快慢指针判断是否有环见解题思路二:set()解题思路三:0题目描述:给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next......
  • 深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针
    1、数组名理解首先来看一段代码:intmain(){ intarr[10]={1,2,3,4,5,6,7,8,9,10}; printf("%d\n",sizeof(arr)); return0;}输出的结果是:40,如果arr是数组首元素的地址,那输出应该是4/8才对。其实数组名就是数组首元素(第一个元素)的地址是对的,但是有两个例外:sizeof......
  • 我的C++奇迹之旅:值和引用的本质效率与性能比较
    文章目录......
  • 双指针做题总结2(76. 最小覆盖子串)
    76.最小覆盖子串 思路:双指针滑动窗口问题,指针的移动条件是双指针的核心。 反思:1、考虑右指针已经移动到最右端,无法继续移动的情况。(flag1的思路)2、用map.empty()是要千万注意:map[key]相当于往map中添加元素 代码:classSolution{public:unordered_map<char,i......
  • 1.2.4 常量引用参数
        c++还提供了另外一种参数传递模式——常量引用(constreference)。这种模式指明的引用参数不能被函数修改。例如在程序1-4(见1.2.3)中,a、b和c的值没有变化,因此我们可以重写这段代码,如程序1-5所示。template<classT>Tabc(constT&a,constT&b,constT&c){r......
  • luoguP1102-双指针
    题目链接:P1102A-B数对-洛谷|计算机科学教育新生态(luogu.com.cn)利用单调性求解双指针解法:排序构造出区间单调,则若存在目标值B,B在序列中一定为连续区间,此时通过双指针l和r,此时维护一段区间:有S[L]大于S[I]-C,S[R]大于等于S[I]-C,此时我们枚举每一位,若存在A......
  • 代码随想录DAY1 | 二分,双指针移除元素
    代码随想录DAY1|二分,双指针移除元素题目描述给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且......
  • 攻防世界Misc新手习题集
    攻防世界Misc新手习题集日期:2024.04.01from故人叹、1.Ditf考察点:png图片改宽高、流量分析附件给到一张图片,拖入010分析,发现底部有CRC报错信息,怀疑原始宽高被更改。尝试更改高度,获得一段编码,可能为某个压缩包的密码。StRe1izia将图片进行foremost分离,发现一个加密压......
  • C语言——深入理解指针
    1.数组名的理解实数组名就是数组⾸元素(第⼀个元素)的地址,但是有两个例外:•sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节•&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的......
  • 37.深⼊理解指针(2)
    1.数组名的理解intarr[10]={1,2,3,4,5,6,7,8,9,10};int*p=&arr[0];这⾥我们使⽤&arr[0]的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且是数组⾸元素的地址,我们来做个测试。#include<stdio.h>intmain(){intarr[10]={1,2,3,4,5,6,......