前言

Everybody!欢迎来到一飞的博客!没错,历经将近三个礼拜的间隔,我又回来啦!前端时间由于在学校里学习和生活上的各种事情,停更了不短的时间,现在,我回来啦!

不在的时间里,我也关注着我的CSDN,没想到反倒是不更的这段时间,关注数涨了一倍!令我意外!

废话不多说,依然是像往常一样!用最朴实的语言为大家分享我在编程路上学习的一点一滴和心得感受!

年前的学习安排

转眼已经腊月中旬啦!我为自己安排了大概一个多礼拜的学习时间,这段时间里我会开始集中地较为深入地学习C语言的每一个知识点,并加以大量的练习题!俗话说,光说不练假把式。练习题必不可少!

当然,像以前一样,为了让我写的东西更加接地气,我尽量不会放出大段大段知识点的代码段,这些东西不是我在博客里想表达的,我仍会加入自己的思考过程,向大家展示出我学习中最真实的一面

另外,由于在学习C语言的同时我还要提前预习高数和计算机等课程,所以这段时间里博客更新地肯定不会很频繁了,我估计大概2~3天会出一篇!当然,量不是最重要的!最重要的是坚守我写博客的初心,也就是用心记录我的成长

旧知识的回顾

之前学习C语言的两个星期里,对一些细节的感受和印象颇深,再次敲起代码,仍会对这些感到亲切。

一串快遗忘的代码

我记得我之前在博客里写过不少次关于VS里scanf的使用,就是说由于VS对C语言一些语法的支持性问题,若想要正常使用它,需要在源文件开头加上以下代码

#define _CRT_SECURE_NO_WARNINGS 1

仅仅两个多礼拜不上手,我就没办法敲全这串代码了。毕竟初学,虽然印象深,但是没有记死,我还记得我为了练熟练度,没有按网上教程设置初始源文件格式。也许哪一天我真的烦了,会去做这件事吧哈哈哈。

过了一次的老知识

虽说我之前浏览过一次C语言的大概内容,但是由于太浅,很多已经遗忘了,不过好在大部分最基础的我都记住了,这基本上就够了吧。

现在再让我说说看过什么,我只能更加浅薄模糊地谈一谈,脑子里飘过的关键词甚至也不太多了。例如静态变量、局部变量、全局变量、指针、整型、浮点数、函数、宏定义、for循环、while循环、数组......总之,记得的东西不能说很多了。不过保留的习惯还是蛮多,例如main函数的使用习惯,return 0 的输入等等。

循环的学习

准确来说分支和循环语句,但主要是循环。其实昨天就开始学了,但是昨天做完题玩了一晚上,没精力写了......

这个循环,我真的是一言难尽。没学的时候,我觉得这个东西神秘莫测,难的不行;学完知识点,我觉得循环好简单哇!然而,一做题我人快傻了,找了些循环的题,结果这才意识到这是多么恐怖的东西。

循环学习的难度不在于循环本身,而是如何将它运用到你实际的操作中。也就是说,没有哪道题是很简简单单让你仅仅用for重复打印个东西!而是你需要看出问题背后的算法,这其中需要用到的循环的框架。而且,对于我这个初学者来说,框架里的算法和我没见过的新东西才是对于挑战最大的地方!接下来分享一下我做的一些题吧。有的还行,有的简直丧心病狂。

1.给输入的三个数排列大小

这个问题其实我以前在学python的时候就已经见识过了。当时老师给我们留上机作业,在十个问题里挑出2三个做,这个大小排列当时以为很简单,就试了试,结果想不出什么好的算法,只会用枚举......

当然,这个问题我当时没有深入研究,所以昨天我做的时候,依然是没有什么头绪,自己琢磨了半个多小时!依然是想不出什么好的算法!我最后“认输”看了答案,答案的解法我确实根本想不到,它的思路是利用两两比较和交换赋值,将a、b、c依次从大到小赋值,也就是说最后处理完的a、b、c就是从大到小排列,只需按顺序打印输出即可。稍微贴一下:

#include <stdio.h>
int main()
{int a = 2;int b = 3;int c = 1;scanf("%d%d%d",&a, &b,&c);if(a<b){int tmp = a;a = b;b = tmp;}if(a<c){int tmp = a;a = c;c = tmp;}if(b<c){int tmp = b;b = c;c = tmp;}printf("a=%d b=%d c=%d\n", a, b, c);return 0;
}

