c语言---循环 、判断基础知识详解

if语句

b3b7a40d03f248a3a1d4f394678f93bd.png

else离最近的if语句结合。        

if语句题目

//1. 判断一个数是否为奇数
//2. 输出1 - 100之间的奇数

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2)
	{
		printf("奇数\n");
	}
	else
	{
		printf("不是奇数\n");
	}

	return 0;
}

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 100; i++)
	{
		if (i % 2)
		{
			printf("奇数%d\n",i);
		}
	}

	return 0;
}

int main()
{
	int i = 0;
	for (i = 1; i <= 100; i+=2)
	{
	
			printf("奇数%d\n",i);
	}

	return 0;
}

Switch语句题目

#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;
	}

这里的每条case后面必须加break语句否则如下图所示。

break会跳出switch语句。

switch语句的表达式必须是整数。

 8a1a36d184154da0974f28e979e1e6b3.png

ed9fc020eeb9426faee57654282b11a1.png

914b57f0f6c94a1280e8607a95938372.png

题目解释

#include <stdio.h>
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
 {
  case 1:
      m++;//进入这里m=3,没有break执行下一个
  case 2:
      n++;//n=2  没有break执行下一个
  case 3:
      switch (n)n=2
     {//switch允许嵌套使用
      case 1:
          n++;
      case 2:
          m++;m=4
          n++;n=3
          break;
     }
  case 4:
      m++;m=5
      break;
  default:
      break;
 }
  printf("m = %d, n = %d\n", m, n);
  return 0;
}

循环语句

while循环

8d68626e6071478aa58d1fadcb50637a.png

先看表达式是否为真,为真就执行表达式结果,然后继续看表达式是否为真,一直反复,知道表达式不满足,就跳出循环。

比如打印1-10的数

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

break和continue的用法和区别

11fe39f56c0b46c6970a56a3e61d6086.png

9978ffeb7cd34bad94296cd920c202d5.png

因为这里的i++在后面,没有执行。

break是跳出循环的,continue后面的语句不会执行。所以一直进入死循环        

区别:break用于循环的永久终止

continue是跳出本次循环后面的代码,直接进入判断部分,进入下一次循环。

可以这么改 

da75841fb1b640f8b624e51015ca6e3a.png

f24cc3c0637242388368f0d3a1692906.png

1942c058104c48009ace570e4b8b5aec.png

 几个常见的陷阱

717f384b1c754ade92f9cd25a4c6a79a.png

这里的\n也是占一个字符 

181aa073945a4ecb89533e5de4594cef.png

 for循环

a3b082cea8094bbcbb73ce4cf1fd5527.png

 d9149b5f1f8d4732aba855d5018ac01c.png

 c15bb4daa0e14d48bd33a11c3dad9bc7.png

 先初始化,在判断,执行循环语句,然后调整,直到判断不成立,就跳出循环。

for循环遇见break和continue

b62e01541e004d73b59d00ca98746495.png

与while一样

continue的后面的语句 不会执行,但是for循环的i++在前面。,他跳到了调整部分去了

247e090f65b6402ebd861a366aa26982.png

 92bee0aadfb84f5c9da3a256d77c2fa7.png

循环里的语句不要随便乱省阅

        

0a5bd4263ed447b4829d745ece6952a2.png

这里第二就是i=0的时候内层循环执行三次,此刻i=1,但是j'现在等于3,内层循环没有初始化所以就打印了三次。

 9ac28ee5d99c4ded98ef28a5aad920a1.png

for循环题目

 432ac676254b46aea620f678c9510eab.png

这里=是赋值,表达式2结果是假的,就执行一次。

do-while循环语句

a79fbc98abee4a94b9c5d2c96846d053.png

先执行循环语句,在判断表达式,如果表达式为真,就继续,否则跳出循环。 

e0a5a1dde92841f8b697af99abe669fb.png

8cab6fe4d35e4744a6a5eef41614fb48.png

3d8f6483415e47f783e6bb57e60abe77.png

几个循环题目

1. 计算 n的阶乘。
2. 计算 1!+2!+3!+……+10!
3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
4. 编写代码,演示多个字符从两端移动,向中间汇聚。

//1. 计算 n的阶乘。
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret *= i;
	}
	printf("%d\n", ret);
	return 0;
}

//2. 计算 1!+ 2!+ 3!+ …… + 10!
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret *= i;
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

二分查找算法

