IDE编辑器:C free 5 专业版
文件:
编辑器_CFree5pro_setup_key(jb51.net).rar.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的序列。这个转换过程就是翻译,翻译操作之后才能执行。
/*
显示整数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函数:格式化输出函数
“%d”的d源自decimal(十进制数)。
语句
C语言中需要在末尾加上分号来构成正确的语句(statement)。原则上语句必须以分号结尾。
开始执行程序后,固定代码中{和}之间的语句会被按顺序执行。
翻译阶段和编译
符号的称呼
字符串常量
转义字符
变量和声明
变量其实就是用来放置数值和字符等的"盒子"。变量中放入数值后,只要该盒子还在,值就会一直被保存,而且还可以自由地取出或替换数值。
要想使用变量,必须遵循一定的流程,首先需要进行如下声明(declaration)
int n; /声明一个Int类型的变量n/
通过声明准备出了一个名为n的变量(盒子),这个变量只能用来存放整数值,因此变量n就称为整型(int型)。
int是表示整数的英文单词integer的缩写。
注意:要使用变量,必须通过声明明确其类型和名称。
/*
为两个变量赋整数值并显示
*/
#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
赋值
“=”把右侧的值赋值给左边的变量。
初始化
如果没有给变量初始化,变量会被放入一个不确定的值,即垃圾值。
声明时初始化
初始化和赋值
在变量中放入数值的时间是不同的。
输入和显示
读取通过键盘输入的数值,并将其存放在变量中。
/*
显示并确认输入的整数值
*/
#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
从键盘读取输入的十进制数,并把它保存到变量no中。
输出函数
读取两个整数的值,显示它们的和。
/*
显示出读取到的两个整数的和
*/
#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;
}
总结
第二章 运算和数据类型
运算符
像+、* 这样可以进行运算的符号称为运算符(operator),作为运算对象的变量或常量称为操作数(operand)。
/*
读取两个整数的值,然后显示出它们的和、差、积、商和余数
*/
#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;
}
乘除运算符和加减运算符
除法运算的商和余数
/*
读取两个整数,显示它们的商和余数
*/
#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;
}
单目运算符
赋值运算符
表达式和赋值表达式
表达式语句
数据类型
整数和浮点数
printf函数输出double类型的时候,转换说明不能使用%d,而要使用%f
double类型的变量通过scanf函数赋值的时候需要使用格式字符串%1f
数据类型和运算
注意:
/*
验证数据类型和运算
*/
#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;
}
类型转换
转换说明
总结
第三章 分支结构程序
if语句
相等运算符
关系运算符
/*
判断输入的整数的符号
*/
#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;
}
嵌套的if语句
/*
如果输入的整数值为正,则判断该值的奇偶性并显示
*/
#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;
}
判断
计算较大值
/*
显示所输入的两个整数中较大的数
*/
#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;
}
/*
显示所输入的两个整数中较大的数(其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;
}
计算三个数的最大值
/*
计算所输入的三个整数中的最大值并显示
*/
#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;
}
条件运算符
/*
显示所输入的两个整数中较大的数(其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;
}
复合语句(程序块)
/*
计算所输入的两个整数中的较大数和较小数并显示
*/
#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;
}
逻辑运算符
/*
显示所输入的月份所处的季节
*/
#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;
}
短路求值
容易出错的if语句
switch语句
/*
显示所输入的整数除以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;
}
/*
显示所输入的整数除以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;
}
复杂的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;
}