0%

【谷哥的新人技术培养计划】从最简单的开始

前言

由于现在是假期,大家的时间比较好安排。所以大家比较可能会有时间系统地看书或者教程。教程从零到编写出第一个程序,方便大家自行安排学习。本次的作业是引导性的,需要学习了知识才能完成。希望大家在假期劳逸结合,学有所得,玩得开心!

C语言的前世今生

C是一种通用的编程语言,广泛用于系统软件与应用软件的开发。于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。
C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐,成为最近25年使用最为广泛的编程语言。目前,C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows, Mac OS X, Linux, Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。二十世纪八十年代至今的有关程序开发工具,一般都支持匹配ANSI C的语法。
–摘自 维基百科

术语解释

编程语言:编写计算机程序的语言
系统软件、应用软件:粗略的理解,系统软件指较为底层的软件,应用软件是面向使用者的软件
操作系统:粗略的理解,操作系统是像Windows、Mac OS这样不同的平台。实际上操作系统也是一种程序,它负责管理各种计算机硬件与软件资源,是计算机系统的基石。
B语言:一种被遗弃的编程语言,C语言的前身
软件的可移植性:软件的移植指一个软件从一个平台迁移到另一个平台,比如一个手游从安卓系统迁移到苹果的IOS系统
编译器:编译器是把程序代码转化成计算机程序的组件中的一个

为什么学习C语言?

http://c.biancheng.net/cpp/html/2709.html

张逸霄注:我认为,C语言在现在固然有它的不足,在设计上也有些繁琐。在实际的工业界,C语言不是一门特别常用的语言。与之相对的,Python作为一门新生语言,拥有自己的灵活特性,的确很引人注目,而且的确很好学。

但是重点在于,语言越上层,你就看不到越底层的东西。如果你不学习C,你的编程思想会受到一些限制,你就可能被囚禁在高等语言的笼子里了。

第二个原因是,现在又很多主流语言,比如Java,C#,这些语言都是由C语言延伸过来的,C语言可以说是这些主流语言的简化版。当你将C语言学通了,再来看这些语言,你将会觉得它们好学得多。

另外,C语言的学习周期不长,一般来说一两个月你就能进入到中等水平,此时你就可以考虑学习C++了。

关于在线编程、WebIDE

在线编程是为了方便学习与展示而发展出来的一种形式,由于为了安全起见,在线编程会有诸多限制,有的在线编程网站不支持输入,比如runoob的在线编辑器。

关于“Hello World”

当新手开始学习、程序员使用一门新的编程语言时,编写的第一个程序通常是输出一行【hello, world】。一般来说,这是每一种计算机编程语言中最基本、最简单的程序,通常也会作为一般的编程语言教程的第一个程序。这个传统产生于贝尔实验室的技术文档中,后来广为流传,沿用至今。

张逸霄注:当然,某本著名的C语言书里使用的就是:“to C or not to C, that is a question.”

Hello World代码分析

1
2
3
4
5
6
7
8
9
10
11
前置说明:程序代码中,/**/里面的内容是注释,是用来解释程序功能的文字解释
,不会改变程序的行为。
//在一行中,双斜杠后面的代码也是注释
-----
#include <stdio.h>
int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;
}

顺序说明

1.#include用来使用一个库中的功能
stdio是C语言标准输入输出库下文的printf就是包含于这个库的。这一行代码表示程序使用C语言标准输入输出库中的内容也是大多数C语言程序都有的一行

2.空行没有任何作用,目的是使程序代码结构更清晰下面的缩进(每行代码前面相同数量的空格)作用也是如此

3.main(),主函数。是C语言程序开始的地方,跟随的一对花括号{}中的内容才是程序的主体。

4./**/里面是解释性文本

5.printf是C语言中输出内容最常用的函数,括号中的内容是要输出的东西。结尾的分号代表一条C语言语句的结束

6.return是返回的意思,通常代表一个过程的结束。return 0;是使程序结束的标准做法。

解析

1.首先要说明的是,这个程序的主体只有printf(“Hello, World! \n”);一行代码,其余的部分是大多数C语言程序使用的固定格式。对于一个C语言程序,引入一个库的内容,写出程序入口是必要的。
#号开头的一行代码(#include )叫做预编译指令,预编译指令不是编程的主体,它控制编译器的行为。比如说这行指令告诉编译器,程序使用stdio.h库中的内容,如果不加这一行,那么printf函数是无法使用的,编译程序时会出现错误以上是include指令的使用,关于更多预编译指令的知识将在以后介绍

2.主函数main()前面的int在C语言中表示小整数(当然还有大整数,比如long和long long)函数前面的类型名称,表示的是函数返回的值,与结尾的return 0;相对应用int标记主函数的返回值类型,return 0;来结束程序是C语言程序的规范,事实上还存在其他写法,这里不做介绍。

张逸霄注:关于C语言的更多细节,可以参见两本著名的教材:《C Primer Plus(第六版 中文版)》以及《C语言程序设计现代方法》。前者是世界著名教材,后者是信软学院使用的教材,非常好用。

