首页 > 其他分享 >C语言学习笔记(二)分支语句和循环语句

C语言学习笔记(二)分支语句和循环语句

时间:2023-07-16 13:11:42浏览次数:40  
标签:语句 case int 笔记 C语言 break while printf

分支语句和循环语句

分支语句(选择结构)

  • if语句
  • switch语句

if语句

==:判断

=:赋值

-------------------------------------------------1---------------------------------------------------------
if (条件)
{
	语句;
   	......
}
-------------------------------------------------2---------------------------------------------------------
if (条件)
{
	语句1;
    .....
}
else
{ 
	语句2;                            //注意if和else后面没有冒号
	......
}
-------------------------------------------------3---------------------------------------------------------
//多分支
if(条件1)
{
    语句1;
}
else if(条件2)
{
    语句2;
}    
else
{
    语句3;
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
    int age=20;
    if (age<18)
    {
        printf("未成年\n");
    	printf("nonono\n");
    }                           //包含多条语句时要使用大括号
    else if(age>=18 && age<28)  //此处不能写为18<=age<28
        printf("青年\n");
    else
        print("123");
    return 0;
}
---------------------------------------------悬空else问题----------------------------------------------------
#include <stdio.h>
int main()
{
    int a=1;
    int b=2;
    if (a<0)
    	if(b<0)
    		printf("nonono\n");                            
    else   
        printf("yes\n");
    return 0;
}                       //此时什么都不输出,因为else会和最近的未匹配的if匹配

#include <stdio.h>
int main()
{
    int a=1;
    int b=2;
    if (a<0)
    {	if(b<0)
    		printf("nonono\n");
    }                           
    else   
        printf("yes\n");
    return 0;
}                       //此时输出yes

书写形式对比

if(条件)
{
	return x;
}
return y;
//满足条件返回x,不满足返回y
if(条件)
{
	return x;
}
else
{
	return y;
}

输出1-100的奇数

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=0;i<100;i++)
        if(1==i%2)
            printf("%d ",i);
    return 0;
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
    int i = 0;
    while(i<100)
    {    if(1==i%2)
         {   
            printf("%d ",i);
         }
    	i++;  //注意此处i++要在if判断外
    }
    return 0;
}

switch语句

switch语句常用于多分支的情况

switch(整型表达式)  //类型必须是整型
{
    case 整型常量表达式:   //可以是表达式,但运算结果必须是 整型常量
	语句项;
	//break;

//整型表达式是几,就从case 几 进入
	语句项;
	......
}  


------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:               //注意case和数字之间要有空格
            printf("星期1\n");
            break;            //注意要有break;   用于跳出switch语句。不然会继续执行后面的代码
        case 2:
            printf("星期2\n");
            break;
        case 3:
            printf("星期3\n");
            break;
        case 4:
            printf("星期4\n");
            break;
        case 5:
            printf("星期5\n");
            break;
        case 6:
            printf("星期6\n");
            break;
        case 7:
            printf("星期天\n");
            break;
    }
    return 0;
}
------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:                                   
        case 2:     
        case 3:
        case 4:
        case 5:
            printf("工作日\n");         //输入1-5,都会输出”工作日“
            break;
        case 6:
        case 7:
            printf("休息日\n");
            break;
        default:                      //处理无法匹配的数字
            //printf("输入错误!");     //case和default的前后顺序没有严格要求
            break;                    //每个switch语句只能出现一个default子句
    }
    return 0;
}

循环语句

  • while语句
  • do-while语句
  • for语句

while循环

while(条件)    //注意此处没有冒号
{
	循环语句;  //循环执行,直到条件为假
    ......;
}

在屏幕上打印1-10

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

break:一旦执行,终止此次循环,跳出循环

    while(i<11)
	{   
        if(i==6)
            break; //此处跳出整个while循环
		printf("%d\n",i);
        i++;
	}

continue:一旦执行,终止此次循环,并返回循环开头,继续执行

int i=0;
    	while(i<11)
	{   
        if(i==6)
            continue; //跳过本次循环,跳回while循环开头,然后继续执行-->此处陷入死循环
		printf("%d\n",i);
        i++;
	}

getchar()、putchar()

getchar()定义:用于接收键盘输入的字符。

int ch=getchar();

putchar()定义:输出字符。

putchar(ch);

举例

#include <stdio.h>
int main()
{
	int ch = 0;                //注意getchar要放在while的判断条件处,来实现循环输入;不能放在while循环前
	while((ch=getchar())!=EOF) //EOF(end of file,值为-1):即ctrl+z  
	{
		putchar(ch);
	}
    return 0;
}

使用putchar()之前需要清空缓存区

while((ch=getchar()) != '\n')//循环检查缓冲区,知道读走缓冲区的最后一个字符'\n'
{
    ;//不用进行任何操作,只需函数去读取缓冲区内容即可
}

注意:scanf()函数只会读取空格前面的内容,遇到空格就终止读取。

for循环

for(表达式;表达式;表达式)//表达式1为初始化部分;表达式2为条件判断部分;表达式3是调整部分
{
		循环语句;
		......
}
//while循环的缺陷:三个部分分布较分散

在屏幕上打印1-10

#include <stdio.h>
int main()
{
    int i=1;//创建变量
    for(i=1;i<11;i++)//定义、判断、调整
    {
        printf("%d ",i);
    }
    return 0;
}

break和continue:与while循环大致相同,但是for里面的continue拥有调整机会,while里面的continue可能会跳过调整语句。

注意:

1.不可在for循环体内改变循环变量。

2.建议采取左闭右开的区间写法

do...while循环

至少循环一次

do
{
    循环语句;
    ......
}
while(表达式);//这里的表达式只写条件判断语句

在屏幕上打印1-10

 #include <stdio.h>
