实践教程第1章程序设计的初步知识.docx
- 文档编号:2997668
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:20
- 大小:215.05KB
实践教程第1章程序设计的初步知识.docx
《实践教程第1章程序设计的初步知识.docx》由会员分享,可在线阅读,更多相关《实践教程第1章程序设计的初步知识.docx(20页珍藏版)》请在冰豆网上搜索。
实践教程第1章程序设计的初步知识
第1章程序设计的初步知识
本章导读
●知识点介绍
●开发C程序的基本方法实习
●思考练习与测试
1.1知识点介绍
1.上机实习基础知识
(1)开发C程序的一般过程
①分析问题,确定算法
首先要对问题进行分析,找出合适的算法。
所谓算法是指解决一个问题而采取的方法与步骤。
解决一个问题的算法往往不是唯一的,要找出效率高而且比较简单的算法,然后将算法用流程图、自然语言等方式表示出来,这是关键的一步。
下面举例说明如何建立模型和确定算法。
在高度为100m的铁塔上平抛一物体,初速度v0=20m/s,求其运动轨迹(以0.1s为时间间隔,直到物体落到地面为止)。
分析:
设坐标原点在塔底,物体初始位置是x=0,y=100。
物体在时刻t的位置是:
这两个公式就是该问题的数学模型。
求出物体运动轨迹的算法是:
按以上公式,每隔0.1s计算一组x、y的值,直到y=0为止。
用自然语言描述算法:
定义变量、赋初值。
计算t=0.1时物体的坐标x、y并输出,然后t增加0.1。
判断:
如果y>0,则重复步骤②,否则结束。
用流程图描述算法:
如图1-1所示。
②编写程序
按照已确定的算法编写程序称为编码。
编码完成后,要进行检查,发现并修改那些由于疏忽大意而造成的错误。
③上机调试
上机调试包括程序的编辑、编译、连接和运行,用“试验数据”进行测试,发现并排除程序中的错误。
有人说“三分编程七分调试”,说明程序调试不仅重要,而且有时工作量也是很大的。
(2)程序中错误类型
程序中的错误可分为两类:
语法错误和逻辑错误。
图1-1求平抛物体运动轨迹流程图
①语法错误
语法错误是指违背了C语法规则的错误。
例如,语句末尾遗漏了分号、关键字拼写错误、参数类型或个数不匹配等。
对这类错误,编译系统能够发现并显示出错信息,因此语法错误是不难排除的。
需要注意的是:
有时系统提示的出错行并没有错误,而错误出现在上一行。
有时提示多条错误信息,实际上可能只有一、两处错误。
例如,程序中所使用的变量未定义,编译时就会对含有该变量的所有语句显示出错信息,只要加上变量定义语句,后面的错误就自然排除了。
因此,当提示多处错误时,应该从第一条错误开始修改。
②逻辑错误
逻辑错误是指程序中没有语法错误,但运行结果不对。
这种错误较难发现,需要仔细查找。
例如,计算s=1+2+3+4+…+100,程序段如下:
ints=0,i=1;
while(i<=100)
s=s+i;
i++;
其中没有语法错误,运行时却出现死循环。
原因是循环时语句i++;不能被执行,所以i的值不变,总是满足条件。
循环体应该使用花括号构成复合语句:
while(i<=100)
{s=s+i;i++;}
还需要注意:
程序中虽然没有语法错误和逻辑错误,但是运行时也可能出错。
例如,有如下程序段:
floata,b;
scanf("%f,%f",&a,&b);
printf("%f\n",a/b);
运行时,如果为b的值输入0,0做除数则会出错。
该程序不能经受各种数据的“考验”,不具有“健壮性”。
修改方法是在第2行后加一条if语句,如果b的值等于0,则输出“除数为0”并终止程序的运行。
(3)程序测试
程序测试的目的在于发现程序中的错误。
对于大型软件,要使用专门的测试技术和方法,要设计测试用例。
在学习阶段开发的程序一般较小,只要通过一些简单的试验数据,将运行结果与预期结果进行比较,就可知道程序是否正确。
例如,计算前n个自然数之和的程序:
#include
voidmain()
{inti,n,sum=0;
printf("请输入1个自然数:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum=sum+i;
printf("前%d个自然数之和为%d\n",n,sum);
}
测试方法:
运行程序,先输入3,输出结果为6,与预期结果一致;再运行一次,输入10,输出结果为55,又与预期结果一致,则说明程序正确。
(4)程序中常见错误
①使用了未定义的变量。
例如:
voidmain()
{a=1;b=2;
printf("%d\n",a+b);
}
C程序中的所有变量必须“先定义、后使用”,定义就是说明变量的类型,系统为其分配相应的存储空间。
应在函数体的开头加一条语句:
inta,b;
②使用变量名时,忽视了大小写字母的区别。
例如,定义了变量a,使用时写成A,实际上,它们是两个不同的变量。
③在scanf()函数中,遗漏了取地址运算符&。
例如,把语句scanf("%d,%d",&a,&b);写成了scanf("%d,%d",a,b);
④输入输出数据的类型与所用格式说明符不一致。
这类错误编译时不显示出错信息,但运行结果不对,要格外注意。
例如:
floata=1.5;
printf("%d\n",a*a);//输出结果是0
⑤误把赋值号当作等号使用。
例如:
if(a=b)printf("aequaltob");
只要b不等于0,赋值表达式a=b的值就不等于0,因此总满足条件。
即是说,无论a是否等于b,都输出aequaltob。
⑥忽视了字符与字符串的区别。
例如:
charch;
ch="A";//ch是字符型变量,而"A"是字符串。
应改为ch='A';
⑦不该加分号的地方加了分号。
例如:
if(a>=b);//这里不能加分号
printf("%d\n",a);
else
printf("%d\n",b);
⑧将最大下标等同于数组元素个数。
由于数组元素的最小下标规定为0,所以最大下标等于元素个数减1,而不是元素个数。
这类错误编译时不显示出错信息,但运行结果不对,要格外注意。
例如:
inta[5]={1,2,3,4,5};
printf("%d\n",a[5]);//没有元素a[5],最大下标的元素是a[4]
(5)常用库函数
C语言提供了丰富的库函数(或称标准函数)。
了解库函数的功能、函数名、参数类型、参数个数及函数值的类型,就可以直接引用库函数。
引用库函数要在程序中使用#include命令包含相应的头文件。
常用的库函数列于表1-1和表1-2中。
表1-1常用数学函数(头文件math.h)
函数名
函数说明
功能
备注
abs
intabs(intn)
返回int型数n的绝对值
cos
doublecos(doublex)
计算三角函数cosx的值
x的单位为弧度
exp
doubleexp(doublex)
计算ex的值
log
doublelog(doublex)
计算lnx的值
自然对数
log10
doublelog10(doublex)
计算logx的值
常用对数
pow
doublepow(doublex,
doubley)
计算xy的值
sin
doublesin(doublex)
计算三角函数sinx的值
x的单位为弧度
sqrt
doublesqrt(doublex)
计算x的平方根
x≥0
tan
doubletan(doublex)
计算三角函数tanx的值
表1-2常用字符函数和字符串函数
函数名
函数说明
功能
备注
getchar
intgetchar()
从标准输入设备读取一个字符。
读取成功返回所读字符,否则返回-1
头文件stdio.h
putchar
intputchar(ch)
将ch中的字符输出到标准输出设备。
输出成功返回输出的字符,否则返回EOF
头文件stdio.h
strcat
char*strcat(char*s1,char*s2)
将字符串s2连接到s1后面,返回s1的地址
头文件string.h
strcmp
intstrcmp(char*s1,char*s2)
按辞典顺序对两个字符串进行比较。
两个字符串相等,返回0;s1>s2,返回正数;s1 头文件string.h strcpy char*strcpy(char*s1,char*s2) 将字符串s2复制到s1中,返回s1的地址 头文件string.h strlen intstrlen(char*s) 求字符串s的长度。 返回s所包含的字符数 不含字符串结束符\0,头文件string.h C的库函数还有很多,有兴趣的读者可查阅附录1。 2.C程序的结构、书写规则与主函数。 (1)C源程序的结构 C源程序的结构的6个特点如下: ①一个C语言源程序是由一个或多个源文件组成。 ②一个源文件由一个或多个函数组成。 ③一个源程序中都包含且只能包含一个主函数main()。 ④源程序中可以有预处理命令(如,#include),预处理命令通常放在源文件或源程序的最前面。 ⑤每个说明、语句都必须以分号“;”结尾。 但是预处理命令、函数头和花括号“}”之后不能加分号。 ⑥标识符、关键字之间必须至少加一个空格以示间隔。 但是,如果已有明显的间隔符,也可以不再加空格来分隔。 (2)程序的书写规则 为了便于阅读、理解和维护程序,在书写程序时应遵循以下4个规则: ①一个语句或一个说明占一行。 但是,在不影响程序可读性时,一个程序行允许写几条语句,也允许一条语句分几行书写。 ②用花括号“{}”括起来的部分,通常是为了表示程序的某一层次结构。 所以,“{}”一般与该结构语句的第一个字母对齐,并且单独占一行。 ③C程序字母区分大小写,用户书写程序时,要求关键字都使用小写字母。 ④低一层次的语句或说明可以比高一层次语句或说明缩进若干个格,以便更加清晰,增加程序的可读性。 (3)主函数 主函数main()在一个有效程序中的地位相当于程序的主体,就像大树的树干,而其他函数都是为主函数服务的,就像树干分出的枝干。 主函数的3个特点: ①C语言规定必须用main作为主函数名,其后的圆括号可以是空的,但不能省略。 ②程序中的main()是主函数的起始行,也是C程序执行的起始行,每个程序都必须有一个且只能有一个主函数。 在main()后,用一对花括号“{}”括起来的的语句序列称为函数体。 函数体内的语句序列,在没有遇到跳转语句时,按先后顺序,依次执行。 ③一个C程序总是从主函数开始执行,到main函数体执行完后结束,而不论main函数在程序中的位置如何。 主函数的前面,可以有一个说明其类型的关键字(如,int、char),表示函数返回值的类型。 C99标准保留有37个关键字(详见第二章知识点),这些关键字有特定的作用和使用方法。 在一个C源程序的main函数之外的其他函数,在整个程序中的位置任意。 函数是组成C语言的基本单元,每个函数完成某种特定的功能,它的功能由函数的设计者编写代码来实现(被称为函数定义)。 而函数的使用者,并不需要知道实现的细节,就可以来使用它(被称为函数调用)。 3.数据的输入/输出 在C程序文件的开始部分有预处理命令,例如#include 一般程序中使用的格式输出函数printf()和格式输入函数scanf()等,就定义在该头文件中。 程序运行时,要将头文件“stdi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实践 教程 章程 设计 初步 知识