第一章 c语言简介

 

   C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。

  C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 

  C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。

一.c语言的发展史和编程基础

  1.发展史        

      C语言是一门优秀的程序设计语言 C语言是在1973年由美国贝尔实验室开发的。 1983年, ANSI( American   National    Standard    Institute)为C语言制定了新的标准, 称为ANSIC, 并于1989年最终完成。 目前使用较多的版本有ANSI C, Borland C, Turbo C, Microsoft C/C++ , Visual C++等。

  2.编程基础  

    2.1理解什么是编程基础

      编程语言(Programming Language):计算机解决问题所需的一系列指令的集合。编程语言有很多种,常用的有C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言等,每种语言都有自己擅长的方面。

            C语言(C Language)是编程语言的一种,学习C语言,主要是学习它的格式词汇

      compiler:编译器

      compile:编译

      object :目标,对象。
      error : 错误。
      undeclared : 未声明
      identifier : 标识符,用来表示函数,变量名字的。

      debug:调试版。
      release:发布版。
      executable:可执行的。

      standart   input/output   标准输入输出

      decimal     十进制

      binary   而精致

      hexadecimal    十六进制

      byte  字节,8个bit为1字节

      bit    比特

      address   :地址

i      nteger  整型

                       character  字符

                    compiler

         源代码(.c,\.cpp)----------------------------------->目标代码(.obj)

         源代码(.c,\.cpp)----------------------------------->目标代码(.obj)         连接      link

                           .             --------->(.exe文件)   

         源代码(.c,\.cpp)----------------------------------->目标代码(.obj)
         源代码(.c,\.cpp)----------------------------------->目标代码(.obj)

     

    下面是一个C语言的完整例子

                    #include <stdio.h>                            //预编译头  //包含stdio.h这个文件,相当于把这个文件中的内容,所有代码放到这个位置。

                          c语言先声明后使用的语言。

      int main()                      //函数头 //main()程序入口,程序就从这个位置开始运行,void:空,无返回值的函数。

      {                                       //{}函数体  一个函数由函数头和函数体组成

        printf(“欢迎来到蚂蚁软件!");   //函数调用  注意函数日调用格式 , “  ”  表示字符串

        return 0;

      }

        //                单行注释

        /*..........*/   多行注释

        关于生成的文件:.cpp 源代码文件

                .dsp 项目文件

                .dsw工作区文件   记录哪些项目属于这个工区。总结:一个工作区包含多个项目文件,一个项目可以包含多个文件,

                .exe  可执行文件。程序给谁用的最终成果。

       这些具有特定含义的词汇、语句,按照特定的格式组织在一起,就构成了源代码(Source Code),也称源码或代码(Code)

       C语言肯定规定了源代码中每个词汇、语句的含义,也规定了它们该如何组织在一起,这就是语法(Syntax)。

        编写源代码的过程就叫做编程(Program)。

    2.1c语言的特点

      C语言是结构化程序设计语言(structured   language   结构化语言 

        结构化语言,到底有哪些结构?

            1.顺序结构

            2.循环结构

            3.选择(分支)结构询问年龄,

            例如:实现计算机大于35岁输出:你好成熟,小于35输出:你好年轻

          #include   <stdio.h>

          void  main()

          {

            重点 int  age=0;// 定义一个变量。有四件事发生

                   第一件:比照类型分配对应大小的空间。

                   第二件:空间命名为age。

                   第三件:赋初值为0。

                   第四件:一定有个首地址,记为:&age

              while(1) //循环结构   对于(1)条件,条件成立旧执行循环体。c语言中1代表为正,0代表为假。
            {
               printf("您今年多大了?");
               scanf("%d",&age);//调用了scanf这个函数,这个函数要求第一个参数需要用字符串的方式
                        //给定读取的格式,%d:d是decimal 十进制读取。如果这里写“%o”那就是
                        //按八进制读取了。第二个参数表示读取后,数据放到哪里。
                      //&为取地址符号。
                if(age > 35) //分支结构的头,如果age > 35 成立,则执行大括号包含的体部分。
                {
                  printf("您好成熟啊");
                }
                  else
                {
                  printf("您好年轻啊");

                }
              }

             }

                  

   

 

                }

 

      功能强大,具有丰富的数据类型及运算符。

      简洁紧凑,使用方便灵活。

      C语言具有自我扩充能力

      C语言具有汇编语言的功能

      可移植性好

    3 进制详解 二进制、八进制、十六进制  

                  3.1十进制到任意进制

                    78(十进制) → 10011110(二进制)

                       78/2=39.......0

        39/2=19.......1

        19/2=9.......1

        9/2=4.......1

        4/2=2.......0

        2/2=1.......0

        1/2=0.......1

                     156(十进制) → 234(八进制)

        156/8=19.......4

        19/8=2.......3

        2/8=0.......2

      742(十进制) → 2E6(十六进制)

                             742/16=46.......6

        46/16=2.......14=E

        2/16=0.......2

                 3.2 任意进制到十进制

         1001110(二进制) → 78(十进制)

                     =1*2^6+0+0+1*2^3+1*2^2+1*2^1+0=78

        234(八进制) → 156(十进制)

          =2*8^2+3*8^1+4*8^0=156

              2E6(十六进制)     →         742(十进制) 

            =2*16^2+14*16^1+6*16^0=72

                    3,3 二进制到八进制,十六进制   

                   10  011  001 (二进制) =  231 (八进制)         每三位转换为一个八进制数

                      1111  0011  1011(二进制)=  E38(十六进制)      每四位转换为一个十六进制数

        2.3数据在内存中的存储

                  2.3.1数据在内存中的存储

  计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。

  要想学习编程,就必须了解二进制,它是计算机处理数据的基础。

  内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1 我们通过电路来控制这些元器件的通断电,会得到很多0、1的组合。例如,8个元器件有 2^8=256 种不同的组合,16个元器件有 2^16=65536 种不同的组合。虽然一个元器件只能表示2个数值,但是多个结合起来就可以表示很多数值了。

   

  1个元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte) 那么16个元器件就是2Byte,32个就是4Byte,

  以此类推:8×1024个元器件就是1024Byte,简写为1KB;

   8×1024×1024个元器件就是1024KB,简写为1MB;

  8×1024×1024×1024个元器件就是1024MB,简写为1GB。

                                                                         

 

 

     2.3.2  载入数据

      对于读写速度,内存 > 固态硬盘 > 机械硬盘

      不管是运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作载入内存(Load into Memory)

      完成这个过程需要一个特殊的程序(软件,如:爱奇艺播放器),这个程序就叫做加载器(Loader)

 

      总结:CPU直接与内存打交道, CPU直接从内存中读取数据,处理完成后将结果再写入内存。

                                        

 

              2.3.3    ASCII编码(美国信息交换标准代码)

    计算机是以二进制的形式来存储数据的,它只认识 0 和 1 两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符。 特定的文字必然对应着固定的二进制,否则在转换时将发生混乱。

    字符集为每个字符分配一个唯一的编号,类似于学生的学号,通过编号就能够找到对应的字符。一种专门针对英文的字符集——ASCII编码。(American Standard Code for Information Interchange)

 

 

 

    总计128个字符:32个控制字符 + 96个打印字符;对应的十进制数是:0127

 

    常用并需记忆的字符及其对应的十进制数:

 

      5个控制字符:\a(7)---响铃;\b(8)---退格;\t(9)---横向制表;\n(10)---换行;\v(11)---纵向制表。

 

      10个数字字符:’0’(48) —— ‘9’(57)

 

      26个大写英文字母:’A’(65) —— ‘Z’(90)

 

      26个小写英文字母:’a’(97) —— ‘z’(122)

 