这与我的思路差远了!我也进一步从这里明白了机器算法和人脑算法的区别之大!我的第一想法是先利用我以前写过的求最大值的题目里的算法,求出三个值里的最大值,然后再求剩余两个值里的较大值,最后这三个数的大小关系就明了了!然后当我开始写我就傻了:求出最大值之后,我怎么样才能之后剩下的是哪两个数呢?我思考了良久,最后肯定,我没办法啊啊啊啊~~~我中间还尝试过用if进行分类,不过实在是太麻烦了,甚至要分出三大类六小类!不大的问题,用这么多代码显然是冗余用费事!                        

我反复剖析答案,终于体会到了它的精妙之处,它与我的思考是一致的,但是实施办法是反的:既然我求最大值完了不好确定是哪个变量,那么干脆变量不动,直接通过两两比较交换的办法把最大值给a,次大值给b,最小值给c!然后顺次打印即可!这思路确实很妙,还用到了中间变量,非常值得我思考!

2.求两个数的最大公约数

这题算法很有意思。昨天我看到题的时候,想了几分钟,没有很明确的思路,但是不一会儿后,我脑子里突然蹦出来一个想法,就是盯住了“最大”两个字,既然是最大的公约数,那我可以尝试着用较大的去模较小的数,直到结果为零时,说明我找到了最大公约数!想到这,我欣喜若狂,赶紧动手去操办!结果如下:

#include <stdio.h>int main()
{int a, b, x, i;scanf("%d %d", &a, &b);if (a <= b){x = b;b = a;a = x;}for (i = b; i > 0; i--){if (a % i == 0 && b % i == 0){printf("%d", i);break;}}return 0;
}

没错,就是这串代码,我运行了一次,毫无问题,高兴极了!但是我又看了看答案,甚是懵逼

#include <stdio.h>
int main()
{int a = 18;int b = 24;int c = 0;while(c=a%b){a = b;b = c;}printf("%d\n", b);return 0;
}

一上眼我根本看不懂啊?!但是我又静下来分析:先不管abc的值,先看while括号里的条件:注意,c后面不是双等号,也就是说这不是一个判断,而是赋值!也就是说,当c等于a%b等于0时,才会跳出循环,并且输出b。第一次循环过后,我发现a和b交换了值!也是就是说a%b变成了大模小!这和我算法里第一步用if语句里的中间变量调大小位置是一致的!只是他这个我怎么也是想不到的......后面我不想分析了,原理我暂时搞不清,等我搞清再来弄它!

3.猜随机数游戏

最后来个大的。实际上这和上面那两道题都不是同一个级别的,这个涉及到整个程序的设计,而上面是仅算法。我在这里不谈具体的算法问题,只说一下我在学着写这个程序时所遇到的一些印象深刻的问题。

首先是生成随机数。这是这个游戏最为核心的东西,要不怎么叫猜随机数呢?我之前在python里做过类似的程序,很简单,直接调用一个函数即可;但是C语言里用随机数的复杂程度要远远大于python;不但要好几个函数套着用,而且规则还很多,引入一堆概念,对于我这个新生很不友好。但是我还是硬着头皮看了两遍,终于完全看懂了每一个函数的用法。

我想,总得有一个接受的过程吧?并不是说随着我编程时间的变长,我会的就会越来越多,而是我学的越来越多,我会的才会越来越多!

别的东西的话,就是一个界面设计和游戏循环机制了,不是特别复杂,中间还涉及到了switch的使用,我就不展开讲了。东西太多,放段代码,有兴趣的看一下吧。我还弄了个英文版哈哈哈~

#include <stdlib.h>
#include <time.h>
#include <stdio.h>
void menu()
{printf("*******************\n");printf("*******1.Play******\n");printf("*******0.Exit******\n");printf("*******************\n");
}
void game()
{int ret = rand();printf("Welcome to guessing game!Enter your answer!\n");int ans;while (1){scanf("%d", &ans);if (ans > ret){printf("More smaller!\n");}else if (ans < ret){printf("More bigger!\n");}else{printf("Congratulations!");break;}}}
int main()
{int choice;srand((unsigned int)time(NULL));do{menu();printf("Please choose your decision:");scanf("%d", &choice);switch (choice){case 1:game();break;case 0:printf("Exit!");break;default:printf("Please choose again!\n");break;}} while (choice);return 0;
}

写在最后

今天就写到这里吧。总的来说,回归学习以后,由于放假的缘故嘛,所以我投入的格外多,两天以内就迅速恢复到了以前的状态,甚至还超越了之前,这是我没有预料到的,我以为我得调整几天,实际上并没有哈哈哈~

随着学习的深入展开,我做的题目也比之前深不少了,我知道,难度肯定有,毕竟我还是要进步的嘛,一点点来,我相信我一定能成为一名大佬的!

就这样吧,感谢您能看到这里!欢迎继续见证我的C语言学习之路!欢迎回顾之前的内容!

