char的使用实例如下:
单个字符定义:char ch = 'A';
如果输出占位符是 %d,输出对应ASCII码
如果占位符是 %c 直接输出该字符
!!!只能有一个字母,不能是汉字
char a=65;
数字是某个字符对应的ASCII码值
如果输出占位符是 %c 就输出对应字符
如果是 %d 就输出原本数字
如果该数字没有对应的ASCII码值,输出结果乱码
char d='\n';
可以使用各种转义字符
字符串就是很多连在一起的字符,而且字符串可以是汉字哦。我们 一般用字符数组来存放字符串。字符串总是以 \0 结尾。
char str[4]={'c','a','t','\0'};
单引号中只能引用一个字节
最后的\0 其实不用手动添加,系统会自动帮你加上
数组下标最少要比字符多一个,因为要给\0 留位置
char str[]={'c','a','t'};
当你已经给数组内每一个元素赋值,就可以免去数组下标
这时候系统也会自动帮你添加\0
char str[]={"I love cats!"};
这种赋值方式算是最简便的,我称之为YYDS
//或者更简便的方式如下
char str[]="I love cats!";
\0 是字符串结束的方式,但输出时不会显示\0 。一定一定加上\0或预留足够空间让系统自动加上。
C语言的程序结构也分为:顺序、选择和循环。顺序结构就是自上而下,依次执行。我们无需探讨。我们从选择结构开始。
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。
下面是大多数编程语言中典型的判断结构的一般形式:
C 语言提供了以下类型的判断语句。点击链接查看每个语句的细节。
| 语句 | 描述 |
|---|---|
| if 语句 | 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
| if...else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
| 多重 if-else 语句 | 您可以在一个 if 语句后跟上 多个 else if 语句,最后跟上 else 。 |
| 嵌套 if 语句 | 您可以在一个 if 或 else 语句内使用另一个 if 或 else 语句。 |
| switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
1.语法
C 语言中 if 语句的语法:
if(boolean_expression)
{
/* 如果布尔表达式为真将执行的语句 */
}
如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。
2.流程图
3.实例
#include <stdio.h>
#include <string.h>
int main(){
int score;
printf("%s\n","请输入考试成绩:");
scanf("%d",&score);
if(score==100){
printf("%s","奖励变形金刚一个!");
}
return 0;
}
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行
1.语法
C 语言中 if...else 语句的语法:
if(boolean_expression)
{
/* 如果布尔表达式为真将执行的语句 */
}
else
{
/* 如果布尔表达式为假将执行的语句 */
}
如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。
2.流程图
3.实例
#include <stdio.h>
#include <string.h>
int main(){
int score;
printf("%s\n","请输入考试成绩:");
scanf("%d",&score);
if(score>100||score<0){
printf("成绩非法!");
return -1;
}
if(score>=60){
printf("%s","恭喜你考试及格!");
}else{
printf("%s","暴打一顿!");
}
return 0;
}
一个 if 语句后可跟一个可选的 else if...else 语句,这可用于测试多种条件。
当使用 if...else if...else 语句时,以下几点需要注意:
C 语言中的 if...else if...else 语句的语法:
if(boolean_expression 1)
{
/* 当布尔表达式 1 为真时执行 */
}
else if( boolean_expression 2)
{
/* 当布尔表达式 2 为真时执行 */
}
else if( boolean_expression 3)
{
/* 当布尔表达式 3 为真时执行 */
}
else
{
/* 当上面条件都不为真时执行 */
}
#include <stdio.h>
#include <string.h>
int main(){
int score;
printf("%s\n","请输入考试成绩:");
scanf("%d",&score);
if(score>100||score<0){
printf("成绩非法!");
return -1;
}
if(score>=90&&score<=100){
printf("%s","成绩优秀!");
}else if(score>=80&&score<90){
printf("%s","成绩良好!");
}else if(score>=60&&score<80){
printf("成绩及格!");
}else{
printf("不及格!");
}
return 0;
}
在 C 语言中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
C 语言中 嵌套 if 语句的语法:
if( boolean_expression 1)
{
/* 当布尔表达式 1 为真时执行 */
if(boolean_expression 2)
{
/* 当布尔表达式 2 为真时执行 */
}
}
#include <stdio.h>
#include <string.h>
int main(){
char gender[10];
int height;
printf("请输入性别:");
scanf("%s",&gender);
printf("请输入身高(cm):");
scanf("%d",&height);
if(strcmp(gender, "男")==0){
if(height>=180){
printf("恭喜您,入选校男子篮球队!");
}else{
printf("很遗憾您未能入选校男子篮球队!");
}
}else{
if(height>=170){
printf("恭喜您,入选校女子篮球队!");
}else{
printf("很遗憾您未能入选校女子篮球队!");
}
}
return 0;
}
switch 语句是一种有限制的控制流语句,它用于根据表达式的值执行不同的代码块。
一个 switch 语句允许测试一个变量等于多个值时的情况,每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查
1.语法
C 语言中 switch 语句的语法:
switch(expression){
case constant-expression :
statement(s);
break; /* 可选的 */
case constant-expression :
statement(s);
break; /* 可选的 */
/* 您可以有任意数量的 case 语句 */
default : /* 可选的 */
statement(s);
}
switch 语句说明:
switch 语句必须遵循下面的规则:

