C语言总结

第一章

    软件是为完成某些特定功能而编制的一到多个程序文件的集合。可以被连续执行的指令集合,称为计算机程序。程序是计算机指令的序列,编制程序的工作就是为计算机编制指令序列。是人和人相互交流信息不可缺少的工具。

    1、程序语言的发展:机器语言(全是0和1)—十进制数和二进制数;汇编语言;高级语言主要做软件开发,特点是面向用户的语言。

    2、软件开发的基本方法与步骤:①分析问题,建立数学模型②确定数据结构和算法③编制程序④调试程序

    3、算法:算法是一个有穷规则的集合,这些规则确定了某类问题的一个运算序列。

      基本特征有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。

      算法的表示—流程图:就是给定算法的一种图形解法。流程图又称为框图,它用规定的一系列图形、流程图及文字说明来表示算法中的基本操作和控制流程,其优点是形象直观、简单易懂、便于修改和交流。

    4、结构化程序设计:①顺序结构:按照一定的规定依次进行②选择结构:会出现至少两种结构③循环结构

    5、编码的实现:①编写源代码  ②将源代码编译成目标代码二进制  ③链接目标代码成为可执行程序  ④运行

    6、调试程序:程序中最易出现的几种不同类型错误是语法错误、逻辑错误、开发错误和运行时的错误。

第二章

    1、编程语言的基本组成:

①字符集:C语言的基本字符集包括:数字字符、拉丁字母、运算符、特殊符号和不可显示字符。

②标识符:由C语言字符集中的字母、数字或下划线组成,它的第一个字必须是字母或下划线,不能以关键字命名。

③关键字:auto-----声明自动变量、break-----表示中断,一般用来循环中判断是否满足条件然后中断当前循环、case----配合switch一起使用、char----字符型变量、const----常量、continue-----表示跳过其后面的语句,继续下一次的循环、default----默认、do----与while语句配合使用、double----双精度类型、else----常用来配合if一起使用、enum----用来声明枚举变量、extern----声明全局变量、float----声明变量的类型、for----循环语句、goto----无条件循环语句、if----判断语句用来判断语句是否满足条件、int----声明量的类型、long----声明长型的类型、register----声明为寄存器变量也为局部变量、return----返回语句、short----声明一个短整型变量、signed----将变量声明为有符号型、sizeof----用来获取变量的存储空间大小、static----静态变量、struct----结构体类型、switch----条件选择语句、typedef----类型重定义可以重定义类型、union----定义联共体、unsigned----定义为无符号的变量、void----声明函数为无返回值或无参数、volatile----将变量声明为可变的、while----循环控制语句。

④语句:组成程序的基本单位,每一位语句就是一条告诉计算机要执行某条特定操作的指令。

  (1)选择语句:if,switch、(2)流程控制语句及循环语句:for,while,do_while、(3)转移语句:break,continue,return,goto、(4)表达式语句(5)复合语句(6)空语句

⑤标准库函数

   2、一个完整的C程序应符合以下几点:

①C程序是以函数为基本单位,整个程序由函数组成。一个完整的C程序至少要有一个且仅有一个主函数,它是程序启动时的唯一入口。除主函数外,C程序还可包含若干个其它C标准库函数和用户自定义的函数,使C语言便于实现模块化的程序结构。

②函数是由函数说明和函数题两部分组成。函数说明部分包括对函数名、函数类型、形式参数等的定义和说明;函数体包括对变量的定义和执行程序两部分,由一系列语句和注释组成。整个函数由一对花括号括起来。

③语句是由一些基本字符和定义符按照C语言的语法规定组成,每个语句以分号结束。

④注释:(1)/*    */可一行可多行、(2)//  只可一行。

第三章

 

1、数据在计算机中的表现形式

(1)整数的表现形式:一个字节只能存储0~128之间的正整数。计算机一般用多个字节表示数据,用字节的最高位来表示正号,负号(称为符号位,如果符号位为0,则代表正数;如果符号位为1,则代表负数),其余的字节位表示数值。
(2)实数的表示方法:实数是以浮点数形式存储的。浮点数在计算机中是按指数形式存储的,即把一个实型数据分成小数和指数两部分。0.00123456在计算机中的存放方式
        数符  小数    指数符号  指数
        ↓    ↓        ↓     
        0.12346         2
        小数部分        指数部分

