C语言程序设计-现代方法(笔记1)
第一章 C语言概述
1、C语言的历史(1.1)
起源:贝尔实验室开发的UNIX操作系统的副产品。标准化:C89和C99。基于C的语言:C++,Java,C#,Perl。
2、C语言的优缺点(1.2)
优点:高效、可移植、功能强大、灵活、标准库、与UNIX和Linux集成;缺点:C程序更容易隐藏错误、C程序可能难以理解、C程序可能会难以修改。
高效使用C的方法
1.学习如何规避C语言的缺陷(C陷阱与缺陷);2.使用软件工具使程序更加可靠(lint工具和调试工具);
3.利用现有的代码库;4.采用一套切合实际的编码规范;5.避免“投机取巧”和极度复杂的代码;6.紧贴标准(C89和C99)
第二章 C语言基本概念
1、编写一个简单的C程序(2.1):编译和连接
预处理:执行以#开头的命令,类似于编辑器,可以给程序添加内容,也可以对程序进行修改;
编译:编译器将程序翻译成机器语言(即目标代码);
链接:连接器把由编译器产生的目标代码和所需的其他附加代码整合在一起,附加代码包括库函数。
2、简单程序的一般形式(2.2):C程序由指令、函数和语句组成。
指令:一般是预处理器执行的命令,类似于#define,#include <stdio.h>;函数:程序员编写的函数和库函数;语句:程序运行时执行的命令,每条语句由分号结束。
main函数最后的return 0;语句。作用:一是使main函数终止,二是指出main函数返回值是0.
3、注释(2.3):每个程序都应该包含识别信息,即程序名,编写日期,作者,程序的用途及其他相关信息。/* */和//
4、变量和赋值(2.4)
每个变量必须有一个类型。使用变量之前必须对其进行声明。
float型变量运算比int型变量慢,float型变量所存储的数值只是实际值的一个近似值。
书写格式方面,建议在声明和语句之间留出一个空行。
给float型变量赋值时,最后在后面加一个f,例如float profit = 21.34f;
占位符%d用来指明在显示过程中变量的值的显示位置。
没有默认值且尚未在程序中被赋值的变量是未被初始化的。
C语言通用原则:在任何需要数值的地方,都可以使用具有相同类型的表达式。printf("Volume (cubic inches): %d\n", height * lenght * width);
5、读入输入(2.5)
printf中的字母f和scanf中的字母f含义相同,都是表示“格式化”的意思。
scanf函数需要知道将获得的输入数据的格式,而printf函数需要知道输出数据的显示格式。
6、定义常量的名字(2.6)
C程序规范:#define宏定义的名字都使用大写字母表示。
#define SCALE_FACTOR (5.0f / 9.0f) 添加上f
7、标识符(2.7)
传统C中命名中间插入下划线,例如symbol_table,current_page
目前流行的java(C#及C++)用单词首字母大写,例如symbolTable,currentPage
8、C程序书写规范(2.8)
语句可以分开放在任意多行内;记号间的加空格可以更容易区分记号;每个逗号后边也放一个空格;缩进帮助识别程序;空行可以把程序划分成逻辑单元;
第三章 格式化输入/输入
1、printf函数(3.1)
printf函数用来显示格式串的内容,并且在该串中的指定位置插入可能的值。格式串包括普通字符和转换说明。
转换说明:%m.pX格式或者-m.pX格式来表示。m(最小字段宽度):指定要显示的最小字符数量;p(精度),+和-表示右对齐和左对齐。
转义序列:使字符串包含一些特殊字符而不会使编译器引发问题。警报(响铃)符:\a;换行符:\n;水平制表符:\t。
2、scanf函数(3.2)
检查转换说明数量是否与输入变量数量相匹配;检查每个转换是否适合相对应的变量;scanf每个调用变量前需要有&。
许多专业程序员避免使用scanf函数,而是采用字符格式读取所有数据,然后再把他们转换成数值形式。
scanf函数本质上使一种“模式匹配”,试图吧输入的字符组与转换说明相匹配。
用户从键盘输入时,程序并没有读取输入,而是把用户的输入放在一个隐藏的缓冲区中,由scanf函数来读取。
第四章 表达式
1、算术运算符(4.1)
一元运算符什么都不做,在经典C中不存在这种运算符。
把int型操作数和float型操作数混合在一起时,运算结果时float型的。
运算符%要求操作数十整数。当运算符/和运算符%用于负操作数时,其结果难以确定。
通用规则,C语言允许在所有表达式中用圆括号进行分组。
运算符的左结合和右结合。
2、赋值运算符(4.2)
表达式v=e,如果v和e的类型不同,那么赋值运算发生时会把e的值转化为v的类型。
在C语言中,赋值就像+那样是运算符。即赋值操作产生结果。赋值表达式v=e的值就是赋值运算后v的值。
第五章 选择语句
1、逻辑表达式(5.1)
关系运算符可以用于比较整数和浮点数,也允许比较混合类型的操作数。因此1<2.5的值为1。
关系运算符的优先级低于算术运算符。表达式i + j < k - 1的意思是(i + j)<(k - 1)。判等运算符的优先级低于关系运算符。
逻辑运算符所产生的结果时0或1。
2、if语句(5.2)
把==运算符与=运算符相混淆是最常见的C语言编程错误。
复合语句,通过在一组语句周围放置花括号,可以强制编译器将其作为一条语句来处理。
对于if else 语句在不必要的情况下使用花括号有两个好处。首先,程序很容易修改,然后,可以避免忘记使用花括号而导致的错误。
条件表达式使程序更短小但也更难以阅读,所以最好避免使用。用于两种地方:1.return语句;2.某些类型的宏定义中。
if (i > j)
return i;
else
return j
替换为
return i > j ? i : J;
if (i > j)
printf("%d\n", i);
else
printf("%d\n", j);
替换为
printf("%d\n", i > j ? i : j);
为了便于理解,C89的程序员通常使用TRUE和FALSE这样的名字定义宏:
#define TRUE 1
#define FALSE 0
C99中使用_Bool型,例如:_Bool flag;_Bool只能赋值为0或1
或者包含<stdbool.h>,可以写为bool flag,<sdbool.h>中提供了ture和false两个宏,分别代表1和0.
第六章 循环
1、常见循环类型
while语句;do语句;for语句
2、for语句(6.3)
21.for语句的惯用法
从0向上加到n-1:for( i = 0; i < n; i++)
从1向上加到n:for( i = 1; i <= n; i++)
从n-1向下减到0:for(i = n - 1; i >= 0; i--)
从n向下减到1:for( i = n; i > 0; i--)
2.2 C99中的for语句
在C99中,在for语句的第一个表达式中可以替换为一个声明
for(int i = 0; i < n; i++)
2.3退出循环
break语句:跳出循环或者switch语句,但是不能从switch中跳出循环。
continue语句:跳过某次迭代的部分内容,但不会跳出整个循环。
goto语句:让程从一条语句跳转到另一条语句。goto语句必须和goto标识符在同一个函数中。
goto语句的缺点:1.goto语句可以往前跳也可以往后跳,使程序难以阅读;2.goto语句使程序难以修改。
2.4空语句
语句可以为空,除了末尾处的分号以外什么符合也没有。
空语句有一个好处:编写循环体的循环。
C程序员习惯性把空语句单独放置在一行。
for(d = 2; d < n && n & d != 0; d++)
;
其他使用空语句的地方
for(d = 2; d < n && n & d != 0; d++)
continue;
for(d = 2; d < n && n & d != 0; d++)
{}
C语言程序设计-现代方法(笔记1)的更多相关文章
- C语言程序设计-现代方法(笔记3)
第十三章 字符串 1.字符串字面量(13.1) 字符串字面量:用一对双引号括起来的字符序列.字符串字面量可以像字符常量一样包含转义字序列. 在字符串字面量中小心使用八进制和十六进制的转义序列. 字符串 ...
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- C语言程序设计做题笔记之C语言基础知识(上)
C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...
- 《JAVA语言程序设计》上课笔记
教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一. 问几个问题 1. 你们到这里来干什么 ...
- C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载
下载地址:点我 C语言仍然是计算机领域的通用语言之一,但现在的C语言已经和当初的时候大不相同了.本书主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化 ...
- C语言程序设计现代方法_数组(第八章)
C语言不要求检查下标的范围.当下标超出范围时,程序可能会执行不可预知的行为. 看下这个程序: #include <stdio.h> #define N 10 // int main() { ...
- C语言程序设计现代方法_基本类型(第七章)
C语言支持两种不同的数值类型,整数类型,浮点类型. C语言的整数类型有不同的尺寸.int类型通常为32位,但在老的CPU上可能是16位.有些可能是64位. 因此,int型如果在16位CPU上最大值就是 ...
- 《C语言程序设计现代方法》第4章 表达式
C语言的一个特点就是它更多地强调表达式而不是语句,表达式是表示如何计算值的公式. 当表达式包含两个或更多个相同优先级的运算符时,运算符的结合性(associativity)开始发挥作用.如果运算符是从 ...
- 《C语言程序设计》学习笔记(二)
第八章 函数 函数的基本概念 定义:函数由函数名.参数和函数体组成. 函数定义的一般形式: 类型说明符 函数名(形式参数声明) { [说明与定义部分] 语句: } 说明: 1.类型说明符用来说明函数的 ...
随机推荐
- iOS开发tips-PhotoKit
概述 PhotoKit应该是iOS 8 开始引入为了替代之前ALAssetsLibrary的相册资源访问的标准库,后者在iOS 9开始被弃用.当然相对于ALAssetsLibrary其扩展性更高,ap ...
- 网站优化之使用Free marker静态化网站文章页
博客做出来的时候就想要把一些栏目和文章页都静态化处理,当时没啥时间搞,就一直没去弄.但是最近的工作就是做网站,用cms快速搭出了几个网站,cms搭建网站是真的方便啊 如果没有需要二次开发实现的功能,那 ...
- Java 添加Word形状或图形
本文将介绍通过java编程在Word文档中添加形状(图形),包括添加单个图形.组合图形,以及格式化图形样式,如设置形状填充色.大小.位置.边框样式.边框颜色.边框粗细.图形旋转角度.图形文本环绕方式等 ...
- 探索 Reflect.apply 与 Function.prototype.apply 的区别
探索 Reflect.apply 与 Function.prototype.apply 的区别 众所周知, ES6 新增了一个全局.内建.不可构造的 Reflect 对象,并提供了其下一系列可被拦截的 ...
- 前端vue实现pdf文件的在线预览
3.前端vue实现pdf文件的在线预览 我是通过 <iframe> 标签就可以满足我工作的 pdf预览需求 如果<iframe> 无法满足需求 , 可以使用pdf.js这个插件 ...
- 批量更新Linux文件后缀名
#!/bin/bash#Create_Time 2019-08-06#use: small_wei #查找并,批量修改文件后缀 #后缀为 .txt 修改为 .log find /opt -name & ...
- xmake从入门到精通8:切换编译模式
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 本文我们会详细介绍下如何在项目构建过程中切换deb ...
- 2019-2020-9 20199317 《Linux内核原理与分析》第九周作业
第8章 进程的切换和系统的一般执行过程 1 进程调度的时机 1.1 硬终端与软中断 进程调度的时机都与中断相关,中断有很多种,都是程序执行过程中的强制性转移,转移到操作系统内核相应的处理程序.中 ...
- 一文了解Nuget的使用
Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费).NuGet客户端工具提供了生成和使用软件包的能力.NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库. ...
- 最新Navicat Premium12 破解方法,亲测可用
1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装(文末,网盘地址有64位安装包和注册机下载) 2.激活Navicat Premiu ...