【全网最强C语言学习】C语言入门篇(主线)③——初识程序结构

【全网最强C语言学习】C语言入门篇(主线)③——初识程序结构,第1张

【全网最强C语言学习】C语言入门篇(主线)③——初识程序结构 ✨前言✨

        作为一个小白说出标题这样的话看来是有些大言不惭,但博主有心将这个系列做好、做精。实话说博主学习C语言不过两个多月,也很能明白初学者的困惑,所以会尽肯能详细。同时作为一个系统的教程,这个系列会持续推新的,所以关注博主,在学习C语言的路上结伴前行吧!

‍作者概况:  就读南京邮电大学努力学习的大一小伙

‍联系方式:2879377052(QQ小号)             [有问题欢迎留言讨论,作者尽力帮忙]✨

‍资源推荐:C语言从入门到进阶

‍今日书籍分享:《高质量的c++编程》                                                   提取码:CSDN

‍gitee码云链接: Gitee仓库 test

参考书籍:《算法竞赛入门经典》


目录

✨前言✨ 

知识点一:顺序结构

知识点二:分支结构

①是什么? 

②逻辑的真假

③悬挂else问题

④加不加{ }

⑤switch+case语句

知识点三:循环结构

①是什么

②for语句(最常用)

③while语句

④do while语句

后记


 ✨前言✨ 

        在上一篇博客里(没看过,点这里),我们学习了变量和与之相对的常量,重点讲了字符串的相关知识,特别是‘’问题,在最后还介绍了转义字符的相关知识。现在请试着对照上篇文章的目录一条一条回忆知识,检测自己的掌握程度。

        在正式开始之前,博主还想啰嗦几句,有的朋友反映还看不大懂,但我要说没关系,正如我们的标题是“初始C语言”,我们这一轮的目的是让大家对C语言大部分的知识达到有所了解的程度,让大家在读代码的时候不至于不懂。在完成这一环节后,我们才会对各大知识块系统深入剖析,那才是真正要掌握的时候。大家一起努力吧!!!


程序的基本结构有三种,分别是顺序结构,分支结构,和循环结构。复杂程序结构都是这三种基本结构的组合。我们现在来介绍这三种结构。

知识点一:顺序结构

顾名思义,顺序结构就是程序自上往下按照顺序依次运行。看段代码体会一下吧。程序自上往下依次执行scanf和printf语句

int main()
{
	int n = 1;
	scanf("%d",&n);//输入一个数字
	printf("%d",n+10);
	return 0;
}
知识点二:分支结构

思考一下,如果程序执行的过程并不是一条路走到底,而是有选择的执行部分语句,这就用到了分支结构。为了便于理解,我们下面先用伪代码书写

①是什么? 

从字面意思详细大家都可以理解if和else的意思。其实C语言很多的语句,关键词,函数的作用都可以从字面理解。

int main()
{
    if(条件)
    {
        语句1;
    }
    else
    {
        语句2;
    }

    return 0;
}


int main()
{
    if(条件)
    {
        语句1;
    }
  
    return 0;
}

if语句也可以嵌套。

【注意】不管怎么嵌套,都只会执行其中的一条代码

int main()
{
    if(条件1)
    {
            
        if(条件2)
        {
            语句1;
        }
        else
        {
            语句2;
        }

    }
    else
    {
        if(条件3)
        {
            语句3;
        }
        else
        {
            语句4;
        }
    }

    return 0;
}

多分枝也可以这么写

int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)
        printf("少年");
    else if(age<40)
        printf("青年");
    else if(age<60)
        printf("壮年");
    else
        printf("暮年");
    return 0;
}

 

为大家梳理一下上面语句的逻辑:

若条件1成立,进入条件2判断;若条件2为真,则执行语句1,若条件2为假,则执行语句2。

若条件1不成立,则直接进入else语句,并同上进行判断。

②逻辑的真假

在判断语句中为0则为假,非0则为真。所以if(1),if(-1)都为真,if里的语句都会执行。而if(0)则判断为假,不会执行if语句,此时如果有else则执行else语句。

③悬挂else问题
#include
int main()
{
	int n = 10;
	if(n>20)
		if (n > 5)
		{
			n = 100;
		}
	else
	{
			n = 1;
	}
	printf("%d",n);
	return 0;
}

运行后发现n的值仍然是10,不知道大家有没有掉进坑里去呢。大家是不是认为n>20不成立所以进入了else语句。这里向大家介绍一个原则,else与最近的if语句匹配 。什么意思呢,我们对上边代码进行等价变形,这样现在是不是看清楚了。从这个问题中我们还可以学到一点:代码的规范书写很重要  。

int main()
{
	int n = 10;
	if (n > 20)
	{
		if (n > 5)
		{
			n = 100;
		}
		else//else和第二个if匹配
		{
			n = 1;
		}
	}
	printf("%d",n);
	return 0;
}
④加不加{ }

原则:if语句下只有一条语句时可以不加,如果有多条则必须加(else同理)。

int main()
{
	int n = 10;
	if (n > 1)
		printf("hehen");//只有一条语句,{}可加可不加

	if (n < 20)
	{
		printf("hahan");//有两条以上语句,必须交{}
		n = n + 10;
	}

	if (n < 20)
		printf("xixin");
	n = n + 10;//没加{}则这条语句不算在if语句内,所以不管if(n<20)成不成立都会加

}
⑤switch+case语句

上面的if不过是选择结构的一种形式,另一种形式就是switch+case语句。话不多说,先上代码。

