C语言零基础入门(1)

目录
  • 1.C语言简介
    • 1.1C语言发展史
    • 1.2C语言的特点
    • 1.3算法及其表示
    • 1.4常用算法介绍
  • 总结

1. C语言简介

1.1 C语言发展史

C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计。C语言的发展历程大致如图1-1所示:

图1-1 C语言的发展历程

1.2 C语言的特点

C语言是一种通用的程序设计语言,语言本身简洁、灵活、表达能力强,被广泛用于系统软件和应用软件的开发,并且具有良好的可移植性。

C语言的特点可概括如下:

(1)简洁、紧凑、灵活。C语言的核心内容很少,只有32个关键字,9种控制语句;程序书写格式自由,压缩了一切不必要的成分。

(2)表达方式简练、实用。C语言有一套强有力的运算符,达44种,可以构造出多种形式的表达式,用一个表达式就可以实现其他语言可能需要多条语句才能实现的功能。

(3)数据类型丰富。数据类型越多,数据的表达能力就越强。C语言具有多种数据类型,如字符型、整型、实型、数组、指针、结构体和共用体等,可以实现诸如链表、栈、队列、树等各种复杂的数据结构。其中的指针类型使得参数的传递简单并且迅速,同时节省内存空间。

(4)具有低级语言的特点。C语言具有与汇编语言相近的功能和描述方法,如地址运算和二进制数位运算等,还可以对硬件端口等资源进行直接操作,充分使用计算机的资源。C语言既具有高级语言便于学习和掌握的特点,又具有机器语言或汇编语言对硬件的操作能力。因此,C语言既可以作为系统描述语言,又可以作为通用的程序设计语言。

(5)C语言是一种结构化语言,适合于大型程序的模块化设计。C语言提供了编写结构化程序的基本控制语句,如if-else语句、switch语句、while语句和do-while语句等。C语言是函数的集合,函数是构成C语言程序的基本单位,每个函数具有独立的功能,函数之间通过参数传递数据。程序员可以编写自己的函数。同时,不同操作系统的编译器都为程序员提供了大量的标准库函数,如输入/输出函数、数学函数和字符串处理函数等。灵活地使用标准库函数可以简化程序设计,提高编写程序效率。

(6)各种版本的编译器都提供了预处理命令和预处理程序。预处理扩展了C语言的功能,提高了程序的可移植性,为大型程序的调试提供了方便。

(7)可移植性好。程序从一个环境不经改动或稍加改动就可以移植到另一个完全不同的环境中运行。这是因为标准库函数和预处理程序将可能出现的与机器有关的因素与源程序分割开来,使得针对不同的计算机硬件环境,可以重新定义有关的内容。

(8)生成的目标代码质量高。由C源程序编译和链接得到的目标代码的运行效率比用汇编语言编写的也不过只低10%~20%,可充分发挥机器的效率。

(9)C语言语法限制不严,程序设计自由度大。C语言程序在运行时不做诸如数组下标越界和变量类型兼容性等检查,而是由编程者自己保证程序的正确性。C语言几乎允许所有的数据类型的转换,字符型和整型可以自由混合使用,所有类型均可作逻辑型,可自己定义新的类型,还可以把某类型强制转换为指定的类型。实际上,这使编程者有了更大的自主性,能编写出灵活、优质的程序,同时也给初学者增加了一定的难度。所以,只有在熟练掌握C语言程序设计之后,才能体会到其灵活性。

C语言也存在以下缺点:

(1)程序的错误更隐蔽。C语言的灵活性使得用它编写程序时更容易出错,而且C的编译器不检查这样的错误。与汇编语言类似,需要程序运行时才能发现这些逻辑错误。C语言还会有一些隐患,如将比较的 “==” 写成赋值 “=” ,虽然语法上没错,但这样的逻辑错误往往不易发现,想要找出错误往往十分费时。

(2)C语言程序有时会难以理解。C语言语法成分相对简单,是一种小型语言。但是,其数据类型多,运算符丰富且结合性多样,使得对其理解有一定的难度。

