记录自己学习C Primer Plus的学习笔记

第一章

C语言高效在于C语言通常是汇编语言才具有的微调控能力设计的一系列内部指令

C不是面向对象编程

编译器把源代码转化成中间代码,链接器把中间代码和其他代码合并,生成可执行文件

第二章

main函数总是第一个被调用的函数

include预处理器指令

声明,所有变量都必须先声明才能使用,最初的规则规则变量声明需在块的顶部

C语言通过赋值运算符而不是赋值语句来完成赋值操作,听起来很别扭,赋值语句其实就是赋值表达式+分号

第三章

由于现在16位机已经很少了,故不再记忆16位机相关数据类型

char、short、int、long在32位机中为1、2、4、4,在64位中为1、2、4、8,float为4,double为8

unsigned int也是4字节,用%u输出

C语言中有单引号和双引号之分,单引号表示一个字符,双引号表示字符串

输出时,可以前后数量不匹配,这样未输出的就是内存任意数

#include <stdio.h>
int main(){
int ten = 10;
printf("%d minus %d is %d",ten);
return 0;
} 10 minus 6422404 is 4201008

在使用long类型时,赋值时若数字太小,则需要在数字之后添加l或者L

下面程序中,sizeof标准输出应该时%zd,但是也可以%d

#include<stdio.h>
int main(){
long n = 1;
long long m = 2l;
printf("n:%ld\n",n);
printf("%d\n",sizeof(n));
printf("m:%ld\n",m);
printf("%d\n",sizeof(m));
return 0;
} n:1
4
m:2
8

使用响铃时,需加上windows.h头文件

#include<stdio.h>
#include<windows.h>
int main(void){
Beep(500,2000);
printf("\a");
return 0;
}

可移植类型,看了感觉没什么很大用,以后遇到了再看

C语言标准的布尔类型是_Bool,但是也可以用添加头文件的方法使用bool

//导入 stdbool.h 来使用布尔类型
#include <stdbool.h>
#include <stdio.h> //计算n!,n的值在main中定义
int main(void)
{
int n = 10; //计算叠乘数
int sum = 1; //用来存放叠乘的结果
bool flag = false; //叠乘标记 int num = n; //循环次数
while( !flag )
{
sum = sum * (num--);
//当num=1时结束循环
if( num == 1)
{
flag = true;
}
}
printf ("%d的叠乘值为 %d \n", n, sum);
return 0;
} 10的叠乘值为 3628800

第四章

C语言没有专门的字符串,使用字符数组或者指针

字符数组末尾位置使用字符\0,用\0来标记字符串的结束

/* praisel.c -- 使用不同类型的字符串 */
#include <stdio.h>
#define PRAISE "You are an extraodinary being."
int main(){
char name[40];
printf("What's your name?");
scanf("%s",name);
printf("Hello, %s. %s\n",name,PRAISE); return 0;
}

字符串"c"和字符"c"的区别在于字符串"c"实际上是由两个字符组成:"c"+空字符\0

使用strlen需要添加string.h头文件

使用#define预处理指令来进行自定义,也可用const修饰符创建符号常变量

注意define定义的是常量,const定义常变量

const常变量不能简单修改,但是可以通过修改指针的方式进行修改

读取字符串数组时,遇到空白则停止

用strlen算出来的长度比用sizeof算出来的长度少1

格式化输出的时候,%m.n表示小数点后输出n位,这是精度,m表示共m位,如果m<n则作罢,m>n则左边用空格代替

scanf对于除%c外的类型,会自动输入除空格外的字符。对于%c,如果在%c之前加空格,则会从第1个非空字符开始读取,如果%c之前不加空格,则从输入的第1个字符开始读取

printf和scanf的*修饰符

printf的修饰符来代替字段宽度

scanf的
主要是跳过输入项

#include<stdio.h>
int main(void){
unsigned width,precision;
int number = 256;
double weight = 242.5; printf("Enter a field width:\n");
scanf("%d",&width);
printf("The Number is %*d:\n",width,number);
printf("Now enter a width and a precision:\n");
scanf("%d %d",&width,&precision);
printf("Weight = %*.*f\n",width,precision,weight);
printf("Done!\n");
return 0;
} Enter a field width:
6
The Number is 256:
Now enter a width and a precision:
8 3
Weight = 242.500
Done!

