Day6
C 语言编程基础
数组(Array)
字符数组(Character Array)
字符串(string)处理相关的标准 C 库函数:
- strlen:string length,求字符串长度,即字符个数(不包括’\0’字符)
- strcpy:string copy,字符串拷贝
- strncpy:和 strcpy 函数功能一样,只是拷贝前面的 n 个字符。注意:‘\0’ 需要自己处理
- strcat:string catenete,字符串连接。注意:‘\0’ 需要自己处理
- strncat:和 strcat 函数功能一样,只是连接前面的 n 个字符。注意:‘\0’ 需要自己处理
- strcmp:string compare,字符串比较,如果两个字符串相同,返回值为 0,否则返回值非零
- strncmp:和 strcmp 函数功能一样,只是比较前面的 n 个字符。
字符串处理函数(str开头的)的声明都是在 string.h 头文件中
常见面试问题:
- strlen 和 sizeof 的区别?
- strlen 是标准 C 库函数,sizeof 不是函数,是关键字。strlen 函数计算的是不包括’\0’字符的字符串长度,而 sizeof 计算的是整个数据占内存空间的总字节数。
函数原型
//#include <stdio.h>
#include <string.h>
// 声明 printf 函数
int printf(const char*, ...);
int main()
{
char s1[] = "abc\nd e\rf123";
char s2[] = "abc\nd e\rf1\023";
char s3[33] = "abc\nd e\rf1\023";
char s4[5] = {'a',53,'\n','\0'};
char s5[5] = {'a',53,'\n','\r'};
printf("s1: %lu %lu\n",strlen(s1),sizeof(s1));
return 0;
}
两种很容易弄错的转义字符:
- \x 后面跟上 1 - 2 位十六进制数字,它表示的是 ASCII 码值为这个十六进制数值的字符
- \ 后面跟上 1 - 3 位八进制数字,它表示的是 ASCII 码值为这个八进制数值的字符
数组排序
常用数组排序算法:
- 冒泡排序算法
static void sort1(void)
{
int i,j,tmp = 0;
int num[N] = {12,32,4,123,45,1,4,78,12,45};
for(int i = 0;i<N;i++)
{
printf("%d ",num[i]);
}
printf("\n");
for(int i = 0;i<N-1;i++)
{
for(int j = 0;j<N-1-i;j++)
{
if(num[j] > num[j+1])
{
tmp = num[j+1];
num[j+1] = num[j];
num[j] = tmp;
}
}
}
for(int i = 0;i<N;i++)
{
printf("%d ",num[i]);
}
printf("\n");
}
- 选择排序算法
static void sort2(void)
{
int i,j,k,tmp=0;
int num[N] = {12,2,45,2,546,12,345,68,90,100};
for(int i = 0;i<sizeof(num)/sizeof(num[0]);i++)
{
printf("%d ",num[i]);
}
printf("\n");
for(int i = 0;i<N-1;i++)
{
k = i;
for(int j = i+1;j<N;j++)
{
if(num[j] < num[k])
{
k = j;
}
}
if(i != k)
{
tmp = num[k];
num[k] = num[i];
num[i] = tmp;
}
}
for(int i = 0;i<N;i++)
{
printf("%d ",num[i]);
}
printf("\n");
}
- 插入排序算法
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i]; // 待插入元素
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j]; // 后移元素
j--;
}
arr[j + 1] = key; // 插入
}
}
- 快速排序算法
算法(Algorithm):解决问题的方法
升序和降序
二维数组和多维数组
一维数组:单个数据元素构成的数组。
二维数组:一维数组构成的数组,即二维数组的每个数据元素是一个一维数组。
三维数组:二维数组构成的数组。
更多维数组以此类推。
二维数组在逻辑上可以看成一个由若干行和列数据构成的表格,二维数组在内存中是按行存储的。
定义二维数组的语法规则:
数据类型关键字 数组名[一维长度][二维长度];
数据类型关键字 数组名[一维长度][二维长度] = {初值1,初值2,初值3,初值4,...};
数据类型关键字 数组名[一维长度][二维长度] = {{初值1,初值2,初值3,...},{初值1,初值2,初值3,...}};
// 在定义二维数组是如果进行了初始化(上面两种写法),那么可以省略不写一维长度,但二维长度必须写
访问二维数组的元素
二维数组的遍历可以通过两层循环实现
矩阵(Matrix):多行多列数据,可以使用二维数组表示
二维字符数组
二维字符数组可以用来表示多个字符串,即字符串数组
指针(Pointer)
指针也是一种数据类型,它用来表示内存地址
指针就是内存地址,内存地址就是内存单元的编号(从零开始的一个整数而已)
指针是 C 语言的灵魂!
CPU:中央处理器,由运算器和控制器构成,具有运算和控制两大功能。咱们写的程序就是 CPU 负责执行的,通过程序告诉 CPU 应该做什么事情。
存储器:存储数据,分为内部存储器(简称内存)和外部存储器(简称外存)。
-
内存:读写速度极快,但容量小,价格高,掉电后数据会丢失(即易失性存储器),内存和 CPU 直接交互。
-
外存:容量大,价格低,掉电后数据不会丢失(即非易失性存储器),但读写速度较慢。比如:硬盘、U 盘、光盘、软盘、Flash 等
在程序运行时,变量、常量、表达式的中间运算结果,以及指令都是存放在内存中,以便 CPU 使用。
文件通常存放在外存中。




907

被折叠的 条评论
为什么被折叠?



