C语言是一门结构化的程序设计语言,分为三种结构:顺序结构,选择结构,循环结构。

一、分支语句

1.if语句

if语法结构1:

if(表达式)

语句;

int main()
{
	int age = 16;
	if (age < 18)
		printf("未成年\n");
	return 0;
}

if语法结构2:

if(表达式)

语句1;

else

语句2

int main()
{
	int age = 20;
	if (age < 18)
		printf("未成年\n");
	else
		printf("已成年\n");
	return 0;
}

if语法结构3:

if(表达式)

语句1;

else if(表达式2)

语句2;

else

语句3;

int main()
{
	int age = 31;
	if (age < 18)
		printf("未成年\n");
	else if (age < 30)
		printf("青年\n");
	else if (age >= 30 && age < 50)
		printf("壮年\n");
	return 0;
}

如果条件成立要执行多条语句,要用代码块{}

else和其离得最近的、未匹配的if进行匹配

2.switch语句

switch()里面只能放整型

{

case1:

语句;

case2:

语句;

}

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一");
		break;
	case 2:
		printf("星期二");
		break;
	case 3:
		printf("星期三");
		break;
	case 4:
		printf("星期四");
		break;
	case 5:
		printf("星期五");
		break;
	case 6:
		printf("星期六");
		break;
	case 7:
		printf("星期日");
		break;
  default:
		printf("输入错误");
		break;
	}
	return 0;
}

case只用整型常量表达式

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	}
	return 0;
}


二、循环语句

1.while循环

int main()
{
	int i = 1;
	while (i < 10)
	{
		printf("%d\n", i);
		i++;
	}
	return 0;
}

分支和循环_while循环

break 终止循环

continue 结束本次循环,直接进入下一次循环

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)//EOF-end of file文件结束标志,ctrl+z结束
	{
		putchar(ch);
	}
	return 0;
}

——→补充:getchar,scanf称为输入函数,工作原理是:首先创造一个输入缓冲区,输入内容后输入函数会读取输入缓冲区里的东西

scanf只会读取空格前的内容

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch>'9')
			continue;
		putchar(ch);
	}
	return 0;
}

2.for循环

for(初始化部分;条件判断部分;调整部分)

int main()
{
	int i = 0;
	for (i = 1; i < 10; i++)
	{
		printf("%d\n", i);
	}
	return 0;
}

分支和循环_i++_02

for循环的初始化、判断、调整都可以省略,判断部分被省略,则恒为真

3.do...while循环

int main()
{
	int i = 1;
	do
	{
		printf("%d", i);
		i++;
	} while (i <= 10);
	return 0;
}

分支和循环_i++_03

三、以下是一些练习题

1.计算1!+2!+3!+···+10!

int main()
{
	int n = 0;
	int i = 0;
		int sum = 0;
	for (n = 1; n <= 10; n++)
	{
		int jc = 1;
		for (i = 1; i <= n; i++)
		{
			jc *= i;
		}
		sum += jc;
	}
	printf("%d", sum);
	return 0;
}

分支和循环_i++_04

2.二分查找法(仅对有序数组有效)

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;

	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;//最左边的下标
	int right = sz - 1;//最右边的下标
	
	while (left<=right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是:%d,值为%d", mid,arr[mid]);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到");
	}
	return 0;
}

3.从两侧逐字符显示

#include<windows.h>
#include<stdlib.h>
int main()
{
	char arr1[] = "Welcome to our school!!!!!";
	char arr2[] = "##########################";
	int left = 0;
	int right = strlen(arr1)-1;

	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(200);//休息0.2秒
		system("cls");//执行系统命令的一个函数,cls-清空屏幕
		left++;
		right--;
	}
	printf("%s\n", arr2);
	return 0;
}

4.输入三次密码

int main()
{
	int i = 0;
	char password[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", password);
		if (strcmp(password, "123456")==0)//==不能用来比较两个字符串是否相等,应该使用一个库函数strcmp
		{
			printf("输入正确!");
			break;
		}
		else
		{
			printf("密码错误\n");
		}
	}
	return 0;
}