IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 零基础入门C语言第二课 -> 正文阅读

[C++知识库]零基础入门C语言第二课

????????

第二课:分支和循环语句

目录

第二课:分支和循环语句

1.1·什么是语句

1.2·分支语句(选择语句)

1.3·循环语句

1.4·goto语句

1.5·二分法与低级延迟显示法

1.6·巩固练习:猜数字小游戏


1.1·什么是语句

C语句可以分为五类:表达式语句、函数调用语句、控制语句、复合语句、空语句

C语言有九种控制语句,可以细分为:

1.条件判断语句(也叫做分支语句):if语句、switch语句。

2.循环执行语句:do while语句、while语句、for语句。

3.转向语句:break语句、goto语句、return语句。


1.2·分支语句(选择语句)

if语句被称为分支语句或选择语句,因为它想当于一个交叉点,程序要在两条分支中选择一条执行。

例如:下面的代码如果x是一个大于0的数就执行if下面的语句,否则就执行else下面的语句。(即条件真执行,假不执行)

if(x>0)
    printf("x是一个大于0的数!");
else
    printf("x是一个小于或等于0的数!");

if语句的常见表达:

语法结构:
//第一种
if(表达式)
    语句1;

//第二种
if(表达式)
    语句1;
else
    语句2;

//第三种
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

例如:

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

}

//第二种
#include<stdio.h>
int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)
    {
        printf("未成年\n");
     }
    else
    {
        printf("成年\n");//这里else后面一部分相当于age>=18的条件
    }
}


//第三种
#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");
    }
}

else与if配对:else与离他最近的if配对

当我们写程序时出现了许多的if和else,编译器如何知道哪个if和哪个else对应呢?

规则当然是:如果没有花括号,else与最近的if配对,除非最近的if被花括号括起来了。

补充:悬空else和if就是指不用花括号{}扩其中的语句内容,如果if或者else后面只有一条语句,那么建议使用悬空else和if,如果有多条语句就不建议使用悬空else和if,这样写不便于读,建议带花括号,而且不带花括号if和else都只执行其下第一句语句,后面的代码虽然也会挨着执行但不属于if和else的执行)

例如:

#include<stdio.h>
int main()
{
    int a=0;
    if(a==1)
        printf("haha\n");
    else
        printf("hehe\n");
    
}

不常见的if语句格式:多层嵌套的if语句(因为不简洁明了,不便于读,很少这样写)

if(num % div ==0)
{
    if(div * div !=num)
        printf("%d is divisible by %d and %d\n",num,div,num/div);
    else
        printf("%d is divisible by %d\n",num,div);
}

扩展内容:逻辑运算符

C语言中我们有3种运算符:&&(与)、||(或)、!(非)

&&(与):同真为真、||(或):同假为假、!(非):真假相反

在C语言头文件中有一个备选拼写头文件iso646.h头文件:简言之,and代替&&,or代替||,not代替!(缘由是用define定义成了and、or、not)

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

比如:

????????输入1,输出星期一

????????输入2,输出星期二

? ? ? ? 输入3,输出星期三

????????....

像这种形式,如果我们使用if...else if...就相当的麻烦,所以就有了switch语句

switch常见格式:

?
//常见格式一
switch(day)
{
    case 1:    
            printf("星期一\n");
            break;
    case 2:
            printf("星期二\n");
            break;
    ...  
  
    default:
            printf("输入错误,请重新输入!\n");//default可以放在任意位置且可有可无
    
}

//常见格式二
switch(day)
{
    case 1:printf("星期一\n");break;//case选择的是整数类型数据
    case 2:printf("星期二\n");break;
    ...
    default:printf("输入错误,请重新输入!\n");break;
}

?//常见格式三
switch(day)
{
    case '1':printf("星期一\n");break;//case 选择的时字符类型数据
    case '2':printf("星期二\n");break;
    ...
    default:printf("输入错误,请重新输入!\n");break;
}

switch语句中的默认值default:

default子句意为默认值,在case都没匹配到时,默认的结果。default可以出现在switch中的任意位置。

switch语句中的循环辅助:break语句与continue语句

一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue和break语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环。

continue语句:跳出本次循环,开始下一轮循环

例如:

?
#include<stdio.h>
int main()
{
    int i=1;
    while(i<=10)
    {
        if(i==5)
          continue;

        printf("%d",i);
        i++;
    }
    return 0;
}

?

不难看出这个代码执行结果为:1234_然后光标闪烁不打印了(其实5死循环)。因为:当i=1 2 3 4时,我们都执行除了if(i==5)continue;的while全部内容,但是当i=5时,执行if(i==5)continue;continue一触发就跳转到了while(跳过了printf和i++)开头,然后继续执行又到了if(i==5)进行死循环。

break语句:终止循环,进入下一行代码

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

?

不难看出这个代码执行结果为:1234。因为:当i=1 2 3 4时,代码执行除if(i==5)break;以外的全部while循环,当i=5时,执行if语句,到了break时候跳出了循环结束了while循环到了return 0;因此打印1234? ??? ??

