当前位置: 首页 > article >正文

C语言指针作业

//8-29 第八章作业
//3.输入10个整数,将其中最小的数第一个数对换,把最大的数与最后一个数对换
//写3个函数:①输人10个数;②进行处理;③输出10个数。

//①输人10个数,
//方法一:数组索引

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("接收完毕!");
}

//写成函数并调用:

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个数。

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");

}

//测试的数组为 53 52 4 51 5 6 7 8 9 10
//通过数组下标来改值
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];
    }
	//再次通过遍历来对Max的下标进行搜索,然后对值进行交换,而不是通过指针进行交换
    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* Swap(int* arr)
{
	int buffer[10] = {};
	int *p = &buffer;
	for(int i = 0; i < 10; i++)
	{
	    if(buffer[i] < *p)
	        p = &buffer +i;  
	}

    int tmp = buffer[0];
    buffer[0] = *p;
    *p = tmp;
	
	int *p2 = &buffer[9];
	for(int j = 0; j < 10; i++)
	{
	    if(buffer[j] > *p2)
	        p2 = &buffer +j;  
	}
}

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

    int arr2[10]; 
    int* p2 = arr2;
    p2 = Swap(arr);
    Show(p2);
}

http://www.kler.cn/a/409256.html

相关文章:

  • Python3 爬虫 Scrapy的安装
  • UG NX二次开发(C++)-UIStyler-指定平面的对象和参数获取
  • uni-app 界面TabBar中间大图标设置的两种方法
  • C++:用红黑树封装map与set-1
  • JDBC 详解:从基础到高级完全指南
  • Java爬虫:获取商品详情的实践之旅
  • 区块链应用到银行的优势
  • 如何调试 chrome 崩溃日志(MAC)
  • [译]Elasticsearch Sequence ID实现思路及用途
  • 快速了解RDD的创建与处理过程
  • Jedis存储一个-以String的形式的对象到Redis
  • 【Go】-go中的锁机制
  • 【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
  • MySQL中的ROW_NUMBER窗口函数简单了解下
  • 【网络安全设备系列】3、IPS(入侵防御系统)
  • OpenCV4.9 dnn人脸识别
  • Linux的开发工具(三)
  • 设计模式之 命令模式
  • C++不完整类型(Incomplete Type)的检测与避免
  • Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器
  • 浅谈TLP184小型平面光耦
  • docker 卸载与安装
  • 生成对抗网络模拟缺失数据,辅助PAMAP2数据集仿真实验
  • HTML 表单实战:从创建到验证
  • C#里怎么样实现自己的类满足for-each循环访问?
  • 计算机网络socket编程(2)_UDP网络编程实现网络字典