C语言学习笔记-分支与循环

分支语句和循环语句

分支语句

if

1.如下输入代码时,输出结果为3,因为在判断5<x<10时,由于5>3,此判断5<x结果为假,这条语句会变为0<10,由于0<10,结果为真,所以输出x,在写代码时,避免这种错误语法,可以活用&&/||代替

int main()
{
    int x=3;
    if(5<x<10)
       printf("%d",x);
    return 0;

}

2.如果if需要控制多条语句,需要用{}括起来,否则会形成语法错误,导致else找不到与之匹配的if语句 ; (一对{}为一个代码块)

#include<stdio.h>
int main()
{
	int a=3;
	if(a==3)
	printf("a==3");
	printf("right");
	else
	printf("error");
    return 0
}

3.悬空else:在如下代码中,运行后会没有输出结果,这是因为在这里else语句与离他最近的if(b==4)语句结合,导致第一个if语句结束后,直接返回;

#include<stdio.h>
int main()
{
	int a=3,b=4;
	if(a!=3)
	   if(b==4)
	     printf("b==4");
	else
	printf("error");
	return 0;
}

switch

switch语法:

int main()
{
	switch(整形表达式)
	{
		case:整型常量表达式;
		语句;
	}
}

在switch语句中无法直接实现分支,需要搭配break使用才能实现分支效果

每个switch语句中只能出现一条default子句

循环语句

while

break:跳出循环;用于永久终止循环

continue:continue后面的代码不再实现,进行下一个循环 ;用于终止本次循环直接跳转到while语句判断部分

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //代码1
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		printf("%d",n);
	}
	//代码2
	int ret=0;
	char password[20]={0};
	printf("请输入:");
	scanf("%s",password)
	printf("确认(Y/N):");
	ret=getchar();
	if(ret=='Y')
	{
		printf("right");
	 } 
	else
	{
		printf("error");
	}
}

此时想要结束循环可输入ctrl+z,这里的scanf("%d",&n)!=EOF与~scanf("%d",&n)类似

请注意:输入password时,会先存入缓冲区,此时scanf会从缓冲区里取走需要的数据,如:123\n(这里的\n表示回车),会取走123,但是\n会留在缓冲区,后面的getchar()会取走\n,导致最后的结果输出的是"error",此时在scanf("%s",password)后加一个getchar()可以解决这个问题

for

语法:

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

{循环语句}

表达式1为初始化部分,用于初始化循环变量,表达式2为条件判断部分,用于判断循环时候终止,表达式3为调整部分,用于循环条件的调整

注意:for循环的初始化、判断、调整都可以省略,但是for循环没有判断终止,会导致死循环

do while

循环体至少执行一次

goto语句

c语言中的跳转语句,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环

关机程序

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


int main(int argc, char *argv[])
{
	char input[20]={0};
	system("shutdown -s -t 60");
again:
	printf("输入no取消关机");
	scanf("%s",input);
	if(strcmp(input,"no")==0)
	{
		system("shutdown -a")
	}
	else
	{
		goto again;
	}
  return 0;
}

判断素数

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

int main(int argc, char *argv[])
{
	int i=0;
	int j=0;
	int count=0;
	for(i=1;i<=100;i+=2)
	{
		for(j=2;j<=sqrt(i);j++)
		{
			if(i%j==0)
			{
				break;
			}
		}
		if(j>sqrt(i))
		{
			count++;
			printf("%d ",i);
		}
	}
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值