zoukankan      html  css  js  c++  java
  • C-冒泡排序,选择排序,数组

    ——构造类型
    ->数组
         ->一维数组
         ->相同类型的一组数据
         ->类型修饰符--数组名—[数组的元素个数(必须是整型表达式或者是整型常量,不能是变量)] {初始化}
        int arr[3] = {1,2,3};
        arr[1] = 5;
        printf("%d",arr[1]);
         ->数组内存的值为变量
         ->使用数组的时候中括号内可以是变量
    ->sizeof()是一个运算符,不是一个函数,可以计算变量或者变量修饰符占了多少个字节,也可以对数组进行计算占的字节数
        int a[3] = {1,2,3};
        printf("%ld
    ",sizeof(double));
        printf("%ld
    ",sizeof(char));
        printf("%lu",sizeof(a));
         ->数组所占用的内存空间等于数组元素个数*单个元素所占的内存空间.
         
    ->用循环输出数组比较快
        short arr[] = {1,2,3};
        printf("%ld
    ",sizeof(arr));
        for (int i = 0; i < 3 ; i ++) {
            printf("%d	",arr[i]);
        }
         ->数组合并
        for (int i = 0; i < 100000000; i++) {
            int a[20] = {0}, b[20] = {0}, c[20] = {0};
            for (int i = 0; i < 20; i ++) {
                a[i] = arc4random() % 21 + 20;
                b[i] = arc4random() % 21 + 20;
                c[i] = a[i] + b[i];
                if (c[i] == 80) {
                    printf("
    a[%d](%d)+ b[%d](%d)= c[%d](%d)",i,a[i],i,b[i],i,c[i]);
                }
                //        printf("
    a[%d](%d)+ b[%d](%d)= c[%d](%d)",i,a[i],i,b[i],i,c[i]);
                
            }
        }
     ->循环输入值,赋值给相应的数组下标

        //错误问题:

        //数组是一个整体不能够参与运算

        //只能取每个元素逐一使用

     

    //随机一个具有20 整型数组  找出数组中最大值
        int a[20] = {0};
        int max = 0;
        for (int i = 0 ; i < 20; i++) {
            a[i] = arc4random() % 100;
            printf("%d	",a[i]);
            if (a[i] > max) {
                max = a[i];
            }
            //max = a[i] > max ? a[i]:max;
        }
        printf("
    最大数:%d",max);
    
        int a[20] = {0};
        int  min = arc4random() % 101;
        for (int  i = 0;  i < 20 ; i++) {
            a[i] = arc4random() % 101;
            if (min > a[i]) {
                min = a[i];
            }
            printf("%d ",a[i]);
        }
        printf("
    最小值:%d",min);
    
        int a[5] = {0};
        for (int i = 0 ; i < 5 ; i ++) {
            scanf("%d",&a[i]);
            
        }
        for (int i = 0 ; i < 5 ; i++) {
            printf("	%d",a[i]);
        }
    View Code
    ——算法
    ->数组排序
         ->冒泡排序
              ->若有n个元素,则外层循环走n - 1次
              ->内层循环需要, n - 1 - i 次
     
     1     int arry[5] = {0};
     2     for (int i = 0 ; i < 5; i ++) {
     3         arry[i] = arc4random()%21 + 50;
     4         printf("%d	",arry[i]);
     5     }
     6     printf("
    ");
     7     for (int i = 0 ; i < 4 ; i++) {
     8         for (int j = 0 ; j < 4 - i; j++) {
     9             if (arry[j] > arry[j + 1]) {
    10                 int temp = arry[j];
    11                 arry[j] = arry[j+1];
    12                 arry[j+1] = temp;
    13             }
    14         }
    15     }
    16     for (int i = 0; i < 5; i++) {
    17         printf("%d	",arry[i]);
    18     }
    View maopao
         ->选择排序
              ->外层循环控制比较趟数,每趟开始的时候假定开始的位置是最小值
              ->内层循环,从后面的一个值开始逐一比较,如果比最小值更小,更新,最小值的          位置.
              ->每趟结束之后如果最小值的位置和假定的最小值位置不一样则交换,一样则不用交换位置.
     
    (也就是每趟比较的是下标,交换的也是下标,保证每趟交换之后,下标是最小的,然后再与最初假定的最小下标相比,如果不相同  则交换值)
     
     1     int arry[20] = {0};
     2     for (int i = 0; i < 20 ; i++) {
     3         arry[i] = arc4random() % 100;
     4         printf("%d	",arry[i]);
     5     }
     6     for (int i = 0 ; i < 19 ; i++) {
     7         int minIndex = i;
     8         for (int j = i + 1 ; j < 20 ; j++) {
     9             if (arry[minIndex] > arry[j]) {
    10                 minIndex = j;
    11             }
    12 
    13         }
    14         if (minIndex != i) {
    15             int temp = arry[i];
    16             arry[i] = arry[minIndex];
    17             arry[minIndex] = temp;
    18         }
    19     }
    20     printf("
    ");
    21     for (int i = 0 ; i < 20; i++) {
    22         printf("%d	",arry[i]);
    23     }
    View Code
    —字符数组
         ->数组里也都是变量
         ->%s专门输出字符串
         -> 标志字符数组的结束
        //计算字符串数组中的空格数
        char a[100] = "aslkdj alskf   salkjd  slkf";
        int i = 0,sum = 0;
        while (a[i] != 0) {
            if (a[i] == ' ') {
                sum++;
            }
            i++;
        }
        printf("%d",sum);
    
        char str[100] = "";
        //scanf("%s",str );
        scanf("%[^
    ]",str);
    //    gets(str);
        printf("%s",str);
        return 0;
    View Code
    ->strlen()(无符号长整型)
     
    输出时并不考虑
    ->strcpy(后边拷到前边)
         ->最后一个会被拷过去
         ->被考入的字符串数组范围必须大于 要拷的字符串范围,不然会越界,虽然还会执行,但是有风险.
    ->strcat()
         ->两个字符串连到一起
         ->被拼入的字符串内存也要够大,不然会报错
    ->strcmp()
             ->逐一比较两个字符串相对应的字符的ASCII码值大小,返回值是整型
              ->如果两个字符串相应位置的ASCII码的差值不是零,则返回差值,也会是负数
    ->计算字符数组中空格数
    ->输入字符串
         ->scanf遇到空格默认是结束
         ->输出格式改为:”%[^ ]” 除了空格都要
     1     //字符数组
     2     //char arry[10] = {'m','a','o','m','a','o','h','h'};
     3 //    char arr[10] = {"maomaohehe"};
     4 //    printf("%c",arry[7]);
     5     // arry[3] = 0;
     6 //    char arry1[] = "hello";//系统会自动补一个
     7 ////    char arry3[] = {'h' , 'e', 'l', 'l', 'o'};
     8 //    char arry2[] = {'h' , 'e', 'l', 'l', 'o'};//这中方法系统不会补  如果用printf("%s
    ",arry2);输出  系统不会停止,除非遇到
     9 //    printf("%s
    ",arry2);
    10 
    11     
    12     //printf("%s",arry);
    13 //    
    14 //    char string[] = "i love iOS!";
    15 //    unsigned long length = strlen(string);
    16 //    printf("%lu",length);
    17 
    18     
    19 //    char string[] = "iloveiOS";
    20 //    int i = 0;
    21 //    while (string[i] != 0) {
    22 //        i++;
    23 //    }
    24 //    printf("%d",i);
    25     
    26 //    char arry1[20] = "aaaaaaaa";
    27 //    char arry2[10] = "iphone";
    28 ////    strcpy(arry1, arry2);
    29 ////    printf("%s",arry1);
    30 ////    strcat(arry1, arry2);
    31 //
    32 //    int result = strcmp(arry1, arry2);
    33 //    //printf("%s",arry1);
    34 //    printf("%d",result);
    View Code
  • 相关阅读:
    各类免费资料及书籍索引大全(珍藏版)
    转—如何写一篇好的技术博客
    如何写技术博客
    Spring + Spring MVC + Mybatis 框架整合
    Httpclient 4.5.2 请求http、https和proxy
    HttpClient4.5.2 连接池原理及注意事项
    php加密数字字符串,使用凯撒密码原理
    php 阿里云视频点播事件回调post获取不到参数
    Nginx代理后服务端使用remote_addr获取真实IP
    记录:mac的浏览器访问任何域名、网址都跳转到本地127.0.0.1或固定网址
  • 原文地址:https://www.cnblogs.com/IT-jqm/p/C_testDay02.html
Copyright © 2011-2022 走看看