《明解C语言·入门篇》学习笔记 第一集

发布时间 2023-05-24 09:59:12作者: 行走的思想

IDE编辑器:C free 5 专业版

文件:
编辑器_CFree5pro_setup_key(jb51.net).rar.pdf

【源代码】明解C语言(第3版):入门篇.zip.pdf

1.明解C语言 入门篇.pdf
2.明解C语言 中级篇.pdf

文件说明:

  • 【源代码】明解C语言(第3版):入门篇.zip.pdf --- 下载后更名为:【源代码】明解C语言(第3版):入门篇.zip
  • 编辑器_CFree5pro_setup_key(jb51.net).rar.pdf --- 下载后更名为:去掉pdf结尾

源代码下载:https://www.ituring.com.cn/book/1671 (右侧 随书下载)

第一章 初识C语言

人们通过字符序列创建出的程序称为"源程序" (source program),用来保存源程序的文件称为源文件(souce file)

通过字符序列创建出的程序,需要转换为计算机能够理解的位序列,也就是0和1的序列。这个转换过程就是翻译,翻译操作之后才能执行。
image.png

/*
	显示整数15和37的和
*/

#include <stdio.h>

int main(void)
{
	printf("%d",15+37);
	return 0;
}

运行结果:
--------------------配置: mingw5 - CUI Release, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 E:\9.C\list0101.c...
[Warning] E:\9.C\list0101.c:11:2: warning: no newline at end of file
正在连接...

完成构建 list0101: 0 个错误, 1 个警告
生成 E:\9.C\list0101.exe

stdio是standard I/O(标准输入输出)的缩写。请注意不要与studio混淆。

注释

/* 和*/ 之间的部分称为注释(comment),C99支持单行注释,即 // ..... 这种形式,// 之后直到行尾的内容都为注释。

printf函数:格式化输出函数

image.png
“%d”的d源自decimal(十进制数)。

语句

C语言中需要在末尾加上分号来构成正确的语句(statement)。原则上语句必须以分号结尾。
开始执行程序后,固定代码中{和}之间的语句会被按顺序执行。

翻译阶段和编译

image.png

符号的称呼

image.png

image.png

字符串常量

image.png

转义字符

image.png

变量和声明

变量其实就是用来放置数值和字符等的"盒子"。变量中放入数值后,只要该盒子还在,值就会一直被保存,而且还可以自由地取出或替换数值。
要想使用变量,必须遵循一定的流程,首先需要进行如下声明(declaration)
int n; /声明一个Int类型的变量n/
通过声明准备出了一个名为n的变量(盒子),这个变量只能用来存放整数值,因此变量n就称为整型(int型)。
int是表示整数的英文单词integer的缩写。

注意:要使用变量,必须通过声明明确其类型和名称。
image.png

/*
	为两个变量赋整数值并显示
*/

#include <stdio.h>

int main(void)
{
	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;
}


运行结果:
--------------------配置: mingw5 - CUI Release, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 E:\9.C\list0108.c...
正在连接...

完成构建 list0108: 0 个错误, 0 个警告
生成 E:\9.C\list0108.exe

image.png

赋值

“=”把右侧的值赋值给左边的变量。
image.png

初始化

image.png
如果没有给变量初始化,变量会被放入一个不确定的值,即垃圾值。

声明时初始化

image.png
image.png

初始化和赋值

在变量中放入数值的时间是不同的。
image.png

输入和显示

读取通过键盘输入的数值,并将其存放在变量中。

/*
	显示并确认输入的整数值
*/

#include <stdio.h>

int main(void)
{
	int no;

	printf("请输入一个整数:");
	scanf("%d", &no);							/* 读取整数值 */

	printf("您输入的是%d。\n", no);

	return 0;
}



运行结果:
--------------------配置: mingw5 - CUI Release, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 E:\9.C_demo\list0108.c...
正在连接...

完成构建 list0108: 0 个错误, 0 个警告
生成 E:\9.C_demo\list0108.exe

image.png
从键盘读取输入的十进制数,并把它保存到变量no中。
image.png

输出函数

读取两个整数的值,显示它们的和。

/*
	显示出读取到的两个整数的和
*/

