C语言学习笔记(二)


分支语句和循环语句

分支语句

  • if
  • switch

循环语句

  • while
  • do…while
  • for

goto语句


什么是语句?

C语言中由一个分号 ; 隔开的就是一条语句。 比如:

printf("hehe");
1+2;

分支语句(选择结构)

if语句

语法结构:
if(表达式)
    语句;
if(表达式)
``语句1;
else
    语句2;
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;`

实例1

#include <stdio.h>
//代码1
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
}

实例2

//代码2
#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
}

实例3

//代码3
#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)
   {
        printf("青年\n");
   }
    else if(age>=30 && age<50)
   {
        printf("中年\n");
        }
    else if(age>=50 && age<80)
   {
        printf("老年\n");
   }
    else
   {
        printf("寿星\n");
   }
    
}

如果表达式的结果为真,则语句执行。在C语言中,0表示假,非0表示真。


switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。

switch(整型表达式)
{
    语句项;
}

其中,语句项是

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

在switch语句中的 break

在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。
比如:

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1printf("星期一\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;
   }
    return 0;
}

当需求变为:

  1. 输入1-5输出的是“weekday”;
  2. 输入6-7输出“weekend”
#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

break语句的实际效果是把语句列表划分为不同的部分。

default子句

写在任何一个 case 标签可以出现的位置。当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个 switch 语句中只能出现一条 default 子句。但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个 case 标签一样贯穿 default 子句。

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
             switch (n)
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
             break;
    default:
             break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

循环语句

  • while
  • do…while
  • for

while循环

//while 语法结构
while(表达式)
 循环语句;

在屏幕上打印1-10的数字

#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

while语句中的break和continue

break介绍

总结: break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。


continue介绍

总结: continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

for循环

语法:

for(表达式1;表达式2;表达式3)
 循环语句;

do…while()循环

语法:

do
 循环语句;
while(表达式);

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

#include <stdio.h>
int main()
{
	char arr1[] = "welcome to china..";
 	char arr2[] = "#################";
 	int left = 0;
 	int right = strlen(arr1)-1;
 	printf("%s\n", arr2);
 	//while循环实现
 	while(left<=right)
 	{
 		Sleep(1000);
 		arr2[left] = arr1[left];
 		arr2[right] = arr1[right];
 		left++;
 		right--;
 		printf("%s\n", arr2);
 	}
 	retutn 0;
}

折半查找算法

#include <stdio.h>
int main()
{
 	int arr[] = {1,2,3,4,5,6,7,8,9,10};
 	int left = 0;
 	int right = sizeof(arr)/sizeof(arr[0])-1;
 	int key = 7;
 	int mid = 0;
 	while(left<=right)
 	{
 		mid = (left+right)/2;
 		if(arr[mid]>key)
 		{
 			right = mid-1;
 		}
 		else if(arr[mid] < key)
 		{
 			left = mid+1;
 		}
 		else
 		{
 			printf("找到了,下标是%d\n", mid);
 			break;
 		}	
 	}
 	if(left > right)
 	{
 		printf("找不到\n");
 	}
 }
 

猜数字游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
 	printf("**********************************\n");
 	printf("*********** 1.play     **********\n");
 	printf("*********** 0.exit     **********\n");
 	printf("**********************************\n");
}
void game()
{
 	int random_num = rand()%100+1;
 	int input = 0;
 	while(1)
 	{
 		printf("请输入猜的数字>:");
 		scanf("%d", &input);
 		if(input > random_num)
 		{
 			printf("猜大了\n");
 		}
 		else if(input < random_num)
 		{
 			printf("猜小了\n");
 		}
 		else
 		{
 			printf("恭喜你,猜对了\n");
 			break;
 		}
 	}
 }
int main()
{
 	int input = 0;
 	srand((unsigned)time(NULL));
 	do
 	{
 		menu();
 		printf("请选择>:");
 		scanf("%d", &input);
 		switch(input)
 		{
 			case 1:
 				game();
 				break;
 			case 0:
 				break;
 			default:
 				printf("选择错误,请重新输入!\n");
 				break;
 		}
 	}while(input);
 	return 0;
 }



goto语句

关机程序

#include <stdio.h>
int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");
again:
    printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
    scanf("%s", input);
    if(0 == strcmp(input, "我是猪"))
   {
        system("shutdown -a");
   }
     else
   {
        goto again;
   }
    return 0;
}

goto语句一般适用于跳出多层内嵌循环


总结

回顾分支循环部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值