目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
第一个小程序解析


 

对于初学者来说,第一个程序一般都是hello world,而且是照着书上一点一点敲的。所以,在初学者眼中,敲出来的第一个程序代码不过是一堆看不懂的英语。而事实上,C语言作为一门语言,是有语法的。所以这一节,我们以C语言最简单的一个程序为载体,初步了解C语言的语法,写出一个hello world程序。

  首先,我们先不说C语言,我们先从人类语言开始,假设我现在给你的任务不是让你用计算机输出一行hello world,而是让你找另一个人给你写一行hello world。这个任务你会怎么完成呢?

  显然,你会找个人对他说:“给我在纸上写一行hello world。”(假设他会无条件听你的话)

  好,很简单,这个任务就完成了。但是现在任务的完成对象并不是人,而是计算机,你需要按照它的语法对它说话。那么你能在敲代码的区域里打上“写一行hello world给我”吗?可以,前提是在前面打两个斜杠“//”。这两个斜杠的意思是在后面的东西是注释。计算机会忽略所有注释,因为注释是方便人阅读的。一般来说,注释默认写在被注释的语句或语段上面。

  还有一种注释方法是/*中间是要注释的内容*/

  两种注释方法的区别是,两个斜杠的注释只能管到一行的结束,而第二种注释可以自己随意选择起始和结束位置。所以在学语法的时候,注释可以忽略不计,因为注释对程序本身是没有作用的。一般来说,注释可以加在代码的任何地方,但是为了美观还是要规范写注释。

下面是一个带注释的hello world程序。

#include<stdio.h>
int main(void)
{
    /*
下面要输出hello world*/
    printf("hello world");
    return 0;
 }

  那么问题来了,那我直接在代码区域写

printf("hello world");

这样不就行了吗?然后编译,运行。会发现编译器会报错。(补充一句,C语言每句话结束都要加分号,这是语法,如果漏加会报错,不再赘述。而且,所有语法中的符号必须用英文格式输入,比如;;前者会报错)既然报错了,说明其他语句也是有用的,那么具体作用是什么?下面开始讲解。

  首先每个c程序必须有一个主函数框架。

int main(void)
{

}

在主函数框架里就是你要编写的内容,相当于告诉计算机:“这里面就是你要执行的命令。

那么return 0;这一句是干什么的呢?它的意思是让主函数正常结束。一般来说这句话都是写在最后。如果你把这句话写在printf前面,还没等输出,程序已经结束了,所以就不会有东西输出。也就是说程序的一般就是

int main(void)
{

    return 0;
}

所以hello world 的主程序就是

int main(void)
{
    printf("hello world");
    return 0;
}

你会发现,即使这样写完,再编译还是错的。为什么呢?有没有发现在开头的代码里,第一行还有#include<stdio.h>这句话又是干什么的呢?

那么你有没有想过一个问题,既然计算机听不懂你说“输出一行hello world”,它凭什么就能听懂printf("helloworld")?所以,相信你已经猜到这句话是什么意思了。这句话就是教会计算机听懂printf。

stdio.h头文件

它是一个函数库:标准输入输出库(standard input output的缩写)。.h是后缀名,头文件(headfile)的后缀名一般都是.h。那么把stdio.h给include进来的这句话叫做声明语句。声明语句都以#开头,标准自带库文件要用尖括号。所以是#include<stdio.h>而且值得注意的是,声明语句结尾不用分号。

因此,一个hello world 程序就很自然的出来了。

 


显示“十”字图案的EasyX图形程序

重新输入以下代码试试(无需理解代码含义):

#include<graphics.h>                 //绘图库头文件,绘图语句需要

#include<conio.h>                    //控制台输入输出头文件,getch()语句需要

voidmain()

{

        initgraph(640,480);           // 初始化640x480的绘图屏幕

        line(200,240,440,240);      //画线(200,240)- (440,240)

        line(320,120,320,360);      //画线(320,120)- (320,360)

        getch();                                      //按任意键

        closegraph();                         // 关闭绘图屏幕

}

解释一下:

1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。
      2. getch
实现按任意键功能,按任意键后,程序继续执行。否则,程序会立刻执行closegraph以至于看不到绘制的内容。

[作业]
用线条画出更多的图形,要求不少于10条直线。

[学习单步执行]
完成作业后(务必完成),开始试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):
1.
VC取消最大化,并缩小窗口,能看到代码就行。
2.
按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。
3.
当箭头指向initgraph语句时,按F10,能看到窗口发生了变化。
4.
将新的绘图窗口和VC并排放,相互不要有覆盖。这步很重要,否则绘图内容将会被VC窗口覆盖。
5. F10
执行getch后,记得激活绘图窗口,并按任意键,否则程序不会继续执行。
6. closegraph
后,直接按F5执行全部剩余程序,结束。

单步执行很重要,可以让你知道程序执行到哪里是什么效果,哪条语句执行出了问题等等。