C程序设计(谭浩强著第五版)——第⼀章程序设计和C语⾔⽬录
1.1什么是计算机程序
1.指令:可以被计算机理解并执⾏的基本操作命令。
2.程序:⼀组计算机能识别和执⾏的指令。 ⼀个特定的指令序列⽤来完成⼀定的功能。
1.2 什么是计算机语⾔
1.机器语⾔
①定义:计算机能直接识别和接受的⼆进制代码称为机器指令。机器指令的集合就是该计算机的机器语⾔。
②特点:难学,难记,难检查,难修改,难以推⼴使⽤。依赖具体机器难以移植。
2.汇编语⾔
①定义:机器语⾔的符号化。⽤英⽂字母和数字表⽰指令的符号语⾔。
②特点:相⽐机器语⾔简单好记,但仍然难以普及。汇编指令需通过汇编程序转换为机器指令才能被计算机执⾏。依赖具体机器难以移植。
2.⾼级语⾔
①定义:⾼级语⾔更接近于⼈们习惯使⽤的⾃然语⾔和数学语⾔。
②特点:功能强⼤,不依赖于具体机器。⽤⾼级语⾔编写的源程序需要通过编译程序转换为机器指令的⽬标程序。
1.3C语⾔的特点
(1)语⾔简洁、紧凑,使⽤⽅便、灵活
C语⾔不直接提供输⼊和输出语句、有关⽂件操作的语句和动态内存管理的语句等(这此操作是由编译系统所提供的库函数来实现的),C 的编译系统相当简洁。
(2)运算符丰富
C语⾔把括号、赋值和强制类型转换等都作为运算符处理,从⽽使C语⾔的运算类型极其
丰富,表达式类型多样化。灵活使⽤各种运算符可以实现在其他⾼级语⾔中难以实现的
运算。
(3)数据类型丰富
C语⾔提供的数据类型包括整型、浮点型、字符型、数组类型、指针类型、结构体类型和共⽤体类型等,C 99⼜扩充了复数浮点类型、超长整型(long long)和布尔类型(bool)等。尤其是指针类型数据,使⽤⼗分灵活和多样化,能⽤来实现各种复杂的数据结构(如链表、树、栈等)的运算。
(4)具有结构化的控制语句
如 if…else 语句、while 语句、do…while语句、switch 语句 和 for 语句。⽤函数作为程序的模块单位,便于实现程序的模块化。C语⾔是完全模块化和结构化的语⾔。
(5)语法限制不太严格,程序设计⾃由度⼤。
(6)C语⾔允许直接访问物理地址,能进⾏位(bit)操作,能实现汇编语⾔的⼤部分功
能,可以直接对硬件进⾏操作。因此C语⾔既具有⾼级语⾔的功能,⼜具有低级语⾔的许
多功能,可⽤来编写系统软件。C语⾔的这种双重性,使它既是成功的系统描述语⾔,⼜是
通⽤的程序设计语⾔。
(7)⽤C语⾔编写的程序可移植性好。
(8)⽣成⽬标代码质量⾼,程序执⾏效率⾼。
C原来是专门为编写系统软件⽽设计的,许多⼤的应⽤软件也都⽤C语⾔编写,这是因为C语⾔的可移植性好,硬件控制能⼒⾼,表达和运算能⼒强。⽬前C的主要⽤途之⼀是编写嵌⼊式系统程
序。由于具有上述优点,使C语⾔应⽤⾯⼗分⼴泛,许多应⽤软件也⽤C语⾔编写。
1.4 最简单的C语⾔程序
1.4.1 最简单的C语⾔程序举例
【例1.1】
要求在屏幕上输出:This is a C program.
(1)解题思路: 在主函数中⽤printf函数原样输出以上⽂字。
#include <stdio.h>  //这是编译预处理指令
int main()    //定义主函数
{    //函数开始的标志
printf("This is a C program.\n"); //输出所指定的⼀⾏信息
return 0;  //函数执⾏完毕时返回函数值0
}    //函数结束的标志
(2)运⾏结果
(3)程序分析
main是函数的名字,表⽰“主函数”;每⼀个C语⾔程序都必须有⼀个 main 函数。
main前⾯的int表⽰此函数的类型是int类型(整型),即在执⾏主函数后会得到⼀个值(即函数值),其值为整型。
return 0;的作⽤是当main函数执⾏结束前将整数0作为函数值,返回到调⽤函数处。
函数体由花括号{}括起来。
printf是C编译系统提供的函数库中的输出函数(详见第4章)。printf函数中双引号内的字符串″This is a C program.″按原样输出。\n是换⾏符,即在输出″This is a C program.″后,显⽰屏上的光标位置移到下⼀⾏的开头。 每个语句最后都有⼀个分号,表⽰语句结束。
在使⽤函数库中的输⼊输出函数时,编译系统要求程序提供有关此函数的信息,程序第1⾏“#include <stdio.h>”的作⽤就是⽤来提供这些信息的。stdio.h是系统提供的⼀个⽂件名,stdio是standard input & output的缩写,⽂件后缀.h的意思是头⽂件(header file),因为这些⽂件都是放在程序各⽂件模块的开头的。输⼊输出函数的相关信息已事先放在stdio.h⽂件中。
//表⽰从此处到本⾏结束是“注释”,⽤来对程序有关部分进⾏必要的说明。在写C程序时应当多⽤注释,以⽅便⾃⼰和别⼈理解程序各部分的作⽤。在程序进⾏预编译处理时将每个注释替换为⼀个空格,因此在编译时注释部分不产⽣⽬标代码,注释对运⾏不起作⽤。
注释只是给⼈看的,⽽不是让计算机执⾏
两种注释类型
(1)以//开始的单⾏注释
这种注释可以单独占⼀⾏,也可以出现在⼀⾏中其他内容的右侧。此种注释的范围从//开始,以换⾏符结束。如果注释内容⼀⾏内写不下,可以⽤多个单⾏注释。
//第⼀⾏注释
//继续注释
(2)以/*开始,以*/结束的块式注释
这种注释可以包含多⾏内容。它可以单独占⼀⾏(在⾏开头以/*开始,⾏末以*/结束),也可以包含多⾏。编译系统在发现⼀个/*后,会开始注释结束符*/,把⼆者间的内容作为注释
/*⼀整块都是.............................................................................................................................
注释*/
注意:在字符串中的//和/*都不作为注释的开始。⽽是作为字符串的⼀部分。
#include <stdio.h>
int main()
{
printf("//how do you do!\n");
return 0;
}
#include <stdio.h>
int main()
{
printf("/*how do you do!*/\n");
return 0;
}
【例1.2】
求两个整数之和
(1)解题思路: 设置3个变量,a和b⽤来存放两个整数,sum⽤来存放和数。⽤赋值运算符“=”把相加的结果传送给sum。
#include <stdio.h>  //这是编译预处理指令
int main( )  //定义主函数
{    //函数开始
int a,b,sum;  //本⾏是程序的声明部分,定义a,b,sum为整型变量
a=123;  //对变量a赋值
b=456;  //对变量b赋值
sum=a+b;  //进⾏a+b的运算,并把结果存放在变量sum中
printf("sum is %d\n",sum);  //输出结果
return 0;  //使函数返回值为0
}
(2)运⾏结果
(3)程序分析
printf("sum is %d\n",sum); printf函数圆括号内有两个参数。第⼀个参数是双引号中的内容sum is %d\n,它是输出格式字符串,作⽤是输出⽤户希望输出的字符和输出的格式。其中sum is是⽤户希望输出的字符,%d是指定的输出格式,d表⽰⽤“⼗进制整数”形式输出。圆括号内第⼆个参数sum表⽰要输出变量sum的值。在执⾏printf函数时,将sum变量的值(以⼗进制整数表⽰)取代双引号中的%d。
【例1.3】
求两个整数中的较⼤者
(1)解题思路:  ⽤⼀个函数来实现求两个整数中的较⼤者。在主函数中调⽤此函数并输出结果。
#include <stdio.h>
//主函数
int main()    //定义主函数
{      //主函数体开始
int max(int x,int y);  //对被调⽤函数max的声明
int a,b,c;    //定义变量a,b,c
scanf("%d,%d",&a,&b);  //输⼊变量a和b的值
c=max(a,b);  //调⽤max函数,将得到的值赋给c
printf("max=%d\n",c);  //输出c的值
return 0;    //返回函数值为0
}//主函数体结束
/
/求两个整数中的较⼤者的max函数
int max(int x,int y) //定义max函数,函数值为整型, 形式参数x和y为整型
{
int z;  //max函数中的声明部分,定义本函数中⽤到的变量z为整型
if(x>y)z=x;  //若x>y成⽴,将x的值赋给变量z
else z=y;  //否则(即x>y不成⽴),将y的值赋给变量z
return(z);  //将z的值作为max函数值,返回到调⽤max函数的位置
}
(2)运⾏结果
(3)程序分析
本程序包括两个函数:①主函数main;②被调⽤的函数max。
max函数的作⽤是将x和y中较⼤者的值赋给变量z,最后通过return语句将z的值作为max的函数值返回给调⽤max函数的主函数。
scanf是输⼊函数的名字(scanf和printf都是C的标准输⼊输出函数)。该scanf函数的作⽤是输⼊变量a和b的值。
c程序设计谭浩强pdf百度网盘max(a,b)调⽤max函数。在调⽤时将a和b作为max函数的实际参数的值分别传送给max函数中的形式参数x和y。
注意:本例程序中两个函数都有return语句,请注意它们的异同。 两个函数都定义为整型,都有函数值,都需要⽤return语句为函数指定返回值。 main函数中的return语句指定的返回值⼀般为0。 max函数的返回值是max函数中求出的两数中的最⼤值z,只有通过return语句才能把求出的z值作为函数的值并返回调⽤它的main函数中。
1.4.2 C语⾔程序的结构
⼀个程序由⼀个或多个源程序⽂件组成 。源程序⽂件包括:预处理指令、全局声明、函数定义
函数是C程序的主要组成部分 。⼀个C语⾔程序是由⼀个或多个函数组成的,其中必须包含唯⼀⼀个main函数。程序中被调⽤的函数可以是系统提供的库函数,也可以是⽤户根据需要⾃⼰编制设计的函数
⼀个函数包括两个部分:函数⾸部和函数体,函数体⼀般包括声明部分和执⾏部分
程序总是从main函数开始执⾏
程序中的操作是由函数中的C语句完成的
在每个数据声明和语句的最后必须有⼀个分号
C语⾔本⾝不提供输⼊输出语句,输⼊输出操作由函数完成程序应当包含注释
1.5 运⾏C程序的步骤与⽅法
1.6 程序设计的任务