C语言是一门结构化的程序设计语言

  • 顺序结构
  • 选择结构
  • 循环结构
//分支语句
if
switch
//循环语句
while
for
do while
goto

由一个分号 ; 隔开的就是一条语句

if语句

语法结构

if(表达式)
   语句;
//如果为真,执行语句;否则什么都不执行

if(表达式)
   语句1;
else
   语句2;
//如果为真,执行语句1;否则执行语句2

if(表达式1)
   语句1;
else if(表达式2)
   语句2;
else
   语句3;
//多分支

eg

#include <stdio.h>
int main()
{
	int age = 10;
	if (age < 18)
		printf("未成年\n");
	else if(age>=18&&age<28)
		printf("青年\n");
	else if (age >= 28 && age < 50)
		printf("壮年\n");
	else
		printf("老年\n");
	return 0;
}

C语言中0表示假,非0表示真。

要执行多条语句使用代码块,一对{ }为一个代码块

#include <stdio.h>
int main()
{
	if (表达式)
	{
        语句列表1;
         }
        else
        {
        语句列表2;
         }
        return 0;
}

悬空else

#include <stdio.h>
int main()
{
   int a = 0;
   int b = 2;
   if (a == 1)
       if (b == 2)
           printf("hehe\n");
   else
           printf("haha\n");
   return 0;
}

else与最近的未匹配的if匹配,因此跑起来什么没有

比较常量与变量是否相等,可以把常量写在前避免漏掉=

#include <stdio.h>
int main()
{
   int num = 4;
   if (num = 5) //将==误写成=
   {
           printf("hehe\n");
    }
   return 0;
}

switch语句

常用于多分支

switch(整型表达式)
{
   语句项;//case语句
}

eg

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n"); 
		break;

	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

while语句

while(表达式)
   循环语句;

eg:打印1到10

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d\n", i);
		i++;
	}
	return 0;
}

continue的作用

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;//跳出当次循环,进行下次循环的入口判断
		printf("%d\n", i);
		i++;
	}

	return 0;
}

以下是几个实例

#include <stdio.h>
int main()
{
        int ret = 0;
	int ch = 0;
	char passwd[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s",passwd );//scanf读取到空格之前
	printf("确认?");
	while ((ch = getchar()) != '\n')//为什么要多一个getchar?这样就没问题了吗?
		//getchar一次只能读取一个字符
	{
		;
	}
	ret = getchar();
	if (ret == 'Y')
	{
		printf("已确认");
	}
	else
	{
		printf("取消确认");
	}
	return 0;
}
#include <stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch<'0'||ch>'9')
			continue;
			putchar(ch);
	}
	return 0;
}

for循环

for(表达式1;表达式2;表达式3)
   循环语句;

表达式1为初始化部分,初始化循环变量;表达式2为条件判断;表达式3为调整部分

for循环的优势:相比while,将初始化、判断、调整,部分放在一起,便于后期修改

#include <stdio.h>
int main()
{
	int i = 0;//初始化
	while (i < 10)//判断
	{
		//......
		i++;//调整
	}
	return 0;
}

eg:打印1到10

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d\n", i); 
	}
	return 0;
}

对比以下两段代码:

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if(i==5)
                   contiinue;
                printf("5d",i);
	}
	return 0;
}
#include <stdio.h>
int main()
{
	int i = 0;
	while(i<=10)
	{
		if(i==5)
                   contiinue;
                printf("5d",i);
                i++;
	}
	return 0;
}

一些建议

  • 不在for循环体内改变循环变量,防止死循环/失去控制
  • 建议for语句的循环控制变量取值采用“前闭后开(区间)”写法
#include <stdio.h>
int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	for (i = 0; i < 10; i++)//前闭后开
		{
		printf("%d\n", arr[i]);
		}
	return 0;
}

for语句的变种

for循环的初始化、调整、判断都可以省略;for循环的判断部分如果省略则条件为:恒为真

#include <stdio.h>
int main()
{
	for (;;)
	{
		printf("hehe\n");
	}
	return 0;
}

如果不是非常熟练建议不要随便省略

eg

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		int j = 0;
		for (j = 0; j < 10; j++)
		{
			printf("hehe\n");
		}
	}
	return 0;
} //原来的代码
#include <stdio.h>
int main()
{

	int i = 0;
	int j = 0; //修改后
	for (; i < 10; i++)
	{

		for (; j < 10; j++)
		{
			printf("hehe\n");
		}
	}
	return 0;
}

二者的执行结果一样吗?答:不一样,后者只打印10次

#include <stdio.h>
int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
	{
		k++;
		printf("%d\n", k);
	}
	return 0;
}

问:循环几次?答:0次(k=0和k==0的区分)

do...while循环

特点:先干再判断,因此循环至少执行一次

do
   循环语句;
while(表达式);

用do...while打印1到10

#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d\n",i );
		i++;
	} 
	while (i <= 10);
	return 0;
}

以下代码运行的结果是?

#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
		printf("%d\n",i );
		i++;
	} 
	while (i <= 10);
	return 0;
}

我们所度过的每个平凡的日常,也许就是连续发生的奇迹