(3)字符的表示方法:参考以下ASCII码表
             ASCII码表


2、在编程语言中对数据进行分类

  数据类型的定义:存放数据的容器。
 (1)基础的数据类型有:
  int:整型,一般的会占4个字节,32位
  float:浮点类型(单精度),一般的会占4个字节,32位 存储的数据应该是带小数的数据 1.2 13.5 7.0
  char:字符类型,一般的会占1个字节,8位,会存储单个字符。A,B,a,b,.,+,-,(,), ’A’,’X’,’\n’ ’\t’
  long:长整型,存储的数据量要多一点 一般的应该是4个字节
  short:短整型,一般的应该是2个字节
   double:双精度的浮点类型,8个字节。

    ①char的大小为一个字节

    ②short的长度不会超过long

    ③int的长度不会超过long

    ④unsigned的长度等于int

    ⑤float的长度不会超过double


3、数据在编程语言中的表现形式:常量和变量

 (1)在程序运行时,其值不会改变的数据在编程语言中被称为常量。表达常量的方式有两种:字面量符号常量。
   
   ①字面量:整型常量(没有小数点的数字)、实型常量(带有小数点的数字,小数形式和指数形式)、字符常量(括在一对单引号内的一个字符)、字符串常量(用一对双引号括起来的字符序列)
            
转义序列 字符
\b 退格
\f 走纸换页
\n 换行
\r 回车
\t 横向跳格 (Ctrl-I)
\' 单引号
\" 双引号
\\ 反斜杠


     ②符号常量(即命了名的常量)使用时需注意:用#define定义符号常量的结尾不能加分号,且符号常量名用大写字母表示,多个单词组成名字时,中间用下划线分割

                 eg:#define MY_PI 3.14(规定写在最上面)
     为什么要给常量取名字?:①便于修改(在定义的地方修改,一改全改)、
                            ②便于理解(把业务含义带入数据量当中)

4、使用变量存储数据
  注意:在标准C语言中,需要首先定义变量且需要先赋值,才能进行计算。
  变量由两个要素构成:变量的名称和变量的类型
  变量的三要素:①数据类型(定义了空间大小,以什么样的形式存放)、②变量名(控制了变量所在位置)、③变量的值
(1)变量名
①必须以字母字符开头;可以是下划线但不建议
②在变量名中的任何地方都可以用任何字母、数字、下划线
③变量名长度不限
④不允许出现空格或非字符字母
⑤不能是C语言中的关键字
⑥对大小写敏感
命名方式:驼峰命名法(将每个单词的第一个字母大写)、Pascal命名法则(以小写字母开头,后续的每个单词的第一个字母大写)
(2)变量声明:
   数据类型声明符  变量名;
   可以在同一行中声明多个同一类型的变量,将变量名用逗号隔开。
(3)初始化变量:使用变量之前,一定要将其初始化为一个确定的值。
   注意:不要把变量初始化为其数据类型取值之外的值。
(4)使用变量存储数据时应注意:
  ①一定要了解变量占用的字节数
  ②声明变量时,应尽可能对它进行初始化
  ③不要使用未被初始化的变量,否则结果可能会出乎意料
  ④存储整型数据时,不要使用float或double变量
  ⑤不要试图将超出变量取值范围的值赋给变量
  ⑥不要将负值赋给unsigned变量
