《明解C语言入门篇》读书笔记一

目录

第一章:初识C语言

第一节:显示计算结果

程序和编译:

注释:

固定代码:

printf函数——格式化输入输出函数:

语句:

计算并显示整数的差:

格式化字符串和转换说明:

符号的称呼:

无格式化输出:

字符串常量:

转义字符:

练习1-1:

练习1-2:

练习1-3:

第二节:变量

变量和声明:

赋值:

初始化:

声明时初始化:

初始化和赋值:

练习1-4:

第三节:输入和显示

通过键盘进行输入:

格式化输入函数scanf:

乘法运算:

输出函数puts:

练习1-5:

练习1-6:

练习1-7:

练习1-8:

练习1-9:

第一章:初识C语言

第一节:显示计算结果

📖读书笔记

  • 程序和编译:

作者以“显示整数15和37的和”这个程序,来讲解如何在屏幕上打印想要的信息,程序如下:

/*
    显示整数15和37的和
*/
#include<stdio.h>
int main(void)
{
    printf("%d", 15 + 37);     /*十进制数显示整数15和37的和*/
    return 0;
}

在书写main函数时,函数没有参数可以不用写void,现在的写法都是不写void的,所以下面的代码在书写时也不写void。

在上面的程序中,所有符号都必须是英文符号,而且区分大小写和全半角。如果想要运行这段代码,需要经过编译链接过程才可以。这段代码也称为一个源程序,保存源程序的文件称为源文件,在C语言中,源文件的扩展名是“.c”,比如list.c就是一个源文件。当然,如果在执行代码时发生错误,编译器会显示相应的诊断信息,根据诊断信息,就可以确定错误原因并设法解决。

  • 注释:

在上面的程序中,/*和*/之间的部分被称为注释,它不被计算机识别,只是帮助编程者理解代码的,用来提高代码的可读性。

  • 固定代码:

作者将main函数的这段代码称为“固定代码”,现在先简单理解即可,代码如下。

#include<stdio.h>
{
    return 0;
}
  • printf函数——格式化输入输出函数:

printf函数包含在头文件stdio.h中,是一个输出函数,它的功能是将""之间的内容输出到屏幕上,同时也可以指定输出格式,比如%d。那么在执行printf函数时,实际上是完成了一次函数调用。该函数有多个实参,比如代码printf("%d", 15 + 37);的实参分别是“%d”和“15 + 37”,如果有多个实参,需要使用英文逗号分隔开。另外这两个实参的作用是将15和37两个整数相加,并且以十进制输出(%d)。

  • 语句:

在C语言的程序中,每条代码的后面都要加上一个英文分号,这就代表是一条语句,也就是说,语句必须以英文分号结尾,另外语句之间是按照从上到下的顺序执行的。

  • 计算并显示整数的差:

有代码:printf("%d", 15 - 37);,在printf函数的另一个实参“15 - 37”中,计算的就是15和37的差,并且把这个结果使用%d的格式打印出来。

  • 格式化字符串和转换说明:

printf函数的第一个实参%d就是格式化字符串,它的功能是将另一个实参以十进制数的形式显示,这个功能被称为转换说明。有代码:printf("%d\n", 15 + 37);,其中在%d的后面加上了一个换行符\n,这就说明是将%d表示的内容显示出来之后再进行换行操作。

  • 符号的称呼:

C语言中的一些符号有着自己的称呼,具体如下:

符号

称呼

符号

称呼

符号

称呼

+

加号、正号、加

;

分号

>

大于

-

减号、负号、连字符、减

'

单引号

?

问号

*

星号、乘号、米号、星

"

双引号

!

感叹号

/

斜线、斜杠、除号

(

左括号、左圆括号、左小括号

&

and符

\

反斜线、反斜杠

)

右括号、右圆括号、右小括号

~

波浪线

货币符号

{

左大括号、左花括号

^

音调符号

%

百分号

}

