目录

开始做做笔记,加油!

注:所有笔记基于书内容和我的理解,就挑一些重点记下来,如果大家发现不对的地方欢迎指出嗷~

第一章 初识C语言

1 使用C语言的7个步骤

1.1 定义程序目标

其实就是先要做好整个项目的大纲,作用就如同创业的计划书一般重要

我通常是分为三步:这个项目要达到什么功能、功能如何实现、维护代码,没想到书居然写的那么详细

1.2 设计程序(功能实现)

知道程序要完成的任务之后,就要考虑如何通过程序去实现它

1.3 编写代码

就是按图索骥的将第二步的那些功能用代码表达出来

1.4 编译

编译源代码,编译器将源代码转换成可执行代码(可执行代码指用计算机的机器代码表示的代码)

1.5 运行程序

可执行文件就是可运行的程序,在windows上是exe程序(命令提示符模式)

1.6 测试和调试程序

程序错误称为bug,查找并修复程序错误的过程和调试

1.7 维护和修改代码

拓展程序的功能或者用一个更好的解决方案,这时候就需要维护和修改你的代码

第一步和第二步其实是很重要的,代码永远不是目的,不要为了写代码而写代码哦!

2 windows下集成开发环境

暂时只用windows系统,我相信就人机交互和易用程度来说,windows还是可圈可点的

Windows IDE选择的是Microsoft Visual Studio 2015

通常来说都是用【Win32 控制台应用程序】

尝试运行个Hello.c

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf ("Hello,World!");
  5. return 0;
  6. }

在这个程序编译和运行都没有问题,但是程序都是一闪而过

这个时候,你可以用两种方法来解决这个问题

  1. system ("pause"),作用是暂停程序

    这个方法需要添加头文件stdlib.h,然后将这个语句加在return语句前

    搞定之后程序代码是这样的
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main()
    4. {
    5. printf ("Hello,World!");
    6. system("pause");
    7. return 0;
    8. }

    运行结果

  2. getchar(),作用是击键等待

    这个方法不需要添加头文件

    通常来说一个getchar()已经足够,实际运行的时候则需要根据程序需要来多一个

    改定之后程序代码是这样的
    1. #include <stdio.h>
    2. int main()
    3. {
    4. printf("Hello,World!");
    5. getchar();
    6. return 0;
    7. }

    运行结果



    在回车后程序就会直接消失~

第二章 C语言概述

1 示例程序1

  1. #include <stdio.h>
  2. int main (void)
  3. {
  4. int num;
  5. num = 9;
  6. printf ("I have %d apple.\n",num);
  7. return 0;
  8. }

1.1 程序讲解

1.1.1 头文件

相当于将stdio.h的文件内所有内容都“黏贴”到该行的位置

#include是C语言的预处理器指令

所有的C编译器都会提供stdio.h,std代表的是“标准”,io代表的是输入/输出,.h后缀代表它是个头文件,这个文件的含义就是标准输入/输出头文件

1.1.2 main函数

如流程图所示,main函数总是第一个被调用的函数,每个工程都需要有一个main函数,C程序一定是从main函数开始执行!

int表示了main函数的返回数类型是整型,通常来说,函数名后的圆括号内会包含一些传入函数的参数,该程序中没有传递参数,则加个void在括号内

你可能在VC++6.0之类的编译器可能看过这样子的main函数void main(),注意哦,C标准中从未定义过void main,不建议大家来搞这种作死的行为

1.1.3 注释

  1. /*这是个简简单单的注释*/
  2. /*
  3. 这是个简简单单的注释
  4. */

注释可以说是非常方便的功能了,好的注释可以让你和其他人来更好地理解你的代码和逻辑

C99增加了一种新的注释方法,普遍用于C++和java

  1. //这是另一种新的注释,只适用于单行
  2. int nb;
  3. int a; //也可以用在这里

1.1.4 花括号、声明

一般来说,所有C函数都会使用花括号{}来标记函数的开始和结束,且只有花括号有这种功能

声明:int num;这行代码叫声明,它表达了两个意思,定义了一个名为num的变量、定义了num的数据类型为int整型

int 是C语言的一个关键字(后续会讲解关键字)

num 是一个标识符,通过声明,我们可以把特定的标识符和计算机内存中的特定位置联系起来

C99和C11遵循C++的管理,可以把声明放在块中的任意位置

  1. int a;
  2. a = 1;
  3. …………
  4. …………
  5. int b;
  6. b = 999;

标识符的命名规则

可以用小写字母、大写字母、数字、下划线(_)来命名,且名称的第一个字符必须是字母或者下划线,示例如下