#include <stdio.h>
#include <string.h>
int main(){
int score;
printf("%s\n","请输入考试成绩:");
scanf("%d",&score);
if(score>100||score<0){
printf("成绩非法!");
return -1;
}
int level = score/10;
switch(level){
case 10:
case 9:
printf("成绩优秀!");
break;
case 8:
printf("成绩良好!");
break;
case 7:
case 6:
printf("成绩及格!");
break;
default:
printf("不及格!");
break;
}
return 0;
}
有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了更为复杂执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:

C 语言提供了以下几种循环类型。点击链接查看每个类型的细节。
| 循环类型 | 描述 |
|---|---|
| while 循环 | 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。 |
| do...while 循环 | 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。 |
| for 循环 | 多次执行一个语句序列,简化管理循环变量的代码。 |
| 多重循环 | 您可以在 while、for 或 do..while 循环内使用一个或多个循环。 |
循环控制语句改变你代码的执行顺序。通过它你可以实现代码的跳转。
C 提供了下列的循环控制语句。点击链接查看每个语句的细节。
| 控制语句 | 描述 |
|---|---|
| break 语句 | 终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。 |
| continue 语句 | 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。 |
| goto 语句 | 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。 |
所谓死循环,就是循环条件永远成立,循环会一直进行下去,永不结束。死循环对程序的危害很大,一定要避免。出现死循环通常是因为不满足循环结束的条件,比如忘记更新循环变量的值。
常见的死循环结构有以下三种:
while(1){
//循环体
}
do{
//循环体
}while(1);
for(int i=0;;i++){
//循环体
}
只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。
C 语言中 while 循环的语法:
while(condition)
{
statement(s);
}
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。
condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

在这里,while 循环的关键点是循环可能一次都不会执行。当条件为 false 时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。
#include <stdio.h>
#include <string.h>
int main(){
int n=1;
int sum=0;
while(n<=100){
sum+=n;
n++;
}
printf("sum=%d\n",sum);
return 0;
}
不像 for 和 while 循环,它们是在循环头部测试循环条件。在 C 语言中,do...while 循环是在循环的尾部检查它的条件。
do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。
C 语言中 do...while 循环的语法:
do
{
statement(s);
}while( condition );
请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。

#include <stdio.h>
#include <string.h>
int main(){
int n=1;
int sum=0;
do{
sum+=n;
n++;
}while(n<=100);
printf("sum=%d\n",sum);
return 0;
}
for 循环允许您编写一个执行指定次数的循环控制结构。
C 语言中 for 循环的语法:
for ( init; condition; increment )
{
statement(s);
}
下面是 for 循环的控制流:

#include <stdio.h>
#include <string.h>
int main(){
int sum=0;
for(int n=1;n<=100;n++){
sum+=n;
}
printf("sum=%d\n",sum);
return 0;
}
三种循环的对比: - while循环do-while循环适合在不确定循环次数的情况下使用,while循环先判断,再循环,有可能一次也不循环,do-while循环先循环,再判断,至少循环一次。 - for循环适合在确定循环次数的情况下使用,语法更简洁,编程中使用频率最高。 - 三种循环都可以相互转换,从本质讲没有任何区别。
C 语言中 break 语句有以下两种用法:
如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。
C 语言中 break 语句的语法:
break;


实例:判断输入的正整数是否是素数。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
int num;
printf("请输入一个正整数:\n");
scanf("%d",&num);
int flag = 1; //默认是素数
for(int i=2;i<=sqrt(num);i++){
if(num%i==0){
flag = 0;
break; //已经不是素数了则跳出循环。
}
}
if(flag){
printf("num= %d是素数!",num);
}else{
printf("num= %d不是素数!",num);
}
return 0;
}
C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。
对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do...while 循环,continue 语句重新执行条件判断语句。
C 语言中 continue 语句的语法:
continue;


实例:玩家输入年龄,如果年龄非法则不停输入。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
int age;
while(1){
printf("请输入玩家的年龄:\n");
scanf("%d",&age);
if(age<0||age>200){ //认为年龄非法
printf("您输入的年龄不合法!\n");
continue;
}
printf("玩家的年龄是:%d",age);
break;
}
return 0;
}
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
数组的声明并不是声明一个个单独的变量,比如 runoob0、runoob1、...、runoob99,而是声明一个数组变量,比如 runoob,然后使用 runoob[0]、runoob[1]、...、runoob[99] 来代表一个个单独的变量。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

数组中的特定元素可以通过索引访问,第一个索引值为 0。
C 语言还允许我们使用指针来处理数组,这使得对数组的操作更加灵活和高效。

在 C 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:
type arrayName [ arraySize ];
这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:
double balance[10];
现在 balance 是一个可用的数组,可以容纳 10 个类型为 double 的数字。
数组有三大特征:
在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。
如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。下面是一个为数组中某个元素赋值的实例:
balance[4] = 50.0;
上述的语句把数组中第五个元素的值赋为 50.0。所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。以下是上面所讨论的数组的的图形表示:

下图是一个长度为 10 的数组,第一个元素的索引值为 0,第九个元素 runoob 的索引值为 8:

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:
double salary = balance[9];
上面的语句将把数组中第 10 个元素的值赋给 salary 变量。下面的实例使用了上述的三个概念,即,声明数组、数组赋值、访问数组:
#include <stdio.h>
int main ()
{
int n[ 10 ]; /* n 是一个包含 10 个整数的数组 */
int i,j;
/* 初始化数组元素 */
for ( i = 0; i < 10; i++ )
{
n[ i ] = i + 100; /* 设置元素 i 为 i + 100 */
}
/* 输出数组中每个元素的值 */
for (j = 0; j < 10; j++ )
{
printf("Element[%d] = %d\n", j, n[j] );
}
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109
C 语言支持多维数组。多维数组声明的一般形式如下:
type name[size1][size2]...[sizeN];
例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组:
int threedim[5][10][4];
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:
type arrayName [ x ][ y ];
其中,type 可以是任意有效的 C 数据类型,arrayName 是一个有效的 C 标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。下面是一个二维数组,包含 3 行和 4 列:
int x[3][4];

多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有 3 行 4 列的数组。
int a[3][4] = {
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
内部嵌套的括号是可选的,下面的初始化与上面是等同的:
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。例如:
int val = a[2][3];
上面的语句将获取数组中第 3 行第 4 个元素。您可以通过上面的示意图来进行验证。让我们来看看下面的程序,我们将使用嵌套循环来处理二维数组:
#include <stdio.h>
int main ()
{
/* 一个带有 5 行 2 列的数组 */
int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
int i, j;
/* 输出数组中每个元素的值 */
for ( i = 0; i < 5; i++ )
{
for ( j = 0; j < 2; j++ )
{
printf("a[%d][%d] = %d\n", i,j, a[i][j] );
}
}
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8