特别注意:switch中的case如果没有用break结束循环那么就会执行后面的case而并不需要case匹配字段

例如:

switch(day)
{
    case 1:printf("星期一");
    case 2: printf("星期二");
    case 3: printf("星期三");
}

这个例子如果匹配了case:1,那么输出结果是星期一星期二星期三


1.3·循环语句

C语言中有三种常用循环:for循环、while循环、do...while循环

for循环基本格式:for(表达式1;表达式2;表达式3)

????????????????????????????????循环语句;

表达式1为初始化部分,用于初始化循环变量(例如i=0;int i=0)

表达式2为条件判断部分,用于判断循环时候终止(例如i<=10)

表达式3为调整部分,用于循环条件的调整(例如i++)

举例:

//使用for循环在屏幕上打印1-10的数字
#include<stdio.h>
int main()
{
    int i=0;
    for(i=1;i<=10;i++)
    {
        printf("%d",i);
    }
    return 0;
}
//请问此循环要循环多少次?
#include<stdio.h>
int main()
{
    int i=0;
    int k=0;
    for(i=0,k=0;k=0;i++,k++)
    k++;    
    return 0;
}
//答案为0,因为k=0是赋值而不是判断条件,而0为假条件不成立,就没有进行循环

?

while语句基本形式:while(表达式)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?循环语句;

例如:

//用while输出1-10的数字
#include<stdio.h>
int main()
{
     int i=1;
     while(i<=10)
     {
        printf("%d",i);
        i++;
      }
    return 0;
}

do...while语句基本形式:?do

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 循环语句;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? while(表达式);

do...while语句特点:循环至少执行一次,先执行一次循环在判断while

举例:

//打印1-10数字
#include<stdio.h>
int main()
{
    int i=1;   
    do
    {
        printf("%d",i);
        i++;
    }while(i<=10);
    return 0;
}

1.4·goto语句

goto语句:不论条件,直接跳转到指定代码处

早期版本的BASIC和FORTRAN所依赖的goto语句,在C中任然可以使用。原则上,我们根本不需要在C语言中使用goto语句,goto语句会破坏代码可读性,我们尽量避免使用goto语句。

goto语句分为两部分;goto和标签名。标签名的命名遵循变量命名规则(不能用数字开头...)

例如:

if(size>12)
    goto a;
else
    goto b;

a:printf("size大于12");
b:printf("size小于或等于12");

//当size等于13时,执行goto a;然后读取标签名a:printf("..."),执行a标签

1.5·二分法与低级延迟显示法

二分法:即一半一半的分,找中间数进行判断的方法

#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
            break;
        
    }
    if(left<=right)
    printf("找到了,下标是%d\n",mid);
    else
    printf("抱歉,没有找到!\n");       
}

思路:

?低级延迟显示法(for或while循环):

#incude<stdio.h>
#include<string.h>
#include<windows.h>//包含Sleep()函数
int main()
{
    char arr[]="abc";
    char arr1[]="Hello BUG!!!!!!!";
    char arr2[]="################";
    int left=0;
    int right=strlen(arr1)-1;
    while(left<=right)
    {
        arr2[left]=arr1[left];
        arr2[rigjt]=arr2[right];
        prinft("%s\n",arr2);
        sleep(1000);//睡眠函数,单位为ms,1000ms=1s
        system("cls");//执行系统命名,cls清空屏幕
        left++;
        right--;
    }
    return 0;
}
//请大家使用for函数实现一下用于巩固

?1.6·巩固练习:猜数字小游戏

猜数字小游戏小项目用于诊断大家对于本博客的学习情况

具体要求如下:

电脑随机生成一个1~100之间的数字

②玩家猜小了,电脑会告诉:猜小了

③玩家猜大了,电脑会告诉:猜大了

④玩家猜对了,电脑会告诉:恭喜你,猜对了

答案(仅供参考,本人自写的):

#include<stdio.h>
#include<stdlib.h>//rand()函数头文件,用于生成随机数 
#include<time.h>//调用里面的srand(unsigned int seed);因为rand随机度不够,用srand时间戳控制随机生成更好 

void menu()//游戏菜单 
{
	printf("******************\n");
	printf("****  1.play  ****\n");
	printf("****  0.exit  ****\n");
	printf("******************\n");
}

void game()//游戏本体
{
	int guess=0;
	int r=rand()%100+1;//生成随机数 0~99->1~100 
	while(1)
	{
		printf("猜数字:"); 
		scanf("%d",&guess);
		if(guess<r)
		{
			printf("猜小了\n");
		}
		else if(guess>r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		} 
	 
	}

 } 

int main()
{
	int input=0;
	srand((unsigned int)time(NULL));//时间-设置随机数的生成器(初学者这里可以不管直接用) 
	do
	{
		menu();//打印菜单
		printf("请选择:");
		scanf("%d",&input);
		switch(input)
		{
			case 1:game();break;
			case 2:printf("退出游戏\n");break;
			default:printf("选择错误\n");break;
		 } 
	}while(input);
	return 0;
} 

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:19:46  更:2022-01-17 11:21:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:38:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码