No.6 数组和随机数

数组的定义和使用

格式:
数据类型 数组名[元素个数]
元素个数,代表该数组有多少个相同数据类型的变量
下标 用来表示数组中的某一个元素   例如 int arr[10]; arr[1]代表数组的第二个元素
数组下标是从0开始的 到数组元素个数-1
数组下标越界:超出了数组元素个数的下标,如果操作越界数据会出现程序错误
数组元素个数= sizeof(数组名)/sizeof(数组元素 | 数组数据类型)
 
数组初始化:
全局数组若不初始化,编译器将其初始化为零

 int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//定义一个数组,同时初始化所有成员变量

 int a[10] = { 1, 2, 3 };//初始化前三个成员,后面所有元素都设置为0

 int a[10] = { 0 };//所有的成员都设置为0

 int a[] = { 1, 2, 3, 4, 5 };//定义了一个数组,有5个成员

 数组名是一个地址的常量,代表数组中首元素的地址
求出数组地址:
printf("%p\n",数组名)
printf("%p\n",数组元素)
数组元素+1 (sizeof(数据类型))
数组名+1(sizeof(数组名))
 
 
 
冒泡法排序
 
#include <stdio.h>

int main()
{
    int a[] = {  1, -2, 3,- 4, 5, -6, 7, -8, -9, 10 };//定义一个数组,同时初始化所有成员变量

    int i = 0;
    int j = 0;
    int n = sizeof(a) / sizeof(a[0]);
    int tmp;

    //1、流程
    //2、试数
    for (i = 0; i < n-1; i++)
    {
        for (j = 0; j < n - i -1 ; j++)//内循环的目的是比较相邻的元素,把大的放到后面
        {
            if (a[j]  > a[j + 1])
            {
                tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }

    for (i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}
二维数组:
格式:数据类型 数组名【行个数】【列个数】
初始化方式:
       

//分段赋值    int a[3][4] = {{ 1, 2, 3, 4 },{ 5, 6, 7, 8, },{ 9, 10, 11, 12 }};

       int a[3][4] ={ { 1, 2, 3, 4 }, { 5, 6, 7, 8, }, { 9, 10, 11, 12 } };         

       //连续赋值

扫描二维码关注公众号,回复: 5832290 查看本文章

       int a[3][4] = { 1, 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 12  };

       //可以只给部分元素赋初值,未初始化则为0

       int a[3][4] = { 1, 2, 3, 4  };

       //所有的成员都设置为0

       int a[3][4] = {0};

       //[]中不定义元素个数,定义时必须初始化

       int a[][4] = { 1, 2, 3, 4, 5, 6, 7, 8};


 
求行数:sizeof(数组名)/sizeof(数组名[0]);
求列数:sizeof(数组名[0])/sizeoef(数组名[0][0])
 
二维数组首地址表示方式:
printf("%p\n",数组名);
 
 

字符数组与字符串区别

C语言中没有字符串这种数据类型,可以通过char的数组来替代

数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组

#include <stdio.h>

int main()
{
    char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' }; //普通字符数组
    printf("c1 = %s\n", c1); //乱码,因为没有’\0’结束符

    //以‘\0’(‘\0’就是数字0)结尾的字符数组是字符串
    char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0'}; 
    printf("c2 = %s\n", c2);

    //字符串处理以‘\0’(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
    char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
    printf("c3 = %s\n", c3);

    return 0;
}

字符串的初始化

#include <stdio.h>

// C语言没有字符串类型,通过字符数组模拟
// C语言字符串,以字符‘\0’, 数字0
int main()
{
    //不指定长度, 没有0结束符,有多少个元素就有多长
    char buf[] = { 'a', 'b', 'c' };
    printf("buf = %s\n", buf);    //乱码

    //指定长度,后面没有赋值的元素,自动补0
    char buf2[100] = { 'a', 'b', 'c' };
    printf("buf2 = %s\n", buf2);
    //所有元素赋值为0
    char buf3[100] = { 0 };
    char buf4[50] = { '1', 'a', 'b', '0', '7' };
    printf("buf4 = %s\n", buf4);

    //使用字符串初始化,编译器自动在后面补0,常用
    char buf5[] = "agjdslgjlsdjg";

    //'\0'后面最好不要连着数字,有可能几个数字连起来刚好是一个转义字符
    //'\ddd'八进制字义字符,'\xdd'十六进制转移字符
    // \012相当于\n
    char str[] = "\012abc";
    printf("str == %s\n", str);

    return 0;
}

字符串的输入输出

#include <stdio.h>

int main()
{
    char str[100];
    scanf("%s", str);    
printf("output:%s\n", str);

    return 0;
}

字符串追加:在一个字符串屁股后面再累加一个字符串

#include <stdio.h>

int main()
{
    char str1[] = "abcdef";
    char str2[] = "123456";
    char dst[100];

    int i = 0;
    while (str1[i] != 0)
    {
        dst[i] = str1[i];
        i++;
    }

    int j = 0;
    while (str2[j] != 0)
    {
        dst[i + j] = str2[j];
        j++;
    }
    dst[i + j] = 0; //字符串结束符

    printf("dst = %s\n", dst);

    return 0;
}

随机数

1、添加头文件 time.h  stdlib.h
2、添加随机数种子 srand((unsigend int )time(NULL));
3、生成随机数 rand()  % 
                                                                       一个小例子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int a;
    srand((unsigned)time(NULL));
    a = rand();
    printf("%d\n", a);
    return 0;
}

随机数reference:http://c.biancheng.net/view/2043.html

猜你喜欢

转载自www.cnblogs.com/yangchenyu2000/p/10680970.html