#include <stdio.h>

int main(void)
{
	int n1, n2;

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

	printf("它们的和是%d。\n", n1 + n2);		/* 显示和*/

	return 0;
}

image.png

image.png

总结

image.png

第二章 运算和数据类型

运算符

像+、* 这样可以进行运算的符号称为运算符(operator),作为运算对象的变量或常量称为操作数(operand)。
image.png

/*
	读取两个整数的值,然后显示出它们的和、差、积、商和余数
*/

#include <stdio.h>

int main(void)
{
	int vx, vy;

	puts("请输入两个整数。");
	printf("整数vx:");   scanf("%d", &vx);
	printf("整数vy:");   scanf("%d", &vy);

	printf("vx + vy = %d\n",  vx + vy);
	printf("vx - vy = %d\n",  vx - vy);
	printf("vx * vy = %d\n",  vx * vy);
	printf("vx / vy = %d\n",  vx / vy);
	printf("vx %% vy = %d\n", vx % vy);

	return 0;
}

image.png

乘除运算符和加减运算符

image.png

除法运算的商和余数

image.png

/*
	读取两个整数,显示它们的商和余数
*/

#include <stdio.h>

int main(void)
{
	int a, b,c;

	puts("请输入两个整数。");
	printf("整数a:");   scanf("%d", &a);
	printf("整数b:");   scanf("%d", &b);

	printf("a除以b得%d余%d。\n", a / b, a % b);

	return 0;
}

image.png

单目运算符

image.png

赋值运算符

image.png

表达式和赋值表达式

image.png

表达式语句

image.png

数据类型

image.png

整数和浮点数
printf函数输出double类型的时候,转换说明不能使用%d,而要使用%f
image.png
image.png
image.png

double类型的变量通过scanf函数赋值的时候需要使用格式字符串%1f
image.png

image.png

数据类型和运算

image.png

image.png

注意:
image.png

/*
	验证数据类型和运算
*/

#include <stdio.h>

int main(void)
{
	int    n1, n2, n3, n4;	/* 整数 */
	double d1, d2, d3, d4;	/* 浮点数 */

	n1 = 5   / 2;			/* n1 ← 2   */
	n2 = 5.0 / 2.0;			/* n2 ← 2.5 (赋值时舍弃小数点以后的部分)*/
	n3 = 5.0 / 2;			/* n3 ← 2.5 (赋值时舍弃小数点以后的部分)*/
	n4 = 5   / 2.0;			/* n4 ← 2.5 (赋值时舍弃小数点以后的部分)*/

	d1 = 5   / 2;			/* d1 ← 2    */
	d2 = 5.0 / 2.0;			/* d2 ← 2.5  */
	d3 = 5.0 / 2;			/* d3 ← 2.5  */
	d4 = 5   / 2.0;			/* d4 ← 2.5  */

	printf("n1 = %d\n", n1);
	printf("n2 = %d\n", n2);
	printf("n3 = %d\n", n3);
	printf("n4 = %d\n\n", n4);

	printf("d1 = %f\n", d1);
	printf("d2 = %f\n", d2);
	printf("d3 = %f\n", d3);
	printf("d4 = %f\n", d4);

	return 0;
}

image.png
image.png

类型转换

image.png
image.png
image.png
image.png

转换说明

image.png

image.png
image.png

总结

image.png

第三章 分支结构程序

if语句

image.png
image.png
image.png
image.png

image.png
image.png
image.png
image.png
image.png

相等运算符

image.png
image.png

关系运算符

/*
	判断输入的整数的符号
*/

#include <stdio.h>

int main(void)
{
	int no;

	printf("请输入一个整数:");
	scanf("%d", &no);

	if (no == 0)
		puts("该整数为0。");
	else if (no > 0)
		puts("该整数为正数。");
	else
		puts("该整数为负数。");

	return 0;
}

image.png
image.png

嵌套的if语句

image.png

/*
	如果输入的整数值为正,则判断该值的奇偶性并显示
*/

#include <stdio.h>