有效的名称 无效的名称
wiggles $z]**
cat2 2cat
Hot_Tub Hot-Tub
taxRate tax rate
_kcab don't

1.1.5 赋值、printf函数、return语句

num = 1;赋值是C语言的基本操作之一,这行代码的意思是将1这个值赋给num变量

printf函数是C语言的一个标准函数,printf ("I have an apple");如这一句,冒号中的内容就是参数,而且是实际参数(实参),形参则是函数中来储存值的变量

printf ("apple is great\n");在这句的输出中并不会看见\n,\n代表换行符,作用和键盘按下Enter键一样。换行符是转义序列的一种,转义序列常用于无法直接输入或难以表达的字符,如\t代表Tab键,\b代表Backspace键,转义字符都从反斜杠开始()

printf ("He have %d apple",a);在这句中的输出中我们会看到%d的位置上出现了a的值,这是因为%d可以将变量作为十进制整数打印

return语句:所有有返回值的C函数都要有return语句,如果遗漏了main函数的return函数,程序在运行至}的时候会自动返回0,希望大家养成有返回值函数后面就有return语句的好习惯。


2 示例程序2

  1. #include <stdio.h>
  2. int sixtimes(int times);
  3. int main(void)
  4. {
  5. int feet,fathoms;
  6. fathoms = 2;
  7. feet = sixtimes(fathoms);
  8. printf ("There are %d feet in %d fathoms\n",feet,fathoms);
  9. printf ("Yes,I said %d feet",6*fathoms);
  10. }
  11. int sixtimes(int times)
  12. {
  13. return 6*times;
  14. }

2.1 程序讲解

2.1.1 多条声明

int feet,fathoms;函数在一行代码中声明了两个函数,这种声明等价于

  1. int feet;
  2. int fathoms;

2.1.2 多个函数

我们可以看见sixtime()函数出现了三次,分别是声明、调用和定义

函数声明:我们直接复制函数头部,加个分号即可

函数的调用:跟之前说的printf函数类似,fathoms作为实参,times作为形参,feet得到sixtimes的返回值

函数定义:形式与main函数相似,都是函数名、花括号之类的。注:何时执行sixtimes函数取决于它在main函数中调用的位置,而非他在文件中的位置

3 关键字和保留标识符

ISO C关键字

auto extern short while
break float signed _Alignas
case for sizeof _Alignof
char goto static _Atomic
const if struct _Bool
continue inline switch _Complex
defalut int typedef _Generic
do long union _Imaginary
double register unsigned _Noreturn
else restrict void _Static_assert
enum return volatile _Thread_local
粗斜体的关键字(最右边的整列)是在C11标准中提出的
斜体的关键字是在C99标准中提出的
粗体的关键字是在C90标准中提出的

注:关键字不可以用来做标识符哦


第三章 数据与C

1 示例程序

  1. /* platinum.c -- your weight in platinum */
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5. float weight; /* 你的体重 */
  6. float value; /* 相等重量的白金价值 */
  7. printf("Are you worth your weight in platinum?\n");
  8. printf("Let's check it out.\n");
  9. printf("Please enter your weight in pounds: ");
  10. /* 获取用户输入 */
  11. scanf("%f", &weight);
  12. /* 假设白金的价格是每盎司$1700 */
  13. /* 14.5833用于将英镑常衡盎司换成金衡盎司 */
  14. value = 1700.0 * weight * 14.5833;
  15. printf("Your weight in platinum is worth $%.2f.\n", value);
  16. printf("You are easily worth that! If platinum prices drop,\n");
  17. printf("eat more to maintain your value.\n");
  18. getchar();
  19. getchar();
  20. return 0;
  21. }

1.1 程序讲解

  1. float weight;建立了新的浮点数类型的变量,已处理更大范围的数据,可以带小数的数字
  2. 为了打印float类型的变量,printf函数采用%f来处理浮点数。%.2f之类的可以精准控制输出的位数
  3. scanf()用于读取键盘的输入。通过%f可以读取到用户输入的浮点数,&weight告诉scanf()将输入值赋给名为weight的变量,scanf()通过&符号找到weight变量的地址

位、字节、字

位(bit)是最小的储存单元,可以储存0和1,位是计算机内存的基本构建块

字节(byte)是常用的计算机储存单位,字节的标准定义是1字节为8位

字(word)是设计计算机时给定的自然储存单位

2 C语言基本数据类型

2.1 int类型

2.1.1 声明

第二章已经讲解过int声明整型变量,就是int后面加个变量名和分号,如果有多个变量声明的话,可以在同一条声明中声明这些变量,如int hogs,cows,goat;