int main()
{
	int i = 1;
	do                       //do后面接多条语句的时候要加大括号
    {
		printf("%d ",i);
        i++;
    }
	while(i<11);
	return 0;
}

break和continue:与while循环相同,且continue后没有调整机会,可能陷入死循环

练习题

1.计算n的阶乘

#include <stdio.h>
int main()
{
    int n = 0;
    int s = 1;
    int i = 0;
    int jc = 0;
    scanf("%d",&n);
    for(i=n;i>0;i--)
    {
        s=s*i;
        
    }
    printf("%d阶乘为:%d",n,s);
    return 0;
}

2.计算1!+2!+...+n!

#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    int s = 1;
    int n = 0;
    int sum = 0;

    printf("请输入一个整数:");
    scanf("%d", &n);

    for (i = n; i > 0; i--)
    {
        s = 1;  // 重置 s 为 1
        for (j = i; j > 0; j--)
        {
            s = s * j;  // 计算阶乘
        }
        sum = sum + s;  // 累加阶乘的和
    }
    printf("阶乘的和为:%d\n", sum);
    return 0;
}

改进版:

#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    int s = 1;
    int n = 0;
    int sum=0;
    scanf("%d",&n);
    for(i=1;i<n+1;i++)            
    {   
        s=s*i;   //利用前一个已经计算好的阶乘结果
        sum=sum+s;
    }
    printf("阶乘的和为:%d",sum);
    return 0;
}

3.二分查找

二分法

计算复杂度:
$$
log_2N
$$

#include <stdio.h>
int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr)/sizeof(arr[0]);//数组的元素个数
    int left = 0;//区间最左边的角标
    int right = sz-1;//区间最右边的角标
    int k = 7;//要查找的数字是7

    while(left<=right)               //注意执行循环的条件,此条件代表区间里有数可以找
    {
        int mid = (left+right)/2;
        if(arr[mid]>k)
        {
            right = mid-1;
        }
        else if(arr[mid]<k)
            {
                left = mid+1;
            }
        else if(arr[mid]==k)
            {
                printf("find!number=:%d",mid);
                break;//跳出循环
            }
    }
    if(left>right)
    {
     
        printf("can not find!");
    }
     return 0;
}

标签:语句,case,int,笔记,C语言,break,while,printf
From: https://www.cnblogs.com/arongsec/p/17557728.html

相关文章

  • C语言学习笔记2
    数组所谓数组,就是一个集合,里面存放了相同类型的数据元素特点:数组中的每个数据元素都是相同的数据类型,数组是由连续的内存位置组成的。一维数组一维数组定义方式3种:1数据类型数组名[数组长度];创建一个数组,[]里给一个常量表达式,不能是变量。2数据类型数组名[数组长度]......
  • 全网最详细4W字Flink入门笔记(下)
    本文已收录至Github,推荐阅读......
  • 全网最详细4W字Flink入门笔记(上)
    本文已收录至Github,推荐阅读......
  • 整体二分 学习笔记
    对多个答案同时二分。每次将答案在\([l,r)\)中的询问按答案与\(\text{mid}\)的关系丢进两个\([l,\text{mid})\)和\([\text{mid},r)\)的std::vector里,递归求解即可。递归终止的条件:可能的答案区间长度为\(1\),此时答案唯一确定。例题:带修区间\(k\)小将修改和询......
  • C语言:数据结构之单链表(四)
    本篇谈一谈单链表的改,具体操作就是找到他,然后修改元素即可,上一篇有相关代码,可以参考。改函数代码如下:voidCorrect(LinkListheader,intsite_,charletter_){LinkListq=Search_Site(header,site_);q->letter=letter_;}main函数如下:(修改第6,......
  • spring完整笔记
    第一章初识Spring1.1Spring简介Spring是一个为简化企业级开发而生的开源框架。Spring是一个IOC(DI)和AOP容器框架。IOC全称:InversionOfControl【控制反转】将对象控制权由程序员自己反转交个SpringDI全称:DependencyInjection【依赖注入】Spring管理对象与对......
  • #Deeplearning#人工智能导论学习笔记
    神经网络基础线性函数(得分函数)计算每个类别的得分:每个像素点都会影响结果(像素点的权重参数)f(image,parameters)每个像素点都需要有一个权重,每个像素点会按RGB拆分成三个矩阵中的元素单行矩阵(每个像素点的权重)x像素点(所有像素点)=1x1矩阵(得分)f(x,W)=Wx+b简而言之,就是每......
  • 《架构整洁之道》学习笔记 Part 2 编程范式
    计算机编程发展至今,一共只有三个编程范式:结构化编程面向对象编程函数式编程编程范式和软件架构的关系结构化编程是各个模块的算法实现基础多态(面向对象编程)是跨越架构边界的手段函数式编程是规范和限制数据存放位置与访问权限的手段软件架构的三大关注重点:功能性、组......
  • 【学习笔记】山东省队第三轮集训
    Day2A.sequence题目描述:题目分析:考虑一个很简单的\(dp\)就是设\(f[i]\)表示考虑了前\(i\)个位置最多可以划分为多少个序列。转移就是可以直接从\(f[i-1]\)继承,或者从\(j\)满足\(\sum_{k=j+1}^{i}c_i=0\),也就是前缀和相等。可以发现的是对于从\(j\)转移这种......
  • tarjan 学习笔记
    tarjan学习笔记求解强联通分量我们从一个点开始建立dfs树,有如下四种边:树边若\(u\)到\(v\)有边,且满足\(v\)没有被访问过,则这条边为树边返祖边若\(u\)到\(v\)有边,且满足\(v\)已被访问过,则这条边为返祖边横叉边若\(u\)到\(v\)有边,且满足\(u\)和......