No.6 数组和随机数
数组的定义和使用
格式: 数据类型 数组名[元素个数] 元素个数,代表该数组有多少个相同数据类型的变量 下标 用来表示数组中的某一个元素 例如 int arr[10]; arr[1]代表数组的第二个元素 数组下标是从0开始的 到数组元素个数-1 数组下标越界:超出了数组元素个数的下标,如果操作越界数据会出现程序错误 数组元素个数= sizeof(数组名)/sizeof(数组元素 | 数组数据类型) 数组初始化: 全局数组若不初始化,编译器将其初始化为零int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//定义一个数组,同时初始化所有成员变量
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。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 } };
//连续赋值
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