在学习中思考——C语言学习总结小记2021.12.19

C语言学习心得感悟2021.12.14

周末C语言基础学习小结

第一篇博客——梦开始的地方

寒假回归篇——C语言学习感悟2022.1.16相关推荐

  1. on java 8 学习笔记 2022.2.16

    2022.2.16 问题 其实我感觉引用计数的方法不只书中提到的这种问题吧,难道不会有对象被误删的情况吗? 答:不会,因为这种方法就是参考了只要有引用,它就是有效对象的路子,而只要引用大于0,那它就是 ...

  2. C语言学习笔记——2022.09.07

    C语言中负数的存贮 对于有符号的数,规定其二进制代码的最高位为符号位. 只要是整数,内存中存储的的都是二进制补码 正数的原码.反码.补码相同 负数在内存中存储的是二进制的"补码" ...

  3. 短期学习目标2022/3/16

    1.想法 进入公司已经快一个月,熟悉了公司的环境以及日常的任务.为了自己的晋升.能力的提升做出短期的学习计划. 2.计划任务 审视自己目前的能力,梳理自己的优缺点. 2.1缺点 1.仅限于学习理论知识 ...

  4. 学习周记2022/9/16

    一.Python环境的搭建 在Python官网可以下载,同时下载下来的还有Python解释器,Python运行所需要的基础库,以及交互式运行工具Python shell. Python官网:Welco ...

  5. 保姆级零基础 C 语言学习路线,万字总结!

    从大学接触 C 语言编程,工作之后一直从事互联网 C/C++ 后台开发工作,粗略算下来有 10 多年经验了(但是年限也并不能代表什么),只能说对 C 语言学习有一些经验可以分享给初学者,让你少走一些弯 ...

  6. go语言学习初探(二)基础语法

    变量声明 var v1 int var v2 string var v3 [10]int var v4 []int var v5 struct {f int } var v6 *int var v7 ...

  7. c语言数据类型的心得体会,C语言学习与感悟——《C语言学习基本框架》

    前言 博主在几年前的C语言后中,结合自身学习情况和学习感悟在当时的一个寒假做了两份C语言学习的经验总结,分别为 <C语言学习基本框架> 和 <C语言学习基础程序>, 现在把它们 ...

  8. R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

    R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...

  9. C语言学习书籍 零基础入门篇

    1.C语言入门很简单(配光盘)(入门很简单丛书) 2.零起点学通C语言(多媒体范例教学)(DVD)(C语言软件开发从零基础到精通) 3.C语言从入门到精通 4.啊哈C语言!逻辑的挑战(修订版)--20 ...

最新文章

  1. OpenLayers 动态添加标记(Marker)和信息窗(Popup)
  2. 7个最佳的学习Python编程的开源库
  3. 西部数码虚拟主机服务器配置,西部数码虚拟主机设置首页功能介绍
  4. C语言函数strstr 分析及实现
  5. 初看Mybatis 源码 (二) Java动态代理类
  6. 全栈深度学习第7期: 研究方向这么多,哪些是有有趣又潜力的呢?
  7. python下载文件损坏_pythonw.exe停止工作,无法运行IDLE或任何.py文件 - python
  8. python 循环控制语句结束_Python控制语句.while循环语句
  9. c语言设计程序实现顺序冒泡_2019年9月全国计算机等级考试《二级C语言程序设计》题库...
  10. netstat命令查看网络信息
  11. 在ASP.NET Web API中返回错误的最佳实践
  12. UWB超宽带定位技术
  13. 网络编程项目——在线电子词典
  14. LCD和LED屏幕的工作原理总结
  15. Mac电脑快捷键盘点:QuickTime Player 键盘快捷键和手势大全
  16. 新加坡旅游 相关资料
  17. fgets和fputs的使用
  18. 功能安全标准-ISO26262-1---使用范围和主要内容
  19. xcode 配置wechat_iOS逆向 给微信添加新功能
  20. IoT 设备数据实时接入与分析实现方案

热门文章

  1. 最优秀好用的免费文件压缩/解压缩工具软件 (可替代WinRAR与7-Zip)——Bandizip
  2. 猎豹移动推出直播产品Live.me风靡美国
  3. matlab实现三分之一倍频程,三分之一倍频程程序
  4. 完整的保存onetab的书签信息
  5. linux7分区硬盘,centos7根分区硬盘扩容
  6. 梦龙雪糕新代言人近日亮相,带来不止视觉与味蕾的欢愉享受!
  7. 长沙立坤文化怎么样?是骗子公司吗?网友想知道!
  8. 螺旋线java_java怎么画布画阿基米螺旋线
  9. 使用easypoi操作excel
  10. [转载]内存管理与TLB