为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

实验指导书_C语言程序设计B

2017-10-06 50页 doc 455KB 92阅读

用户头像

is_079973

暂无简介

举报
实验指导书_C语言程序设计B实验指导书_C语言程序设计B 《C语言程序设计A》 指导书 (非电类工科专业使用) 电气与信息工程学院 计算机系 2009-12-24 目 录 前言 ...................................................................................................................................... 3 实验一 C语言环境实验 .......................................
实验指导书_C语言程序设计B
实验指导书_C语言程序设计B 《C语言程序设计A》 指导书 (非电类工科专业使用) 电气与信息学院 计算机系 2009-12-24 目 录 前言 ...................................................................................................................................... 3 实验一 C语言环境实验 ....................................................................................................... 4 实验二 简单程序设计......................................................................................................... 18 实验三 分支结构程序设计 ................................................................................................. 21 实验四 循环结构程序设计 ................................................................................................. 24 实验五 函数程序设计......................................................................................................... 27 实验六 数组程序设计......................................................................................................... 30 实验七 指针程序设计......................................................................................................... 33 实验八 结构程序设计........................................................................ 错误~未定义书签。52 实验九 文件结构程序设计 ................................................................ 错误~未定义书签。57 实验十 综合程序设计........................................................................ 错误~未定义书签。61 实验十一 综合程序设计 ..................................................................................................... 36 附录1 C语言程序的上机步骤............................................................................................ 37 附录2 程序调试的方法 ...................................................................................................... 39 前 言 一、本课程实验教学的地位和作用 《C语言程序设计》课程是一门重要的公共基础课。其主要任务是使学生掌握C语言的基本概念与结构化程序设计方法等方面的知识。实验课是本课程重要的教学环节,通过本课程的学习使学生加深对讲授内容的理解,学会上机调试程序基本操作,能运用C程序解决本专业的一些实际问题,并养成严谨的科学态度和科学的思维方法,从而提高分析和解决问题的能力,为后续课程的学习和在时使用计算机解决实际问题打下良好的基础。 二、本课程应讲授的基本实验理论 1、掌握所用VC++6.0系统的基本操作方法,学会独立使用该系统;了解在该系统上如何编辑、编译、连接和运行C程序; 2、掌握结构化程序设计方法。 三、本课程实验教学应达到的能力要求 、掌握赋值语句的使用方法及各种类型数据的输入输出方法; 1 2、掌握实现选择和循环的编程方法,学习调试程序; 3、掌握数组的定义、赋值和输入输出方法,掌握字符数组和字符串函数的使用等; 4、掌握定义函数及调用函数的方法; 5、通过实验进一步掌握指针的概念,学会定义和使用指针变量,能正确使用指向数组的指针变量,能正确使用指向字符串的指针变量; 四、本课程实验教学目的与要求 学生在实验过程中注意自始至终贯彻课程中所介绍的程序设计风格,养成良好的编程习惯。应独立完成所布置的上机作业,为保证尽量在统一安排的上机时间内编译运行通过程序,在每次实验前应事先预习,按照要求写好预习,写好程序然后上机。课后撰写实验报告。 1、了解所用的计算机系统(包括,编译系统)的性能和使用方法。 2、复习和掌握与本实验有关的教学内容。 3、准备好上机所需的程序,在上机实验时必须完成预习要求中规定的任务,切忌不编程或抄别人的程序去上机。 4、对程序中出现的问题应事先估计,对程序中自己有疑问的地方应先作上记号,以便上机时给予注意。 5、准备好调试程序和运行程序所需的数据。 6、在实验中,学生根据实验要求完成程序的上机的编写和调试。 五、本课程实验教学考核办法 实验课成绩占本课程总成绩的20%。 1、 对于没有按照预习要求预习的,视本次实验无效。 2、 对无故缺实验者,本门课程实验成绩以0分记。 3、 鼓励学生多自己动手编写程序,只完成基本题(实验内容中的改错题和编程题)的 该次实验成绩最高分只能得85分(百分制),完成附加题,可加15分。 4、 严禁互相抄袭程序和实验报告,一经发现,该次实验以0分处理,累计超过三次, 本课程实验成绩以0分记。 实验一 C语言环境实验 【实验目的】 1、熟悉C语言的集成环境。 2、通过运行简单的,程序,了解C语言程序的结构。 【实验性质】验证性 【实验要求】 1、认真本实验的实验内容,熟悉VC环境使用过程 2、会使用VC编写最简单的程序 【预习要求】 1、仔细阅读实验内容中关于VC环境使用的步骤 2、有条件的话可以在电脑上按照实验内容实际操作 3、在预习报告中回答问题 【实验内容】 (一)、VC环境介绍 Visual C++是微软公司开发的,面向Windows 编程的C++语言工具。它不仅支持C++语言的编程,也兼容C 语言的编程。由于VC++被广泛地用于各种编程,使用面很广,本课程采用Visual C++作为开发环境。下面介绍如何在VC++下开发、运行C 语言程序。 1、启动VC++ VC++是一个庞大的语言集成工具,经安装后将占用几百兆磁盘空间。点击“开始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++ 6.0”,可启动VC++环境,如下图所示。 启动VC++环境 启动VC后,屏幕上将显示如下图所示的窗口。 VC++启动后界面 2、创建工程 在启动VC环境后,需要为C程序创建一个工程,如下图所示,点击“文件”菜单下 的“新建”菜单项。 新建C工程1 选择 输入工程的名字 工程所有文件的位置 选择 新建工程2 如上图所示,在“工程”一栏中选择“Win32 Console Application”类型,在“工程”输入框中输入你为工程起的名称,点击“C位置”后面的“…”按钮,显示如下界面。 先选择需要保存在哪个盘 再选择需要保存该盘的哪个文件夹 选择保存位置 在上图中选择需要保存的文件夹的位置,点击“确定”按钮。显示如下界面。 选择工程类型 在上图中,选择“An empty project”选项,点击“完成”按钮,弹出如下界面。 完成工程新建 点击“确定”按钮,新建一个空工程。如下图所示。 新建工程后界面 新建完工程后,点击“文件”菜单。如下图所示。 新建C源程序文件1 点击“新建”子菜单,弹出如下图的界面,新建C源程序文件。 选择 输入新建C程序的文件名选择 新建C源程序文件2 选择“文件”下的“C++ Source File”选项,在“文件”输入框中输入C源程序的文件名(注意需要加.C表示是C源程序文件,假如不指定扩展名.C,VC++会把扩展名定义为.CPP,即C++程序。如果程序没有错误)。点击“确定”按钮。进入编辑C程序界面。 3、编写代码 如下图所示。 菜单栏,提供功能操作工程区,查看工程代码区,编写程序工具栏,提供快捷操作 信息区,提供编译信息,如果编译错误,需要在此查看 VC版面介绍 在上图所示的代码区中输入需要编写的C程序代码。 如果需要查看已经编写的C程序文件,点击工程区中的“File View”,展开“Source Files”, 下面包含的文件即为所创建的C源程序文件,点击可以打开。 展开,C1-1.C即为所创建的C程序,双击可以打开 选择 查看C程序文件 输入程序的代码,如下图。 定义变量时不要偷懒,需要将变量名做到见名知义注释,编写程序时,请养成给代码注释的好习惯 一行一条语句代码采用锯齿形式,有利于代码的阅读 编写C程序文件 在编写代码时请注意养成一些好习惯: 1)行编写一条语句,代码采用锯齿形式,有利于代码的阅读; 2)变量名需要做到见名知义; 3)编写程序时,请养成给代码注释的好习惯,方便代码阅读; 4、编译运行 在代码编写完成后,点击“编译”菜单下的“编译”子菜单,将C程序编译成.Obj文件。 如下图所示。 编译C程序 如果编译成功,在信息区中,会出现“0 error(s)”的提示信息,如果编译不成功,则会在在信息区中提示出错信息,如下图所示。 请注意,该程序中,出现了以下错误:第五行 prinf()语句后少了一个分号”;”第六行scanf()函数中,没有”符号和“配对第七行value2写成了value 由于源程序错误,在编译代码时,提示出错信息,共有三个错误(注意由于编译器不能完全智能化,提示的信息可能和实际错误有些出入) 错误详细信息出错位置信息 编译C程序的错误信息 在编译出错后,请仔细根据错误信息,双击某行出错信息,程序窗口中会指示对应出错位置,根据信息窗口的提示分别予以纠正。 点击“编译”菜单下的“构建”子菜单,将.Obj文件连接成.EXE文件。如下图所示。 构建C程序 构建成功后,点击“编译”菜单下的“执行”子菜单,可以运行程序,如下图。 执行C程序 当运行C 程序后,VC++将自动弹出数据输入输出窗口,在其中输入数据,完成程序执行,显示结果,如下图所示。按任意键将关闭该窗口。 C程序运行界面 对于编译连接执行操作,VC++还提供了一组工具按钮,如图下图所示。 工具栏上的编译、执行按钮 5、关闭程序工作区 当一个程序编译连接后,VC++系统自动产生相应的工作区,以完成程序的运行和调 试。若想执行第二个程序时,必须关闭前一个程序的工作区,然后通过新的编译连接,产 生第二个程序的工作区。否则的话运行的将一直是前一个程序。 “文件”菜单提供关闭程序工作区功能,如下图右,执行“关闭工作区”菜单功能,会弹出询问是否保存的对话框,如下图左。如果选择“是”,将同时关闭源程序窗口。 关闭工作区 6、程序调试 调试程序是编写代码的一个非常重要的步骤,当程序编译成功,需要查看程序执行过程以及其变量值的情况,需要启动调试。VC++是一个完全基于Windows 的系统,它的调试过程通过鼠标比较容易进行。 (1) 程序执行到中途暂停以便观察阶段性结果: 方法一:使程序执行到光标所在的那一行暂停。 ?在需暂停的行上单击鼠标,定位光标; ?如下图所示,分别点击菜单“编译”,“开始调试”,“Run to Cursor”,或按【Ctrl】+【F10】,程序将执行到光标所在行会暂停。如果把光标移动到后面的某个位置,再按【Ctrl】+【F10】,程序将从当前的暂停点继续执行到新的光标位置,第二次暂停。 程序执行到光标所在行暂停 方法二:在需暂停的行上设置断点; ?在需设置断点的行上单击鼠标,定位光标; ?按“编译微型条”中最右面的按钮,如下图 所示,或按【F9】。 调试 被设置了断点的行前面会有一个红色圆点标志。与TC 一样,不管是通过光标位置还是断点设置,其所在的程序行必须是程序执行的必经之路,亦即不应该是分支结构中的语句,因为该语句在程序执行中受到条件判断的限制,有可能因条件的不满足而不被执行。这时程序将一直执行到结束或下一个断点为止。 (2) 设置需观察的结果变量 按照上面的操作,使程序执行到指定位置时暂停,目的是为了查看有关的中间结果。在如下图中,左下角窗口中系统自动显示了有关变量的值,其中value1 和value2 的值分别是3、4,而变量i、sum 的值是一个随机值,如下图,因为他们还未被赋值。图中左侧的箭头表示当前程序暂停的位置。如果还想增加观察变量,可在图中右下角的“Name”框中填入相应变量名。 观察结果变量 (3) 单步执行 当程序执行到某个位置时发现结果已经不正确了,说明在此之前肯定有错误存在。如 果能确定一小段程序可能有错,先按上面步骤暂停在该小段程序的头一行,再输入若干个 查看变量,然后单步执行,即一次执行一行语句,逐行检查下来,看看到底是哪一行造成 结果出现错误,从而能确定错误的语句并予以纠正。 单步执行按“调试条”中“Step Over”按钮或【F8】,如下图所示。如果遇到自定义函数调用,想进入函数进行单步执行,可按“Step Into”按钮或【F11】。当想结束函数的单步执行,可按“Step Out”按钮或【Shift】+【F11】。对不是函数调用的语句来说,【F11】与【F8】作用相同。但一般对系统函数不要使用【F11】。 单步调试 (4) 断点的使用 使用断点也可以使程序暂停。但一旦设置了断点,不管你是否还需要调试程序,每次 执行程序都会在断点上暂停。因此调试结束后应取消所定义的断点。方法是先把光标定位在断点所在行,再按“编译微型条”中最右面的按钮或【F9】,该操作是一个开关,按一次是设置,按二次是取消设置。如果有多个断点想全部取消,可执行“编辑”菜单中的“断点”菜单项,屏幕上会显示“Breakpoints”窗口,如下图所示,窗口下方列出了所有断点,按“Remove All”按钮,将取消所有断点。断点通常用于调试较长的程序,可以避免使用“Run to Cursor”(运行程序到光标处暂停)或【Ctrl】+【F10】功能时,经常要把光标定位到不同的地方。而对于长度为上百行的程序,要寻找某位置并不太方便。如果一个程序设置了多个断点,按一次执行键【Ctrl】+【F5】会暂停在第一个断点,再按一次【Ctrl】+【F5】 会继续执行到第二个断点暂停,依次执行下去。 取消所有断点 (5) 停止调试 使用“Debug”菜单的“Stop Debugging”菜单项,或【Shift】+【F5】键可以结束调 试,从而回到正常的运行状态。 上面只介绍了VC++中主要的功能,对于其他的操作可以自己试验或参考有关VC++手册。 7、小技巧 在编译程序时,请注意“工具栏”上的“保存”按钮,将程序保存,以免造成不必要的损失,如果出现VC环境“死了”的情况(程序点击不动),关闭VC环境出现如下图 这时,请按“Ctrl+ALT+Del”键,选择“VC++”点击“结束任务”,将VC强制关闭,重新启动即可,如下图所示。 任务管理器 (二)、程序练习 1) 下面程序在屏幕上显示一句话:“我爱学C语言”,请将下面在VC环境中输入,注意程序的结构,并思考如果需要显示多行语句时该如何实现, #include void main() { printf("我爱学C语言~\n"); } 2) 已知计算货物的价值公式为:价值=价格*重量,下面程序以value表示价值,price表示价格,weight表示重量,即value=price*weight,程序的功能为计算三种不同价格和重量的货物的价值,请在VC中输入代码,运行并观察结果有什么错误,为什么, #include void main() { int price,weight,value; price=10;weight=20;/*价格、重量赋值* value=price*weight;/*计算*/ printf("价格为%d,重量为%d货物,价值为%d\n",price,weight,value); price=5;weight=8; printf("价格为%d,重量为%d货物,价值为%d\n",price,weight,value); value=price*weight; printf("价格为%d,重量为%d货物,价值为%d\n",price,weight,value); } 23)已知圆的面积公式s=r*?,为下面程序计算半径为12.4的圆的面积,并将结果写入c盘根目录下的data.txt文件中,请在VC中输入代码,观察程序运行结果 #include void main() { float r,s;/*定义变量*/ FILE *fp;/*文件类型*/ r=12.4; s=r*r*3.14;/*计算*/ fp=fopen("c:\\data.txt","w");/*打开文件*/ fprintf(fp,"半径为%f的圆,其面积为%f",r,s);/*写入文件*/ printf("计算成功~,具体请看C盘下的data.txt文件");/*在屏幕上显示*/ fclose(fp);/*关闭文件*/ } 2、依照1-3中函数的写法,编写一程序,求高为5.4,半径为2.3的圆柱体的体积 【思考题】 1、使用VC编程时,应先创建的工程是什么类型, 2、如何运行一个C程序, 实验二 简单程序设计 【实验目的】 1、掌握scanf、printf函数语句的使用 2、掌握算术表达式和赋值表达式的使用 3、能够编程实现简单的数据处理 【实验性质】 验证性 【实验要求】 1、认真阅读本次实验的目的,认真复习本次实验要求掌握的内容 2、在上机前,需要预习,在程序改错题旁将程序中存在的错误修改过来,将编程题的代码和图写在预习报告中 3、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码,在VC环境中编写出来 4、在VC中将编写的程序编译、调试,能正确运行结果,各题目的具体要求请看题目下的要求 5、将正确程序上传FTP服务器 、争取完成选作题 6 【实验内容】 1、程序改错 1) 下面程序需要从键盘输入三个数,计算其平均值在屏幕上显示输出。要求平均值需要保留两位小数。源代码如下,程序中存在错误,请将其改正写在旁边,并注明为什么错误。 include stdio.h Main(){ int x,y,z,float ave; /*定义变量*/ printf("请输入三个数:\n);/*输入提示*/ scanf("%d,%d,%d",x,y,z);/*从键盘输入*/ ave=x+y+z/3.0;/*计算*/ printf("平均值是:ave=%f",AVE); } 2、编程题 1)编写程序,在计算机屏幕上显示如下信息。 【要求】 (1)使用printf函数输出字符 2) 设一个正圆台的上底半径r1,下底半径r2,高h。请设计一程序,从键盘输入r1,r2,r3;计算并在显示器上输出该圆台的上底面积s 1,下底面积s 2,圆台的体积V。 【要求】 (1)r1,r2,h用scanf函数输入,且在输入前要有提示; (2)在输出结果时要有文字说明,每个输出值占一行,且小数点后取2位数字。 【思路点拔】 2 (1)圆面积计算公式为 s=r。其中r为圆半径。 , 22 (2)圆台体积计算公式为 V= ,h(r1,r2,r1r2)/3 3 选作题 1、求y=sin()+ln(a+x). 要求a和x从键盘输入 ax 【思路点拔】使用数学函数计算 【预习报告】 1 流程图 代码 2 流程图 代码 【思考题】 1、变量在程序中有什么作用,如何从键盘中输入多个变量的值 2、用#define定义的常量与变量有什么区别,什么时候应该使用#define定义符号常量 3、程序中有哪几种流程结构,具体在程序中用什么体现 实验三 分支结构程序设计 【实验目的】 1、掌握关系表达式和逻辑表达式的使用 2、掌握使用if语句实现分支结构程序设计 3、了解switch语句 【实验性质】 验证性 【实验要求】 1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在上机前,需要预习,在程序改错题旁将程序中存在的错误修改过来,将编程题的 代码和流程图写在预习报告中 3、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码, 在VC环境中编写出来 4、在VC中将编写的程序编译、调试,能正确运行结果,各题目的具体要求请看题目下 的要求 5、将正确程序上传FTP服务器 、争取完成选作题 6 【实验内容】 1、程序改错 1) 下面程序需要从键盘输入一个数,判断其是奇数还是偶数。源代码如下,程序中存 在错误,请将其改正写在旁边,并注明为什么错误。 #include "stdio.h" main(){ int x; printf("请输入一个数:/n");/*提示输入*/ scanf("%d",&x); if(x==2*n); /*判断*/ printf("x是偶数"); else(x=2*n+1); printf("x是奇数"); } 2、编程题 1) 在商场购物时,若所购物品的总价值x(由键盘输入)在某一范围时,付款y按对 应折扣支付,即 x x<1000 , y= 0.9x 1000x<2000 ,0.8x 2000x<3000 ,0.7x x3000 编写一程序,根据x的值计算y 【要求】 (1)用scanf函数输入x(x为小数),且在输入前要有提示; (2)使用if-else if-else语句判断,计算y的值 (3)使用printf输出y的值,小数点保留2位 2)从键盘输入3个数,输出最大值和最小值 【要求】 (1)用scanf函数输入三个数,且在输入前要有提示; (2)使用嵌套结构出最大值,然后求出最小值,并使用printf输出 3 选作题 1)编写一程序,从键盘输入一个不多于4位的正整数,能显示出它是几位数,并按正反 两种顺序显示出各位数字。例如,若输入1234,输出为: 位数:n=4 正序:1234 反序:4321 【编程点拨】 (1)先判断x是否为满足要求n大于9999,小于0时,则不满足要求 (2)通过%和/运算分离出各个位上的值,先判断千位是否为零,如果为零,则不可能为四 位数,再判断百位上的数是否为零 (3)反序输出时,先输出个位,再十位,百位,千位 【预习报告】 1 流程图 代码 2 流程图 代码 【思考题】 (1)对于编程题2,如何使用if语句嵌套的方式和switch语句的方式实现 (2)对于多分支结构,使用if„else if 还是使用嵌套结构,需要注意什么, (3)编写分支结构时,条件的编写需要注意什么 实验四 循环结构程序设计 【实验目的】 1、掌握使用for、while和do„while语句实现循环程序设计 2、掌握break、continue语句的使用 【实验性质】 验证性 【实验要求】 1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在程序改错题旁,将程序中存在的错误修改过来 3、将编程题的代码在预习报告中写出来 4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码, 在VC环境中编写出来 5、在VC中将编写的程序编译、调试,能正确运行结果 6、将正确程序上传FTP服务器 、争取完成选作题 7 【实验内容】 1、程序改错 1) 编写程序,求1!+2!+3!+...+10!的和, 源代码如下,程序中存在错误,请将其改 正写在旁边。 #include "stdio.h" main(){ int i; long sum,temp;/*定义变量*/ for(i=1,i<=10,i++){/*循环*/ temp=temp+i; /*计算i的阶乘*/ sum=sum*temp;/*求和*/ } printf("1!+2!+3!+.....10!=%d",sum); } 2、编程题 1)有一分数序列:1/2-2/3+3/5-5/8+8/13-13/21...,求出这个数列的前20项之和。 【要求】 (1)和需要保留两位小数 (2)使用for语句实现 * * * * 2) 从键盘输入一个数n,打印高度为2*n-1行的菱形, * * * * * 例如:n=4时,打印图形如右: * * * * * * * * * * * * * * * * 【要求】 (1)打印的高度需要通过键盘输入的n控制 (2)使用for语句实现 3 选作题 1)输入一个字母,输出由这个字母决定其高度的字符“金字塔”。例如输入小写字母d,则输出左边的图形,如输入大写字母D,则输出右边图形。 a A a b a A B A a b c b a A B C B A a b c d c b a A B C D C B A 【编程点拨】 (1)首先根据输入的字符判断需要输出的字母是大写还是小写,以及需要输出的行数 (2)在外层循环中控制行数 (3)内层循环控制输出每一行,对每一行可分为两部分:从首字母到该行的最大字母,从该行最大字母的前一个字母到首字母如第3行是 ABC和BA,分别用两个循环实现。 (4)每一行的最大字母跟行号有关系,请注意其变化规律。 【预习报告】 1 流程图 代码 2 流程图 代码 【思考题】 1、区分while和do„while的区别,使用do„while改造教材P61页中例4-2程序 2、什么时候使用for语句比较方便 3、break和循环条件有什么联系和区别,什么时候使用break 实验五 函数程序设计 【实验目的】 1、掌握函数的定义和调用 2、掌握使用函数编写程序 3、掌握函数参数传递形式和返回值的概念 【实验性质】 验证性 【实验要求】 1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在程序改错题旁,将程序中存在的错误修改过来 3、将编程题的代码在预习报告中写出来 4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码, 在VC环境中编写出来 5、在VC中将编写的程序编译、调试,能正确运行结果 、将正确程序上传FTP服务器 6 7、争取完成选作题 【实验内容】 1、程序改错 1) 下面程序从键盘输入两个数,输出两个数的最大公约数和最小公倍数,源代码如 下,程序中存在错误,请将其改正写在旁边。 #include "stdio.h" main(){ int x,y,acd,amd;/*定义变量,acd保存最大公约数,amd保存最小公倍数*/ printf("请输入两个数:/n");/*提示输入*/ scanf("%d,%d",&x,&y); if(x>y){/*如果x>y,两个值互换,保证第一个参数为小值*/ x=y; y=x; } acd=acd(int m1,int m2);/*调用函数求最大公约数*/ amd=(x*y)/acd;/*求最小公倍数*/ printf("最大公约数=%d,最小公倍数=%d",acd,amc); } /** 函数功能:使用辗转相除法求两个数的最大公约数 参数m1:两个数中较小者 参数m2:两个数中较大者 返回值:m1和m2的最大公约数 **/ int acd(int m1,int m2); { int r; while (m1=0){/*使用辗转相除法求最大公约数*/ r=m2%m1; m1=r; m2=m1; } return r;/*返回最大公约数*/ } 2、编程题 1) 若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如,6的因子之和为1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为l+2+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。 编写程序,求500以内的所有亲密数对。 【要求】 (1)编制facsum(n) 函数,返回n的所有因子(包括1但不包括自身)之和。 (2)在main函数中调用facsum(),寻找并输出500以内的所有亲密数对。 (3)输出要有文字说明。并且小数在前、大数在后,去掉重复的数对。 (4)采用程序改错题的的编码风格对源代码做注释 2) 计算并输出 m! (m,n)!n! 【要求】 (1)编制一个函数pq(n),返回n!值。 (2)在main函数中,从键盘输入m与n,调用函数pq计算。 (3)在main函数中,输入m与n之前要有提示,并检查输入数据的合理性(m?n?O),对于不合理的输入,应输出出错信息,不再进行计算。 (4)采用程序改错题的的编码风格对源代码做注释 3 选作题 357xxx(),,,,??sxx1)已知,,编写一程序,从键盘输入x,求s(x)3,1!5,2!7,3! 的值(计算后面的20项的和)。 【预习报告】 1 流程图 代码 2 流程图 代码 【思考题】 1、函数调用时,参数是如何传递的 2、如果在函数中有多条return语句,程序如何执行,如果想返回多个值,应该怎么办? 实验六 数组程序设计 【实验目的】 1、掌握使用一维数组编程方法 2、掌握使用字符数组处理字符串的方法 2、了解二维数组 【实验性质】 验证性 【实验要求】 1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在程序改错题旁,将程序中存在的错误修改过来 3、将编程题的代码在预习报告中写出来 4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码, 在VC环境中编写出来 5、在VC中将编写的程序编译、调试,能正确运行结果 、将正确程序上传FTP服务器 6 7、争取完成选作题 【实验内容】 1、程序改错 1) 下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的 个数。源代码如下,程序中存在错误,请将其改正写在旁边。 #include "stdio.h" main(){ int a(10);/*定义数组*/ int count,i;/* i循环变量 count 正数个数*/ for(i=0;i<=10;i++){/*循环输入*/ scanf("%d",a[i]); } count=1; for(i=0;i<=10;i++){/*查找正数*/ if(a(i)>0) count++; } printf("数组中正数有:%d个",count); } 2、编程题 1) 从键盘输入一个字符串,将其中的大写字母变小写字母,小写字母变大写字母, 并输出 。 【要求】 (1)用字符数组表示存储字符串(字符串最大为100)。 (2)使用scanf函数逐个输入字符保存在字符数组中 (3)使用printf函数逐个输出字符数组中的字符 2) 编程序按下列公式计算s的值(其中x、x、„、x由键盘输入): 12n n2s,(x,x) (其中x是x、x、„、x的平均值) 012n,i0,i1 【要求】 (1)用数组保存x、x、„、x的值。 12n (2)n的值从键盘输入 3 选作题 1)求从一个字符串中删除所有指定字符的其余字符串。如字符串为“abcaca”,删除 字符“a”后,为“bcc”。 【编程点拨】 (1)使用字符数组保存字符串,从字符串数组的第一个元素开始遍历 (2)如果当前的元素与需要删除的元素相等,则删除。 (3)删除是指将该元素前移到需要拷贝的位置 【预习报告】 1 流程图 代码 2 流程图 代码 【思考题】 1、数组在程序设计时有什么作用,如果程序在设计时,不知道数组中保存数据的个数,应该怎么办 2、二维数组在内存中是如何存储的,二维数组中元素的下标与其在内存中排列的位置有什么关系, 3、如何将一个元素插入数组中,如何将一个元素从数组中删除 实验七 指针程序设计 【实验目的】 1、理解指针、地址和变量的关系 2、掌握通过指针操作数组元素的方法 3、掌握数组名、指针作为函数参数的编程方式 4、掌握通过指针操作字符串的方法 【实验性质】 验证性 【实验要求】 1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在程序改错题旁,将程序中存在的错误修改过来 3、将编程题的代码在预习报告中写出来 4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码, 在VC环境中编写出来 5、在VC中将编写的程序编译、调试,能正确运行结果 6、将正确程序上传FTP服务器 、争取完成选作题 7 【实验内容】 1、程序改错 1) 下面程序想使指针变量pt1指向a 和b 中的大者,pt2指向小者,源代码如下,程序 中存在错误,请将其改正写在旁边。 #include "stdio.h" swap(int *p1,int *p2){ int *p; p=p1;p1=p2;p2=p; } main(){ int a,b; scanf("%d,%d",&a,&b); pt1=&a;pt2=&b; if(&a<&b)swap(pt1,pt2); printf("%d,%d\n",*pt1,*pt2); } 2、编程题 1) 使用指针的方法求100的素数 【要求】 (1)先在数组中保存1-100的所有整数 (2)使用指针的方式对数组中非素数剔除 2) 判断一个数是否为回文数 【要求】 (1)定义一个函数separate(int * data,int n),该函数将n的各个位上的数分离保 存在data所指向的数组中。 (2)定义一个函数judge(int * data,int len),判断data所指向的数组是否为回文。 (3)main函数中调用上述的函数,完成程序的功能。 3、选作题 1)使用指针的方式,从一个字符串中删除所有指定字符的其余字符串。如字符串为 “abcaca”,删除字符“a”后,为“bcc”。 【编程点拨】 (1) 注意指针的使用,参考实验六的编程方法 【预习报告】 1 流程图 代码 2 流程图 代码 【思考题】 1、指针在程序设计中有什么作用 2、一维数组名、二维数组名有什么区别 实验八 综合程序设计 【实验目的】 1、 熟悉考试环境 2、 综合练习编程 【实验性质】 综合性 【实验内容】 从考试系统中抽取 附录1 C语言程序的上机步骤 按照C 语言语法规则而编写的C 程序称为源程序。源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII 码表示,并保存在扩展名为“(C”的文件中。源程序是无法直接被计算机运行的,因为计算机的CPU 只能执行二进制的机器指令。这就需要把ASCII 码的源程序先翻译成机器指令,然后计算机的CPU 才能运行翻译好的程序。源程序翻译过程由两个步骤实现:编译与连接。首先对源程序进行编译处理,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数库中的库函数。因此,必须把“库函数”的处理过程连接到经编译生成的目标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。 C 语言程序的调试、运行步骤可以用图A-1 表示: 图A-1 C 语言程序的调试、运行步骤 图A-1 中,虚线表示当某一步骤出现错误时的修改路线。运行时,无论是出现编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。除了较简单的情况,一般的程序很难一次就能做到完全正确。在上机过程中,根据出错现象找出错误并改正称为程序调试。我们要在学习程序设计过程中,逐步培养调试程序的能力,它不可能靠几句话讲清楚,要靠自己在上机中不断摸索,它可以说是一种经验积累。 程序中的错误大致可分为三类: , 程序编译时检查出来的语法错误; , 连接时出现的错误; , 程序执行过程中的错误。 编译错误通常是编程者违反了C 语言的语法规则,如保留字输入错误、大括号不匹配、语句少分号等等。连接错误一般由未定义或未指明要连接的函数,或者函数调用不匹配等因素引起,对系统函数的调用必须要通过“include”说明。 对于编译连接错误,C 语言系统会提供出错信息,包括出错位置(行号)、出错提示信息。编程者可以根据这些信息,找出相应错误所在。有时系统提示的一大串错误信息,并不表示真的有这么多错误,往往是因为前面的一两个错误带来的。所以当你纠正了几个错误后,不妨再编译连接一次,然后根据最新的出错信息继续纠正。 有些程序通过了编译连接,并能够在计算机上运行,但得到的结果不正确,这类在程序执行过程中的错误往往最难改正。错误的原因一部分是程序书写错误带来的,例如应该使用变量x 的地方写成了变量y,虽然没有语法错误,但意思完全错了;另一部分可能是程序的算法不正确,解题思路不对。还有一些程序有时计算结果正确,有时不正确,这往往是编程时,对各种情况考虑不周所致。解决运行错误的首要步骤就是错误定位,即找到出错的位置,才能予以纠正。通常我们先设法确定错误的大致位置,然后通过C 语言提供的调试工具找出真正的错误。 为了确定错误的大致位置,可以先把程序分成几大块,并在每一块的结束位置,手工计算一个或几个阶段性结果,然后用调试方式运行程序,到每一块结束时,检查程序运行的实结果与手工计算是否一致,通过这些阶段性结果来确定各块是否正确。对于出错的程序块,可逐条仔细检查各语句,找出错误所在。如果出错块程序较长,难以一下子找出错误,可以进一步把该块细分层更小的块,按照上述步骤进一步检查。在确定了大致出错位置后,如果无法直接看出错误,可以通过单步运行相关位置的几条语句,逐条检查,一定能找出错误的语句。 当程序出现计算结果有时正确有时不正确的情况时,其原因一般是算法对各种数据处理情况考虑不全面。解决办法最好多选几组典型的输入数据进行测试,除了普通的数据外,还应包含一些边界数据和不正确的数据。比如确定正常的输入数据范围后,分别以最小值、最大值、比最小值小的值和比最大值大的值,多方面运行检查自己的程序。 附录2 程序调试的方法 对程序设计者来说,不仅要会编写程序,还要上机调试通过。初学者的程序往往不是一次就能顺利通过,即使一个有经验的程序员也常会出现某些疏忽。上机的目的不仅是验证程序的正确性,还要掌握程序调试的技术,提高动手能力。程序的调试具有很强的技术性和经验性,其效率高低在很大的程度上依赖于程序设计者的经验。有经验的人很快就能发现错误,而有的人在计算机显示出错误信息并告诉他哪一行有错之后还找不出错误所在。所以初学者调通一个程序往往比编写程序花的时间还多。调试程序的经验固然可以借鉴他人的,但更重要的是靠实践来积累。调试程序是程序设计课程的一个重要环节。上机之前要做好程序调试的准备工作。程序调试的准备工作包括熟悉程序的运行环境和各个程序设计阶段为程序调试所做的准备。 上机前要先熟悉程序运行的环境 一个C语言源程序总是在一定的硬件和软件环境支持下进行编辑、编译、连接和运行的,而这其中的每一步都直接影响程序调试的效率。所以初学者必须了解所使用的计算机系统的基本操作方法,学会使用该系统,了解在该系统上如何编辑、编译、连接和运行一个C语言程序。上机时需要输入和修改程序,不同的操作系统提供的编辑程序是不同的。如果对编辑程序的基本功能和操作不熟悉,就很难使用好这个工具,那么在输入和修改程序中就会遇到很多困难,往往越该越乱,甚至因为不存盘的误操作而使修改、调试的工作前功尽弃。更有甚者,由于初学者对操作系统或编辑程序的操作命令不熟悉而误删了一个正在调试或已经调试好的程序,就不得不重新输入、调试,浪费了许多时间。所以在上机调试之前,必须认真了解程序运行的环境,了解常用的一些操作命令,这样上机调试程序时效率就会大大提高。 程序设计过程中要为程序调试做好准备 1(采用模块化、结构化方法设计程序。所谓模块化就是将一个大任务分解成若干个较 功能模块”。各个模块可以由不同的人编写程小的部分,每一部分承担一定的功能,称为“ 序,分别进行编译和调试,这样可以在相对较小的范围内确定出错误,较快的改正错误并对其重新编译。不要将全部语句都写在main函数中,而要多利用函数,用一个函数完成一个单一的功能。这样既便于阅读,也便于调试。反之,如果用一个函数写出来,不仅增加了程序的复杂度,而且在调试时很难确定错误所在,即使找到了错误,改正起来也很麻烦,有时为改正一个错误有可能引起新的错误。 2(编程时要为调试程序提供足够的灵活性。程序设计是针对具体问题的,但同时应充分考虑程序调试时可能出现的的各种情况,在编写程序时要为调试中临时修改、选择输入数据的形式、个数和改变输出形式等情况提供尽可能的灵活性。要做到这一点必须使程序具有通用性。一方面,在选择和设计算法时要使其具有灵活性,另一方面数据的输入要灵活,可以采用交互式输入数据。例如排序算法、求和、求积分算法的数据个数都可以通过应答程序的提问来确定,从而为程序的调试带来了方便。 3(根据程序调试的需要,可以通过设置“分段隔离”、“设置断点”、“跟踪打印”来调试程序。对于复杂的程序可以在适当的地方设置必要的断点,这样调试程序查找问题迅速、容易。为了判断程序是否正常执行,观察程序执行路径和中间结果的变化情况,可以在适当的地方打印出必要的中间结果,通过这些中间结果可以观察程序的执行情况。调试结束后再将断点、打印中间结果的语句删掉。 4(要精心地准备调试程序所用的数据。这些数据包括程序调试时要输入的具有典型性和代表性的数据及相应的预期结果。例如,选取适当的数据保证程序中每条可能的路径都至 少执行一次并使得每个判定表达式中条件的各种可能组合都至少出现一次。要选择“边界值”,即选取刚好等于、稍小于、稍大于边界值的数据,经验表明,处理边界情况时程序最容易发生错误,例如许多程序错误出现在下标、数据结构和循环等等的边界附近。通过这些数据的验证,可以看到程序在各种可能条件下的运行情况,暴露程序错误的可能性更大,从而提高程序的可靠性。 调试程序的方法与技巧 程序调试主要有两种方法,即静态调试和动态调试。程序的静态调试就是在程序编写完以后,由人工“代替”或“模拟”计算机,对程序进行仔细检查,主要检查程序中的语法规则和逻辑结构的正确性。实践表明,有很大一部分错误可以通过静态检查来发现。通过静态调试,可以大大缩短上机调试的时间,提高上机的效率。程序的动态调试就是实际上机调试,它贯穿在编译、连接和运行的整个过程中。根据程序编译、连接和运行时计算机给出的错误信息进行程序调试,这是程序调试中最常用的方法,也是最初步的动态调试。在此基础上,通过“分段隔离”、“设置断点”、“跟踪打印”进行程序的调试。实践表明,对于查找某些类型的错误来说,静态调试比动态调试更有效,对于其他类型的错误来说刚好相反。因此静态调试和动态调试是互相补充、相辅相成的,缺少其中任何一种方法都会使查找错误的效率降低。 一、静态调试 1(对程序语法规则进行检查 (1) 语句正确性检查。保证程序中每个语句的正确性是编写程序时的基本要求。由于程序中包含大量的语句,书写过程中由于疏忽或笔误,语句写错再所难免。对程序语句的检查应注意以下几点: , 检查每个语句的书写是否有字符遗漏,包括必要的空格符是否都有。 , 检查形体相近的字符是否书写正确(例如字母o和数字0,书写时要有明显的分别。 检查函数调用时形参和实参的类型、个数是否相同。 (2) 语法正确性检查。每种计算机语言都有自己的语法规则,书写程序时必须遵守一定 的语法规则,否则编译时程序将给出错误信息。 , 语句的配对检查:许多语句都是配对出现的,不能只写半个语句。另外,语句有多 重括号时,每个括号也都应成对出现,不能缺左少右的。 , 注意检查语句顺序:有些语句不仅句法本身要正确,而且语句在程序中的位置也必 须正确。例如,变量定义要放在所有可执行语句之前, 2(检查程序的逻辑结构 (1) 检查程序中各变量的初值和初值的位置是否正确。我们经常遇到的是“累加”、“累乘”,其初值和位置都非常重要。用于累加的变量应取0初值或给定的初值,用于累乘的变量应赋初值为或给定的值。因为累加或累乘都是通过循环结构来实现的,因此这些变量赋初值语句应在循环体之外。对于多重循环结构,内循环体中的变量赋初值语句应在内循环之外;外循环体中的变量赋初值语句应在外循环之外。如果赋初值的位置放错了,那么将得不到预想的结果。 (2) 检查程序中分枝结构是否正确。程序中的分枝结构都是根据给定的条件来决定执行不同的路径的,因此在设置各条路径的条件时一定要谨慎,在设置“大于”、“小于”这些条件时,一定要仔细考虑是否应该包括“等于”这个条件,更不能把条件写反。尤其要注意的是,实型数据在运算过程中会产生误差,如果用“等于”或“不等于”对实数的运算结果进行比较,则会因为误差而产生误判断,路径选择也就错了。因此在遇到要判断实数a与b相等与否作为条件来选择路径时,应该把条件写成:if (fabs(a-b)<=1e-6),而不应该写成 if (a==b)。要特别注意条件语句嵌套时,if和else的配对关系。 (3) 检查程序中循环结构的循环次数和循环嵌套的正确性。C语言中可用for循环、while循环、do—while循环。在给定循环条件时,不仅要考虑循环变量的初始条件,还要考虑循环变量的变化规律、循环变量变化的时间,任何一条变化都会引起循环次数的变化。 (4) 检查表达式的合理与否。程序中不仅要保证表达式的正确性,而且还要保证表达式的合理性。尤其要注意表达式运算中的溢出问题,运算数值可能超出整数范围就不应该采用整型运算,否则必然导致运算结果的错误。两个相近的数不能相减,以免产生“下溢”。更要避免在一个分式的分母运算中发生“下溢”,因为编译系统常把下溢做零处理。因此分母中出现下溢时要产生“被零除”的错误。由于表达式不合理而引起的程序运行错误往往很难查找,会增加程序调试的难度。因此,认真检查表达式的合理性,是减少程序运行错误,提高程序动态调试效率的重要方面。 程序的静态调试是程序调试非常重要的一步。初学者应培养自己静态检查的良好习惯,在上机前认真做好程序的静态检查工作,从而节省上机时间,使有限的机时充分发挥作用。 二、动态调试 在静态调试中可以发现和改正很多错误,但由于静态调试的特点,有一些比较隐蔽的错误还不能检查出来。只有上机进行动态调试,才能够找到这些错误并改正它们。 1(编译过程中的调试 编译过程除了将源程序翻译成目标程序外,还要对源程序进行语法检查。如果发现源程序有语法错误,系统将显示错误信息。用户可以根据这些提示信息查找出错误性质,并在程序中出错之处进行相应的修改。有时我们会发现编译时有几行的错误信息都是一样的,检查这些行本身没有发现错误,这时要仔细检查与这些行有关的名字、表达式是否有问题。例如,因为程序中数组说明语句有错,这时,那些与该数组有关的程序行都会被编译系统检查出错。这种情况下,用户只要仔细分析一下,修改了数组说明语句的错误,许多错误就会同时没有了。对于编译阶段的调试,要充分利用屏幕给出的错误信息,对它们进行仔细分析判断。只要注意总结经验,使程序通过编译是不难做到的。 2(连接过程的调试 编译通过后要进行连接。连接的过程也有查错的功能,它将指出外部调用、函数之间的联系及存储区设置等方面的错误。如果连接时有这类错误,编译系统也会给出错误信息,用户要对这些信息仔细判断,从而找出程序中的问题并改正之。连接时较常见的错误有以下几类: (1) 某个外部调用有错,通常系统明确提示了外部调用的名字,只要仔细检查各模块中与该名有关的语句,就不难发现错误。 (2) 找不到某个库函数或某个库文件,这类错误是由于库函数名写错、疏忽了某个库文件的连接等。 (3) 某些模块的参数超过系统的限制。如,模块的大小、库文件文件的个数超出要求等。 引起连接错误的原因很多,而且很隐蔽,给出的错误信息也不如编译时给出的直接、具体。因此,连接时的错误要比编译错误更难查找,需要仔细分析判断,而且对系统的限制和要求要有所了解。 3(运行过程中的调试 运行过程中的调试是动态调试的最后一个阶段。这一阶段的错误大体可分为两类: (1) 运行程序时给出出错信息。 运行时出错多与数据的输入、输出格式有关,与文件的操作有关。如果给出数据格式有错,这时要为要有关的输入输出数据格式进行检查,一般容易发现错误。如果程序中的输入 输出函数较多,则可以在中间插入调试语句,采取分段隔离的方法,很快就可以确定错误的位置了。如果是文件操作有误,也可以针对程序中的有关文件的操作采取类似的方法进行检查。 (2) 运行结果不正常或不正确 程序常见错误分析 本节就一些常见的编译错误进行分析,使是初学者尽快掌握分析错误的方法,提高上机调试程序的能力。 (1) Undefined symbol 'xxxxxx' 检查: , 程序中使用的标识符是否进行了定义。C语言规定程序中所有用到的变量必须在本函数 中先定义后使用(除非已定义为外部变量)。 , 程序中的标识符定义或引用处是否有拼写错误 (2) Possible use of 'xxxxxx' before definition 检查: , 变量引用前是否已经赋值 , 是否输入时忘记使用地址符 , 在其它语言中输入时只需写出变量名即可,而C语言中要求指明向哪个地址标识的单元 送值,因此要在输入的变量前加上符号"&"。 (3) Possible incorrect assignment 检查: , 是否把赋值号当等号使用了 , 在if、while、do-while语句语句的条件表达式中,经常遇到关系运算符"等于",应该 用"= ="表示,如果使用if (a=b) „,则编译程序将(a=b)作为赋值表达式处理,即将 b的值赋给a,然后a判断的值是否为0,如果不为0,则作为"真";若为0,则作为" 假"。这时会发生本警告。 (4) Statement missing ; 检查: , 程序中的语句是否缺少";" , 分号是C语句不可缺少的一部分,表达式语句后应有分号,如果语句后没有分号,则把 下一行也作为上一行的语句的一部分,这就出现语法错误。有时编译系统指出某行有错, 但在该行上未发现错误,此时应该检查上一行是否漏掉分号。复合语句的最后一个语句 也必须有分号。 (5)Misplaced else 检查: , 程序中else语句是否缺少与之匹配if的语句 , 程序中前面if语句是否出现语法错误 , 是否在不该加分号的地方加了分号 例如: if (a= =b) ; printf("%d",a); else printf("%d",b); 程序的本意为当a==b时输出a,否则输出b。但由于在if (a==b)后加了分号,因此if语句到此结束,则else语句找不到与之配对的if语句。 , 是否漏写了大括号 例如: if (a>b) t=a;a=b;b=t; else „; (6)if(While、Do-while)statement missing ( if (While、Do-while)statement missing ) 检查: , 括号不配对 (7)Function definition out of place 检查: , 函数定义位置是否有错 , 函数定义不能出现在另一函数内。 , 函数内的说明是否有类似于带有一个参数表的函数开始。例如,在函数中定义数组时误 用了圆括号,就会被误认为是一个函数定义。 (8)Size of structure or array not known 检查: , 表达式中是否出现未定义的结构或数组 , 定义结构或数组的语句有错 如:数组的定义要求用方括号,如果是二维数组或多维数组在定义和引用时必须将每一 维的数据分别用方括号括起来,即定义二维数组a[3,5]是错误的,而应用a[3][5]。 (9)Lvalue required 检查: , 赋值号左边是否是一个地址表达式 , 赋值号左边必须是一个地址表达式,包括数值变量、指针变量、结构引用域、间接指针 和数组分量。 例如: main( ){ char str[6]; str="china"; „ } 在编译时出错。因为str是数组名,代表数组首地址。在编译时对数组str分配了一段内存单元,因此在程序运行期间str是一个常量,不能再赋值。应该把char str[6]改为char *str。 (10)Constant expression required 检查: , #define 常量是否拼写错 , 数组的大小是否是常量 (11)Type mismatch in redeclaration of "xxxxxx" 检查: , 原文件中是否把一个已经说明的变量重新说明为另一类型。 , 一个函数被调用后是否有被说明为非整型 例如: main(){ float a,b,c; /*定义三个整型变量*/ scanf("%f%f",a,b); /*输入两个整数*/ c=max(a,b); /*调用max函数,把函数值赋给c*/ printf("%f",max); /*输出c的值*/ } float max(int x,int y){ /*定义函数max*/ float z; /*函数内说明语句,定义z*/ if (x>y) /*当x>y时把x赋给z,否则把y赋给z*/ z=x; else z=y; return(z); /*返回z值*/ } 上面的程序在编译时产生出错信息,因为max函数是实型的,而且是在main函数后才 定义。改正的方法一是在main函数中增加一个对max函数的说明,二是将max函数的定义 位置调到main函数之前。
/
本文档为【实验指导书_C语言程序设计B】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索