(3)C语言程序有时会难以修改。考虑到程序规模的大型化或者巨型化,现在编程语言通常会提供 “类” 和 “包” 之类的语言特性,这样的特性可以将程序分解成更加易于管理的模块。然而C语言缺少这样的特性,维护大型程序显得比较困难。

1.3算法及其表示

C语言解题时,在程序中有两方面的描述,即数据描述和处理步骤(算法)描述,后者处理前者的数据。

算法具有以下特性:

  • 有穷性:算法在执行了有限步骤后结束,并且每一步都可以在有穷的时间内完成。
  • 确定性:算法中每种操作必须有确切的含义,即无二义性。同时,无论如何算法只有唯一的一条执行路径,即相同的输入只能得出相同的输出。
  • 可行性:算法中描述的操作都可以通过已经实现的基本操作执行有限次数来实现。
  • 输入:有零个或多个输入,即算法需要的必要信息。
  • 输出:有一个或多个输出,输出的是与输入有某些特定关系的信息。没有输出的算法是无意义的。

算法的表示:

1.自然语言描述;

2.传统流程图;

3.N-S流程图;

4.伪代码。

【例如】求两个正整数m和n的最大公约数(即同时能够整除m和n的最大正整数)。

1. 自然语言描述

欧几里得阐述了求两个数的最大公约数的过程——欧几里得算法

第一步:以n除m,并令r为所得余数(显然n>r0)。

第二步:若r=0,算法结束,n即为m和n的最大公约数。

第三步:置mn,nr,返回第一步。

2. 传统流程图

图1-2 求最大公约数的传统流程图

3. N-S流程图

图1-3 求最大公约数的N-S流程图

4. 伪代码

算法开始
输入m,n;
do{
    r←以n除m的余数;
    m←n;
    n←r;
}while(r≠0);
输出m;
算法结束

1.4常用算法介绍

1.枚举法

枚举法又称为穷举法。该方法通过逐一考察问题的所有可能解,找出问题真正的解。枚举法要求问题的可能解必须是有限的,而且这些可能解是已知的。

【例】给定一个正整数,确定它的整数立方根是否存在,若存在则找出这个立方根。

算法开始
输入一个正整数给n;
x←0;
while(x≤n 且 x*x*x≠n){
    x←x+1;
}
if(x≤n)
    找到n的整数立方根,输出x的值;
else
    输出n的整数立方根不存在信息;
算法结束

2.递推法

递推法是从已知的初始条件出发,逐次推出中间结果。在理想状态下,每递推一次,结果逐渐接近问题的最后解。递推法在数值算法中又称为迭代法。迭代法常用于求近似解的问题,根据对前一步结果的误差的不同处理方法,迭代法又有逼近迭代和试探迭代等不同方法。数值计算要注意解的稳定性问题,即在迭代中每一步的解越来越接近真正的解,否则迭代不会成功。

【例】计算一个正整数n的阶乘。

算法开始
输入一个正整数给n;
t←1;
i←1;
while(i≤n){
    t←t*i;
    i←i+1;
}
输出结果t
算法结束

3.递归法

一个直接或间接调用过程(或函数)自身的算法称为递归算法,一个函数如果调用自身进行计算则称该函数为递归函数。一些问题的算法描述中,递归法往往比非递归法更加简洁易懂。

【例】计算一个正整数N的阶乘。

阶乘函数f的递归定义为:
f(1)=1                (1!=1,N=1 时)
f(N)=N*f(N-1)         (N!=N*(N-1)!,如果N>1)

