




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计实验指导书浙江农林大学数学实验室前言一、实验的目的学习C程序设计课程不能满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写源程序、独立上机调试、独立运行程序和分析结果。上机实验的目的,绝不仅仅是为了验证教材和讲课的内容,以及自己编写的程序的正确与否。程序设计课程上机实验的目的是:1. 加深对讲授内容的理解,尤其是一些语法规定。通过实验来掌握语法规则是行之有效的方法。2. 学会上机调试程序。通过反复调试程序掌握根据出错信息修改程序的方法。3. 通过调试完善程序。二、实验前的准备工作1. 了解所用的计算机系统(包括C编译系统)的性能和使用方法。2. 复习和掌握与本实验有关的教学内容。3. 准备好上机所需的程序,切忌不编程或抄别人的程序去上机。4. 对程序中出现的问题应事先估计,对程序中自己有疑问的地方应先作上记号,以便上机时给予注意。5. 准备好调试程序和运行程序所需的数据。三、实验任务与时间安排实验序号实验内容拟实验时间实验形式1熟悉开发环境1验证性2数据类型、运算符和表达式2验证性3顺序结构程序设计3验证性4选择结构程序设计3验证性5循环结构程序设计4验证性6数组程序设计5验证性7函数程序设计(一)3验证性8函数程序设计(二)3验证性9指针程序设计(一)3验证性10指针程序设计(二)3验证性11结构体与共用体2验证性12文件操作1验证性13综合实验3设计性四、完成实验报告完成实验后,需撰写实验报告。实验报告中应包含以下内容:1. 实验目的。2. 实验内容。3. 程序清单。4. 运行结果。5. 对运行结果的分析,以及本次调试程序所取得的经验。实验一 熟悉开发环境(验证性)(上机实验1学时)一、实验目的1. 了解Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。2. 了解在该系统上如何编辑、编译、连接和运行一个C源程序。3. 通过运行简单的C源程序,初步了解C源程序的特点。二、实验内容1. 检查自己所用的计算机系统。(1) 了解Windows资源管理器的使用方法,查找Visual C+6.0所在目录。(2) 启动“记事本”程序,掌握文本文件(后缀名为.txt)的建立方法。2. 学习进入并熟悉VC+6.0集成环境。(1) 在桌面上找到名为“Microsoft Visual C+ 6.0”的图标,或通过“开始”菜单进入Visual C+6.0,新建一个名为“实验一”的工程。(2) 熟悉VC+6.0的集成环境,了解各菜单项有哪些子菜单。3. 练习在工程“实验一”中编辑并运行简单的C源程序。(1) 新建一个C源文件Exercise1_1.c(程序见教材例1.1),注意区分大小写,在英文模式输入代码。(2) 编译、连接并运行程序,并熟悉Ctrl+F7、F7、Ctrl+F5等快捷键的作用。(3) 新建一个C源文件Exercise1_2.c (程序见教材例1.3)。运行程序,若程序有错(出现error(s),则修改后继续运行程序。当没有错误信息时,输入:2,5并按Enter键,查看运行结果。4. 新建一个C源文件Exercise1_3.c,编辑并运行一个自己编写的程序,程序的功能是求两个整数的最小者,要求如下(譬如输入:6,11):(1) 在输入两个整数之前,有语句提示“请输入两个数:”。(2) 最终输出结果为“较小数为6”。三、实验步骤1. 启动Visual C+ 6.0 单击“开始/程序/Microsoft Visual Studio6.0/Microsoft Visual C+ 6.0”,得到Visual C+ 6.0启动后的用户界面,如图1-1所示。*2. 创建新工程(1) 单击菜单“文件/新建”,显示“新建”对话框,如图1-2所示。(2) 在此对话框的列表栏中,选择“Win32 Console Application”(Win32控制台应用程序)。在“工程名称”栏中输入一个工程名,如“实验一”。在“位置”栏选择(或输入)工程所在的路径,如图中所示“D:C实验实验一”。单击“确定”按钮。(3) 再单击的“Win32 Console Application-步骤1 共1步” 对话框中选择一个空工程(An empty project)单选项。然后单击“完成(Finish)”按钮,如图1-3所示。(4)在“新建工程信息”对话框中单击“确认”按钮,完成工程创建过程。图1-1 Visual C+ 6.0用户界面图1-2 “新建”对话框3. 创建C源程序文件(1)选择“文件”菜单项,出现一个下拉式菜单,再选择该菜单中的“新建”选项(热键为Ctrl+N),打开“新建”窗口。(2) 选择“文件”,在它的下拉列表框中选择“C+ Source File”,如图1-4所示。在右边的“文件名”栏中输入你要创建的C源程序名字,譬如“eg1_1.c”,再单击“确定”,出现编辑屏幕,如图1-5所示。点左边窗口下方的“FileView”,可以看到“实验一Files”下有3个文件夹:“Source Files”、“Header Files”和“Resource Files”。其中“Source Files”文件夹下面可以找到新创建的文件“eg1_1.c”。(3) 在“C源程序编辑”窗口下编辑C源程序。在编辑窗口键入C源程序。如图图1-3 “Win32 Console Application-Step 1 of 1” 对话框 图1-4 “新建C源文件”对话框1-6所示。4. 对源程序进行编译按热键“Ctrl+F7”或通过“组建”菜单中的“编译”命令,或使用工具栏中的“编译”工具进行编译(如图1-7所示),生成目标程序(eg1_1.obj)。在编译过程中发现的错误显示在屏幕下方的“编译”窗口中。上述程序的“编译”窗口,如图1-8所示。5. 将目标程序进行连接 编译无错误后,按热键“F7”或执行“组建”菜单中的“组建”命令或通过工具栏中的“连接”工具,连接成功后,生成可执行文件实验一.exe(如果刚开始没有新建工程“实验一”,只是新建一个源程序,得到的将是eg1_1.exe),见图1-9。图1-5 编辑C源程序窗口图1-6 编辑C源程序 编译 连接 运行图1-7 工具栏中的“编译”、“连接”、“运行”命令图1-8 “编译”窗口图1-9 “连接”窗口6. 执行程序按热键“Ctrl+F5”,或通过“组建”菜单中的“执行”命令,或通过工具栏中的“!”工具运行程序。这时,运行该可执行文件,并将结果显示在另外一个显示执行文件输出结果的窗口中,如图1-10所示。图1-10 控制台窗口7. 退出VC+6.0环境单击菜单“文件/退出”,可以退出VC+6.0环境,回到Windows环境。如何关闭/打开工作空间单击菜单“文件/关闭工作空间”,关闭工作空间。再单击菜单“文件/打开工作空间”,在弹出的对话框中选定“D:C实验实验一实验一.dsw”,单击“打开”按钮,则可打开工作空间,对已建立的工程文件进行修改。*如果只要求建立一个C源程序,可以跳过步骤2。若要求同时建立几个源文件,必须先完成步骤2。四、实验要求1. 复习教材有关内容。2. 掌握C控制台程序的开发、调试步骤。3. 完成实验报告。实验二 数据类型、运算符和表达式(验证性)(上机实验2学时)一、实验目的1. 掌握C语言的基本数据类型。2. 理解常量、变量的意义与区别。3. 理解不同类型的数据在内存中的存储形式(注意区别字符常量与字符串常量)。4. 掌握运算符的规则。5. 掌握不同数值类型的混合运算规则。二、实验内容与步骤1. 新建源文件Exercise2_1.c,比较整型数据、字符型数据以及字符串型数据的区别与联系。/*Exercise2_1.c*/#includeint main( )char c1,c2; /第3行c1=a;c2=b; /第4行printf(%c %cn,c1,c2);printf(%d,%dn,c1,c2);return 0;(1) 运行此程序。(2) 将第3行改为:int c1,c2;然后再运行程序,并观察结果是否相同。说明整型数据与字符型数据有什么关系?(3) 将第4行依次改为:c1=a;c2=b;c1=a;c2=b;每改一次后,都运行程序,观察结果。说明单引号“”能去掉吗?能改成双引号“”吗?(4) 请修改程序,使输出结果为一个笑脸符号和一个百分比符号“%”。2. 新建源文件Exercise2_2.c,体会C编译系统自动的数据类型转换,问a与a有什么区别?/*Exercise2_2.c*/#includeint main( )int a=2;float b=1.0;double c=2.5;printf(%fn,a%3+a+b-c);return 0;3. 将习题编程并上机运行。(1) 源文件如下,源文件名Exercise2_3.c/*Exercise2_3.c*/#includeint main( )int i,j,m,n;i=8;j=10;m=+i; /第7行n=j+;printf(%d,%d,%d,%dn,i,j,m,n);return 0; 运行程序,注意i,j,m,n的值,分析赋值运算符“=”与自增运算符“+”的优先级和结合性。能否找到等价的两个语句可以替代第7行的语句“m=+i;”? 将第7,8行改为:m=i+;n=+j;再次运行程序,并分析运行结果。(2) 按第3章习题6的要求编程并上机运行,源文件名Exercise2_4.c。要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为C,h, i,n, a,经过计算,使c1、c2、c3、c4、c5分别变为:G,l,m, r,e,并输出。程序提示: 定义变量;(变量应该定义成何种类型?) 赋值;(如何操作?) 输出;三、实验要求1. 复习教材有关内容。2. 完成实验报告。实验三 顺序结构程序设计(验证性) (上机实验3学时)一、实验目的1. 掌握C语言的语句。2. 掌握输入输出函数的格式。3. 掌握顺序结构的程序设计方法。二、实验内容与步骤1. 掌握各种格式转换符的正确使用方法,源文件名Exercise3_1.c。/*Exercise3_1.c*/#include int main() char c1,c2;int i1,i2;float f1,f2;double d;unsigned short u1,u2;c1=a;c2=b; /*第7行*/i1=48;i2=49; /*第8行*/f1=3.56f; f2=-6.87f; /*第9行*/d=55.5555; /*第10行*/u1=1;u2=-1;printf(c1=%c,c2=%cn,c1,c2);printf(i1=%d,i2=%dn,i1,i2);printf( 123456n);printf(f1=%6.2fnf2=%6.2fn,f1,f2);printf( 123456789ABCDEFn);printf(d1=%15.8fn,d);printf(u1=%u,u2=%un,u1,u2);return 0; (1) 运行程序并分析运行结果,特别要注意u2的输出结果。(2) 分析程序第9行为什么加字母“f”,加上有什么意义?在此基础上,修改程序的第7行:c1=a;c2=b; 分析运行结果。(3) 依次修改程序第8-10行语句,采用scanf函数接收从键盘输入的数据,特别注意double型数据的输入:scanf(%d,%d”,&i1,&i2); /输入int型数据用%?scanf(%f,%f ,&f1,&f2); /输入float型数据用%?scanf(%lf,&d); /输入double型数据用%?运行程序,输入数据如下(注意每组数据间的空格,相邻的两个用“,”隔开的数据为一组):48,49 3.56,-6.87 55.55552. 编写程序,练习小数的输出用法,源文件名Exercise3_2.c。按第3章习题7的要求编写程序并运行:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积,圆球表面积、圆球体积、圆柱体体积。用scanf输入数据,输出计算结果,输出时要有文字说明,取小数后2位数字。程序中的用PI代替。程序提示:/*Exercise3_2.c*/#define PI 3.14159 定义变量; /*变量应该定义成何种类型?*/ 输入; /*输入格式?*/ 求解; /*程序中的语句和数学公式的区别?*/ 输出; /*输出格式?*/3. 参考例3.9,用getchar函数读入两个字符给变量c1和c2,然后分别用putchar函数和printf函数输出这两个字符。源文件名Exercise3_3.c。 程序提示: /*Exercise3_3.c*/ 定义变量; /*变量应该定义成何种类型?*/ 输入; /*用getchar函数怎么输入两个字符?*/ 输出; 注意:输入两个字符时必须是连续的,两个字符之间不能有分隔字符,否则系统会把分隔字符作为第二个字符读入。(1) 变量c1,c2应定义为字符型还是整型?还是两者皆可。(2) 如想读入字符a和b给变量c1和c2,用getchar函数和scanf函数分别应该怎么读入数据?两个函数各有什么特点?(3) 要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?4.(项目拓展题)使用printf函数编写学生成绩管理系统的用户界面。源文件名Exercise3_4.c。运行结果如下:三、实验要求1. 复习教材有关内容。2. 完成实验报告。 实验四 选择结构程序设计(验证性) (上机实验3学时)一、实验目的1. 掌握关系运算符和逻辑运算符。2. 掌握 if 语句。3. 掌握 switch 语句。4. 掌握选择结构程序设计。二、实验内容与步骤 1. 求下列分段函数的输出值,程序运行中动态输入x的值,根据x所在范围决定输出值。用scanf函数输入x的值,求y的值,并用“%.2f”的格式输出。源文件名Exercise4_1.c。程序提示:/*Exercise4_1.c*/ 定义变量; /*变量应该定义成何种类型?*/ 输入; /*输入格式?*/ 求解; /*采用什么结构?*/ 输出; /*输出格式?*/2. 输入一个百分制成绩,输出成绩等级A、B、C、D、E和成绩(保留2位小数)。90分及以上为A,8089为B,7079为C,6069为D,60分以下为E。要求从键盘输入成绩,然后输出相应等级,分别用if语句和switch语句实现,参考例5.7。源文件名Exercise4_2.c和Exercise4_3.c。程序提示:(1) 使用if语句的main函数结构如下:/*Exercise4_2.c*/ 定义变量; /*变量应该定义成何种类型?*/ 输入; /*输入格式?*/ 根据不同的成绩段,得到相应的等级; /*采用if语句*/ 输出; /*输出格式?*/(2) 使用switch语句的main函数结构如下:(参考例4.6)/*Exercise4_3.c*/ 定义变量; 输入; 根据不同的成绩段,得到相应的等级; /*采用switch语句*/问:如何将一个分数段的分数转化成一个确定值?break语句是否可加可不加,将break语句去掉再试一下。 输出; 3. 输入4个整数,按由小到大顺序输出。得到正确结果后,修改程序使之按由大到小的顺序输出,输出格式“%3d”。参考例4.3,源文件名Exercise4_4.c。程序提示:/*Exercise4_4.c*/ 定义变量; /*变量应该定义成何种类型?*/ 输入; /*输入格式?*/ 将4个整数从小到大排列; /*可以采用switch语句吗?*/ 输出; 4. 输入一个不多于3位的正整数,要求输出它是几位数。源文件名Exercise4_5.c。应准备以下测试数据: 要处理的数为1位正整数; 要处理的数为2位正整数; 要处理的数为3位正整数;除此之外,程序还应当对不合法的输入作必要的处理,并给出中文提示。例如: 输入负数或零; 输入的数超过3位程序提示:/*Exercise4_5.c*/ 定义变量; /*变量应该定义成何种类型?*/ 输入; /*输入格式?*/ 判断是几位数以及不合法输入的处理; /*如何判断*/ 输出;5.(项目拓展题)在学生成绩管理系统中,使用getchar函数输入用户选择的编号,并显示结果。输入数字字符15,显示“你正使用学生成绩*子系统”,输入6,显示“你已退出系统”,输入其他数字字符,显示“输入有误,请重新输入!”。源文件名Exercise4_6.c。运行结果如下:三、实验要求1. 复习教材有关内容。2. 完成实验报告。实验五 循环结构程序设计(验证性) (上机实验4学时)一、实验目的1. 掌握“当型”和“直到型”循环结构。2. 掌握while语句和 do-while 语句并区分二者的异同。3. 掌握 for 语句。4. 掌握循环结构程序设计。二、实验内容与步骤1. 输入两个正整数m和n,求它们的最大公约数和最小公倍数。采用两种方法,辗转相除法和连续整数检测法。源文件名Exercise5_1.c和Exercise5_2.c,要求:程序提示:(1) 辗转相除法的主要算法/*Exercise5_1.c*/ 定义变量; /*变量应该定义成何种类型?*/ 输入; /*输入格式?*/ 求出最大公约数和最小公倍数; 将m,n的值分别存储在两个变量tm,tn中;若m小于n,则交换m和n的值; /*保证m大于n*/r=m%n; /*m是被除数,n是除数,r是m除以n的余数*/while(r) /*r不为0时,将原来的除数作为新的被除数,原来的余数作为新的除数,并做求余操作得到新的r值*/m=n;n=r;r=m%n;n即为最大公约数;tm*tn/n即为最小公倍数; /*为什么要借助tm,tn?为何不能直接用m*n/n ?*/ 输出; (2) 连续整数检测法的主要算法/*Exercise5_2.c*/ 定义变量; 输入; 求出最大公约数和最小公倍数;从m和n中的大的数开始往下检测,直到第一个能被两个数整除的数r为止,则r即为两个数的最大公约数; /*如何求最小公倍数?*/ 输出; 2. 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。源文件名Exercise5_3.c。程序提示:/*Exercise5_3.c*/ 定义变量; /*变量应该定义几个,对应何种类型?*/ 输入并统计个数; /*判断输入字符未结束,用(x=getchar()!=n*/*采取什么结构?*/*如何判断数字字符?*/ 输出; 3. 编程求1到n中能被3或7整除的数之和,参考例5.3。分别用for循环语句和while循环语句完成本题。源文件名Exercise5_4.c和Exercise5_5.c。4. 在正整数中找出被3,5,7除余数分别为1,1,5的最小正整数。源文件名Exercise5_6.c。5. (百钱百鸡问题)100元钱买100只鸡。其中公鸡5元/只,母鸡3元/只,小鸡1元3只,问公鸡,母鸡和小鸡各多少只?要求用二重循环和三重循环实现。源文件名Exercise5_7.c和Exercise5_8.c。程序提示: 公鸡,母鸡和小鸡最多为多少只? 三种鸡的数量有什么关系?6. (素质拓展题)1、2、3这3个数字,能组成多少个互不相同且无重复数字的三位正整数?输出符合条件的所有3位数和个数。源文件名Exercise5_9.c。程序提示: 定义变量i,j,k分别表示百位,十位,个位,则i,j,k应该定义成何种数据类型,取值范围为? i,j,k互不相同如何表示?运行结果如下:7. (素质拓展题)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。源文件名Exercise5_10.c。程序提示: 定义变量n,i,j,k分别表示三位数及对应的百位,十位,个位,则i=n/100,j=?,k=? 各位数字立方和等于该数本身如何表示?运行结果如下:三、实验要求1. 复习教材有关内容。2. 完成实验报告。实验六 数组程序设计(验证性) (上机实验5学时)一、实验目的1. 掌握一维数组和多维数组的定义。2. 掌握对数组的引用规则。3. 理解多维数组的特殊性。4. 掌握字符数组和字符串。二、实验内容与步骤1. 用选择法对5个整数从小到大排序,5个整数用scanf函数输入,并将排序后的结果采用“%3d”的格式输出。参考例6.3,源文件名Exercise6_1.c。.程序提示: 定义变量和数组; /*数组长度有什么要求?*/ 输入5个整数放到数组中; /*如何输入?*/ 输出5个整数; 选择排序;for(i=1;i5;i+) /*对应数组声明int a6的情况*/min=i; /*min是最小数所在位置的下标*/for(j=i+1;jaj) min=j; /*扫描后面的元素,若有更小的数,更新最小数的下标min*/if(min!=i) 交换ai与amin; /*若min有更新,则将最小数移到数组最前面*/ 输出排序后的5个整数;2. 将一个整型数组右移一位,输出移动后的结果。源文件名Exercise6_2.c。例如,1 2 3 4 5 右移一位后的结果为5 1 2 3 4。程序提示: 定义变量和数组; /*数组可以直接初始化*/ 将最后一个元素取出放在一个中转变量中; 将第一个到最后一个元素后移一位; /*怎么实现?*/ 从中转变量中取出最后一个元素放到第一个元素的位置;3. 将数组a的每一行都除以该行上绝对值最大的元素,然后将数组a输出,如何输出二维数组参考例6.4。源文件名Exercise6_3.c。例如,原来的数组为:3 6 -12 -8 6 -4 输出的数组为:-0.25 -0.50 1.001.00 -0.75 0.50程序提示: 定义变量和数组; /*数组可以直接初始化*/ 找出每行绝对值最大的元素,并更新数组中每个元素值; /*考虑怎么找到绝对值最大的元素?可以通过哪个数学函数实现呢?要用到几重循环?*/ 输出; /*输出格式?*/4. 将字符串s2连接到s1的后面,不要用strcat函数。源文件名Exercise6_4.c。.程序提示: 定义变量和数组; /*数组应该定义成什么类型?*/ 输入字符串; /*用什么函数?可以用printf函数吗?*/ 连接字符串;求出s1的长度; /*用什么函数?要引入什么头文件?*/扫描s2的每个元素,一旦发现s2没有结束,就将该元素复制到s1的最后;完成复制后,在新的s1串后加上字符串结束的标记; /*用什么函数?要引入什么头文件?*/ 输出连接后的字符串;5. (素质拓展题)有一个已经排好序的数组1,4,6,9,13。现输入一个数,要求按原来的规律将它插入数组中。要求按照“%6d”的格式输出。源文件名Exercise6_5.c。.程序提示:首先判断此数是否大于最后一个数,若成立,将此数放到数组的最后一个位置。再考虑一般情况,扫描数组,确定此数的插入位置,比此数大的所有数字,依次右移一位。注意数组要尽可能地大,部分源代码如下:#includeint main()int a6=1,4,6,9,13;int number,i,j;/number为要插入的数printf(原始数组为:n);printf(n);printf(插入的数字为:);/首先判断此数是否大于最后一个数,若成立,将此数放到数组的最后一个位置if(?) else /再考虑一般情况printf(新数组为:n);return 0;运行结果如下:三、实验要求1. 复习教材有关内容。2. 完成实验报告。实验七 函数程序设计(一) (验证性) (上机实验3学时)一、实验目的1. 掌握定义函数的方法。2. 掌握函数实参与形参的对应关系以及“值传递”的方式。3. 掌握函数的嵌套调用和递归调用的方法。4. 掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。5. 学习对多文件程序的编译和运行。 二、实验内容与步骤1. 写一个判别素数的函数,在主函数输入一个正整数,输出是否为素数的信息。本程序应准备以下测试数据:17、34、2、1、0,分别输入数据,运行程序并检查结果是否正确。源文件名Exercise7_1.c。程序提示:(1) 求素数函数:int prime(int n)int i,flag; /*i循环变量,flag标记n是否为素数,1是素数,0不是素数*/if n2 flag=0; /*小于2的数一定不是素数*/ else if n=2|n=3 flag=1; /*2或3是素数*/elsefor(i=2;in/2 flag=1; /*i一直不能整除n,此时n一定是素数*/(1) 函数prime的for循环中,“i=n/2”的“=”能否去掉,去掉会出现什么问题?break语句能否去掉,试分析。(2) 试将程序与例5.9的两段代码比较,分析其异同。修改本程序,作为本题的解决方案。源文件名Exercise7_2.c和Exercise7_3.c。2. 对x=1,2,10,编写一个函数求f(x)=x-10*cos(x)-5*sin(x)的值。在主函数中输入x的值,求出最大值,并将结果以格式“%.3f”输出。要求源文件名Exercise7_4.c。程序提示:求值函数:float compute(float x)/*为什么形参和函数返回值定义成float类型?*/3. 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出统计结果。源文件名Exercise7_5.c。程序提示:(1) 统计函数:void count(char x,int y) /* char型形参数组x接收字符串,int型形参数组统计x中的字母、数字、空格和其他字符的个数*/int i,j;/*i循环变量,j数组y的下标*/ for(i=0;xi!=0;i+) /*字符串结束与否可以利用xi!=0来判断,能将其改成while语句吗?*/(2) main函数:int main()char a50,int b4; /*b0统计字母个数, b1统计数字个数, b2统计空格个数, b4统计其他字符个数*/输入字符串;输出字符串;调用count函数作统计工作;输出统计结果;问:本程序中为什么定义一个数组int b4存储统计结果,而不是变量?用变量可以吗?4.(项目拓展题)在学生成绩管理系统中,编写一个IdentityCheck函数,用于验证用户名和密码,并显示结果。假定用户名为“ZHANG”,密码为“888888”。若输入用户名不正确,显示“用户名不存在!”,若正确,则进一步要求输入密码。若密码也正确,进入学生成绩管理系统主界面。若密码有误,显示“密码错误!请重新输入:”。要求源文件名Exercise7_6.c。程序提示:void IdentityCheck() char username50,password50;printf(*欢迎使用本系统*n);printf(请输入用户名:); if(?) /验证用户名用什么函数 printf(请输入密码:); .else printf(用户名不存在!n); exit(0); /退出程序 int main( ) /main函数中调用IdentityCheck函数用于验证用户名和密码运行结果如下:若用户名和密码输入都正确,若用户名不正确,若用户名正确,但密码输入不正确,三、实验要求1. 复习教材有关内容。2. 完成实验报告。实验八 函数程序设计(二) (验证性) (上机实验3学时)一、实验目的1. 掌握定义函数的方法。2. 掌握函数实参与形参的对应关系以及“值传递”的方式。3. 掌握函数的嵌套调用和递归调用的方法。4. 掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。5. 学习对多文件程序的编译和运行。 二、实验内容与步骤1. 利用辗转相除法求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。(1) 不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后在与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。源文件名Exercise8_1.c。(2) 用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数输出它们的值。源文件名Exercise8_2.c。程序提示:(1) 不使用全局变量int main()int m,n,tm,tn;/*m,n输入的两个数,tm最大公约数,tn最小公倍数*/int gcd(int u, int v) /*求最大公约数*/int r,t;/*r存放余数,t交换时的中转变量*/.int lcm(int u, int v, int r) /*求最小公倍数*/.(2) 使用全局变量int tm,tn; /* tm最大公约数,tn最小公倍数,都是全局变量*/int main()int m,n;/*m,n输入的两个数 */void gcd(int u, int v) /*求最大公约数*/ int r,t;/*r存放余数,t交换时的中转变量*/.void lcm(int u, int v).比较不使用全局变量和使用全局变量方法的异同。并尝试用连续整数检测算法解决本题。注意:全局变量容易导致一些意想不到的问题,使用时要注意!2. 输出6-1000之间所有的完数。编写一个函数判断某个数是否为完数(完数指它的因子和等于其自身的数,如6=1+2+3,28=1+2+4+7+14,6和28都是完数)。要求在主函数中输出结果,并将结果以格式“%3d”输出。源文件名Exercise8_3. main()int i; /*i循环变量*/for(i=6;in2) swap(p1,p2);/调用swap/输出这三个数n1 *p1(1) 处理字符串的情况: 交换函数: void swap(char *p1,char *p2)char p80; /交换时的中转字符数组strcpy(p,p1); /字符串交换可使用strcpy函数 main函数:int main()char s180,s280,s380; /用于比较的字符串s1,s2,s3char *p1,*p2,*p3; /p1,p2,p3指向字符串s1,s2,s3p1=s1;/输入三个字符串,调用什么函数?if(strcmp(s1,s2)0) swap(p1,p2);/比较字符串,经交换,使它们按从小到大顺序排列/输出这三个字符串2. 将一个33的矩阵转置,用一个函数实现之。源文件名Exercise9_3.c。在一主函数中用scanf函数输入以下矩阵元素:1 3 57 9 1113 15 17在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出转置后的矩阵。 程序提示:参考例6.4(1) 使用下面函数实现矩阵转置void move(int *p) /指针变量接收二维数组第1行1列元素的地址int i,j,t;/t交换元素时的中转变量for(i=0;i3;i+)for(j=i;j3;j+) /矩阵的上三角/* 转置,通过互换*(p+3*i+j)与*(p+3*j+i)得到,*(p+3*i+j)即aij, *(p+3*j+i)即aji */(2) main函数结构如下:int main()int a33,*p,i,j;/输入矩阵/p接收二维数组第一行第1列元素的地址,有几种方法?/调用move函数实现转置/输出矩阵,要求输出3行3列的形式return 0;3. 编写一个函数,由实参传来一个字符串,统计字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述结果。源文件名Exercise9_4.c。参考实验7第2题。统计函数作如下修改:void count(char *x,int *y) /将数组改成指针进行处理 int i;for(i=0;*(x+i)!=0;i+) /有其它方法吗?/统计字母、数字、空格和其他字符的个数 (2) main函数作如下修改:int main()char a50;int i,b4=0;/*b0统计字母个数, b1统计数字个数, b2统计空格个数, b4统计其他字符个数*/输入字符串;/输出字符串;/调用count函数作统计工作;for(i=0;i4;i+) /输出统计结果printf(“%3d”,*(b+i); 三、实验要求1. 复习教材有关内容。2. 完成实验报告。实验十 指针结构设计(二)(验证性) (上机实验3学时)一、实验目的1. 掌握指向二维数组和字符数组指针变量的使用方法。2. 掌握指针数组的定义、指针数组元素的引用。3. 通过实验进一步掌握指针的概念,会定义和使用指针变量。4. 能正确使用数组的指针和指向数组的指针变量。5. 能正确使用字符串的指针和指向字符串的指针变量。二、实验内容与步骤编程序并上机调试运行程序,要求都用指针实现:1. 用一个函数实现两个字符串的比较,即自己写一个strcmp函数。函数的原型为:int strcmp(char *p1, char *p2);设p1指向字符串s1,p2指向字符串s2。要求当两个字符串都相同时返回0,若两个字符串不相等,则返回它们二者第一个不同字符的ASCII码的差值。两个字符串s1,s2由主函数输入,strcmp函数的返回值也由主函数输出。源文件名Exercise10_1.c。程序提示:使用以下函数进行比较:int strcmp(char *p1,char *p2) int i;/循环变量for() /扫描两个字符串,如果对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宿舍说话检讨书
- 四川省宜宾市2024-2025学年七年级下学期期末考试数学试卷(含答案)
- 江苏省常州市钟楼区小学英语五年级下册期末检测卷(含答案)
- 《大数据审计基础》全套教学课件
- 安徽省阜阳市2024-2025学年八年级下学期期末教学质量检测数学试卷(含答案)
- 3D打印:从原理到创新应用知到智慧树答案
- 电商平台消费者隐私数据保护策略研究
- 餐饮行业外卖模式创新案例分析
- “四史”概论知到智慧树答案
- 水银泄露处理课件
- 公司适用法律法规标准清单2025年08月更新
- 国家中医药管理局《中医药事业发展“十五五”规划》全文
- 职业健康培训材料
- 新版食品安全法前后对比-讲义课件
- 《政治经济学》(全套课件)
- 武汉理工大学计算机科学与技术学院课程教学大纲
- 应急疏散培训试题
- QC080000-2017 HSF有害物质管理程序文件全套
- 计量操作人员(通用类)考试题库(含答案)
- 大海(张雨生)原版五线谱钢琴谱正谱乐谱
- 公开课第一课素描基础入门课件
评论
0/150
提交评论