算法笔记数组
整型数组
定义格式:
数据类型 数组名【数组大小】
赋值:
int a[5] = {1,2,3,4,5};
初始化时第一个元素赋值为0全为0;
冒泡排序:
1 #include<stdio.h> 2 int main(){ 3 int temp; 4 int a[10] = {3,1,4,5,2}; 5 for(int i = 1;i<=4;i++){ 6 for(int j = 0;j<5-i;j++){ 7 if(a[j]>a[j+1]){ 8 temp = a[j]; 9 a[j] = a[j+1]; 10 a[j+1] = temp; 11 } 12 } 13 } 14 for(int i = 0; i<5;i++){ 15 printf("%d",a[i]); 16 } 17 18 return 0; 19 }
二维数组赋值:
int a[5][6] = {{3,1,2},{8,4},{},{1,2,3,4,5}};
中间的括号不能缺。
特别提醒:
数组大小较大(大概106级别),则需要将其定义在main函数之外。原因为内部申请局部变量来自系统栈,空间较小。全局变量来自静态存储区,允许空间较大。
memest 函数:
头文件<string.h> memset(a,0,sizeof(a)); //全为0;
字符数组
初始化:
char str[15] = {'a','b','c','d'};
char str[15] = "Hello World"; //注:只有初始化能这样赋值,其他时候不可以
输入输出:
- scanf/printf: char str[10]; scanf("%s",str);printf("%s",str);
- getchar/putchar: 可以吸收掉换行符
- gets/puts: gets(str);以换行符为结束符,自动在字符数组中添加‘\0’。puts(str)与printf()读到‘\0’输出。
特别提醒:不使用scanf("%s",...)或者gets()输入则必须手动在最后添‘\0’。否则用puts()或printf("%s",..)会出现乱码。
string.h 头文件:
- strlen(str); //获取长度
- strcmp(str1,str2); //按字典序比较大小,按小、相等、大分别返回负整数、0、正整数;
- strcpy(str1,str2); //copy str2 to str1, include '\0';
- strcat(str1,str2); //把str2接到str1的后面。
sscanf/sprintf(头文件为stdio.h):
sscanf(str,"%d",&n);
sprintf(str,"%d",n);
sscanf支持正则表达式。