除了上面介绍的枚举法、递推法和递归法外,还有回溯法、贪婪法、分治法、动态规划法等

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言入门篇--字符串的基本理论及应用

    目录 字符串 1.常见字符串的情况 2.'\0'的证明 3.字符串的用法 3.1 用数组 3.1.1 给数组直接赋字符串 3.1.2 以单个字符赋入数组 3.2 用指针 4.字符串可直接输出 字符串 (1)由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串.eg:"hello world!" (2)字符串在结束时默认有 转义字符'\0',不作为内容,作为结束标志. (3)C语言无字符串类型,需借助 char*,char[

  • C语言入门篇--sizeof与strlen基础理论

    1.sizeof (1)若求字符串占据 空间 的大小,包括字符串结尾处默认的'\0'. (2)若所求不是字符串的大小,求的是数组.类型等的大小,不用考虑'\0',因为不是字符串,在结尾处无默认的'\0'. (3)若明显出现'\0',则统计. (4)返回一个变量或者类型的大小(以字节为单位) 2.strlen 求字符串内容的大小,统计字符串的字符个数,遇到'\0'停止统计,不统计'\0'. 3.知识点 3.1 对于数组 sizeof:结果就是数组大小. strlen:在计算时会遍历整个数组,往后遍

  • C语言入门篇--初识C语言及数据类型

    目录 1. 什么是C语言? 2.第一个C程序&&知识点 2.1 头文件 2.2 main函数 2.3 函数调用 2.4 return 0; 3. 数据类型 3.1 C语言数据类型 3.2 为什么有这么多数据类型? 3.3 各个数据类型的大小 1. 什么是C语言? (1)C语言是面向过程.编译型的编程语言(与C++.Java等面向对象的编程语言有所不同,ps:C与C++是兼容的),经过编译后最终形成可执行程序(即exe,可直接运行). (2)C语言非常经典,一般会在底层开发使用,Linux.

  • C语言文件操作零基础新手入门保姆级教程

    目录 一.前言 二.文件操作基础知识 ①什么是文件 ②数据文件类型 ③数据如何存储 ④如何读取二进制文件 ⑤什么是文件名 ⑥文件缓冲区 ⑦文件指针 三.文件操作函数 ①fopen 与 fclose ②fputc与fgetc ③fputs与fgets ④fprintf与fscanf ⑤fwrite与fread ⑥fseek与ftell与rewind ⑦ferror与feof ⑧补充函数 sscanf sprintf ⑨补充函数perror  strerror 总结 一.前言 我们如何使我们设计的程

  • C语言入门之浮点数

    实际开发中使用double,而不使用float  浮点数的输出 float采用%f占位符. double采用%lf占位符.测试结果证明,double不可以用%f输入,但可以用%f输出,但是不建议采用%f,因为不同的编译器可能会有差别. long double采用%Lf占位符,注意,L是大写. 浮点数输出缺省显示小数点后六位. 浮点数采用%lf输出,完整的输出格式是%m.nlf,指定输出数据整数部分和小数部分共占m位,其中有n位是小数.如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位

  • C语言入门篇--注释,关键字typedef及转义字符详解

    目录 注释 1.注释意义 2.两种注释风格 2.1 C语言注释风格 2.2 C++注释风格 关键字typedef 1.注意 2.用法 语法结构 转义字符 1.转义字符及其含义 2.字面 转 特殊 3.特殊 转 字面 注释 1.注释意义 (1)代码中有不需要的代码可以直接删除,也可以注释掉. (2)有些代码比较难懂可以注释一下. 2.两种注释风格 2.1 C语言注释风格 /*xxxxxx*/ 一次可以注释一行或多行,但不能嵌套注释. eg: #include <stdio.h> int main

  • C语言零基础入门(1)

    目录 1.C语言简介 1.1C语言发展史 1.2C语言的特点 1.3算法及其表示 1.4常用算法介绍 总结 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示: 图1-1 C语言的发展历程 1.2 C语言的特点 C语言是一种通用的程序设计语言,语言本身简洁.灵活.表达能力强,被广泛用于系统软件和应用软件的开发,并且具有良好的可移植性. C语言的特点可概括如下: (1)简洁.紧凑

  • C语言零基础入门(2)

    目录 1.数组 1.1一维数组 1.1.1一维数组的定义 1.1.2一维数组的初始化 1.1.3一维数组的引用 1.2二维数组及多维数组 1.2.1二维数组的定义 1.2.2二维数组的初始化 1.2.3二维数组的引用 总结 1. 数组 数组是一组相同类型变量的有序集合,用于存放一组相同类型的数据.这一组变量用数组名和从0开始的下标标识,使用内存中一块连续的存储空间.依据数组中元素下标的个数分为一维数组.二维数组和多维数组. 1.1 一维数组 1.1.1 一维数组的定义 一维数组定义的一般形式为:

  • Bootstrap零基础入门教程(三)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 写到这里,这篇从零开始学Bootstrap(3)我想写以下几个内容: 1. 基于我对Bootstrap的理解,做一个小小的总结.

  • Netty网络编程零基础入门

    目录 OSI七层网络模型 Socket技术 TCP协议 Java语言创建socket应用 http协议 OSI七层网络模型 应用层:Http协议.文件服务器.邮件服务器 表示层:数据转换解决不同系统中间通讯的兼容问题 会话层:建立与应用程序的会话连接(socket) 传输层:提供端口号(区分不同的应用程序)和传输的协议(TCP和UDP) 网络层:为数据实现路由(路由器.交换机) 数据链路层:对传输的地址的帧以及错误的检测. 物理层:以二进制的形式在物理机器.上实现传输.(光纤.专线.各种物理介质

  • Bootstrap零基础入门教程(二)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 本文重点给大家介绍Bootstrap零基础入门教程(二),具体详情如下所示: 过程中会频繁查阅资料的网站: http://www.

  • C++中的STL中map用法详解(零基础入门)

    目录 一.什么是 map ? 二.map的定义 2.1 头文件 2.2 定义 2.3 方法 三.实例讲解 3.1 增加数据 3.2 删除数据 3.3 修改数据 3.4 查找数据 3.5 遍历元素 3.6 其它方法 四.总结 map 在编程中是经常使用的一个容器,本文来讲解一下 STL 中的 map,赶紧来看下吧! 一.什么是 map ? map 是具有唯一键值对的容器,通常使用红黑树实现. map 中的键值对是 key value 的形式,比如:每个身份证号对应一个人名(反过来不成立哦!),其中

  • Django零基础入门之调用漂亮的HTML前端页面

    引言:    Django如何调用HTML前端页面呢? Django怎样去调用漂亮的HTML前端页面呢? 就直接使用render方法即可! render方法是django封装好用来调用HTML前端模板的方法! 1.模板放在哪? 在主目录下创建一个templates目录用来存放所有的html的模板文件.(如果是使用pycharm创建django项目的话,默认就会自动创建这个目录哦!但是用命令创建django项目的话是没有此目录的!) templates目录里面再新建各个以app名字命名的目录来存放

  • Django零基础入门之路由path和re_path详解

    目录 urls.py文件中的path和re_path 1.path的基本规则: 2.默认支持的转换器有: 3.re_path正则匹配: Django中实战使用path和re_path 1.urls.py文件: 2.views.py视图函数文件: 3.效果: 假设现在有个需求:   需要通过URL进行参数传递,我们该怎么做呢?     其中有个方法就是本文要讲的内容--path和进阶版的re_path. urls.py文件中的path和re_path 1.path的基本规则: path('test

  • Django零基础入门之模板变量详解

    引言: 我们在页面上会看到,谁登录的就会显示谁的信息,那么这个页面上的变量信息是怎样实现的呢? 这就是本文要讲述的内容--Django中的模板变量! 1.模板变量! 可以在前端页面中使用模板变量来取数据库中的数据,实现前端页面数据动态显示. (1)模板变量使用规则:(在HTML模板中使用!) 语法: {{ 变量名 }} 命名由字母和数字以及下划线组成,不能有空格和标点符号 可以使用字典.类对象.方法.函数.列表.字符串 不要和python或django关键字重名 注意: 如果data是一个字典,

  • Django零基础入门之自定义标签及模板中的使用

    目录 自定义标签: 第一部分 (1)视图函数编写: (2)编写模板文件: (3)自定义标签实现: (4)效果展示: 第二部分 (1)视图函数编写: (2)编写模板文件: (3)自定义标签实现: 第三部分 紧接上文--<Django零基础入门之自定义过滤器及模板中的使用>,本文来讲一讲自定义标签!!! 自定义标签: 源码学习: template.Library().simple_tags(): def simple_tag(self, func=None, takes_context=None,

随机推荐