右大括号、右花括号

#

井号

.

[

左方括号、左中括号

_

下划线

,

逗号

]

右方括号、右中括号

=

等号

:

冒号

小于

|

竖线

  • 无格式化输出:

作者利用几个程序,说明了在输出时,将换行符放在的位置就会实现换行,并且如何使程序的可读性提高,代码如下:

/*
    打招呼并进行自我介绍
*/
#include<stdio.h>
int main()
{
    printf("您好!我叫柴田望洋。\n");         /* 使用换行符,在一行输出,书写一条语句 */

    printf("您好!\n我叫柴田望洋。\n");       /* 使用换行符,在两行输出,书写一条语句 */

    printf("您好!\n");
    printf("我叫柴田望洋。\n");               /* 使用换行符,在两行输出,书写两条语句 */
    return 0;
}
  • 字符串常量:

在printf函数中,使用""引起来的字符串就成为字符串常量,比如上面的“您好!我叫柴田望洋。”就是一个字符串常量,这也说明了,在printf的""之间可以书写任意字符,中英文、大小写、全半角都不受限制,代码如下:

#include<stdio.h>
int main()
{
    printf("我\n");
    printf("I\n");
    printf("はたし\n");
    return 0;
}

  • 转义字符:

转义字符是具有特定功能的特殊符号,比如上面的\n(换行符)就是转义字符,此外还有\a(蜂鸣、响铃)等,当程序执行到\a时,计算机就会响铃一次,代码如下:

/*
    打招呼并响铃三次
*/
#include<stdio.h>
int main()
{
    printf("您好!\a\a\a");
    return 0;
}

转义字符必须在printf函数中使用才能发挥作用。

📝课后习题

  • 练习1-1:

编写一段程序,计算出15减去37的结果,并以“15减去37的结果是-22。”的格式进行显示。

✏️解答:

/* 编写程序,计算15键37的结果,并按照指定格式输出 */
#include<stdio.h>
int main()
{
    printf("%d减去%d的结果是%d。", 15, 37, 15 - 37);
    return 0;
}
  • 练习1-2:

编写一段程序,调用一次printf函数,显示下方的内容。

✏️解答:

/* 调用一次printf函数,输入相应的内容 */
#include<stdio.h>
int main()
{
    printf("天\n地\n人\n");
    return 0;
}
  • 练习1-3:

编写一段程序,调用一次printf函数,显示下方的内容。

喂!

您好!

再见。

✏️解答:

/* 调用一次printf函数,输入相应的内容 */
#include<stdio.h>
int main()
{
    printf("喂!\n\n您好!\n再见。\n");
    return 0;
}

第二节:变量

📖读书笔记

  • 变量和声明:

变量和常量是程序中用来记录结果的量,常量就是不会变化的量,而变量就是可以改变的量。可以把变量想象成一个存储数据的盒子,定义变量就相当于拿出一个盒子用来存储数据。声明就是在使用变量之前,来告诉程序这个变量的信息,比如它是什么类型的。那么声明变量的代码比如:int a;,含义是声明了一个变量a,它的类型是int(整型)。

那么变量声明之后是怎么使用的呢?作者以一段代码做了演示,代码如下:

/*
    为两个变量赋整数值并显示
*/
#include<stdio.h>
int main()
{
    int vx, vy;                /* vx和vy是int类型的变量 */
    vx = 57;                /* 把57赋值给vx */
    vy = vx + 10;            /* 把vx+10的值赋值给vy */
    printf("vx的值是%d。\n", vx);        /* 显示vx的值 */
    printf("vy的值是%d。\n", vy);        /* 显示vy的值 */
    return 0;
}

从上面的代码可以看出,变量就是用来记录值的,这个值是可以被改变的,如果再次对vx和vy赋值,那么它们的值就是新值。

  • 赋值:

变量的赋值的规则是右边的值赋给左边的变量,所以变量赋值的写法都是左值为变量。赋值过程可以理解为把一个新的数据放到原来的盒子中,盒子不变,但是数据已经不是原来的数据了。

  • 初始化:

变量可以在声明的同时进行初始化,也相当于拿出一个盒子,而这个盒子里面就被放进去一个数据一个道理。

这里容易误解的时,变量在声明后没有初始化就没有值了,其实这是错误的。变量一旦被声明,它就一定有一个值,只不过这个值是随机值(作者称为“垃圾值”),我们不知道是什么,只有初始化或者给变量赋值之后,这个值才是我们能够掌控的。

/*
    使用未初始化的变量
*/
#include<stdio.h>
int main()
{
    int vx, vy;
    printf("vx的值是:%d\n");
    printf("vy的值是:%d\n");
    return 0;
}

  • 声明时初始化:

在声明变量时可以为变量初始化,这时的值就是我们可以掌控的了,但是仍然需要注意的是,这个初始化的值不能太随意,比如一个int类型(整型,也就是整数)的变量,总不能初始化成小数吧,这样的话会丢失数据的。

/*
    为两个变量进行初始化并显示
*/
#include<stdio.h>
int main()
{
    int vx = 57;            /* vx是int类型的变量,初始化为57 */
    int vy = vx + 10;            /* vy是int类型的变量,初始化为vx+10 */
    
    printf("vx的值是%d。\n", vx);        /* 显示vx的值 */
    printf("vy的值是%d。\n", vy);        /* 显示vy的值 */
    return 0;
}
  • 初始化和赋值:

其实初始化和赋值并不是一回事,虽然都是把值放到变量中,但初始化是声明变量时把值放到变量中,赋值是使用变量时把值放到变量中

📝课后习题

  • 练习1-4:

如果在int型变量的声明中为变量赋一个实数值的初始值(如3.14或5.7等)会怎样呢?请试着生成程序并确认。

✏️解答:

/* int型变量赋小数值 */
#include<stdio.h>
int main()
{
    int a = 0, b = 0;             /* 定义变量a和b,初始化为0 */
    printf("a = %d, b = %d\n", a, b);     /* 赋值之前a和b的值 */
    /* 赋值 */
    a = 3.14;
    b = 5.7;
    printf("a = %d, b = %d\n", a, b);     /* 赋值之后a和b的值 */
    return 0;
}

可以看出,赋值之前a和b都是0,之后a和b只取了小数的整数部分,小数部分被舍弃了,这也就是精度丢失现象,如果一个int型(整型)变量被赋小数值时,就会发生精度丢失。

第三节:输入和显示

📖读书笔记

  • 通过键盘进行输入:

C语言中的函数既然能够把数据显示到屏幕中,就也能把数据输入到计算机中,这也就是通过键盘进行数据输入,这需要借助C语言中的scanf函数,代码如下:

/* 
    显示并确认输入的整数值
*/
#include<stdio.h>
int main()
{
    int no;
    printf("请输入一个整数:");
    scanf("%d", &no);            /* 读取整数值 */
    
    printf("您输入的是%d。\n", no);
    return 0;
}

  • 格式化输入函数scanf:

scanf函数也是C语言本身自带的一个函数,它的功能是从键盘中读取数据输入到计算机中,它也有转换说明,比如上面代码中的%d就表示输入一个十进制整数,而后面的&no就是要把输入的数放到no中。

现在可以先暂时记住&no这种写法,不用管符号&的具体含义。

  • 乘法运算:

这里作者介绍了一个符号*,它可以表示乘法,这与数学中的乘法基本相同,另外*两边的操作数可以调换位置,也就是下面代码中的5 * no可以写成no * 5,含义不变。

/*
    读取一个整数并显示其5倍的值
*/
#include<stdio.h>
int main()
{
    int no;
    printf("请输入一个整数:");
    scanf("%d", &no);
    printf("它的5倍数是%d。\n", 5 * no);
    return 0;
}
  • 输出函数puts:

这个函数和printf函数功能基本相同,都是将数据输出到屏幕上,但是printf函数可以指定格式(比如显示整数等),puts不能指定格式,另外printf函数需要借助换行符才能换行,而puts函数执行结束后默认换行,可以把这两个函数搭配着使用,代码如下:

/*
    显示出读取到的两个整数的和
*/
#include<stdio.h>
int main()
{
    int n1, n2;
    int wa;

    puts("请输入两个整数。");
    printf("整数1:");    scanf("%d", &n1);
    printf("整数2:");    scanf("%d", &n2);

    wa = n1 + n2;        /* 把n1和n2的和赋值给变量wa */

    printf("它们的和是%d。\n", wa);
    return 0;
}

📝课后习题

  • 练习1-5:

编写一段程序,像下边那样读取一个整数并显示该整数加上12之后的结果。

请输入一个整数:57

该整数加上12的结果是69。

✏️解答:

/* 读取一个整数,并把整数加上12再输出 */
#include<stdio.h>
int main()
{
    int num = 0;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("该整数加上12的结果是%d\n", num + 12);
    return 0;
}
  • 练习1-6:

编写一段程序,像下边那样读取一个整数并显示该整数减去6之后的结果。

请输入一个整数:57

该整数减去6的结果是51。

✏️解答:

/* 读取一个整数,并把整数加上12再输出 */
#include<stdio.h>
int main()
{
    int num = 0;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("该整数减去6的结果是%d\n", num - 6);
    return 0;
}
  • 练习1-7:

编写一段程序,使其显示“天”、“地”、“人”。注意用puts函数而非printf函数来进行显示。

✏️解答:

/* 编写程序使用puts函数显示相应内容 */
#include<stdio.h>
int main()
{
    puts("天");
    puts("地");
    puts("人");
    return 0;
}
  • 练习1-8:

编写一段程序,像下边这样显示读取到的两个整数的乘积。

请输入两个整数。

整数1:27

整数2:35

它们的乘积是945。

✏️解答:

/* 编写程序,读取两个数的乘积 */
#include<stdio.h>
int main()
{
    int n1 = 0, n2 = 0;
    puts("请输入两个整数。");
    printf("整数1:");
    scanf("%d", &n1);
    printf("整数2:");
    scanf("%d", &n2);
    printf("它们的乘积是%d。\n", n1 * n2);
    return 0;
}
  • 练习1-9:

编写一段程序,像下边这样显示读取到的三个整数的和。

请输入三个整数。

整数1:7

整数2:15

整数3:23

它们的和是45。

✏️解答:

/* 编写程序,读取三个数的和 */
#include<stdio.h>
int main()
{
    int n1 = 0, n2 = 0, n3 = 0;
    puts("请输入三个整数。");
    printf("整数1:");
    scanf("%d", &n1);
    printf("整数2:");
    scanf("%d", &n2);
    printf("整数3:");
    scanf("%d", &n3);
    printf("它们的和是%d。\n", n1 + n2 + n3);
    return 0;
}

注:本章内容完成,再次我认为作者的代码有一些风格不是很好,比如声明变量后不初始化(可能会导致访问的变量是随机值)、使用的注释不太好用(作者使用的注释是C语言的注释,但是这个注释不支持嵌套,一些复杂代码注释时可能不太好用)、一行存在多条语句(会降低代码的可读性)等,关于这些问题,我解决方法是:在之后的章节学习中,声明变量同时进行初始化、使用C++的注释(//,它支持嵌套使用)、一行只写一条语句。另外,书写练习的程序时,程序最上面的说明的注释不写题意了(面对一些复杂的题时,一行可能概括不下),直接写题号。虽然作者写出的代码风格不是特别好,我只是稍加改动,使其风格变得更加优秀,代码本意不会改变。

以上就是我本次的分享了,写的不好,请多多担待!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值