2.1.2 初始化

所谓初始化其实就是赋给变量一个初始值,C语言中,初始化和声明可以放在一起,如int a = 999;

2.1.3 打印

可以用printf函数打印int类型的值,在第二章中介绍过,%d指明了打印整数的位置,%d称为转换说明,在实际使用时,应注意%d和变量个数要相同,编译器可能不会捕获这种错误

2.1.4 整数溢出

ISO C规定的int 取值范围最小为-32768~32767(即大小为2^16)

16位unsigned int 的取值范围时0~65535

  1. /* toobig.c-exceeds maximum int size on our system */
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5. int i = 2147483647;
  6. unsigned int j = 4294967295;
  7. printf("%d %d %d\n", i, i+1, i+2);
  8. printf("%u %u %u\n", j, j+1, j+2);
  9. // %u代表这是unsigned int 类型的值
  10. getchar();
  11. return 0;
  12. }

程序的输出效果如图:



这个程序里面,i和j变量都超过了规定的最大值,当他们达到能表示的最大值时,会重新从起始点开始

2.2 char类型

2.2.1 声明

声明方式与int的类似,声明的示例:

  1. char response;
  2. char itable, latan;

2.2.2 字符常量和初始化

如果想将一个字符常量初始化为字母A,则可以用char grade = 'A';做到

在C语言中,单引号(')括起来的单个字符称为字符常量

  1. char a;
  2. a = 'T'; //此时的T是一个字符常量
  3. a = T; //此时的T是一个变量
  4. a = "T"; //此时的T是一个字符串(后续章节会讲)

2.2.3 非打印字符

浏览ASCⅡ码可知,有一些字符是打印不出来的,例如一些代表行为的字符(换行、退格、蜂鸣等)

使用特殊符号序列表示一些特殊的字符,这种符号序列称为转义序列,下面列出一些转义序列

转义序列

转义序列 含义
\a 警报(ANSI C)
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
|反斜杠()
' 单引号
" 双引号
? 问号
\0oo 八进制值 (hh必须是有效的2十六进制数,即每可表示0~f中的一个数)
\xhh 十六进制数 (oo必须是有效的八进制数,即每个o可表示0~7中的一个)

2.2.4 打印字符

  1. #include <stdio.h>
  2. int main (void)
  3. {
  4. char ch;
  5. printf ("Please enter a character.\n");
  6. scanf ("%c",&ch);
  7. printf ("The code for %c is %d.\n", ch, ch);
  8. getchar();
  9. getchar();
  10. return 0;
  11. }

该程序输出结果是

Please enter a character

A

The code for A is 65.

由此可见,%c可以打印一个字符,而%d可以打印字符对应的ASCⅡ码

有符号char范围是-128127,无符号char范围是0255

省略_Bool类型(本人用的少)

2.3 float、double、long double类型

C语言中的浮点数类型有float、double和long double类型,浮点数的表示方法有科学计数法、指数计数法等等,下面列出一些示例

计数法示例

数字 数字记数法 指数记数法
1000000000 \(1×10^{9}\) 1.0e9
123000 \(1.23×10^{5}\) 1.23e5
322.56 \(3.2256×10^{2}\) 3.2256e2
0.000056 \(5.6×10^{-5}\) 2.6e-5

C标准规定,float至少能表示6位有效数字,取值范围为\(10^{-37}~10^{37}\)

C语言提供了另一种浮点类型double(意为双精度),double的最小取值范围与float相同,一般情况下double占用64位,而不是32位

C的第三种浮点类型是long double,以满足比double更高的精度要求

2.3.1 声明

声明比较跟上面的类似

  1. float noah, jonah;
  2. double troble;
  3. float planck = 6.63e-34;
  4. long double gnp;

2.3.2 浮点型变量

浮点型变量基本形式:有符号数字+e/E

-1.56E+122.87e-33.1415.2.8E-5

默认情况下,编译器会假定浮点型常量是double类型的精度

例如some是float变量,语句some = 4.0*2.0;

这样的作法会使用双精度计算(4.0这些默认是double型),然后将乘积截断为float型的宽度,精度高,但会减慢程序的运行速度

浮点数后加上不同的后缀可以覆盖他的默认类型设置

后缀 类型
f/F float型
l/L long double型
无后缀(默认) double型

2.3.3 打印浮点值

printf函数使用%f打印十进制计数法的float和double类型的浮点数,用%e打印指数,用%Lf、%Le来打印long double类型

给不在函数原型中显示说明参数类型的函数(如printf)传递参数时,C编译器会把float类型的值自动转换成double类型

  1. /* showf_pt.c -- displays float value in two ways */
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5. float aboat = 32000.0;
  6. double abet = 2.14e9;
  7. long double dip = 5.32e-5;
  8. printf("%f can be written %e\n", aboat, aboat);
  9. // 下一行要求编译器支持C99标准
  10. printf("And it's %a in hexadecimal, powers of 2 notation\n", aboat);
  11. printf("%f can be written %e\n", abet, abet);
  12. printf("%Lf can be written %Le\n", dip, dip);
  13. return 0;
  14. }

