C语言集合(分支语句和循环语句)

一、分支语句

分支语句(条件判断语句):if语句;switch语句

(一)if语句

//例子1
if (条件1)
	语句1;

//例子2
if (条件1)
	语句1;
else
	语句2;

//例子3
if (条件1)
	语句1;
else if (条件2)
	语句2;
else
	语句3;
  1. 条件0表示假,非0表示真(注意条件是赋值还是比较)。
  2. 一般为了清晰,加上代码块{}。
  3. 悬空else:else之和离它最近的if匹配,不能看对齐

(二)switch语句

  1. swich后跟的是整形表达式
  2. case后跟的是整形常量表达式
switch (整形表达式)
{
//多个case
case 整形常量表达式:
	语句1;
	break;
default:
	语句n;
	break;
}
  1. 加上break才能表示分支,不加break,case代码会依次顺序执行,没有continue。
  2. case的顺序不影响代码执行
  3. default语句用来处理没有case匹配的问题,可以出现在{}里的任何位置

二、循环执行语句

循环执行语句:while语句;do while语句;for语句

(一)while语句

while (循环条件)
	循环语句;
  1. break是永久跳出循环
  2. continue是跳出本次循环,再进行下一次循环判断

(二)do while语句

do
	循环语句;
while (循环条件)
  1. do while循环至少执行一次

(三)for语句

for(初始化;条件判断;调整)
	循环语句;
  1. 不建议在循环体内修改循环变量
  2. 采取**“前闭后开”**的写法。
for(i = 0; i < 10; i++)
{}
  1. for(;;)恒为真。
  2. 双循环注意初始化。
  3. 当把for循环中的条件判断写成赋值,则会判断为

三、goto语句

goto error;

error: 语句;
  1. 不能跨函数跳转
  2. 一般用来跳出多层循环。

四、经典代码

(一)只打印数字字符,跳过其他字符

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch > '9')
		{
			continue;
		}
		putchar(ch);
	}
	return 0;
}
  1. getchar()返回ASCII码值,用int接收。碰到文件末尾或接收错误返回EOF。
  2. ch < ‘0’ || ch > '9’在比较0和9的ASCII码值
  3. scanf不是直接从键盘上接收数据,是从缓存区接收,一般敲完回车(\n)会保存在缓存区,可以用getch()清空。
while ((ch = getchar()) != '\n')
{
    ;
}

(二)字母移动

#include <stdio.h>
#include <windows.h>

int main()
{
	char arr1[] = "I love you";
	char arr2[] = "**********";
	printf("%s\n", arr2);
	int right = sizeof(arr1)-2;
	int left = 0;

	while (left <= right)
	{
		Sleep(1000);
		system("cls");
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		left++;
		right--;
	}
	
	return  0;
}
  1. 使用替换,将字母聚拢显现。
  2. system(“cls”)用来清空屏幕,Sleep(1000)延时1000ms,要用到<windows.h>。
  3. sizeof()算字符串数组会算上"\0",strlen()不会算上

(三)利用对半查找有序数组中的目标位置

int main()
{
	int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int left = 0;
	int right = sizeof(arr1) / sizeof(arr1[0])-1;
	int mid = 0;
	int key = 10;

	while (left <= right)
	{
		mid = (left + right) / 2;
		if (arr1[mid] < key)
		{
			left = ++mid;
		}
		else if (arr1[mid] > key)
		{
			right = --mid;
		}
		else
		{
			break;
		}
	}

	if (left <= right)
	{
		printf("%d", mid);
	}
	else
	{
		printf("没找到");
	}
	
	return 0;
}
  1. 计算数组中元素个数sizeof(arr1) / sizeof(arr1[0])
  2. 注意判断条件,以及前++和后++

(四)猜数字游戏

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
	printf("开始请按->1\n");
	printf("结束请按->0\n");
}

void game()
{
	int num = 0, random_num = rand()%10 + 1;
	while (1)
	{
		printf("请输出猜的数字-> ");
		scanf("%d", &num);
		if (num > random_num)
		{
			printf("猜大了\n");
		}
		else if (num < random_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}
}

int main()
{
	int input = 0;
	srand(time(NULL));
	
	do
	{
		menu();
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束");
			break;
		default:
			printf("请重新输入\n");
			break;
		}

	} while (input);
}
  1. 利用do…while和swich来做初始循环界面。
  2. #define _CRT_SECURE_NO_WARNINGS用来消除scanf的警告
  3. srand()生成随机种子,rand()生成随机数time()返回时间戳
    在这里插入图片描述在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值