5.数据的输入输出
  在C语言中,scanf和printf函数是针对标准输入输出设备进行格式化输入输出的函数。
  常用的格式字符(占位符):%d(十进制整数)、%f(单精度实数)、%lf(双精度实数)、%c(字符)、%s(字符串)
    (1)格式化输出函数
  1.     printf(“格式控制字符串”,输出表列)
  2.    格式字符串的一般形式为:
  3.    [标志][输出最小宽度][.精度][长度]类型   
  4.   格式字符              意 义
        d或i             输入十进制整数
        o                输入八进制整数
        x                输入十六进制整数
        u                输入无符号十进制整数
        c                       输入单个字符
        s                       输入字符串
        f或e            输入实型数(用小数形式或指数形式)
  5.    (2)格式化输出函数
  6.    scanf("格式控制字符串",地址表列);
  7.    格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。
  8.    地址是由地址运算符“&”后跟变量名组成的。
  9.    &是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。
  10.    字符型数据和整型数据可以相互赋值。
       格式符              意 义
      d                整型数据以十进制形式输出
                    整型数据以八进制形式输出
      x                整型数据以十六进制形式输出
      u                整型数据以十进制形式输出
      c                字符的ASCll码数据,输出对应的字符
      s                输出字符串
      f                以“整数部分。小数部分”形式输出实型数据
      e                以[-]n.nnnnne±xx输出实型数据
      g                以f或e格式输出
  11. 第四章
  12. 1、表达式
  13. (1)简单表达式:最简单的表达式只包含一个操作数:一个简单变量、字面量或符号常量。
    (2)复杂表达式:复杂表达是由多个更简单的表达式组成,表达式之间用运算符连接。(操作数可以是常量、变量或者是二者的结合)
  14. 2、运算符
  15. (1)算术运算符:加法运算符、减法运算符、乘法运算符、除法运算符、取余运算符
      (2)赋值运算符
  1.    (3)增量和减量运算符
  1.     (4)关系运算符
  1.     (5)逻辑运算符
  1.      (6)条件运算符
  1.      (7)数据类型强制转换运算符
  1.      (8)特殊运算符:①长度运算符sizeof(求出运算对象在计算机中的内存中所占用的字节数量)
  1.         ②取址运算符&
  2. 优先级

    运算符

    名称或含义

    使用形式

    结合方向

    说明

    1

    []

    数组下标

    数组名[常量表达式]

    左到右

     

    ()

    圆括号

    (表达式)/函数名(形参表)

     

    .

    成员选择(对象)

    对象.成员名

     

    ->

    成员选择(指针)

    对象指针->成员名

     

    2

    -

    负号运算符

    -表达式

    右到左

    单目运算符

    (类型)

    强制类型转换

    (数据类型)表达式

     

    ++

    自增运算符

    ++变量名/变量名++

    单目运算符

    --

    自减运算符

    --变量名/变量名--

    单目运算符

    *

    取值运算符

    *指针变量

    单目运算符

    &

    取地址运算符

    &变量名

    单目运算符

    !

    逻辑非运算符

    !表达式

    单目运算符

    ~

    按位取反运算符

    ~表达式

    单目运算符

    sizeof

    长度运算符

    sizeof(表达式)

     

    3

    /

    表达式/表达式

    左到右

    双目运算符

    *

    表达式*表达式

    双目运算符

    %

    余数(取模)

    整型表达式/整型表达式

    双目运算符

    4

    +

    表达式+表达式

    左到右

    双目运算符

    -

    表达式-表达式

    双目运算符

    5

    <<

    左移

    变量<<表达式

    左到右

    双目运算符

    >>

    右移

    变量>>表达式

    双目运算符

    6

    >

    大于

    表达式>表达式

    左到右

    双目运算符

    >=

    大于等于

    表达式>=表达式

    双目运算符

    <

    小于

    表达式<表达式

    双目运算符

    <=

    小于等于

    表达式<=表达式

    双目运算符

    7

    ==

    等于

    表达式==表达式

    左到右

    双目运算符

    !=

    不等于

    表达式!= 表达式

    双目运算符

    8

    &

    按位与

    表达式&表达式

    左到右

    双目运算符

    9

    ^

    按位异或

    表达式^表达式

    左到右

    双目运算符

    10

    |

    按位或

    表达式|表达式

    左到右

    双目运算符

    11

    &&

    逻辑与

    表达式&&表达式

    左到右

    双目运算符

    12

    ||

    逻辑或

    表达式||表达式

    左到右

    双目运算符

    13

    ?:

    条件运算符

    表达式1? 表达式2: 表达式3

    右到左

    三目运算符

    14

    =

    赋值运算符

    变量=表达式

    右到左

     

    /=

    除后赋值

    变量/=表达式

     

    *=

    乘后赋值

    变量*=表达式

     

    %=

    取模后赋值

    变量%=表达式

     

    +=

    加后赋值

    变量+=表达式

     

    -=

    减后赋值

    变量-=表达式

     

    <<=

    左移后赋值

    变量<<=表达式

     

    >>=

    右移后赋值

    变量>>=表达式

     

    &=

    按位与后赋值

    变量&=表达式

     

    ^=

    按位异或后赋值

    变量^=表达式

     

    |=

    按位或后赋值

    变量|=表达式

     

    15

    ,

    逗号运算符

    表达式,表达式,…

    左到右

    从左向右顺序运算


    说明

    同一优先级的运算符,运算次序由结合方向所决定。

    简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

    3、语句

    *选择语句:if      switch

    *流程控制语句及循环语句:for      while      do-while

    *转移语句:break     continue     return     goto

    *表达式语句

    *复合语句

    *空语句

  3. 第五章
  4. 1、用if语句设计选择结构程序
  5. (1)C语言有两种选择结构:if语句,用来实现两个分支的选择结构;switch语句,用来实现多分支的选择结构
    2、if语句
  6.    if语句的一般形式如下:
       if(表达式)
         语句1;
      
       或者是:

       if(表达式){
         语句1;
       }

       说明:

      【1】:if语句中的表达式可以是关系表达式,逻辑表达式,甚至是数值表达式,返回的是一个逻辑值,即真或假!
     

    3、所有形式如下:

    (1):单判断语句

      if(表达式1)
         语句1;
     
      或者是:

      if(表达式1){
         语句1;
      }

    (2):双分支语句

      if(表达式1)
         语句1;
      else
         语句2;

      或者是:

      if(表达式1){
         语句1;
      }else{
         语句2;
      }

    (3):多分支语句

      if(表达式1)
         语句1;
      else if(表达式2)
         语句2;
      ......
     
      else if(表达式n)
         语句n;
      else
         语句n+1;

      说明:
      【1】:整个语句可以写在多行上,也可以写在一行上;
       例子:
           if(x>0) y=1;else y=0;

      【2】:if语句写在多行上,都是一个整体,属于一个语句。不要误认为if部分是一个语句,else部分是另一个语句。在系统中对if语句编译的时候,还要检查是
    否有else语句,如果有else语句,会把它当做if语句的部分;如果没有else语句,则认为if语句已经结束!还要注意else语句不能作为单独语句来结束,它必须和
    if语句配对使用,而且是和最近的if语句配对,采用就近原则!

      【3】:if语句不加大括号,只对第一句代码有约束作用,后面的代码不在约束,会按照顺序往下执行;如果加上大括号会对括号里面的所有代码都有约束作用。

    4、选择结构语句的嵌套

        if语句的嵌套:在if语句中又包含一个或多个if语句称为if语句的嵌套。

        形式如下:
      
       (1):在if语句中再嵌套if语句

        if(表达式1){
           if(表达式2){
              语句1;
        }
        }

       (2):在if语句中再嵌套双分支语句

        if(表达式1){
           if(表达式2){
              语句1;
           }else{
              语句2;
           }
        }

        (3):在if语句中嵌套多分支语句

         if(表达式1){
             if(表达式2){
                语句1;
             }else if(表达式3){
                语句2;
             }else if(表达式4){
                语句3;
             }else{
                语句4;
             }
         }
  7. 5、用switch语句实现多分支语句
        switch语句是多分支选择语句
        switch语句作用:根据表达式的值来使流程跳转到不同的语句。

    6、一般的形式如下:

       (1):无break语句形式

        switch(表达式){

          case 常量1:语句1;

          case 常量2:语句2;
         
          case 常量3:语句3;
           
          default: 语句4;

        }
        (2):有break语句形式

        switch(表达式){

          case 常量1:语句1; break;

          case 常量2: 语句2; break;
         
          case 常量3: 语句3; break;

          default:  语句4; break;
        }

        说明:

        1):switch语句后面的“表达式”,其值的类型应为整数型(包括字符型)【字符型也属于整数形式,按照ASCII码来存储到计算机当中】
       
        2):switch语句下面的大括号是一个复合语句,一定要打上,不打则会报错!里面是case关键字和default组合的若干语句。case后面的必须跟一个常量,
    或是常量表达式。被当做标号作用,用来标识一个位置。

        3):没有break语句,是按照顺序依次往下执行;有break语句,符合哪一种情况就执行哪一种情况下的语句,之后马上退出整个switch语句。

        4):switch语句的运行原理:在执行switch语句时,先计算switch后面的表达式的值,然后将它与各个case标号比较,如果与某一个case标号中的常量相同
    ,流程就转到此case标号的后面的语句。如果没有switch表达式相匹配的case常量。再检查有没有default语句,若有就执行default标号后面的语句,若没有则退
    出整个switch语句。

        5):各个case标号出现的次序不影响结果,可以先出现default语句,其他case语句可以打乱。

        6):每一个case常量必须互不相同,否则会出现矛盾现象,重复定义系统报错!

        7):在case语句下不需要加大括号,会自动执行case标号语句后面的所有语句!

        8):多个case标号可以共用一组执行语句。如下:

         case 'a':
         case 'b':
         case 'c':
         printf("及格了!\n");break;
    7、多分支选择语句嵌套:

        (1):可以在switch中嵌套switch语句
        
         switch(表达式1){
              case 常量1:
                 switch(表达式2){
                    case 常量1:
                         语句1;
                      break;
                    case 常量2:
                         语句2;
                      break;
                 }
                 break;
              case 常量2:
                   语句3;
                 break;
        }
    8、if语句与switch语句综合嵌套使用
    (1):可在if语句嵌套switch语句
           if(表达式1){
            switch(表达式2){
               case 常量1:
                  break;
               case 常量2:
                  break;
            }
         }
       (2):可以在switch语句中嵌套if语句
          switch(表达式1){
              case 常量1:
           if(表达式2){
                语句1;
           }else{
                语句2;
           }
           break;
         }
  8. 9、无条件转向语句: C语言中的goto语句可以转向同一函数内任意指定位置执行
  9. 功能:goto语句无条件转向语句标号所标识的语句执行。它将改变顺序执行方式
  10. (1)语句标号用标识符后跟冒号表示
  11. eg:......
  12.     goto   k;
  13.     ......
  14.     k;
  15. (2)goto语句与相应的语句标号必须处在同一个函数中,不允许跨越2个函数。
  16. eg:在嵌套switch语句的内层switch语句中,利用break语句只能一层一层地退出,若采用goto语句,可以一次退出多层switch语句。
  17. 第六章
  18. 1、循环的基本概念
  19. 当型循环:while语句和for语句;直到型循环语句:do_while
  20. 2、while语句
    (1)while语句的形式:
    while(表达式) //表达式为真执行循环体;为假时跳过循环体。
    循环体;
    (2)while语句常称为“当型”循环语句。
    (3)说明:
    先判断表达式,后执行语句。
    表达式同if语句后的表达式一样,可以是任何类型的表达式。
    while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与
    否的情况。
    循环体多于一句时,用一对{}括起。
    example:
    i=1;
    while(i<=100)
    {putchar('*');
    i++;}
    如果没有大括号,就是一个死循环。
    example:
    输入一系列整数,判断其正负号,当输入0时,结束循环。
    #include <stdio.h>
    void main()
    {
    float x;
    scanf("%f",&x);
    while(x!=0)
    {
    if(x>0)printf("+");
    else printf("-");
    scanf("%f",&x);
    }
    }

    注意:
    表达式在判断前,必须要有明确的值;
    循环体当中一般有改变条件表达式的语句;
    while (表达式)后面没有分号。

