一,三大循环语句
1. while循环
当你不知道循环次数时,可以使用while循环
#include <stdio.h>
int main()
{
int i = 123;
int j = 0;
while(i != j)
{
scanf("%d",&j);
}
printf("匹配成功\n");
return 0;
}
以上代码的循环判断条件是i != j
当条件一直成立时,它就会一直循环让用户输入j的值,知道当i == j
时循环终止,执行打印语句。在这里面,你就不知道循环什么时候结束,不知道它的具体循环次数,所以可以 使用了while循环。while循环执行的次数是0次或多次。。如何使while循环一直循环呢,也就是我们所说的死循环,那么只要使while的循环条件一直为真,可以这样写while(1)
,它就会一直执行循环体。
2. for循环
for循环知道了具体的循环次数,知道它的结束条件
#include <stdio.h>
int main()
{
//打印0~10数字
for (int i = 0; i <=10; ++i)
{
printf("%d\t", i);
}
printf("\n");
return 0;
}
我们知道要打印0~10数字,所以知道了计数器i
最大只能取到10,所以for循环的终止条件就是i <= 10
。for循环的执行次数是0次或多次。对于for循环要想它变成一个死循环,它的写法是for(;;)
,过后就会一直执行循环体。对于for循环条件的执行顺序是:
初始化条件只会执行一次。
3. do while循环
do while循环至少执行一次,也就是,它先执行循环体,然后再判断条件。
#include <stdio.h>
int main()
{
int i = 0;
do
{
++i;
printf("i = %d\n", i);
}while(i < 5);
return 0;
}
按逻辑是i < 5
打印结果不会到5,而结果是:
说明i = 5是先打印的,然后再去判断i < 5
的。
二. 相关操作字符的库函数
以下函数都在#include <ctype.h)
头文件中
1.isalnum(int c)
:作用是判断参数字符c是不是字母或数字,需要注意的是在C语言中,字符就是整数。如果参数c是字母或数字那么就返回非0,反之就返回0。
#include <stdio.h>
#include <ctype.h>
int main()
{
printf("%d\n",isalnum('1'));
printf("%d\n",isalnum('a'));
printf("%d\n",isalnum('A'));
printf("%d\n",isalnum('-'));
return 0;
}
2.isalpha(int c)
:作用是判断参数字符c是不是英文字母,如果参数c是英文字母那么返回值就为真,反之就为假。
#include <stdio.h>
#include <ctype.h>
int main()
{
if(isalpha('A'))
{
printf("是一个字母\n");
}
else
{
printf("不是一个字母\n");
}
return 0;
}
3.isdigit(int c)
:作用是判断参数字符c是不是数字,如果参数c是数字那么返回值就为真,反之就为假。
#include <stdio.h>
#include <ctype.h>
int main()
{
if(isdigit('1'))
{
printf("是一个数字\n");
}
else
{
printf("不是一个数字\n");
}
return 0;
}
4.islower(int c)
:判断字符c是否是小写字母
5.isupper(int c)
:判断字符c是否是大写字母
以上两个库函数作用是判断字符c是否是大小写字母,如果是大/小写字母返回值就为真,否则为假。
#include <stdio.h>
#include <ctype.h>
int main()
{
if(islower('a'))
{
printf("是一个小写字母\n");
}
else
{
printf("不是一个小写字母\n");
}
if(isupper('A'))
{
printf("是一个大写字母\n");
}
else
{
printf("不是一个大写字母\n");
}
return 0;
}
6.tolower(int c)
:如果字符c是大写字母就把它转换成小写字母,如果c本身就是小写字母,就不会转换。
7.toupper(int c)
:如果字符c是小写字母就把它转换成大写字母,如果c本身就是大写字母,就不会转换。
#include <stdio.h>
#include <ctype.h>
int main()
{
printf("%c\n", tolower('A'));
printf("%c\n", tolower('a'));
printf("%c\n", toupper('a'));
printf("%c\n", toupper('A'));
return 0;
}
8.isxdigit(int c)
:检查字符c是不是十六进制字符(0-9,a-f或A-F),如果是就返回非零0,否则就为0。
#include <stdio.h>
#include <ctype.h>
int main()
{
printf("%d\n", isxdigit('A'));
printf("%d\n", isxdigit('a'));
printf("%d\n", isxdigit('1'));
printf("%d\n", isxdigit('G'));
return 0;
}
三. 数组
- 一维数组
定义:数组就是一组相同数据类型数据的集合。
初始化:int arr[10] = {0};
数组一旦定义就会在内存里开辟一块空间用来存放数组的。例如arr数组里一共有10个int类型的空间大小用来存放元素,并全部初始化为0。而数组名arr存放的是数组第一位元素的地址。
访问数组:数组都有下标(索引),数组的下标都是从0开始的,也就是说数组存储了n个元素,那么下标的范围就是0~n-1
。arr[0]就是第一个元素,arr[1]就是第二个元素,,,arr[n-1]就是最后一个元素。
我们常用for循环来初始化和遍历数组。
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int size = sizeof(arr) / sizeof(arr[0]);//利用sizeof可以算出数组长度
for (int i = 0; i < size; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
2. 二维数组
二维数组本质上就是多个一维数组,它的每个元素是一个一维数组。int arr[2][3] = {0}
,在此就定义并初始化了一个两行三列的二维数据里面的元素都为0,二维数组的初始化可以省略行但不能省略列也就是说定义二维数组可以写成int arr[][3];
,但不能定义成int[2][];
,这样编译会报错。同样也可以用for循环初始化和便利二维数组。
#include <stdio.h>
int main()
{
int arr[2][3] = {{1,2,3},{4,5,6}};
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 3; ++j)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
3. 三维数组
三维数组的本质是它的每一个元素是一个二维数组,而每一个二维数组的元素又是一个一维数组。
#include <stdio.h>
int main()
{
int arr[2][3][4] = {{{1,2,3,4},{4,5,6,7},{1,2,3,4}},{{4,5,6,7},{1,2,3,4},{5,6,7,8}}};
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 3; ++j)
{
for (int k = 0; k < 4; ++k)
{
printf("%d ", arr[i][j][k]);
}
printf("\n");
}
}
return 0;
}