第五章

C语言可以三重赋值

其实python也可以,并且python可以用如下赋值方法

a,b = 3,4
a,b = (3,4)

C99规定截断趋零,求模时,前者为正则为正,前者为负则为负

#include<stdio.h>
int main(void){
printf("%d\n",11%5);
printf("%d\n",11%-5);
printf("%d\n",-11%5);
printf("%d\n",-11%-5);
return 0;
} 1
1
-1
-1

递增运算符有很高的结合优先级,只有圆括号优先级比他们高,但不建议这样做

#include<stdio.h>
int main(){
int a = 3;
int b = 4;
printf("3*++4:%d\n",a*++b);
printf("b:%d\n",b);
printf("3*5++:%d\n",a*b++);
printf("b:%d\n",b);
return 0;
} 3*++4:15
b:5
3*4++:15
b:6

语句和表达式不一样,语句是C程序的基本构建块,一条语句相当于一条完整的计算机指令

副作用:副作用是对数据对象或文件的修改,如states=50,副作用是将变量的值设置为50

序列点:程序执行的点,各种运算对象的改变必须在执行下一条语句之前完成

第六章

scanf读取一个输入的值,并返回0或者1

注意如果while之后可以接一句语句,或者直接接分号,或者接花括号

#include<stdio.h>
int main(){
int n = 0;
while(n++<3);
printf("n is %d\n",n);
printf("That's all this program dose.\n");
return 0;
} n is 4
That's all this program dose.

计算机中数字往往不精确,不只是C,所以常常用fabs来判断是否相等,如1/3再乘以3很可能为0.999999

#include<stdio.h>
#include<math.h>
int main(){
printf("%d\n",fabs(3.14159-3.14)<0.0001);
printf("%d\n",fabs(3.14159-3.1416)<0.0001);
return 0;
} 0
1

C语言中真值为除0之外的数,其实python也一样

i = -2
while i:
print("True")
i += 1
if i > 3:
break
True
True

使用==运算符时,最好左边为常量,右边为变量,这样更清晰

#include<stdio.h>
int main(){
long sum = 0L;
long num;
int status;
printf("enter an integer to be summed ");
printf("(q to quit)");
status = scanf("%ld",&num);
while(status=1){
sum = sum + num;
printf("enter next integer(q to quit):");
status = scanf("%ld",&num);
}
}

这里会一直输出的原因在于,循环中输入非数字时,如输入q,此时不是ld类型,则读取失败,把q放入输入队列,下次继续读取。听着很抽象,再看下面这个例子

#include <stdio.h>
int main()
{
int m;
int n;
char d;
char e; printf("m:%d\n", m);
printf("n:%d\n", n);
printf("d:%d\n", d);
printf("e:%d\n", e);
printf("***********\n");
scanf("%d", &m);
scanf("%d", &n);
scanf("%c", &d);
scanf("%c", &e); printf("m:%d\n", m);
printf("n:%d\n", n);
printf("d:%c\n", d);
printf("e:%c\n", e);
return 0;
}
m:2691072
n:4199120
d:0
e:64
***********
abcd
m:2691072
n:4199120
d:a
e:b
m:3588096
n:4199120
d:0
e:64
***********
a1cd
m:3588096
n:4199120
d:a
e:1
m:2621440
n:4199120
d:0
e:64
***********
1a23
m:1
n:4199120
d:a
e:2

这个时输入输出流,后面会详细讲?

C中布尔类型,C99为_Bool,并且可以使用stdbool.h头文件来直接使用truefalse

字符串在字符数组的末尾为\0

