第一章程序设计和C语言
很久以前想开博客写写东西,一直拖着,博客性质用于自用,如有错误,欢迎交流!
本系列(C语言)主要用于记录自己在学习《C程序设计(第五版)》(谭浩强著)过程中的想法,总结与反思。
导引
程序:可以被计算机识别和执行的指令集
怎么理解呢,一是识别,二是执行。
计算机要能够认识并且执行,而计算机从根本上,只能识别由0和1组成的二进制代码,执行来说,计算机会根据机器指令执行相应的操作。
1.机器语言
我们将上述能被计算机直接识别和执行的二进制代码称为机器语言
2.符号语言
而由0和1所组成的机器代码是抽象且不易被常人所理解的。
一种由单词和数字组成的指令应运而生,如ADD A,B,这种表达方式与人类的思考方式相近,便于理解。
显然,符号语言无法直接被计算机所识别和执行,我们需要一个桥梁来沟通符号语言和机器语言,通过桥梁将人们容易理解的符号语言转换成计算机能识别和执行的机器语言,沟通的桥梁我们称之为汇编。
低级语言与高级语言
值得一提的是,无论是机器语言还是符号语言(也称汇编语言),都依赖于具体的机器,也就是离机器很”进“,属于低级语言的范畴。
低级语言意味着相同的代码在不同的机器上,不经过符合具体机器特性的修改就无法运行。
而与之相对的高级语言,更接近于人们所熟悉的自然语言和数学语言,且不依赖于具体机器,计算机依旧无法直接识别和执行高级语言,需要借助编译程序把高级语言写的程序(源程序)转换为机器指令的目标程序,然后让计算机执行机器指令程序。
低级语言与高级语言相比,低级语言依赖具体的机器,高级语言不依赖具体机器
C语言的特点
- 结构化语言
C语言是结构化的语言,具有良好特性的基本结构(顺序结构、选择结构、循环结构),程序的过程不允许随意跳转,从上而下顺序执行每一个结构 - 语言简洁
具有37个关键字,不直接提供输入输出语句、有关文件操作的语句和动态内存管理的语句(由库函数实现,在连接装配过程中实现) - 运算符丰富
- 数据类型丰富
包括整型(int)、浮点型(float)、字符型(char)、数组类型、指针类型、结构体类型(struct)和共用体类型等
值得一提的是,整型量与字符型数据可以通用,原因是字符型是用ASCII码来存储的 - 允许直接访问物理地址,进行位(bit)操作,可以实现对硬件操作
C语言程序举例
- 求两个整数中的较大者
#include<stdio.h> //将stdio.h头文件的内容读取进来
int main() //C99建议把main函数设置为整型,末尾加return 0;如果程序正常执行返回0,否则返回非零整数
{
//int main()代表这个main是一个整型的函数,在末尾需要返回一个整型作为此函数的值
int a,b,max;//声明变量用于存储整数,用max存储两个整数中的较大者
printf("Please enter two integer:(input format is a b)\n"); //提示语,告知键盘输入的格式,\n用于换行
scanf("%d %d",&a,&b); //scanf会从键盘中读取输入的数字(%d中的d代表输入的是十进制整数),&是地址符,放入变量所在的地址
max = (a>b)?a:b; //三元运算符将较大者存入max
printf("Which is bigger?\n%d or %d?\nThe answer is %d.\n",a,b,max); //输出结果
}
上述代码中的#include指令把stdio.h文件读取,如果没有#include就不可能执行相关函数,C语言用//进行单行注释,在进行预编译过程中,每个注释替换为一个空格
C语言程序结构
一个源程序文件中可以包括三个部分:
- 预处理指令
C编译系统在编译之前,会先经由预处理指令(如#include<stdio.h>)进行预处理,将得到的处理结果与程序其他部分连接起来,组成一个完整的、可用于最后编译的源程序,经由编译得到目标程序 - 全局声明
在函数外面声明的变量是全局变量,可以在整个源程序内有效,而在函数内声明的变量属于局部变量,只在函数范围内有效 - 函数定义
int max(int x,int y)
函数类型 函数名称(变量类型 变量名,变量类型 变量名)
程序总是从main函数开始执行的
课后习题
1 什么是程序?什么是程序设计?
程序是指能被计算机识别和执行的指令集。
程序设计:从确定程序任务到实现目的、写出文档的全过程。
2.为什么需要计算机语言?高级语言有哪些特点?
计算机语言能够沟通人与计算机,让计算机根据人的需求实现相应的功能。
高级语言的特点:不依赖于具体机器,能够移植于其他机器
3.正确理解以下名词及其含义
(1)源程序,目标程序,程序连接
源程序:高级语言写的程序
目标程序:经由编译软件转换后得到的机器指令
程序连接:经过编译得到的目标程序(.obj)不能直接用于计算机执行,还需要将每一经过编译得到的目标程序连接装配,再与库函数连接成一个程序
(2)程序,程序模块,程序文件
程序:同上
程序模块:一个源程序文件就是一个程序模块,每个源程序又包含了若干个函数
程序文件:
(3)函数,主函数,被调用函数,库函数
函数:程序就是由多个函数组成的,每个函数用来实现一个或几个功能
主函数:指main函数,是程序执行的起点
被调用函数:可以是库函数或者自己编写的函数
4.编写一个C程序,运行时输出Hello World
#include<stdio.h>
int main()
{
printf("Hello World");
return 0;
}
5.编写一个C程序,运行时输出以下图形:
#include<stdio.h>
int main()
{
printf("*****\n *****\n *****\n *****\n");//一个\t相当于8个空格
return 0;
}
6.编写一个C程序,运行时输入a,b,c三个值,输出其中值最大者
#include<stdio.h>
int main()
{
int a,b,c,max; //声明变量,比较过程中更大的存入max中
printf("Please enter three numbers to compare(input format:a b c):\n");
scanf("%d %d %d",&a,&b,&c);
//compare
max = (a>b)?a:b;
max = (max>c)?max:c;
printf("Which is the biggest?%d or %d or %d?The answer is %d",a,b,c,max);
return 0;
}