张逸霄注:另外,可以参见知乎链接:为什么学习C语言?

在电脑中安装C语言集成开发环境(IDE)

Dev C++安装教程:https://jingyan.baidu.com/article/948f5924014f72d80ff5f908.html
顺便提一下,这个教程与实际操作的有些出入纯属正常,因为可能你使用的版本不一样。推荐使用英文的程序环境,中文也可以。后面的说明以英文为例

张逸霄注:当然你也可以使用Visual Studio 2017,相关配置方法参见知乎链接:怎么用Visual Studio写C语言?

编写属于你自己的第一个程序

打开Dev c++,从顶部的菜单栏中的File>New>Project…新建一个工程工程类型Basic>Empty Project>C Project
项目名改为helloworld,点击下一步。这里的项目名可以理解为程序的名字选择一个空的文件夹来容纳项目,免得把电脑弄得乱七八糟

项目建立成功后会自动新建一个文件,亲手把一下内容输入:

1
2
3
4
5
6
#include<stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}

提示:缩进可以用键盘最左边的Tab键输入,Dev c++也有自动缩进、自动补全的功能(亲手写了上面的程序肯定能理解是什么意思)

写完按Ctrl+S保存文件,在相同的目录下保存刚刚写的代码,名字可以随便起。命名为main.c是标准的做法。按F9编译并且执行程序。(F9是上部工具栏中某个图标的快捷键,你可以去找一找)

等待一小会,弹出一个黑色窗体,里面有白色文字:

1
2
3
4
5
hello, world


Process exited normally.
Press any key to continue . . .

你的第一个程序至此运行完毕。

相关解释

1.Dev c++是C语言和C++的IDE(集成开发环境)
2.Dev c++最顶部的文字菜单叫菜单栏(Menu Bar),菜单中有Dev c++的功能与设置有图标的一条叫做工具栏(Tool Bar),工具栏上面是程序最常用的功能其他部分请自行摸索。

如果要在关闭Dev c++后,再次打开之前的项目:菜单栏中File>Open…找到之前保存项目的文件夹,打开名字为【项目名称.dev】的文件即可(这次是helloworld.dev)

注:上面的教程只是介绍了C语言,带你编写了第一个C语言程序。作业的难度不是很大,请查阅相关资料后完成。

作业

1.程序示例:

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main()
{
int a,b;
printf("Input two number,divided with a space:");
scanf("%d%d",&a,&b);
printf("The sum of them is:%d\n",a+b);
return 0;
}

这个程序展示了printf,scanf这两个函数的通常用法。请在runoob、C语言中文网、《C Primer Plus》或者在百度上上查阅变量,语句,操作符,转义字符,printf,scanf的知识来理解上面的程序。上面程序的功能是输入两个数字,输出它们的和。并且在运行的时候对用户要进行什么操作给予了提示,对输出做了说明,这是个好习惯。
1)编写一个程序,输入三个数字,输出他们的积。例如:输入了2.5 3 4,输出30
注意上面的数字是小数,不能用int储存

2)编写一个程序,输入三个数字,倒序输出他们。例如:输入了2 3 4,输出4 3 2

—(下面的两个并不是很简单哦)
3)编写一个程序,输入一个英文的名字,输出打招呼。例如:输入Henry,输出Hello, Henry.

4)编写一个程序,输入一个一元二次方程的三个参数,输出两个根(假设有实根)。

张逸霄注:使用Visual Sudio写程序的时候,会有一个安全警告提示你:scanf()并不安全,你可以自行搜索解决办法,简而言之就是调整Visual Studio的安全等级。

2.程序实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
int main()
{
int a;
printf("Give me some money for my lunch:");
scanf("%d",&a);
if(a<=50)
{
printf("You are too mean!");
}else if(a<=100){
printf("Thank you!");
}else{
printf("I like you so much!");
}
return 0;
}

上面的程序是展示了分支型控制流的基本用法请在runoob、C语言中文网、《c primer plus》或者在百度上上查阅关于if语句的知识来理解上面的程序。并且了解while,do while,for,break,continue等关键字的用法。

1)写一个能一直计算两个数的和的程序,(算完一次提示是否继续)

2)写一个猜数游戏,玩家输入数字,系统提示是大了还是小了,猜对了结束,数字可以是固定的

3)写一个完善的解二元一次方程的程序(判断是否有根,有实根输出实根,没有输出虚根)

结尾

以上的作业涉及了C语言入门的各种知识,请同学们认真对待,不懂就查资料,靠自己的力量完成,注意培养自己的自学能力,不要轻易的问别人。但是有什么疑惑不解的难题时,不要不好意思,一定要找其他的同学或者学长问问。最后,如果我的教程有问题可以私发我,或者在大群指出,都可以的。

鉴于是假期,作业是不收的,想让我看可以私发我QQ或者QQ邮箱。

正式的教程在开学后发布,在此之间这篇教程可能会有所修改(更正文字错误,添加新内容)。我相信,半个月的时间,即使对于没有任何基础的同学来讲,看懂这些也是足够了。