• [c/c++] programming之路(14)、数组+冒泡和选择排序


    一、数组的基本知识

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main0(){
     5     int a[5]={1,2,3,4,5};//数组在内存里是连续排列的
     6     int i;//VS2012版本,变量的声明要放在最前面(所以建议大家使用VS2013及之后的版本)
     7     printf("%d
    ",sizeof(a));//求内存占多少
     8     printf("%d
    ",sizeof(a)/sizeof(int));//求数组有多少个元素
     9     printf("%x
    ",a);
    10     
    11     for (i = 0; i < 5; i++)//java语言中的a.length在这儿行不通,只能sizeof(a)/sizeof(int)
    12     {
    13         printf("a[%d]=%d  &a[%d]=%x
    ",i,a[i],i,&a[i]);
    14     }
    15 
    16     system("pause");
    17 }
    18 
    19 void main1(){
    20     int i;
    21     int a[10];//数组越界不报错
    22     //因为数组外部的内存空间,不确定是否有权限,
    23     //如果越界访问,程序会崩溃
    24     for (i = 0; i < 1600; i++)
    25     {
    26         a[i]=i+1;
    27     }
    28     getchar();
    29 }

    二、const和define的区别(const代码不可更改,可在内存里更改;define放在常量区,无论如何无法修改)

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define  N 20
     4 
     5 void main(){
     6     int a[N]; //只有define可以
     7     //printf("%d", &N);     报错,编译器放在常量区,没有地址,无从修改
     8 
     9     const int num = 10;     //可变的常量,可以强制去掉常量的属性
    10     //num = 12;        const限定代码不能修改,在内存有实体,是可以变的数
    11     printf("%x", &num);
    12     //int b[num];//这样不可以
    13 
    14     system("pause");
    15 }

    三、数组初始化

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main(){
     5     //int num[10]={1,2,3,4,5,6,7,8,9,10};
     6     //int num[10]={1,2,3,4,5,6,7,8};//不足部分,填充为0
     7     //double num[10]={1,2,3,4};
     8     //数组元素大小已经确定,下标可以省略
     9     //double  num[] = { 1, 2 };
    10     //double  num[] = {};//无法指定数组的大小,无法分配内存
    11     double num[10] = { 0 };
    12     printf("%x",&num);
    13     getchar();
    14 }

    四、数组操作说明

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main4(){
     5     int a[3]={1,2,3};
     6     int b[3];
     7     int i;
     8     //b=a;    数组不能进行赋值,数组名是一个地址常量
     9     printf("%x
    ", a);
    10     for (i = 0; i < 3; i++)
    11     {
    12         scanf("%d", &a[i]);
    13         printf("%d
    ", a[i]);
    14     }
    15     system("pause");
    16 }
    17 
    18 void main5(){
    19     char str[5] = { '1', 'a', '3', 'm', '' };//以'' 结束才不会出现“烫烫”
    20     //char strm[15] = { 'c', 'a', 'l', 'c' };
    21     char strm[5] = { 'c', 'a', 'l', 'c' ,''};
    22     char strn[13] = "notepad";//双引号会自动加上/0
    23     scanf("%s", strn); //只有字符串才能整体输入输出
    24     printf("%s", str);
    25     system(strm);
    26     system(strn);
    27     system("pause");
    28 }

    五、数组访问

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main(){
     5     int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     6     int i;
     7     for (i = 0; i < 10; i++)
     8     {
     9         printf("%d,%d,%x,%x
    ", num[i],*(num+i),&num[i],num+i);
    10         //num[i]与*(num+i)等价     &num[i],num+i等价
    11     }
    12     printf("
    逆序
    ");
    13     for (i = 9; i >= 0; i--)
    14     {
    15         printf("%d,%x
    ", *(num + i), num + i);
    16     }
    17 
    18     getchar();
    19 }

    六、斐波那契数列

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 //F(n)=F(n-1)+F(n-2)
     4 void main(){
     5     //int a[50];    int最后会越界
     6     double a[50];
     7     int i;
     8     a[0]=1.0;
     9     a[1]=1.0;
    10     for (i = 2; i < 50; i++)
    11     {
    12         a[i]=a[i-1]+a[i-2];
    13         printf("%f
    ",a[i]);
    14     }
    15     getchar();
    16 }

     七、选择排序法

    求最大值

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<time.h>//时间随机数
     4 
     5 void main(){
     6     int num[10];
     7     time_t tms;//时间的数据类型
     8     int i,X;
     9     srand((unsigned int)time(&tms));//设置随机数种子
    10     for (i = 0; i < 10; i++)
    11     {
    12         num[i]=100+rand()%100;
    13         printf("%d
    ",num[i]);
    14     }
    15 
    16     X = 0;//0是下标,我先假定0是最大的数
    17     for (i = 1; i < 10; i++)
    18     {
    19         if (num[X] < num[i])
    20         {
    21             X = i;
    22         }
    23     }
    24     printf("max=%d
    ",num[X]);
    25     getchar();
    26 }

         设置了随机数种子,每次的值都不一样

    升序排列

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<time.h>//时间随机数
     4 
     5 void main(){
     6     int num[10];
     7     time_t tms;//时间的数据类型
     8     int i,j,tmp;
     9     srand((unsigned int)time(&tms));//设置随机数种子
    10     for (i = 0; i < 10; i++)
    11     {
    12         num[i]=100+rand()%100;
    13         printf("%d
    ",num[i]);
    14     }
    15 
    16     for (i = 0; i < 10-1; i++)//注意是 i<数组.length-1
    17     {
    18         for (j = i+1; j < 10; j++)//注意是 j=i+1
    19         {
    20             if(num[i]>num[j]){//升序
    21                 tmp=num[i];
    22                 num[i]=num[j];
    23                 num[j]=tmp;
    24             }
    25         }
    26     }
    27     printf("
    排序以后
    ");
    28     for (i = 0; i < 10; i++)
    29     {
    30         printf("%d
    ", num[i]);
    31     }
    32     getchar();
    33 }

    八、冒泡排序法(效率不如选择)

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<time.h>//时间随机数
     4 
     5 void main(){
     6     int num[10];
     7     time_t tms;//时间的数据类型
     8     int i,j,tmp;
     9     srand((unsigned int)time(&tms));//设置随机数种子
    10     for (i = 0; i < 10; i++)
    11     {
    12         num[i]=rand()%100;
    13         printf("%d	",num[i]);
    14     }
    15   //开始冒泡排序
    16     for (i = 0; i < 10-1; i++)
    17     {
    18         for (j = 0; j < 10-1-i; j++)
    19         {
    20             if(num[j]>num[j+1]){
    21                 tmp=num[j];
    22                 num[j]=num[j+1];
    23                 num[j+1]=tmp;
    24             }
    25         }
    26     }
    27     printf("
    排序以后
    ");
    28     for (i = 0; i < 10; i++)
    29     {
    30         printf("%d	", num[i]);
    31     }
    32     getchar();
    33 }

    九、数组与函数

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void go(int a[10]){//数组作为参数的时候,是传递地址
     5     int b[20];
     6     printf("go=%d
    ",sizeof(a));
     7     printf("%d",sizeof(b));//这里的数组b非参数,即实际大小
     8 }
     9 
    10 void main(){
    11     int a[10];
    12     printf("%d
    ",sizeof(a));
    13     go(a);
    14     getchar();
    15 }

  • 相关阅读:
    【大胃王】2013暴食女王巅峰战(安吉拉x三宅x正司x木下)熟肉+高能
    破解 CrackMe#1 [UBC] by bRaINbuSY
    栈实现符号平衡检测
    简单的栈
    数独算法
    win32绘图基础
    Win32基础知识整理
    Win32最简单的程序
    初学layer
    android 虚线
  • 原文地址:https://www.cnblogs.com/little-monkey/p/7390447.html
Copyright © 2020-2023  润新知