3、do-while语句

(1)do-while的形式

do

{
循环体;
}
while(表达式);
(2)do while语句常称为“直到型”循环语句。
(3)说明:
先执行语句,后判断表达式,因此循环体至少执行一次。
第一次条件为真时,while,do-while等价;
第一次条件为假时,二者不同。

注意:
在if、while语句中,表达式后面都没有分号,而在do-while语句表达式
后面必须加分号;
do-while和while语句相互替换,要注意修改循环控制条件。

4、for语句

(1)for形式:
for(初始表达式1;条件表达式2;循环表达式3)
{循环体;}
表达式1:用于循环开始前为循环变量设置初始值。
表达式2:控制循环执行的条件,决定循环次数。
表达式3:循环控制变量修改表达式。
循环体:被重复执行的语句。
(2)如果表达式为真,执行循环体,如果为假,跳过循环体。
for(i=1;i<=100,i++)
sum=sum+i;
相当于
i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
(3)说明:
三个表达式都可以是逗号表达式;
三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符
不能省略。
语句中表达式省略的形式:
  ①for语句一般形式中的“表达式1”可以省略;

如:sum=0;i=1;
for(;i<=100;i++)
  ②表达式2省略,即不判断循环条件,循环无终止的进行下去;
如:for(sum=0,i=1;;i++)
{
if(i>100) break;
sum=sum+i;
}
  ③表达式3可以省略,但此时保证循环能正常结束。
