飞道的博客

【C语言基础学习笔记】一、初始C语言(总结篇)

283人阅读  评论(0)

说明:我是一个初学c语言的小白,很多地方都不是很理解,所以就会自己动手敲代码进行相应的推理验证,希望可爱的你在看到这些步骤时,不要嫌弃我啰嗦。(近期有很多小可爱给我私发消息,问我怎么学习编程,怎么学好c语言等问题,所以在这里我统一进行解答和回复,希望可以帮到大家。)


本章内容:
1、如何学好编程,编程学习方法分享(小白必看~)
2、编程学习路径分享(C++/Java)
3、初始C语言总结思维导图(复习+提高 专用)
4、初始C语言知识补充(查漏补缺)
5、编程练习题(巩固加深所学知识)



一、如何学好编程

相信有很多小伙伴都跟我一样,刚接触编程,刚接触C语言,担心自己学不会或者学不好(也有一些同学可能在学校中已经接触过C语言,但是限于自己学习的渠道和方法,导致自己对编程学习的兴趣和自信直线下降,备受打击,陷入深深的自责和懊悔。)。所以近期我收到很多小可爱们给我的私信问:“张同学,你是怎么学编程的?有没有好的编程学习方法?我该怎么做才能学好编程呢?”等等诸如此类的问题。在这里我结合自己的学习经历,以及身边一些自学编程成功同学的经历,统一回复帮助大家解决这些烦恼和问题。
1、调整好自己的心态:在你每次学习编程质疑自己的时候请一定要记住这句话:”每一个人都可以,也有能力学好编程”。编程学习并不是一个需要多高的智力,高超的技巧才能学会的东西。它和我们从小到大经历过的每一种新的知识一样,需要熟能生巧,需要刻意练习!
2、学会一些好的学习方法:①电脑记笔记+知识夹整理:编程学习涉及到的知识内容会比较多,理解的东西也会很多,很多时候需要有相应的图例+代码+额外知识链接(比如网站、博客等),个人建议用电脑或者平板去记笔记,最好能支持同步上传,这样就不用担心自己的笔记丢失。不建议线下手写记笔记的方式,太慢,效率低,不方便复习查看,易丢失。推荐软件:OneNote、有道云笔记、印象笔记等等。
②学会定期总结和复习:总结是对自己所学知识的一个提高和整理,建议学习的过程中要定期去进行总结和复习(比如我自己采用章节总结的方式,每学完一章节进行总结和复习)。建议总结和复习方式:思维导图 推荐软件:xmind
3、养成写博客的习惯:学习的过程是一个输入知识的过程,而写博客则是将自己所学知识输出的一个过程。自己在写博客的过程中会不断的向自己提问,能真正发现学习过程中没搞懂或者有疑惑的地方。此外,写博客代表你是一个敢于分享,乐于分享的人,这样你不但可以在学习过程中体会到快乐,还能在分享学习知识的过程中体会快乐(双重快乐,快乐翻倍!)。每一个厉害的牛人也都是一步一个脚印从菜鸟过来的,所以不要去害怕自己写的不好,不敢去分享。
4、养成每天敲代码,上传代码的习惯:推荐代码上传网站GitHub(国外),Gitee(国内)。GitHub服务器在国外,所以在使用过程中网速受限,Gitee是国内的代码托管平台,界面风格和使用几乎和GitHub一致,但是网络访问速度更快,使用体验更好。


上面说的这些都是学习编程的前期准备环节,接下是编程学习过程中的具体方法
(1)c语言被称为编程之本,是一门非常值得学,也适合去学的编程语言!(c语言也是最好的编程入门学习语言!)
(2)学习不能叫苦叫累,抱怨没时间:与戴皇冠,必承其重,真正牛逼的人都是合理安排时间,把自己有限的时间花在他觉得最重要的事情上面。
(3)拒接做伸手党:学习编程最重要的过程就是“要学会自己尝试去解决遇到的各种问题,因为在尝试解决问题的过程中,你才会去想尽各种各样的方法,从多个角度思考,才能真正的提高自己的编程能力”(不要转牛角尖,这里不是说不管遇到什么问题都不要请教别人,在我们的学习中,生活中,以及今后的人生中,向他人学习是非常重要的。只是要注意在请别人帮忙之前要花心思去想想,去尝试自己解决,不要一有问题就甩给别人,别人解决了,你并不能获得解决问题过程中的提升!)


