C语言入门之程序的灵魂(算法)及数据类型

  • 算法---程序的灵魂

一个程序主要包括以下两方面的信息:

(1) 对数据的描述。在程序中要指定用到些数据以及这些数据的类型和数据的组织形式

这就是数据结构(data structure)

(2) 对操作的描述。即要求计算机进行操作的步骤

也就是算法(algorithm)

  算法 + 数据结构 = 程序

广义地说,为解决一个问题而采取的方法和步骤,就称为“算法

对同一个问题,可以有不同的解题方法和步骤

为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法

  • 计算机算法可分为两大类别:

  数值运算算法

 非数值运算算法

 数值运算的目的是求数值解

非数值运算包括的面十分广泛,最常见的是用于事务管理领域

  • 简单的算法举例

2.1 1+2+3+4+5

 可以用最原始的方法进行:

步骤1:先求1+2,得到结果3

步骤2:将步骤1得到的3加上3,得到结果6

步骤3:将6加上4,得10

步骤4最后将10加上5,得15。这就是最后的结果。

  如果从1+2+…+100呢?

改进的算法:    

步骤1定义变量sum并赋值为0

步骤2定义一个循环变量i并赋值为1

步骤3判断循环变量是否小于等于5,如果条件成立,将sumi相加并将结果赋给sum,否则运算结束,跳到步骤5

步骤4循环变量自增1,跳到步骤3

步骤5:得到sum的总和值

  • 再次改进的算法:   

  • 算法的特性

​​​​​​一个有效算法应该具有以下特点

(1) 有穷性。一个算法应包含有限的操作步骤,而不能是无限的。

      (2) 确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。

(3) 有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。

(4) 有一个或多个输出。算法的目的是为了求解,“解” 就是输出。没有输出的算法是没有意义的。

(5) 有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。例如:a/b,如果

                       b=0就不能有效地执行

  • 流程图表示表示法 

  • 例如1×2×3×4×5的阶乘用流程图表示

一个流程图包括以下几部分

(1) 表示相应操作的框

(2) 带箭头的流程线

(3) 框内外必要的文字说明

流程线不要忘记画箭头,否则难以判定各框的执行次序

  • 三种基本结构和改进的流程图

(1) 顺序结构

(2) 选择结构

(3) 循环结构

① 当型循环结构

② 直到型循环结构

以上三种基本结构,有以下共同特点:

(1) 只有一个入口

(2) 只有一个出口

                            一个判断框有两个出口

                           一个选择结构只有一个出口

(3) 结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都应当有一条从入口到出口的路径通过它

                 (4) 结构内不存在“死循环”

  • 由三种基本结构派生出来的结构:

  • N-S流程图表示算法

N-S流程图用以下的流程图符号

例如5!算法用N-S图表示。

  • 用伪代码表示算法

            伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法

           用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用

例如求5!用伪代码表示算法        

用计算机语言表示算法

     例如5!C语言表示

#include <stdio.h>
int main( )
{ 
   int i,t;
   t=1;
   i=2;
   while(i<=5)
   {   t=t*i;
        i=i+1;   
   }
   printf("%d\n",t);
   return 0;
}
  • 结构化程序设计方法

  采取以下方法保证得到结构化的程序:

1自顶向下

2逐步细化

3模块化设计

4结构化编码

  •  常量和变量

2. 变量在程序运行期间,变量的值是可以改变的         

  • 数据类型

  1.             所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式
  2.            不同的类型分配不同的长度和存储形式

  • 整型数据

1. 整型数据的分类 

              基本整型(int):占2个或4个字节(VC6.0)

              短整型(short int)VC++6.0中占2个字节

             长整型(long int)VC++6.0中占4个字节

            双长整型(long long int)C99新增的

       2. 整型变量的符号属性

             整型变量的值的范围包括负数到正数

            可以将变量定义为“无符号”类型          

           扩充的整型类型:

                Ø有符号整型   [signed] int

               Ø无符号基本整型   unsigned int

               Ø有符号短整型     [signed] short [int]

               Ø无符号短整型     unsigned short [int]

              Ø有符号长整型     [signed] long [int]

              Ø无符号长整型     unsigned long [int]

              Ø有符号双长整型  [signed] long long [int]

             Ø无符号双长整型  unsigned long long [int]

          Ølong定义长整型变量,如:long a;

         Ø分配4个字节存储空间,VC6中和int一样

        Øunsigned long定义无符号长整型变量,: unsigned long a; 变量分配4个字节存储空间, VC6中和int一样

         Øunsigned long longlong long   C99后新增的特性,有些编译器不支持这种特性。

  • 字符型数据

        Ø字符是按其代码(整数)形式存储的

1.字符与字符代码

大多数系统采用ASCII字符集

             字母:A ~Za ~z

             数字:09

            专门符号:29个:!  ”  #  &  ‘  (  )  *

            空格符:空格、水平制表符、换行

           不能显示的字符:空(null)字符(‘\0’表示)、警告(‘\a’表示)、退格(‘\b’表示)、回车(‘\r’表示)

  • 浮点型数据

         Ø字符常量由单撇号括起来的单个字符或转义字符

        Ø整型常量不带小数点的数值

             系统根据数值的大小确定int还是long

        Ø浮点型常量凡以小数形式或指数形式出现的实数

           C编译系统把浮点型常量都按双精度处理分配8个字节

  • 数据存储溢出问题

  • 有符号变量与无符号变量比较问题

出错的原因是,编译器在进行运算时会对不同的数据类型进行隐式转换,有符号型会隐式转成无符号型,造成负数大于

正数不正确的结果,如何避免这个问题呢,有2个方式避免

 1.  参与比较的变量在定义时要保持扩展类型一致

 2.比较时用强制转换保正类型一致

  • C语言隐式转换规则如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨依依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值