C语言指针作业

//8-29 第八章作业

//3.输入10个整数,将其中最小的数第一个数对换,把最大的数与最后一个数对换

//写3个函数:①输人10个数;②进行处理;③输出10个数。

//①输人10个数,

//方法一:数组索引

cpp 复制代码
void main()
{
    int arr[10];
    int *p = arr;
    //printf("请输入10个数:\n");
    for(int i = 0; i < 10; i++)
        scanf("%d", &arr[i]);//测试发现"%d"这个不能写成"%d ",会出现扫描数总是比打印数多1的情况
    for(int i = 0; i < 10; i++)
        printf("%d ", arr[i]);
    printf("接收完毕!");
}

//写成函数并调用:

cpp 复制代码
void Scan()
{
    int arr[10];
    int *p = arr;
    printf("please enter 10 numbers: ");
    for(int i = 0; i < 10; i++)
        scanf("%d", &arr[i]); 
}

int main()
{
    Scan();
}

//方法二:指针索引

void main()

{

int arr[10];

int *p = arr;

printf("please enter 10 numbers: ");

for(int i = 0; i < 10; i++)

scanf("%d", p++);

p = arr;//这句千万不要忘了,否则p将从第arr的十一个地址开始

for(int i = 0; i < 10; i++)

printf("%d ", *p++);

}

//写成函数:

int* Scan(int *arr)

{

int *p = arr;

printf("please enter 10 numbers: ");

for(int i = 0; i < 10; i++)

scanf("%d",p++);

//p = arr;

//for(int i = 0; i < 10; i++)

//printf("%d ",*p++);

return arr;

}

void main()

{

Scan();

}

//②进行处理,将其中最小的数第一个数对换,把最大的数与最后一个数对换。③输出10个数。

cpp 复制代码
int* Scan(int* arr)
{
    int *p = arr;
    printf("please enter 10 numbers: ");
    for(int i = 0; i < 10; i++)
        scanf("%d",p++);
    return arr;
}


void Show (int* arr)
{
    int *p = arr;
    for(int i = 0; i < 10; i++,p++)
    {
        printf("%d ",*p);
    }
    printf("\n");

}


int* Swap(int* arr)
{
    int tmp1 = arr[0];
    int Min = arr[0];
    
    int i = 0;
    for(i = 0; i < 10; i++)
    {
        if(Min > arr[i])
            Min = arr[i];
    }
    
    //printf("Min = %d \n",Min);

    //通过测试发现,不能通过下面三句的办法进行值的交换:因为,虽然p1定义的是Min的地址,但是,实际测出来并不是这个地址;而是另外存的一个地址
    //int *p1 = &Min;
    //arr[0] = Min;
    //*p1 = tmp1;

    //可以再次通过遍历来对MIN的下标进行搜索,然后对值进行交换,而不是通过指针进行交换
    int j = 0;
    for(j = 0; j < 10; j++)
    {
        if(arr[j] == Min)
        {
            arr[0] = Min;
            arr[j] = tmp1;
        }
    }

    int tmp2 = arr[9];
    int Max = arr[9];
    
    for(i = 0; i < 10; i++)
    {
        if(Max < arr[i])
            Max = arr[i];
    }

    for(j = 0; j < 10; j++)
    {
        if(arr[j] == Max)
        {
            arr[j] = tmp2;// 刚刚是arr[9] = Max;arr[j] = tmp2;  出来的结果是4 52 10 51 5 6 7 8 9 10,换了一下就对了。    
            arr[9] = Max;
        }
    }
   
    return arr;
}
    

int main()
{
    int arr[10];
    int *p = Scan(arr);

    int arr2[10]; 
    int* p2 = arr2;
    p2 = Swap(arr);
    Show(p2);
}
相关推荐
月光技术杂谈29 分钟前
实战:C驱动框架嵌入Rust模块的互操作机制与完整流程
c语言·开发语言·rust·ffi·跨语言·bindgen·互操作
合作小小程序员小小店1 小时前
游戏开发,桌面%小游戏,贪吃蛇%demo,基于vs2022,c语言,easyX,无数据库
c语言·开发语言
WongKyunban5 小时前
Linux中的线程是什么?
c语言
LaoZhangGong1236 小时前
以太网HTTP数据包格式分析
c语言·stm32·网络协议·http·tcp·arp
lingggggaaaa8 小时前
免杀对抗——C2远控篇&PowerShell&有无文件落地&C#参数调用&绕AMSI&ETW&去混淆特征
c语言·开发语言·笔记·学习·安全·microsoft·c#
口袋物联8 小时前
设计模式之建造者模式在 C 语言中的应用(含 Linux 内核实例)
c语言·设计模式·建造者模式
切糕师学AI8 小时前
位带操作(Bit-Banding)是什么?
c语言·arm·嵌入式开发·cortex-m·位带操作
学习路上_write9 小时前
嵌入式系统bringup指南:软硬件调试
c语言·单片机·嵌入式硬件
say_fall9 小时前
C语言编程实战:每日一题 - day7
c语言·开发语言
小龙报9 小时前
《算法通关指南数据结构和算法篇(2)--- 链表专题》
c语言·数据结构·c++·算法·链表·学习方法·visual studio