第1章 C语言概述

1.C语言概述

运行环境以Dev-C++为主

1.1 C语言的产生和发展

  • 1.编程语言发展的3个阶段
    • 机器语言
      • 由二进制数0和1组成的有限序列(机器指令)
      • 要解释0和1的不同组合,可读性较差
    • 汇编语言
      • 用符号代替二进制序列,如MOV AX, BX
      • 依赖计算机硬件,程序可读性有一定提升,但可移植性较差
    • 高级语言
      • 接近自然语言,通俗易懂
  • 2.基本概念
    • 计算机程序由一系列指令构成,定义指令的过程就是编程
    • C语言的前身是B语言(BCPL, Basic Combined Programming Language)
    • 美国国家标准学会(ANSI)为C语言指定了一套标准,称为ANSI C

1.2 C语言的特点

  • 1.简洁紧凑、灵活方便
    • 32个关键字
      • auto break case char const continue default do
      • double else enum extern float for goto if
      • int long register return short signed sizeof static
      • struct switch typedef union unsigned void volatile while
    • 9种控制语句
  • 2.运算符类型丰富
    • 34个运算符
  • 3.数据类型丰富
    • 整型 实型 字符型
    • 数组类型 指针类型 结构体类型 共用体类型
  • 4.结构化语言
    • 主要结构成分是函数
    • 代码与数据分离,程序各部分除必要的信息交流外彼此独立
    • 以函数形式提供给用户调用
      • 函数即完成某项功能的一段代码
  • 5.允许直接访问物理地址,可直接对硬件进行操作
    • 计算机最基本的操作单元
      • 位 bit
      • 字节 Byte
      • 地址
  • 6.生成代码质量高,可移植性好
    • 移植性
    • 兼容性
  • 7.适用于对操作系统和系统实用程序以及需要对硬件进行操作的场合

1.3 两个简单的C程序

  • 1.在屏幕上输出“Hello World!”
    • 1.1 编写代码
    #include <stdio.h>
    void main() {  // 无返回值
      printf("Hello World!");
    }
    
    #include <stdio.h>
    int main() {  // 有返回值
      printf("Hello World!");
      return 0;  // 用于表示程序的退出状态,0表示程序正常退出,非0代表程序异常退出
    }
    
    • 1.2 程序拆分
      • 井号“#”表示预处理指令
        • 通知编译器在对源程序编译前应做的处理工作
      • “#include”命令C编译器包含某个特定文件的内容
      • “<stdio.h>” standard input output head file 标准输入输出头文件
        • 文件中包含了函数printf()
      • main()为主函数
        • 每个C源程序要有且只有1个主函数
        • "{}"为函数体,内容是完成函数功能的若干条语句,每条语句后加上“;”表示语句结束
  • 2.求两个整数的和并输出
    • 2.1 编写代码
    #include <stdio.h>
    int sum(int x, int y) {
      int z;
      z = x + y;
      return z;
    }
    int main() {
      int a,b,c;
      scanf("%d,%d", &a, &b );   
      c = sum( a, b );
      printf("sum = %d \n", c);
      return 0;        
    }
    
    • 2.2 C程序的特点
      • 一个C程序是由若干函数构成的。
      • 一个C程序总是从main函数开始执行。
      • 每条语句均以分号结束。
      • 注释行从"//"开始到本行结束, 连续若干注释行可以以"/"开始,并以"/"结束。
      • 每行可以有多条语句,一条语句也可以分写在多行上。

