发表时间:2022-03-26来源:网络
1.1 软件,程序与计算机语言
软件是为完成某些特定功能而编制的一个到多个程序文件的集合。
程序是计算机指令的序列,编制程序的工作就是为计算机编制指令序列。
人和计算机交流也要用人和计算机都容易接受和理解的语言,这就是计算机语言。
1.2 程序语言的发展1.2.1 机器语言
计算机的机器语言都是由0和1组成,计算机的所有数据都是由0和1组成。
1.2.2 汇编语言
汇编语言是用符号来表示这些固定的二进制指令的语言。
1.2.3 高级语言
高级语言总是尽量接近"高级动物”的自然语言和思维方式。
1.3 软件开发的基本方法与步骤1.分析问题,建立数据模型。
2.确定数据结构和算法。
3.编织程序。
4.调试程序。
1.3.1 算法
通常计算机算法分为两大类:数值运算算法和非数值运算算法。
数值运算是对问题求数值解,非数值运算包括非常广泛的领域。数值运算有确定的数学模型,一般都有比较成熟的算法。非数值运算的种类繁多,要求不一。
算法的基本特征(有穷性,确定性,有效性,有零个或多个输入,有一个或多个输出。 算法的表示—流程图(对给定算法的一种图形解法,流程图又称为框图,它用规定的一系列图形,流程线及文字说明来表示算法中的基本操作和控制流程,其优点是形象直观,简单易懂,便于修改和交流。)流程图包括起止框,输入/输出框,处理框,判断框,注释框,流程框,连接点。
1.3.2 编码实现
创建一个C语言程序的步骤:
1.编写源代码
2.将源代码编译成目标代码。
3.链接目标代码成为可执行程序
源代码将源程序的代码指令存储,计算机采用两种不同格式存储文件,分别是文本格式和二进制格式。
文本文件包括ASCII码字符集的符号。ASCII字符集包括了字母表的大小写字母。还包括了从0-9的数和一些标点符号。二进制文件是由二进制数组成。
当编写程序的时候,我们将源代码存储到文本文件中,程序员通常会将多个源代码的文本文件创建一个程序。通过很短时间的编译和链接过程,文本文件中的源代码被转化成二进制指令存储到二进制文件中。
编译源代码计算机不能执行源代码,我们要编写编译器或翻译器,这样,就可以将程序从高级语言程序转化成二进制代码,也就是机器语言。
链接当链接起将程序链接成可执行的形式时,它用多个库来链接目标程序。库是一些预先编译好的函数的集合。这些函数可能完成一项或多项任务。
1.3.3 调试程序
程序中最易出现的几种不同类型错误是
语法错误 逻辑错误 开发错误 运行时错误2.1编程语言概述
学习一门新语言的惟一途径就是使用它来编程。对于初学者来说, 编写的第一个程序几乎都是相同的,即在屏幕上显示“Hello, world”,专业说法为打印“Hello, world”。
【例1-1】打印 Hello, world。
/* 第一个C语言程序 打印 Hello, world */ #include //包含头文件stdio.h int main(){ // 主函数 printf("Hello, word\n"); // 打印字符串 return 0; // 返回0,表示程序正确运行 }尽管这个程序很简单,但对初学者来说,它仍然可能成为一大障碍,因为要实现这个目的,首先要编写代码,然后编译、链接并运行,最后看到输出结果。掌握了这些操作细节以后,其它事情就比较容易了。
关于编译和链接将在下一节说明,这里先对程序进行解释:
第1行包含标准库文件,include称为文件包含命令,扩展名为.h的文件称为头文件。 第2行定义名为main的函数,它不接受参数值;main函数的语句都被括在花括号中;int为main函数返回值类型。 第3行打印“Hello, world”,main函数调用库函数printf以显示字符序列。 第4行表示main函数的返回值为0,return让函数返回一个值。 第5行结束main函数,花括弧必须成对出现。
位于“/* */”中和“//”后面的内容为注释,用来对程序进行说明;注释在编译时会被自动忽略。
一个C语言程序,无论其大小,都是由函数和变量组成的。
函数具有某些特定功能,能执行特定操作;函数中包含一些语句,以说明操作的过程。变量则用于存储计算过程中使用的值。
在本例中,函数的名字为main。通常情况下,函数的命名没有限制,但main是一 个特殊的函数名,每个程序都从main函数的起点开始执行,这意味着每个程序都必须在某 个位置包含一个main函数。
main函数通常会调用其它函数来帮助完成某些工作,被调用的函数可以是我们自己编写的,也可以来自于函数库。上述程序段中的第一行语句#include 用于告诉编译器在本程序中包含标准输入/输出库。许多C语言源程序的开始处都包含这一行语句。我们将在后续章节对标准库进行详细介绍。
函数之间进行数据交换的一种方法是调用函数向被调用函数提供一个值(称为参数)列表。函数名后面的一对圆括号将参数列表括起来。在本例中,main函数不需要任何参数,因此用空参数表( )表示。
函数中的语句用一对花括号{}括起来。本例中的main函数包含下面两条语句:
printf("Hello, word\n"); return 0;调用函数时,只需要使用函数名加上用圆括号括起来的参数表即可。上面这条语句将"hello, world\n"作为参数调用printf函数。printf是一个用于打印输出的库函数,在此处, 它打印双引号中间的字符串。
用双引号括起来的字符序列称为字符串或字符串常量,如"hello, world\n"就是一个字符串。目前我们仅使用字符串作为printf及其它函数的参数。
在C语言中,字符序列\n表示换行符,在打印中遇到它时,输出打印将换行,从下一行的左端行首开始。如果去掉字符串中的\n(这是个值得一做的练习),即使输出打印完成后也不会换行。在printf函数的参数中,只能用\n表示换行符。如果用程序的换行代替,例如:
printf("Hello, word
");
C编译器将会产生一条错误信息。
printf函数永远不会自动换行,这样我们可以多次调用该函数以分阶段得到一个长的输出行。上面给出的第一个程序也可以改写成下列形式:
#include int main(){ printf("Hello, "); printf("word"); printf("\n"); return 0; }
这段程序与前面的程序的输出相同。
2.2 基本数据类型
所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。
数据类型说明:
数据类型说明基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 构造数据类型 构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:数组类型、结构体类型、共用体(联合)类型。 指针类型 指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。 空类型 在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max函数定义中,函数头为: int max(int a,int b); 其中“int ”类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数sin,由于系统规定其函数返回值为双精度浮点型,因此在赋值语句s=sin (x);中,s也必须是双精度浮点型,以便与sin函数的返回值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。在后面函数中还要详细介绍。
2.3 数据类型转换
自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:
若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。 char型和short型参与运算时,必须先转换成int型。 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
下图表示了类型自动转换的规则。
【例2-1】自动数据类型转换
#include int main(){ float PI=3.14159; int s,r=5; s=r*r*PI; printf("s=%d\n",s); return 0; }
本例程序中,PI为实型;s,r为整型。在执行s=r*r*PI语句时,r和PI都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。
强制类型转换是通过类型转换运算来实现的。其一般形式为:
(类型说明符) (表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
例如:
(float) a; /* 把a转换为实型 */ (int)(x+y); /* 把x+y的结果转换为整型 */
在使用强制转换时应注意以下问题:
【例2-2】强制数据类型转换
本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数)而f的值仍为5.75。
2.4 运算符的分类
运算符不仅具有不同的优先级,还有不同的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。
C语言的运算符可分为以下几类:
源程序如下:
#include #include int main(void){ float a,b,c,disc,x1,x2,p,q; scanf("a=%f,b=%f,c=%f",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf("\nx1=%5.2f\nx2=%5.2f\n",x1,x2); return 0; }
3.2 if语句的使用
用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有三种基本形式。
1) 第一种形式为基本形式:if
if(表达式) 语句
其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。
【例3-3】
输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。
3) 第三种形式为if-else-if形式
前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
…
else if(表达式m)
语句m;
else
语句n;
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。 if-else-if语句的执行过程如下图所示。
【例3-5】
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14