如: for(sum=0,i=1;i<=100;)
{
sum=sum+i;
i++;
}
  ④可以省略表达式1和表达式3,只有表达式2;
如:
i=1;sum=0;
for(;i<=100;)
{
sum=sum+i;
i++;
}
  ⑤三个表达式都可以省略,如:
for(;;)
循环体;//是一个无限循环;
如:sum=0,i=1;
for(;;)
{
if(i>100) break;
sum=sum+i;i++;
}
  ⑥循环体为空语句[while后面跟分号]
对for语句,循环体为空语句的一般形式为:
for(表达式1;表达式2;表达式3)

5、break语句和continue语句

(1)break:终止它所在的switch语句或循环语句的执行,break语句只能出现在switch语句或循环语句的循环体中

(2)continue:结束本次循环,即跳过循环体中continue语句后面的语句,开始下一次循环。

注:break不能直接用在if语句中,但可在循环中一起使用。

①continue语句只能出现在循环语句的循环体中

②若执行while或do_while语句中的continue语句,则跳过循环体中continue语句后面的语句,直接转去判别下次循环控制语句;若continue语句出现在for语句中,则执行continue语句就是跳过循环体中continue语句后面的语句,转而执行for语句的表达式3.

第七章

1、数组的基本概念:

所谓数组,就是按照一定的顺序排列,具有某种相同性质的同类型变量的集合。这些变量具有相同的名字和数据类型。数组中的各数据项称为数组元素,用数组名和下标名表示。