二、编程系统学习路径

学好C语言不代表学好编程,二者不是等价的!编程的学习包括:编程语言、数据结构和算法、操作系统、计算机网络及网络编程、数据库、脚本语言。 在学习的计算中,一定要自己多去实践!多敲代码!
C++/Java编程系统学习路径分享:

①编程语言的学习:选一门经典语言深入学习,多敲代码多实践。
②数据结构和算法:建立在掌握编程语言的基础上,听懂 / 看懂 + 实践。
③操作系统、计算机网络和网络编程:上课认真听讲,理解 + 看书(几本好书),实践
④数据库、脚本语言:相对简单


三、初始C语言总结篇

该部分内容是对初始C语言(1)(2)(3)的总结,建议在阅读之前先看一下之前的三篇文章,对照阅读效果更佳!


四、初始C语言知识补充

(1)C语言是一门通用计算机编程语言,广泛应用于底层开发。那么什么叫做底层开发呢?

一般我们所购买的电脑都是硬件设备,需要在电脑上安装操作系统,比如windows / Linux / macos等,但是操作系统并不是直接控制电脑硬件,而是通过中间层-- - 驱动(各种驱动软件),来间接操控硬件设备。在操作系统安装完成后,如果我们需要丰富多彩的体验和功能,就需要安装应用软件,比如社交聊天用的QQ、微信、网络资源管理和共享的云盘网盘、娱乐放松的电脑游戏,这些都存在与应用层。通常我们将应用层往下称为底层。
(2)常见文件后缀.c-- - 源文件 (c语言格式source).h-- - 头文件(head).cpp-- - 源文件(c++格式).exe-- - 可执行程序
(3)一个工程中有且仅能有一个main函数(主函数),一个工程中可以有多个.c源文件,多个.h头文件,但是多个.c文件中有且仅能有一个main函数。分析理解:main函数是整个工程程序执行的入口,如果出现了多个main函数,那么程序就不知道该从哪个入口进去,不知道执行哪个main函数,就会出错!
(4)变量的声明和定义、函数的声明和定义可以放到main函数外面,但是执行类的语句不能放到main函数外面
例如:全局变量a的声明和定义可以放到main函数外面,但是打印a的值这条执行语句不能放到main函数外面。

(5)转义字符中的’(单引号)"(双引号)什么时候使用呢? ‘(单引号)"(双引号)之所以要进行转义,是为了解决’ ’ 和 " " 配对的问题。
例1:如果我们要打印输出单引号’ ,若不加\进行转义,则出现’ ‘异常配对,加上\后进行转义可以解决’ ‘异常配对的问题


例2:如果我们要打印输出双引号’ ,若不加\进行转义,则出现" “异常配对,加上\后进行转义可以解决” "异常配对的问题