#incldue
int main()
{
    int day=0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:printf("星期一:好好学习n");
        case 2:printf("星期二:好好学习n");
        case 3:printf("星期三:好好学习n");
        case 4:printf("星期四:好好学习n");
        case 5:printf("星期五:准备happyn");
        case 6:printf("星期六:好好happyn");
        case 7:printf("星期天:好好happyn");
    }

}

解释:switch翻译过来就是“开关,转换”的意思,这里的作用也是这样。

switch(day)就相当于跳到对应day的case语句执行,注意switch后面的表达式可以为整型,字符型,枚举型,但不可以是浮点型。

case必须是常量,且类型与表达式类型相同。

使用范围:正如上面的代码所展示的,switch语句适合分支特别多的情况,如果用if语句实现上述代码,麻烦不说,看着也不清爽。 

特性:我们先看看上述代码执行结果再来总结,我们输入1看看输出结果是什么。咦,为什么跳转到case1语句其他的结果也会被打印出来呢?其实switch只是跳转到对应的case开始执行,只要没有break,就会顺序执行,不会停止。等等!什么是break呢,其实从他的名字可以猜测出,就是跳出来休息嘛。while中的break是用于永久终止循环的。

 我们对上面的代码加上break后再演示一下。

其实除了case之外还有default,表示除了case所描述的情况之外的情况 。如我们可以把case 7改成default,则输入的day只要不是1 2 3 4 5 6,都会进入dafault语句。

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:printf("星期一:好好学习n"); break;
    case 2:printf("星期二:好好学习n"); break;
    case 3:printf("星期三:好好学习n"); break;
    case 4:printf("星期四:好好学习n"); break;
    case 5:printf("星期五:准备happyn"); break;
    case 6:printf("星期六:好好happyn"); break;
    default:printf("好好happyn"); break;
    }

}

注意:switch语句,可读性更好,整体流程看起来清晰明确。 if语句适应性更强,可以处理更多的情况。 所有的switch语句都可以写成if的形式 

知识点三:循环结构 ①是什么

生活中某一些事情是需要循环去做的,就比如天天都要好好学习。在程序里循环执行某个过程的结构,成为循环结构。循环结构有三种形式,while,for,do……while。下面分别介绍

②for语句(最常用)

格式:for(初始化;条件;调整)

例如:for( i=0;i<10;i++)  :表示i的初始值为0,循环一次后i+1,只要i<10,循环持续执行

          若i没有初始化,上面的式子也可以写成for(int i=0;i<10;i++)

适用范围:明确循环次数

写段代码体会一下,实现功能:输入一个n,在屏幕上输出1~n,每个数字各占一行。

int main()
{
	int n;
	int i;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		printf("%dn",i);
	}

}

带大家梳理一下:以输入n=2演示

1.初始化i=1,i<=2条件成立。进入循环,在屏幕打印1并换行

2.回到for语句一行,此时先执行i++,此时i=2,i<=2成立。进入循环,在屏幕打印2并换行

3.回到for语句一行,此时先执行i++,此时i=3,i<=2不成立,跳出循环,此时i==3

③while语句

格式:while(条件)+循环体;

适用情况:适合循环次数不确定的情况

写个代码加深对适用情况的理解:大家也可以先想想再看代码,有基础的话

3N+1问题:对于任意大于1的自然数N,若N为奇数,则N变成3N+1问题,否则变为N的一半,则最终N一定会变成1,。输入N,输出变换次数

分析:在这个问题中我们只知道这个过程要被反复执行,但不确定具体需要多少次循环,所以我们就把这个问题抛给计算机去想嘛。while(N不等于1)就让他一直干!

#include 
//有缺陷版
int main()
{
	int n = 0;
	int count = 0;//作为计数变量
	scanf("%d",&n);
	while (n != 1)  // = 是赋值符号    ==用于判断相等   !=判断不相等
	{
		if (n % 2 == 1)//%表示取余数   比如7除以4等于1,余3 所以 7%4 ==3
		{
			n = 3 * n + 1;//乘不是×,而写成*,也不能直接3n
			count++;//count++等价于count=count+1;
		}
		else
		{
			n = n / 2;
			count++;
		}
		printf("%d",count);
	}
	return 0;
}

上述代码的问题可能问题在于n的范围在int内,3*n+1就溢出,所以需要用longlong类型,有兴趣可以研究一下。(输入要lld)

④do while语句

格式:do{循环体}while(条件)

适用范围:循环终止判断是在计算之后,而不是在计算之前

 我们设计代码实现下面的功能:设计一个计算器的菜单选项,若输入错误则重复出现菜单

int main()
{
	do 
	{
		int n = 0;
		printf("*******************n");
		printf("*******************n");
		printf("**1.加法   2.减法**n");
		printf("*******************n");
		printf("*******************n");
		printf("请选择:");
		if (n == 1 || n == 2) //  ||表示或者
		{
			break;//如果输入正确则跳出循环
		}
	} while (1);//除非break跳出循环,否则一直执行

	//实现加法减法功能,这里略
	return 0;
}

注:上面三种循环的使用并不死板,其实都可以互通

后记

学到这里大家可以开始尝试刷题了,这里我推荐大家从牛客网在线编程里的编程初学者开始上手。答案不清楚的可以参考排行榜上的代码                               牛客网

  往期内容链接:

【全网最强系列】

【全网最强C语言学习】C语言入门篇(主线)——初始C语言①

【全网最强C语言学习】C语言入门篇(主线)——初始C语言②

【深入剖析系列】

【深入剖析C语言】C语言与内存

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4749024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存