2、一维数组

 

 

①一维数组的定义

定义一维数组的形式为:
数据类型  数组名  [整形常量表达式];
说明:
          *数据类型是数组中全体数组元素的数据类型。
          *数组名用标识符表示,整形常量表达式代表数组具有的数组元素个数。
          *数组元素的下标一律从0开始。
          *编译程序为数组开辟连续的存储单位,用来顺序存放数组的各数组元素。用数组名表示该数组存储区的首地址。
注意:
          定义数组元素个数的表达式是整形常量表达式,不能出现变量或者非整形常量表达式。
例如下列数组定义是正确的:
#define n 5
int   a[n];                     /*n不是变量,是符号常量,其值为5*/
int    b[2+3];               /*2+3是常量表达式,其值为5*/
int     c[10];

②一维数组的引用

引用数组元素的形式为:
        数组名[下表表达式];
注意:
        *定义时整形常量表达式与引用的数组元素的下标表达式是完全不同的概念。对数组定义:int   a[5];    这里整形常量表达式5表示a数组有5个数组元素。对数组元素的引用:a[3]=a[2]+a[5];   这里下表表达式3和2均表示数组元素的下标。而a[5]是错误的数组元素引用,因为下表从0开始,所以数组元素的小于5,下表已经越界。
        *系统不检查数组元素的越界,只能由自己掌握。下标越界会破坏其它变量的值,因此编程时一定要保证数组元素的下表不越界。

③一维数组的初始化

一维数组初始化的形式为:
      数据类型   数组名[整形常量表达式]={初值1,初值2,初值3,...........};
初始化方法:
      1.int    a[4]={1,2,3,4};
        数组中有若干数组元素,可在{ }中给出各数组元素的初值,各初值之间用逗号隔开。把{ }中的初值依次赋给各数组元素。表示把1,2,3,4依次赋给a[0], a[1], a[2], a[3]。
      2.static  int  a[4]={1,2};
        只给部分数组元素初始化。注意到关键字static,它表示a数组的存储类型为static(静态存储)。存储类型为静态存储的变量或数组的初值自动设置为0。即a[0]=1;  a[1]=2;  a[2]=0;   a[3]=0.
       3.int   a[ ]={1,2,3};
         初始化时,定义数组元素的个数的常量表达式可以省略。若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数。如上例,a数组有3个数组元素:a[0]=1;    a[1]=2;    a[2]=3。

④一维数组的应用

需求:输入100个数,输出它们的平均值和这些数当中所有大于平均值的数。
#define  N  100
#include<stdio.h>