C Primer Plus 学习笔记 -- 前六章的更多相关文章

  1. JVM学习笔记-第六章-类文件结构

    JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...

  2. o'Reill的SVG精髓(第二版)学习笔记——第六章

    第六章:坐标系统变换 想要旋转.缩放或者移动图片到新的位置.可以给对应的SVG元素添加transform属性. 6.1 translate变换 可以为<use>元素使用x和y属性,以在特性 ...

  3. C primer plus 读书笔记第六章和第七章

    这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...

  4. Linux学习笔记(第六章)

    第六章-档案权限与目录配置#chgrp:改变档案的所属群组#chown:改变档案的拥有者#chmod:改变档案的权限及属性 chown用法 chmod用法: r:4 w:2 x:1对于文档: 对于目录 ...

  5. C++ Primer Plus学习:第六章

    C++入门第六章:分支语句和逻辑运算符 if语句 语法: if (test-condition) statement if else语句 if (test-condition) statement1 ...

  6. 学习笔记 第六章 使用CSS美化图片

    第六章  使用CSS美化图片 6.1  在网页中插入图片 GIF图像 跨平台能力,无兼容性问题: 具有减少颜色显示数目而极度压缩文件的能力,不会降低图像的品质(无损压缩): 支持背景透明功能,便于图像 ...

  7. Java 学习笔记 ------第六章 继承与多态

    本章学习目标: 了解继承的目的 了解继承与多态的关系 知道如何重新定义方法 认识java.lang.object 简介垃圾回收机制 一.继承 继承是java面向对象编程技术的一块基石,因为它允许创建分 ...

  8. 《Python基础教程(第二版)》学习笔记 -> 第六章 抽象

    抽象和结构 本章将会介绍如何让将语句组织成函数,还会详细介绍参数(parameter)和作用域(scope)的概念,以及递归的概念及其在程序中的用途. 创建函数 函数可以调用,它执行某种行为,并返回某 ...

  9. [Python学习笔记][第六章Python面向对象程序设计]

    1月29日学习内容 Python面向对象程序设计 类的定义与使用 类定义语法 使用class关键词 class Car: def infor(self): print("This is ca ...

随机推荐

  1. 学习SVN02

    代码发布方案: 1,安装,优化 软件环境,(nginx,lvs)  <-------运维工程师 2,程序代码(不断更新).   <--------开发工程师,(开发,运维都可以发布) 3, ...

  2. css浮动的"巨坑"与完美解决办法

    浮动 1 浮动概念 如果想实现网页中排版布局,比如一行内显示对应的标签元素,可以使用浮动属性.浮动可以实现元素并排. 块转行内日块也可以实现一行显示,不过存在空白折叠现象 float 浮动 属性值 描 ...

  3. SpringCloud个人笔记-04-Stream初体验

    sb_cloud_stream Spring Cloud Stream 是一个构建消息驱动微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream ...

  4. 『现学现忘』Docker基础 — 36、CMD指令和ENTRYPOINT指令的区别

    目录 1.CMD指令和ENTRYPOINT指令说明 2.CMD指令只有最后一条生效的原因 3.CMD指令演示 4.ENTRYPOINT指令演示 5.总结 CMD指令和ENTRYPOINT指令作用都是指 ...

  5. 单总线协议DS1820代码

    单总线协议DS1820代码 一.DS18B20初始化 (1).数据线拉到低电平"0". (2).延时480微妙(该时间的时间范围可以从480到960微妙). (3).数据线拉到高电 ...

  6. 从 输入网址(URL)到页面展示的过程

    1.用户输入url网址(URL) 用户输入url(也就是我们说的网址,也是统一资源定义符,用于定义互联网资源) 比如输入https://www.baidu.com 其中https为协议 baidu.c ...

  7. Day10 - JS 实现 Checkbox 中按住 Shift 的多选功能

    Day10 - JS 实现 Checkbox 中按住 Shift 的多选功能 作者:liyuechun 简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战.项目免费提供了 3 ...

  8. python大佬养成计划----基于flask_sqlalchemy的网页显示数据库信息

    网页显示数据库信息 使用我们刚学习的flask_sqlalchemy,在网页中显示数据库表中的数据.在开始运行程序前,确保数据库中执行过创建表和创建用户的操作,详见链接描述. # 模板文件templa ...

  9. Java/C++实现访问者模式---购物车

    在我们课堂上的"购物车"的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包. 类图: Java代码: public interface Product { void ac ...

  10. 【小程序开发】 点击button按钮,引导用户授权

    一. 前言 小程序官方文档,上面说明 wx.getUserInfo(OBJECT) 注意:此接口有调整,使用该接口将不再出现授权弹窗,请使用 <button open-type="ge ...