• C语言 百炼成钢12


    //题目34:对10个数进行排序
    
    #include<stdio.h>
    #include<stdlib.h>
    
    //分析:使用冒泡排序
    
    void main(){
        int arr[10] = { 9, 2, 4, 7, 5, 71, 45, 46, 7, 8 };
        //定义临时变量
        int temp = 0;
        //冒泡排序  双循环
        for (int i = 0; i < 10; i++)
        {
            for (int j = i+1; j <10; j++)
            {
                if (arr[j-1]>arr[j])
                {
                    temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
        for (int i = 0; i < 10; i++)
        {
            printf("%d--", arr[i]);
        }
        system("pause");
    }

    //题目35:求一个3*3矩阵对角线元素之和 
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    //分析:就是一个二维数组,求a[0][0]+a[1][1]+a[2][2]的和,
    
    void main(){
        int arr[3][3] = { 0 };
        //二维数组的遍历需要使用双for循环
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                scanf("%d", &arr[i][j]);
            }
        }
        int sun = 0;
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                //对角线上的元素满足i=j
                if (i==j)
                {
                    sun += arr[i][j];
                }
                printf("%5d",arr[i][j]);
            }
            printf("
    ");
        }
        printf("
    求一个3*3矩阵对角线元素之和是%d",sun);
        system("pause");
    }

    //题目36:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
    
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    //分析:for循环,遍历每个数,设定数组从大到小,一个个与输入的数进行比较,插入对应的空中
    //这里需要用到动态分配内存,因为数组的元素是固定的不可以随意插入
    
    void main(){
        int *p = (int *)calloc(sizeof(int), 10);
        printf("原来的数组
    ");
        //为这个数组赋值
        for (int i = 0; i < 10; i++)
        {
            *(p + i) = i*2;
            printf("%5d", *(p + i));
        }
        printf("
    ");
        //已经排好序的数组已经准备好了
        int num = 0;
        printf("请输入要插入的数字
    ");
        scanf("%d",&num);
        //再次用realloc函数分配内存
        //新的大小可大可小(但是要注意,如果新的大小小于原内存大小,可能会导致数据丢失,慎用!)
        int *p1 = realloc(p, sizeof(int)*11);
        //给最后一个元素赋值0
        *(p1 + 10) = 0;
        int temp = 0;
        //从前往后排序,存在着逻辑上的不方便。因为就算我找到了位置,后面的所有元素都要向后移动一位
        //那么有可能需要再写一个循环,来移动数组元素的位置
        /*for (int i = 0; i < 11; i++)
        {
            if (*(p1+i)>num)
            {
    
            }
        }*/
        //我决定从后往前排序,因为最后面一个位置本来就是空着的
        for (int i = 9; i>=0; i--)
        {
            if (*(p1 + i)<num)
            {
                *(p1 + i + 1) = num;
                //换完位置后退出循环
                break;
            }
            else{
                //将指针内的数据向后移动一位,此时p1+i这个位置已经空出来了
                *(p1 + i + 1) = *(p1 + i);
            }
        }
        printf("
    新排序的数组
    ");
        for (int i = 0; i < 11; i++)
        {
            printf("%5d",*(p1+i));
        }
        //释放堆内存
        free(p1);
    
        system("pause");
    }

  • 相关阅读:
    演讲-自我认识
    App Store--心酸的上线路,说说那些不可思议的被拒理由
    100个iOS开发/设计面试题汇总
    APP store 上架过程中碰到的那些坑&被拒的各种奇葩原因整理&审核指南中文版
    iOS图片攻略之:有3x自动生成2x 1x图片
    iOS多语言备选机制
    程序员如何提高自己》
    initWithFrame 和 initWithCoder
    黑客界大拿tombkeeper文章:怎么学好技术成为技术大拿(题目我自拟的)
    程序员常去的国外开发社区
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5153614.html
Copyright © 2020-2023  润新知