int    main(void){
        int     k;
        int     a[N],s;
         float    av;
       s=0;
         for(k=0;k<N;k++){
                scanf("%d",&a[k]);
                s=s+a[k];
    }
        av=s/N;
         printf("average=%f",av);
         for(k=0;k<N;k++)
              if(a[k]>av)  printf("%d",a[k]);
       return  0;
}

3、二维数组

二维数组的定义

定义二维数组的形式为:
    数据类型    数组名[整形常量表达式] [整形常量表达式];
数据类型是数组全体数组元素的数据类型;数组名用标识符表示;两个整形变量表达式分别代表数组具有的行数和列数。数组元素的下标一律从0开始。存储方式为按行存储。

②二维数组的引用

数组元素的形式为:
     数组名[行下表表达式] [行下表表达式]
例如希望从键盘依次为数组元素输入数据,可以采用如下语句:
for(i=0;i<20;i++)
   for(j=0;j<30;j++)
         scanf("%d",&a[ i ] [ j ]);

③二维数组的初始化

二维数组初始化的形式为:
     数据类型    数组名[整形常量表达式] [整形常量表达式]={初始化数据};
初始化方式:
      1.分行进行初始化。例如:int    a[2] [3]={ {1,2,3},{4,5,6} };
      2.不分行的初始化。例如:int    a[2] [3]={1,2,3,4,5,6};              //3个数字为一行
      3.为部分数组元素初始化。例如: int    a[2] [3]={ {1,2},{4} };
         第一行只有2个初值,按顺序分别赋给a[0] [0]和a[0] [1];第二行的初值赋给a[1] [0].
      4.可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维德长度可以确定第一维的长度。例如:  int    a[ ] [3]={1,2,3,4,5,6};
初始化数据为6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2.
省略第一维定义时,第一维的大小按如下规定:初值个数能被第二维正处,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1。

④二维数组的应用

需求:实现行列互换问题
#include<stdio.h>

int main(void){
int i,j;
int a[2][3]={1,2,3,4,5,6};
int b[3][2];
printf("互换前的数组为:\n");
    for(i=0;i<2;i++){
    for(j=0;j<3;j++){
    printf("%3d",a[i][j]);
    b[j][i]=a[i][j];
   }
    printf("\n");
    }
    printf("互换后的数组为:\n");
    for(i=0;i<3;i++){
    for(j=0;j<2;j++)
        printf("%3d",b[i][j]);
    printf("\n");
    }
return 0;
}

4、字符数组与字符串

在c语言中,只能用一个字符数组来表示一个字符串。字符数组的每个元素占一个字节,字符数组中包含一个' \0  '字符,代表字符串的结尾。因而字符数组的元素个数,应该不少于被存储的字符串的字符数目加1.
下面以一段代码说明字符串变量的用法,代码如下:
#include<stdio.h>
#include<string.h>
int   main(void)
{
     char     cNational [ ]="zhongguo";
     char     cCity[ 10]="北京";
     char     cEnglish[10];
     char     szResponse[100];
     printf("中国的汉语拼音是%s,用英文表示出来是?\n", cNationa);
            scanf("%s",&cEnglish);
             if(strcmp(cEnglish,"china")==0){
                printf("对的,你喜欢%s吗?\n", cCity);
            }
            else{
                 strcpy( szResponse,"你的英文不好!\n");                          //调用string.h中声明的字符串拷贝库函数strcpy为字符数组赋值
                 printf("%s", szResponse);
           }
     return   0;
}

在C语言中,只能用一个字符数组表示一个字符串

①strlen字符串函数:

eg:#include<stdio.h>

    #include<string.h>

    int k=0;

   k=strlen("1230");

   printf("%d",k);     /*打印字符串长度*/

②比较2个字符串大小:strcmp(字符串1,字符串2)

对2个字符串进行从左到到右逐个字符相比。

比较规则:按ASCII码值大小来比较,不同的字符或者遇到‘\0’为止,若全部字符完全相同,则认为相等;若出现不同的字符则以第一个不相同的字符的字符的比较结果为准;如果字符串1等于字符串2则返回值为0;如果字符串1大于字符串2则返回一个正整数;如果字符串1小于字符串2则返回一个负整数。

第八章

1、C语言数据类型:

①基本类型{整数型int;浮点型(单精度型float,双精度型double);字符型char}