1.4 C程序的上机步骤

  • 1.补充:编译型语言和解释型语言。
    • 编译型(C C++ Java C# Go):代码写完后,编译器将其变成另外一个文件(如C程序链接后生成的“exe”可执行程序),然后交给计算机执行
    • 解释型(python php ruby javascript perl):写完代码交给解释器,解释器会从上到下一行行代码执行:边解释边执行
    • 编译型语言和解释型语言的区别类似于全文翻译VS实时翻译
    • Windows计算机有时运行软件会提示“xxx.dll文件缺失”,该文件就是编译后生成的。
    • 出现错误时
      • python代码要运行到某一句才知道错误(边解释边执行),所以错误之前的print可以正常输出,如以下代码:
      • C语言代码必须通过编译才能知道错误,如果有错误,错误前方的语句中即使前方有printf也无法输出。错误会导致C源程序无法生成exe程序,进而无法执行
  • 2.运行C程序的步骤
    • 编辑:在IDE中编写源程序,后缀通常为“.c”
    • 编译:用编译程序(编译器)把源程序翻译成二进制目标程序,后缀通常为“.obj”
    • 链接:将目标程序和系统的库函数及其他目标文件链接,得到可执行文件,后主通常为“.exe”
    • 运行:运行“.exe”文件便可得到执行结果
  • 3.IDE:Dev-C++
    • 特点:既可运行C源程序,也可运行C++源程序。注意C源程序要将文件后缀由默认的“.cpp”改为“.c”
    • 快捷键
      • 保存 Ctrl+S
      • 编译 F9
      • 执行 F10
      • 编译&执行 F11

1.5 宏定义和文件包含

  • 1.预处理
    • 宏定义和文件包含都属于编译预处理命令,以‘#’开头,结尾部分一般不要加分号
    • 作用
      • 不是实现程序的功能,
      • 给C语言编译系统提供信息,通知C编译器在对源程序进行编译之前应该做哪些预处理工作
  • 2.宏定义
    • 表示方法
      • 不带参数: #define 标识符 字符串
      • 带参数: #define 宏名(形式参数表) 字符串
    • 运行原理
      • 作用阶段:预编译
      • 替换:将程序中出现的宏名替换成“字符串”的内容
    • 案例
    // 1.简单的宏替换
    #define PI 3.14159
    #define AERA(r) PI*(r)*(r)
    AERA(3+2) ----> PI*(3+2)*(3+2)
    
    #define PI 3.14159
    #define AERA(r) PI*r*(r)
    AERA(3+2) ----> PI*3+2*(3+2)
    
    #define PI 3.14159
    #define AERA(r) PI*r*r
    AERA(3+2) ----> PI*3+2*3+2
    
    #define PI 3.14159
    #define AERA(r) PI*r*r
    AERA(5) ----> PI*5*5
    总结:1.PI*(r)*(r)在数学中加不加括号区别不大,但在C语言中区标较大
    2.程序执行时会根据参数进行替换,不要想当然地将3+2直接替换为5
    3.替换时先将非数字部分(如案例中的“(”、“)”、“*”)保留,然后替换掉参数部分,不要增减任意字符
    
    // 2.复杂的宏替换:计算梯形的面积
    // 说明:梯形的面积为上底加下底乘高除2。设梯形的上底、下底和高分别用a、b和h表示,则梯形的面积等于 (a+b)*h/2.0。
    #include <stdio.h>
    #define  S(a,b,h)  (a+b)*h/2.0
    int main(){
       double  y;
       y=S(2, 3, 5);
       printf ("梯形面积=%f\n", y);
       return 0;
    }
    总结:1.宏定义不是C语句,一般不在末尾加“;”若有:
    #define PI 3.14159;
    #define AERA(r) PI*r*r ----> 3.14159;*r*r 会报错
    2.宏名建议用大写字母表示
    // 3.变式:计算圆锥体的体积
    #include <stdio.h>
    #define PI 3.14159
    #define  V(r,h)  PI*r*r*h/3
    int main(){
       double  volumn;
       volum=V(3, 6.5);
       printf("圆锥的体积=%.3f\n", volumn);
       return 0;
    }
    总结:1.提取面积/体积/...计算公式中的物理量(宏定义中的参数),将物理量和所求值建立表达式关系(宏定义中的字符串)
    2.当涉及到除法(“/”)时注意整除的坑(5/2=2
  • 3.文件包含
    • 作用:将一个源程序文件包含到另一个源程序文件中,以“#include”开头
    • 格式
      • “#include <文件名>”
        • 编译系在系统指定路径下搜索尖括号中的文件
        • 一般适用于包含库函数的头文件。
      • “#include "文件名"”
        • 系统首先在用户当前目录中搜索双引号中的文件
        • 若不存在,再按系统指定路径搜索
        • 一般适用于包含用户文件的头文件
posted @   pycoder_666  阅读(195)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示