int main(void)
{
	int no;

	printf("请输入一个整数:");
	scanf("%d", &no);

	if (no > 0)
		if (no % 2 == 0)
			puts("该整数为偶数。");
		else
			puts("该整数为奇数。");
	else
		puts("您输入的不是正数。\a\n");

	return 0;
}

image.png

判断

image.png
image.png

计算较大值

/*
	显示所输入的两个整数中较大的数
*/

#include <stdio.h>

int main(void)
{
	int n1, n2;

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

	if (n1 > n2)
		printf("较大的数是%d。\n", n1);
	else
		printf("较大的数是%d。\n", n2);

	return 0;
}

image.png

/*
	显示所输入的两个整数中较大的数(其2)
*/

#include <stdio.h>

int main(void)
{
	int n1, n2, max;

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

	if (n1 > n2) max = n1; else max = n2;

	printf("较大的数是%d。\n", max);

	return 0;
}

image.png

计算三个数的最大值

/*
	计算所输入的三个整数中的最大值并显示
*/

#include <stdio.h>

int main(void)
{
	int n1, n2, n3, max;

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

	max = n1;
	if (n2 > max) max = n2;
	if (n3 > max) max = n3;

	printf("最大值是%d。\n", max);

	return 0;
}

image.png
image.png

条件运算符

/*
	显示所输入的两个整数中较大的数(其3 :条件运算符)
*/

#include <stdio.h>

int main(void)
{
	int n1, n2, max;

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

	max = (n1 > n2) ? n1 : n2;		/* 将较大的值赋给max */

	printf("较大的数是%d。\n", max);

	return 0;
}

image.png

复合语句(程序块)

/*
	计算所输入的两个整数中的较大数和较小数并显示
*/

#include <stdio.h>

int main(void)
{
	int n1, n2, max, min;

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

	if (n1 > n2) {
		max = n1;
		min = n2;
	} else {
		max = n2;
		min = n1;
	}

	printf("较大的数是%d。\n", max);
	printf("较小的数是%d。\n", min);

	return 0;
}

image.png
image.png
image.png
image.png
image.png
image.png

逻辑运算符

image.png
image.png

/*
	显示所输入的月份所处的季节
*/

#include <stdio.h>

int main(void)
{
	int month;					/* 月 */

	printf("请输入月份\n");
	scanf("%d", &month);

	if (month >= 3 && month <= 5)
		printf("%d月是春季。\n", month);
	else if (month >= 6 && month <= 8)
		printf("%d月是夏季。\n", month);
	else if (month >= 9 && month <= 11)
		printf("%d月是秋季。\n", month);
	else if (month == 1 || month == 2 || month == 12)
		printf("%d月是冬季。\n", month);
	else
		printf("%d月不存在!!\a\n", month);

	return 0;
}

image.png

短路求值

image.png
image.png

容易出错的if语句

image.png

switch语句

image.png

/*
	显示所输入的整数除以3的余数
*/

#include <stdio.h>

int main(void)
{
	int no;

	printf("请输入一个整数:");
	scanf("%d", &no);

	if (no % 3 == 0)
		puts("该数能被3整除。");
	else if (no % 3 == 1)
		puts("该数除以3的余数是1。");
	else
		puts("该数除以3的余数是2。");

	return 0;
}

image.png
image.png

/*
	显示所输入的整数除以3的余数(switch 语句)
*/

#include <stdio.h>

int main(void)
{
	int no;

	printf("请输入一个整数:");
	scanf("%d", &no);

	switch (no % 3) {
	 case 0 : puts("该数能被3整除。");		break;
	 case 1 : puts("该数除以3的余数是1。");	break;
	 case 2 : puts("该数除以3的余数是2。");	break;
	}

	return 0;
}

image.png

复杂的switch语句

/*
	确认switch 语句动作的程序
*/

#include <stdio.h>

int main(void)
{
	int sw;

	printf("整数:");
	scanf("%d", &sw);

	switch (sw) {
	 case 1  : puts("A");  puts("B");  break;
	 case 2  : puts("C");
	 case 5  : puts("D");  break;
	 case 6  :
	 case 7  : puts("E");  break;
	 default : puts("F");  break;
	}

	return 0;
}

image.png

switch语句和if语句

image.png

选择语句

image.png

总结

image.png