分支与循环

顺序结构、选择结构、循环结构 这三种结构靠分支与循环来实现

if语句

if(表达式)

表达式为0:假       表达式非零(0以外的任何数字,不一定非得是1):真

if 语句只控制一条语句,多条语句用大括号括起来

else 可以与另⼀个 if 语句连⽤:if else,构成多重判断

悬空 else 的问题:如果有多个 if 和 else , else 总是跟最接近的 if 匹配;如果我们希望else确实和第⼀个if匹配,可以加大括号

关系操作符

关系表达式中使用的运算符就是关系运算符

关系表达式通常返回 0 或 1 ,表⽰真假。

注意事项

1、相等运算符 == 与 赋值运算符 = 是两个不⼀样的运算符,不要混淆。

2、另⼀个需要避免的错误是:多个关系运算符不宜连⽤。应该用&&连接多个条件

条件操作符

条件操作符也叫三目操作符(接受三个操作数)

逻辑操作符

! :逻辑取反运算符(改变单个表达式的真假)。
&& :与运算符,就是并且的意思,双目运算符(全则为真,否则为假,是0的追随者)。
|| :或运算符,就是或者的意思,双目运算符(一真则为真,否则为假,是非零的追随者)。

判断闰年

int main()
{
  int year = 0;
  scanf("%d", &year);
  if(year%4==0 && year%100!=0)
  printf("是闰年\n");
  else if(year%400==0)
  printf("是闰年\n");
  return 0;
}
int main()
{
    int year = 0;
    scanf("%d",&year);
    if(year%4==0 && year%100!=0);
    printf("是闰年\n");
    else if(year%400==0);
    printf("是闰年\n");
    return 0;
}

短路

如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”

switch语句

switch括号里的表达式不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。

1、switch() 的必须是整型表达式
2、case 后的值,必须是整形常量表达式                                                                                          3、case 和后边的数字之间必须有空格
4、 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。(没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束)                                                                                                                5、 case 语句和 default 语句是没有顺序要求的

while循环

对一个正整数逆序输出


#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    while(n)//这里条件写成了n,当n为0时就结束了
    {
    printf("%d ", n%10);//对10取余输出最低位
    n /= 10;//对10取除数撇掉最低位
    }
return 0;
}

for循环

for(表达式1; 表达式2; 表达式3)

表达式1⽤于循环变量的初始化?
表达式2⽤于循环结束条件的判断
表达式3⽤于循环变量的调整

表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循

do-while循环

先来它一边,然后就和while一样了

特点:do while循环至少执行一次

运用:判断整数的位数

#int include<stdio.h>

int main()
{
    int n=0;
    scanf("%d",&n);
    int cnt=0;
    do{
    cnt++;
    }while(n);
    printf("%d",cnt);

    return 0;

}

break和continue语句

break永久终止

continue跳出本次循环

循环嵌套

打印素数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 100; i < 200; i++)
	{
		int j = 0;
		int flag = 1;//先把标志记为“是素数”
		for (j = 2; j < i; j++)//从2到它本身,找找看有没有数能整除它
		{
			if (i % j == 0)
			{
				flag = 0;//如果有,就更换标志为“不是素数”
				break;
			}
		}if (flag == 1)//对i的每次遍历中,如果标志显示它是素数就打印出来
			printf("%d ", i);
	
			
	}
	return 0;
}

goto语句

goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处

适合应用在多层循环的代码中,快速跳出好多层循环

for(...)
{
     for(...)
    {
        for(...)
        {
            if(该跳出循环了)
                goto(跳出去标志)
        }
    }
}

跳出去标志

实例

猜数游戏:

一、生成随机数

rand()返回一个伪随机数,他的头文件是#include<stdlib.h>,他的参数类型是unsigned int

rand() 函数的生成 的种子默认为1,要生成不同随机数,应该更换种子,又需要一个随机的种子,以运行时间为种子的方式可以很好解决这个矛盾问题

time函数返回值ime_t本质上是32或64位的整数类型

time函数的参数timer如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存
中带回去。;如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳


time函数的时候需要包含头⽂件:time.h

生成a~b的随机数:a+rand()%(b-a+1)

#define _CRT_SECURE_NO_WARNINGS 1

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

void game()
{
	int r = rand() % 100 + 1;
	int guess = 0;
	int count = 5;//倒数猜数字的次数
	while(count)
	{
		printf("\n你还有%d次机会\n", count);
		printf("请输入数字:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");
		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜,猜对了");
				break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("失败了,正确答案是%d\n", r);
	}
	
}

void menu()
{
	printf("***************************\n");
	printf("**********1\play***********\n");
	printf("**********2\exit***********\n");
	printf("***************************\n");
	printf("***************************\n");
}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值