输出结果

2.3.4 浮点值的上溢与下溢

不懂,哭了(ㄒoㄒ)

设系统最大float类型值为3.4E38

运行下面的代码

  1. float toobig = 3.4E38 * 100.0f;
  2. printf ("%e\n", toobig);

打印出来的值会变成inf或infinity

这是一种上溢的示例,当变量值超过类型的范围是就会发生这种现象

下溢真的不懂,书上解释的好复杂,我就没笔记了

复数和虚数部分我也没接触

------------恢复内容结束------------

《C Primer Plus》第六版笔记--1~3章的更多相关文章

  1. C++ Primer Plus 第六版笔记

    C++ Primer Plus 第六版笔记 关于对象声明的思考 转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html C+ ...

  2. 《C Primer Plus》第六版笔记--4~6章

    目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...

  3. 《C Primer Plus》第六版笔记--7~10章

    目录 第七章 C控制语句:分支和跳转 第八章 字符输入/输出和输入验证 第九章 函数 第十章 数组和指针 第七章 C控制语句:分支和跳转 if else 用法 if (expression) //ex ...

  4. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

  5. 《C++Primer》第五版习题答案--第一章【学习笔记】

    C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...

  6. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

  7. c++ primer plus 第6版 部分二 5- 8章

    ---恢复内容开始--- c++ primer plus 第6版 部分二    5-  章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...

  8. c++ primer plus 第6版 部分一 1-4章

    c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c   cc   cxx     C    cpp     ...

  9. 《C++ Primer Plus 第六版》读书笔记

    CH1-3:处理数据 1 列表初始化 char c={31325}:不允许缩窄 char c={66}; char c={x}:不能为变量 2 强制类型转换 (typename) value type ...

随机推荐

  1. SQList基础+ListView基本使用

    今日所学: SQList基础语法 SDList下载地址 SQLite Download Page SQList安装教程SQLite的安装与基本操作 - 极客开发者-博客 ListView用法 没遇到什 ...

  2. ccf201912-1 报数 C++代码实现

    代码实现: #include<iostream> using namespace std; /*题目限制为三位数*/ /*思路: 1.用一个长度为4的数组(初值为0)保存每个人分别跳过了几 ...

  3. mysql在cmd中查询到的汉字乱码问题解决 方法一

    只要执行如上两个 set character_set_connection = gbk; set character_set_results= gbk; 将编码格式转换成gbk即可

  4. Centos6.9 安装zabbix3.4 过程

    Centos6.9 安装zabbix3.4 过程 1.安装apache httpd 一开始忘记截图(略...) # yun install httpd 完成后,启动httpd服务 # service ...

  5. 使用 NIO 搭建一个聊天室

    使用 NIO 搭建一个聊天室 前面刚讲了使用 Socket 搭建了一个 Http Server,在最后我们使用了 NIO 对 Server 进行了优化,然后有小伙伴问到怎么使用 Socket 搭建聊天 ...

  6. PyQt5 基本语法(五)

    目录 2. 输入控件(二) 2.2 步长调节 2.2.1 QAbstractSpinBox 2.2.1.1 描述 2.2.1.2 功能作用 2.2.1.2.1 使用 2.2.1.2.2 主要功能 2. ...

  7. Flutter 打印日志封装及创建Live Templates快捷打印日志

    只需要输入logi 就可出现以下代码 /// tag(类名.函数名)LogUtil.i(index, tag: '_MyHomePageState.onItemClick:');打印日志效果如下: 实 ...

  8. 使用 mix-blend-mode 实现抖音 LOGO

    <template> <div class="g-container">     <div class="j"></d ...

  9. HTML5+JavaScript+MUI 毕业答辩常见问题

    问题1:HTML5前端开发环境有哪些? HTML5网页前端开发,实际也是HTML网页开发,HTML5知识万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改的第五次 ...

  10. 使用pip管理库

    2.5 使用pip管理库 安装Python后会默认安装pip工具,该工具可以用来安装.升级和移除库.默认情况下 pip 将从[Python Package Index]https://pypi.org ...