7f13671c91b241f8b182753de273461c.png首先把arr[0]为left arr[9]为right 中间元素为mid  先判断arr[mid]>或者 <你要找的元素的值 ,运气好的话中间的元素就是你要查找的值。如果不是你要找的值,就判断arr[mid】>k就right=mid-1  ,<就left=mid+1  

08a83376a0804fb389485faf0aee1a4f.png

6a451dc2a9fd4a869c9a6a4a3c59cef1.png

4471ce7257bb4af8a92eb7edb64e5009.png

0bf76cc91c87426280dfb0995d2945a2.png


 

 e079f7e0cebe489b966a46c870449d54.png

比如找元素7,他的下标为6,创建一个变量left,含义是起始的,right,是末端的,中间变量是mid(left+right)/2,left=mid+1,right=mid-1.比如arr[mid]<k,中间元素是下标是4,找的元素是下表是6,在后面,则是left=mid+1,right还是right。现在left下标是5,right下标是9,中间下标是7,找的下标是6,此时right变成了mid-1,就剩下二个元素了,就是6和7 下标是5和6  ,left=5,right=6,中间是5,,mid=5 此时必要要找的下标元素小,那就是left=mid+1就找到了。

#define _CRT_SECURE_NO_WARNINGS
//3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
#include <stdio.h>
#include <string.h>
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-left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;

		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了下标是%d\n", mid);
			break;
		}
		
	}
	if (left > right)
		{
			printf("找不到\n");
		}
	return 0;
}

adba0970fbff4d4cbbb94f49b7d67d9a.png

明确区别sizeof 和strlen()

46f1547178a64e1396d2ad5a88f4ada3.png

646d041fe14241a9b8db09c81f997ebe.png


//4. 编写代码,演示多个字符从两端移动,向中间汇聚

int main()
{
	char arr1[] = "abcrerewf";
	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(1000);
		left++;
		right--;
	}
	
	return 0;
}

这里的Sleep是时间戳头文件是<windows.h>文件,就是起延时作用

system("cls"),头文件是<stdlib.h>,是一个清空屏幕的效果。

ce549280e49648ee8855732ce79cf004.png

c556a5bca1734ac784d05fb90aa26269.png

6d05456bfc16478ca7ddccc0b1db3e9e.png

50ff4d0e0ec6432f8326be3bacfc5f0e.png

//5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
//提示登录成,如果三次均输入错误,则退出程序。4

int main()
{
	char password[20] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);//假设密码是123;
		if (strcmp(password, "123") == 0)
		{
			printf("登录成功\n");
			break;

		}
		else
		{
			printf("密码错误\n");

		}
	}
	if (i == 3)
	{
		printf("三次全部错误退出程序\n");
	}
		return 0;
}

14cf0e114b60438794daed93089f7cbd.png

 猜数字游戏

dfef5221088246b6a086b1fbe278f6a1.png

猜数字游戏

1.电脑产生一个随机数

2.猜数字

3.猜大了

4.猜小了

5.直到猜对了,结束。

time(NULL)获得时间戳。头文件是<time.h>

rand()生成随机数的库函数

调用rand()之前必须调用srand(填一个随机数),头文件是<stdlib.>

生成随机数srand(usigned int ) time(NULL),这个就是生成随机数

但是这个只能调用一次。

//猜数字游戏实现

void game()
{
	int n = 0;
	int red =rand()%100+1;
	//2猜数字
	while (1)
	{
		printf("请猜数字\n");
		scanf("%d", &n);
		if (n < red)
		{
			printf("猜小了\n");
		}
		else if(n > red)
		{
			printf("猜大了\n");

		}
		else
		{
			printf("猜对了\n");
			break;
		}

	}


}
void meau()
{
	printf("*********************\n");
	printf("****** 1.play  ******\n");
	printf("****** 0.exit  ******\n");

}
int main()
{
	int input = 0;
	do
	{
		srand((unsigned)time(NULL));//产生随机数
		meau();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
		    // 猜数字
			game();
				break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

b7f2ec0caf6949e683e25e7bb84ce6f3.png

 关机程序

858c1cb5f9da4eef91eb800f73c4eb36.png

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>//strcmp()函数的头文件
int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 120");// 必须写成1这个样子

		while (1)
		{
			printf("请注意,你的电脑在120秒内关机,如果输入:我是你爹,就取消关机\n");
			scanf("%s", input);
			if (strcmp(input, "爹") == 0)
			{
				system("shutdown -a");
				break;
			}
		}

	return 0;
}

相关推荐

  1. C语言|判断循环相关题目

    2024-06-18 18:38:03       36 阅读
  2. c语言基础知识

    2024-06-18 18:38:03       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 18:38:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 18:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 18:38:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 18:38:03       20 阅读

热门阅读

  1. 从入门到精通:Linux多线程

    2024-06-18 18:38:03       5 阅读
  2. IDM下载管理器的优势分析:为什么选择IDM?

    2024-06-18 18:38:03       6 阅读
  3. MySQL触发器基本结构

    2024-06-18 18:38:03       7 阅读
  4. Hello, World

    2024-06-18 18:38:03       5 阅读
  5. C语言TC中有⼏个画矩形函数?怎么使⽤?

    2024-06-18 18:38:03       5 阅读
  6. 闲鱼商品详情API:深入解析与应用指南

    2024-06-18 18:38:03       4 阅读
  7. Gradle相关概念

    2024-06-18 18:38:03       4 阅读
  8. Redis 键(key)

    2024-06-18 18:38:03       6 阅读
  9. .net core使用EPPlus设置Excel的页眉和页脚

    2024-06-18 18:38:03       6 阅读
  10. SqlServer添加索引

    2024-06-18 18:38:03       5 阅读
  11. cephfs的形式使用ceph,大致思路

    2024-06-18 18:38:03       7 阅读