②指针类型

③构造类型{数组,结构性struct,联合型union,枚举型enum}

④空类型void

2、枚举定义变量的方式:

方式一:

enum score { score , avgScore , sumScore};

enum score a , b , c ;

方式二:

enum score { score , avgScore , sumScore}a,b,c;
方式三:

enum { score , avgScore , sumScore}a,b,c;
枚举使用注意:

(1)枚举值是常量,不能是变量

(2)枚举元素本身由系统定义了一个表示序号的值:0、1、2.。。。。。可以这样访问

例:a = (enum score)1;//相当于 a = avgScore ;

(3)枚举元素不是字符常量也不是字符串常量,用的时候不能加单、双引号

3、指针使用注意:

(1)指针变量只能存储地址,所以在赋值时会以*p=100 等。

(2)int *num=&a;//正确用法

         int *num;

        *num=&a;//错误用法,&a、num本来就是存储地址,*num代表指向num地址的地址。

(3)"*"在定义和使用时作用大不相同:定义时int *相当于一个数据类型;在使用时,是访问p所在的存储空间。

(4)指针用在数组时,指向数组的首元素,指针可以像数组一样访问元素。

4、结构体

结构体是不同数据类型的集合。很多地方类似于数组。

结构体的形式:

struct 结构体名

{

结构体元素

};结构体变量定义和赋值方式:

方式一:

struct Person

{

int age;

char name[];

double weight;

};


struct Person p1 = {33,"Tom",100};

方式二:

struct Person

{

int age;

char name[];

double weight;

}p2 = {22,"Jerry",65.5};

方式三:

struct {

int age;

char name[];

double weight;

}p3 = {20,"Angle",55.5};

第九章

1、函数的分类:在C语言中的函数分为两类,一类是系统提供的标准函数,又称库函数。另一类是用户自己定义的函数。

2、函数的定义

函数类型    函数名称(形式参数表){

   说明语句序列

   可执行语句序列

}

①函数名可以是唯一标识一个函数的名字,它的命名规则同变量完全一样。
②函数类型,从语法规则上讲,函数的类型可以是除函数和数组以外的任何类型,可以是int型,char型等。
③形参可以是空的,也可以由多个形参组成的,当形参列表中有多个形参时,每个形参之间用逗号隔开,不管形参列表中是否有参数,都要用左,右圆括号括起来。
④函数体是由一对{ }括起来的,函数功能是由函数体内部的各个语句来实现的。
⑤一个完整的C语言程序可由一个或多个函数组成,但必须有一个且只有一个名为main( )的函数,即主函数。无论main( )函数在什么位置,可运行的c程序总是从main( )开始执行的。
⑥return返回值的类型,除了取常用的各种数据类型以外,还有一种特殊类型,即void。void型的函数无返回值,默认的数据类型为int。

3、函数的参数①有返回值的无参函数

#include<stdio.h>
int   print( ){
       printf("欢迎");
       return 0;     
}
int main(void){
      print( );
      return 0;
}

②有返回值的有参函数
#include<stdio.h>
double    add (double a,double  b){
       return  a+b;
}
int   main(void){
        double   k=0;
        k=add(1.1 , 2.2);
        printf("%f",k);
        return  0;
}

③无返回值的无参函数
#include<stdio.h>
int main(){
void wf();
printf("水仙花数是:\n");
wf();
return 0;
}
int wf(){
int i,j,k,n;
for(n=100;n<1000;n++){
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k){
printf("%4d\n",n);
}
}
printf("\n");
return 0;
}
④无返回值的无参函数
#include<stdio.h>
void   jianfa (int  a,int  b){
      printf("%d",a-b);
}
int main (void){
        jianfa(2,1);
}
******数组作为函数参数*****
********以冒泡排序为例:
#include<stdio.h>
void sorting(int a[])
{
    int n,k,temp;
for(n=0;n<=9;n++){
for(k=0;k<9-n;k++){
if(a[k]>a[k+1]){
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
  }
printf("从小到大的顺序为:");
for(n=0;n<10;n++){
printf("%4d",a[n]);
}
}
int main(){
printf("input 10 numbers with int type:\n");
int a[10],n;
     for(n=0;n<10;n++){
     scanf("%d",&a[n]);
     }
         
     sorting(a);
     printf("\n");
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值