(6)计算机中键盘上敲出的字符:比如 a b ` 1 @ 等等,这些字符都是按照ASCII码表上对应的ASCII码值进行存储的,并不会直接对字符进行存储。所以说字符类型也算整型。

五、编程练习题(牛刀小试)

1、写代码将三个数按从大到小输出

#include<stdio.h>
//1、写代码将三个数按从大到小输出
int main()
{
   
	int a = 0;
	int b = 0;
	int c = 0;
	printf("please input three numbers:>>\n");
	scanf("%d%d%d", &a, &b, &c);
	//算法分析  将最大数放到a,次大值给b,最小值给c
	if (a < b)//如果a小于b,交换a,b两者的值
	{
   
		int temp = a;
		a = b;
		b = temp;
	}
	if (a < c)//如果a小于c,交换a,c两者的值
	{
   
		int temp = a;
		a = c;
		c = temp;
	}
	if (b < c)//如果b小于c,交换b,c两者的值
	{
   
		int temp = b;
		b = c;
		c = temp;
	}
	printf("%d  %d  %d\n", a, b, c);//不管输入的三个数的大小,均按照a,b,c的顺序打印
	return 0;
}

结果展示:


2.写一个代码打印1 - 100之间所有3的倍数的数字

//方法一
#include<stdio.h>
int main()
{
   
	int i = 0;
	int count = 0;//计数
	for (i = 1; i <= 100; i++)
	{
   
		if ((i % 3) == 0)
			printf("%d  ", i);
		count++;
	}
	printf("1-100之间3的倍数的个数为 %d\n", count);
	return 0;
}

//方法二
#include<stdio.h>
int main()
{
   
	int i = 0;
	int count = 0;
	for (i = 3; i <= 100; i += 3)
	{
   
		printf("%d ", i);
	}
	printf("1-100之间3的个数为:%d\n", i);
	return 0;
}

结果展示:


3.给定两个数,求这两个数的最大公约数 //最大公约数又称最大公因数
首先要知道什么时约数 / 因数, 例如:整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
辗转相除法:
比如说求 24 18 的最大公约 数,24 % 18 = 6 != 0 ,18 % 6 = 0 ,那么这个6就是24和18的最大公约数 m % n = r != 0 , m = n, n = r , r = m % n, 判断r是否为0 若r为0, 则n为最大公约数,若不为0,继续循环执行。

#include<stdio.h>
//3.给定两个数,求这两个数的最大公约数
int main()
{
   
	int m = 0;
	int n = 0;
	int r = 0;
	printf("请输入两个正整数求它们的最大公约数:>>\n");
	scanf("%d%d", &m, &n);
	while (m % n)
	{
   
		r = m % n;
		m = n;
		n = r;
	}
	printf("最大公约数是:%d\n", n);
	return 0;
}

结果展示:


4.打印1000年到2000年之间的闰年
闰年的判断条件有两个
1)能被4整除,不能被100整除是闰年
2)能被400整除是闰年

#include<stdio.h>
int main()
{
   
	int year = 0;
	for (year = 1000; year <= 2000; year++)
	{
   
		if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
			printf("%d ", year);
	}
	return 0;
}

结果展示:


5.写一个代码:打印100 - 200之间的素数
素数:也叫做 “质数”,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,也就是不能再整除其他数。

#include<stdio.h>
//方法一:试除法       效率较低
int main()
{
   
	int i = 0;
	int count = 0;
	for (i = 100; i < 200; i++)
	{
   
		//试除法 从2到i-1试除
		int j = 0;
		for (j = 2; j < i; j++)
		{
   
			if (i % j == 0)
				break;
		}
		if (j == i)
		{
   
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

结果展示:

这种方式效率比较低,我们注意到如果一个数是素数,那么它可以分解成两个因数相乘的形式 如素数 n = a * b 且a, b中至少有一个数是小于或等于 开平方n的 sqrt(n), 那么我们在试除的时候就没有必要除到i - 1 只需要除到 开平方i就行,开平方函数sqrt(),头文件为math.h 代码优化后:

#include<stdio.h>
#include<math.h>
int main()
{
   
	int i = 0;
	int count = 0;
	for (i = 100; i < 200; i++)
	{
   
		//试除法 从2到sqrt(i)试除
		int j = 0;
		for (j = 2; j <= sqrt(i); j++)
		{
   
			if (i % j == 0)
				break;
		}
		if (j > sqrt(i))
		{
   
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

6.编写程序数一下1到100的所有整数中出现多少个数字9
要判断出现数字9的情况有两种 x % 10 == 9, x / 10 == 9

#include<stdio.h>
int main()
{
   
	int i = 0;
	int count = 0;
	for (i = 1; i <= 100; i++)
	{
   
		if ((i % 10) == 9)
			count++;
		if ((i / 10) == 9)
			count++;
	}
	printf("count = %d\n", count);
	return 0;
}

结果展示:


转载:https://blog.csdn.net/QIYICat/article/details/115603341
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场