程序设计的基本方法

  1.面向过程的程序设计

 

          基本思想: 把一个需要求解的复杂问题分为若干个模块来处理,每个模块处理一个子问题;设计时遵循自顶向下、逐步细化、模块化设计和结构化编码的原则。

 

       例如:把大象关进冰箱

 

      1. 打开冰箱      2.把大象装进去     3.关上冰箱

 

             优点:编程简单、结构性强、可读性好; 遵循这种结构的程序只有一个入口和一个出口。

 

       缺点:存在数据与程序模块的分离和程序的可重用性差等问题。

 

 

     总结:将一个复杂的问题 分解成 若干个步骤  按照步骤 去一步一步执行 每一步(一个函数)

  2.面向对象的程序设计

   3.程序设计的基本方法

    程序:一系列指令的集合  不同的语言有不同规则的指令  c语言的规则

    重要性: 正确  可读  可维护 可移植  高效

   程序=数据结构+算法+程序设计方法+语言工具

      数据结构是数据的类型和数据的组织形式。

      算法是为解决一个问题而采用的方法和有限的步骤。

      程序设计方法

      确定语言和编程环境

     3.1数据结构

      数据的存放方式以及他们之间的关系

      int           a         =      0;

      关键字   int   代表这是一个可以存储整数的空间

    1. 根据数据类型(关键字int)分配 四个字节大小的空间 用来存储数据
    2. 给空间命名为a      a为变量名   称变量a的类型是整型
    3. 给空间内赋初值为0  32个元器件  代表控制计算机将32个元器件全部断电 320
    4. 必定有地址为 &a    &(取值运算符)   &a 代表a这个内存块再内存中的位置、

 

      3.1.1基本类型

        C语言中基本数据类型分为三类:整数型(整型)、实数型(浮点型)和字符型,也可分为数值类型和字符类型 数值类型分整数型和实数型。

        整数型分三类:整型int、短整型short、长整型long。       占用内存大小:short占2byte,int占4byte,long占4byte

        浮点型分单精度型float、双精度型double。                      占用内存大小:short占2byte,int占4byte,long占4byte,

        字符型:char。                                                             占用内存大小:char占1byte(不同的平台可能占用内存大小不一样,具体的可以用sizeof测试下)。

      3.1.2结构化程序设计

          C语言是结构化程序设计语言, 有三种基本结构。 顺序结构,选择结构,循环结构。

                             顺序结构:按顺序执行

        选择结构:根据条件的真或假选择执行不同的操作内容。当条件成立执行语句A,否则执行语句B。

 

          If()

          {

            ;

          }

          单分支选择结构 if 为真 则执行对应的语句   if为假则不执行      可选可不选

          双分支选择结构    只会执行一种可能     二选一

           多分支  :判断多种情况的时候  多选一   else  代表的是其余的可能性

            

        循环结构   重复执行  

 

              循环变量赋初值   循环结束条件   更改循环变量

              for (循环变量赋初值   循环结束条件   更改循环变量)

              {

                 ; 

              }

           3.2 算法

      解决某一问题所采取的方法和步骤

      3.2.1算法的特性

        有穷性 一个算法的操作步骤应当是有限的;

        确定性 算法中的每一个步骤应当有确定的意义,不能 有二义性;

        有效性 算法中的每一个步骤应当正确、可行, 并且能 有效地执行;

        有零个或多个输入 执行算法时需要从外界获取的信息;

        有一个或多个输出 执行算法后应当得到正确的结果。

      3.2.3算法的表示方法

        常用的算法描述方法有: 自然语言描述、伪代码、流程图、N-S图、PAD图等。

 

     3.24如何衡量一个算法的优劣:

         1,时间复杂度(算法复杂度):运算次数

         2,空间复杂度:占用空间的大小。

      常见的表示方法:

          O(1) :算法的时间复杂度或者是空间复杂度,不随着数据量的大小而发生改变,是一个常数值。

            例如求1到n的和,如果用公式(1+n)* (n/2),那么这种算法的运算次数就不随着n这个数量的改变而发生变化,而是一个常量值(为1).

         O(n): 算法的时间复杂度或者是空间复杂度,随着数据量的大小而发生线性变化

                 例如求1到n的和,可以1循环加到n,n如果100,就要循环计算100次数,n如果是1000,那就 要循环计算1000次,循环次数(计算次数)随着n这个

          量的变化而线性变化。

         O(n的多少次)(这里是表示意思,实际不这么写,多少次方应该上角标): 算法的时间复杂度或者 是空间复杂度,随着数据量的大小而发生指数变化

      如果n为2,计算4次,n为3 计算9次,n为4 计算16次,n为5,计算25次,则计为o(n2)

                例如 两层循环的嵌套,就是o(n2)

   4 C语言程序基本结构   

       一个C程序由一个或多个函数组成, 其中必须有一个主函数main( )。程序执行时总是从主函数开始,main( )可以置于程序的任何位置。 \

     程序中需有预处理命令(如 #include <stdio.h> ),预处理命令通常放在程序的最前面。

     分号是C语句结束的标志, 每个语句和数据定义后必须有一个分号。预处理命令、函数头和花括号“}”之后不能加分号。

       C程序书写灵活,一行可以写几个语句, 一个语句可以写在多个程序行上。

       C语言本身没有输入输出语句, 输入输出的操作是由库函数 scanf( ) 和printf( ) 等函数完成的。

     C程序严格区分大小写。一般变量、语句等用小写字母书写;符号常量等用大写字母书写。

       标识符、保留字之间必须至少加一个空格以示分隔。

        

 

       例如:求一个长方体的表面积和体积

      #include<stdio.h>            //预编译头  

      void main()                 //定义主函数

      {

i        nt a = 0;                        //定义声明变量  初始化一个变量

        int b = 0;

        int c = 0;

        int s = 0;

        int v = 0;

        scanf("%d%d%d",&a,&b,&c);   

        s = 2*(a*b+b*c+a*c);

        v=a*b*c;

        printf("表面积为%d\n体积为%d ",s,v);

 

      }

 

            

 

 

 

 

                4.2  C语言的字符集、关键字和标识符

      

          字符集: C语言允许使用字符的集合

          字符集的组成: 26个小写字母 abcdefghi ...... z

          26个大写字母 ABCDEFG ......Z

          10个数字 0~9 

          其他符号 + - * / = , . _ : ; ? \ ” ’ ~ | & ^ ! %# ( ) [ ] { } < >

          空格(SPACE)

          制表符(Tab)

      

          关键字: C语言中预定的具有特定含义的词, 也称 保留字。共有32个。

              分四类: 类型说明: int , long,float,…。

                  语句定义: if…else, while, for …。

                  存储类: auto,static,…。

                   长度运算符: sizeof

                                 

     标识符: 用来标识变量、符号常量、数组、函数的名字。

        标识符的命名规则:(7点)重点!  *****

          (1)只能由字母、数字、下划线构成;

          (2)不能以数字开头;(以数字开头的变量名与C支持的常量表示法有重合的部分,编译时会产生二义性

          (3)有效长度是1255个字符;

          (4)严格区分大小写;

          (5)不能和关键字、库函数名、用户自定义函数名重名;

          (6)尽量避免使用下划线开头命名;(’.h’头文件中经常使用以下划线开头命名的内部变量名

          (7).要见名知意      

   分隔符 分隔符主要有逗号和空格两种。 逗号用于分隔变量或参数, 空格用于分隔单词(在关键字和标识符之间必须用空格分隔)。

 

如何衡量一个算法的优劣: 

 1,时间复杂度(算法复杂度):运算次数   2,空间复杂度:占用空间的大小。常见的表示方法:    O(1) :算法的时间复杂度或者是空间复杂度,不随着数据量的大小而发生改变,是一个常数值。      例如求1到n的和,如果用公式(1+n)* (n/2),那么这种算法的运算次数就不随着n这个数  据量的改变而发生变化,而是一个常量值(为1).   O(n): 算法的时间复杂度或者是空间复杂度,随着数据量的大小而发生线性变化          例如求1到n的和,可以1循环加到n,n如果100,就要循环计算100次数,n如果是1000,那就  要循环计算1000次,循环次数(计算次数)随着n这个量的变化而线性变化。   O(n的多少次)(这里是表示意思,实际不这么写,多少次方应该上角标): 算法的时间复杂度或者          是空间复杂度,随着数据量的大小而发生指数变化  如果n为2,计算4次,n为3 计算9次,n为4 计算16次,n为5,计算25次,则计为o(n2)          例如 两层循环的嵌套,就是o(n2)

posted @ 2020-02-04 22:53  直至成伤  阅读(648)  评论(0编辑  收藏  举报