数组
/* 1.数组长度:整数,常量表达式,自动获取长度 ---但是不可以用小数 ---也不可以是变量,数组在定义时系统会根据数组类型和大小为其分配内存空间 ---对于这种情况的初始化操作,可以省略不写数组长度,它会自动识别:int c[] = {30, 31, 32, 33}; 2.数组内存是连续的 */ int main() { int a[5] = {1,2,3}; // 数组的初始化,左边代码只初始化了3个,剩下的2个使用默认值0 int b[4]; // 由“数组名[下标]”组成,下标从零开始 b[0] = 10; b[1] = 20; b[2] = 30; b[3] = 40; int num[100]; // 遍历赋值 for (int i = 0; i < 100; i++) { num[i] = i; } // 遍历读取 for (int i = 0; i < 100; i++) { if (i % 10 == 0) // 每10个数就换一次行 printf("\n"); printf("%-3d", num[i]); // 左对齐,共3位,“数据的位”不足就用空格补位 } return 0; } /* 二维数组的定义形式: 类型 数组名[行数][列数]; char a[5][3]; 二维数组的初始化 按行初始化 int arr[2][3] = { {0, 1}, // 初始化过程中,遇到没有值的,就默认为0(下面同理) {10, 11, 12} }; 顺序初始化 int arr[2][3] = {0, 1, 2, 10, 11, 12}; int arr[][3] = { // 行可以省略,列不能省略!! {0, 1}, {10, 11, 12} }; ____________________________________________________________________________ 假如你省略行数,但是确定了列数, 计算机会根据你的列数的数值以及你初始化时给的数据,自动确定行数, 因此行数可以省略。 但是如果给了行数但没有确定列数, 对于你初始化的数据,计算机不知道怎么划分,是平均分呢?还是其他方式分呢? 这是没有规定的,这样子会出现错误。 ____________________________________________________________________________ 1、可以同时指定第一维和第二维的长度 2、可以只指定第二维的长度 3、不可以只指定第一维的长度 4、不可以第一维和第二维的长度都不指定 综上所述,至少指定第二维的长度 ____________________________________________________________________________ */ /* 字符数组 1.功能类别即可,例如: char a[4] = { 'g', 'o', 'o', 'd' }; char b[] = { 'h', 'e', 'l', 'l', 'o' }; 2.由于C语言没有专门的字符串类型,所以我们把字符数组当成字符串类型去使用: char str[30] = { "Hello World" }; char str[30] = "Hello World"; // 这种形式更加简洁,实际开发中常用 3.字符串结束标志:'\0' 例如:"hello" ==> 'h', 'e', 'l', 'l', 'o', '\0' (5字节 + 1字节 = 6字节) ---非自动补上“结束标志”: char a[4] = { 'g', 'o', 'o', 'd' }; printf("%s", a) // 结果是:good???... 因为没有结束符,所以一直输出直到遇到"\0" ---自动补上“结束标志”: char str[30] = "Hello World"; // 它会自动补上一个结束标志"\0" printf("%s", str) // 结果是:Hello World */
函数
/* 函数的形式: 返回值类型 函数名(变量1,变量2,...,变量n) // 形式参数 { 函数体; } */ # include <stdio.h> // 声明函数---由于代码是从上往下执行的,而 add 函数的定义位于代码最底部,不写声明的话,执行“使用函数”的时候,将不认识 add 函数 int add(int x, int y); int main() { int a, b; printf("Please inter first number>>>"); scanf("%d",&a); printf("Please inter second number>>>"); scanf("%d",&b); // 使用函数 printf("%d\n", add(a, b)); // 实参(实际参数)拷贝给形参(形式参数) return 0; } // 定义函数 int add(int x, int y) { return x + y; }
函数的递归
// 求n的阶乘 #include <stdio.h> // 声明函数 int test(int x); int main() { int n; printf("Please inter a number>>>"); scanf("%d",&n); printf("%d\n", test(n)); return 0; } int test(int x) { if (x == 0||x == 1) { return 1; }; return x * test(x-1); }
字符串处理函数
/* 对于输入和输出的字符串函数,如 printf、puts、scanf、gets使用时要包含头文件 stdio.h 而对于其它字符串函数,使用时要包含头文件 string.h 它是一个专门用来处理字符串的头文件,里面包含了很多字符串处理函数 常用的字符串函数: 1.strcpy(字符串复制) 2.strcat(字符串连接) 3.strcmp(字符串比较) 4.strlen(获取字符串长度) 5.strupr & strlwr(字符串大小写转换) 详细介绍: char a[10] = "happy"; char b[10] = "good"; 1.strcpy(字符串复制) strcpy(a, b); // 结果 a数组的内容:good b数组的内容:good 2.strcat(字符串连接) strcat(a, b); // 结果 a数组的内容:happygood b数组的内容:good 3.strcmp(字符串比较) strcmp(a, b) // 按照 ASCII码 顺序比较两个字符数组中的字符串,该函数的返回值无法确定,但是可以与零进行比较 ---该函数返回值如下: 如果返回值大于 0,则表示 a 大于 b。 如果返回值小于 0,则表示 a 小于 b。 如果返回值等于 0,则表示 a 等于 b。 e.g. if (strcmp(a, b) > 0) // a 大于 b if (strcmp(a, b) < 0) // a 小于 b if (strcmp(a, b) = 0) // a 等于 b 4.strlen(获取字符串长度) strlen( a ) // 计算字符串的实际长度(不含字符串结束标志“\0”),"函数返回值"为字符串的实际长度 5.strupr(字符串大小写转换) char str[18] = {"HELLO world"}; 1.strupr(字符串数组名) 功能:将字符串中(小写 --> 大写) strupr(str); // printf(str) =》"HELLO WORLD" 2.strlwr(字符串数组名) 功能:将字符串中(大写 --> 小写) strlwr(str); // printf(str) =》"hello world" */
浙公网安备 33010602011771号