《2022年高级语言程序设计实验教案.docx》由会员分享,可在线阅读,更多相关《2022年高级语言程序设计实验教案.docx(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品_精品资料_资料word 精心总结归纳 - - - - - - - - - - - -2022 2022 学年第 2 学期高级语言程序设计试验教案教 学 院 ( 部 )运算机学院教研室基础教研室授课班级授课教师职称职务教材名称C程序设计谭浩强主编2022 年 2 月 11 日可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 1 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_试验一次序结构程序设计一、试验目的及要求1. 把握 C 语言中使用最多的一种语句赋值语句的使用方法.2
2、. 把握各种类型数据的输入输出的方法,能正确使用各种格式转换符.二、试验学时4 学 时 三、试验任务1.以下 c30101.c 程序多处有错. 要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改.#include voidmain doublea,b,c,s,v; printfinput a,b,c:n; scanf%d%d%d,a,b,c;s=a*b; v=a*b*c;printf%d%d%d,a,b,c;printfs=%fn,s,v=%dn,v;当程序执行时,屏幕的显示和要求输入形式如下:input a,b,c:1.02.03.0此处的 1.0 2.0 3.0 是用户输入的数
3、据a=1.000000b=2.000000,c=3.000000此处是要求的输出格式s=2.000000,v=6.000000相关学问:检查程序错误时应留意几点:a)有时程序中一个错误会引发一系列错误信息,工作中不应被这种情形所困惑,改正了一些错误后应准时对源程序重新进行编译.b)假如修改错误时增删了行,或是一个行里有多个错误,更正前面错误时增删了字符,就可能导致系统对错误定位不准,此时应当重新编译.c)系统给出的警告信息一般都说明程序中有问题,由于系统发觉了可疑情形.对于警告信息同样要逐个认真分析.除非明确认定不是问题,否就绝不能简洁的认为不是错误而不予理会.实际上,许多警告都是由于程序中的
4、确有严峻的隐含错误.d 在连接中发觉新错误也需要认真检查和修改程序.连接时发觉的错误一般是由于函数名或外部变量名字写错,或者一些函数、 外部变量没有定义引起的.系统不能对连接错误给以自动定位,只能供应有关的名字信息等.对于这类问题, 可以借助编辑器的字符串查找命令进行定位. 正确调用scanf 函数和 printf 函数构成输入和输出语句.2.有以下 c30102.c 程序#include voidmain char c1,c2; int n1,n2;c1=getchar;c2=getchar;n1=c1-0;n2= n1*10+c2-0;printf%dn,n2;程序运行时输入:12,执行后
5、输出结果是什么?相关学问:getchar函数用来输入两个字符分别赋给变量c1 和 c2. n1=c1-0 相当于 n1=1 -0 ,字符 1 的 ASCII 码值比 0 大一,所以 n1 中的值为1,c2-0可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 2 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_相当于 2 -0.把字符串转换为多位数的算法.3.如有以下c30103.c 程序#include void main int i,j;int x,y; scanfi=%d,j
6、=%d,&i,&j;scanf%d%d,&x,&y;printfi=%d,j=%dn,i,j;printf%4d%4dn,x,y;要求给 i 赋值为 10, j 赋值为 20,就应当怎样从键盘输入数字?相关学问: 在调用scanf函数时在格式串中如包含有格式描述符之外的字符时,就要求在输入数据时在对应的位置上输入完全匹配的字符. scanf函数只包含格式描述符时可用跳格键Tab、空格和回车分隔数据.在调用 printf函数时在格式串中如包含有格式描述符之外的字符时,就在输出数据 时在对应的位置上输出完全匹配的字符,%d 之类的格式符位置输出对应输出项的值.故输出时要留意插入适当的非格式符以便区
7、分各个输出结果.4. 运算定期存款本利之和设银行定期存款的年利率rate 为 2.25%,并已知存款期为n 年,存款本金为capital 元,试编程运算n 年后的本利之和deposit.要求定期存款的年利率rate、存款期n 和存款本金capital 均由键盘输入.四、试验重点、难点1. 符数据输入输出函数2. 格式输入输出函数五、操作要点按 Alt+R 可进入 Run 菜单 , 其中 Run :运行由 Project/Project name 项指定的文件名或当前编辑区的文件. 假如对上次编译后的源代码未做过修改, 就直接运行到下一个断点没有断点就运行到终止.否就先进行编译、连接后才运行,
8、其热键为Ctrl+F9 . User screen:显示程序运行时在屏幕上显示的结果.其热键为Alt+F5 .六、留意事项1. 输入输出的数据类型与所用格式说明符不一样2. 输入变量时遗忘使用的址符号试验二规律结构程序设计一、试验目的及要求1. 明白 C 语言表示规律量的方法(以0 代表“假” ,以非代表“真”).2. 学会正确使用规律运算符和规律表达.3. 娴熟把握if 语句和 switch 语句 .4. 学习调试程序.二、试验学时6 学时三、试验任务1 源程序 c30105.c 中包含有一些错误,调试以下程序,使之具有如下功能:输入a、b、c 三个整数,求最小值.# include“ st
9、dio.h”void main 可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 3 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_资料word 精心总结归纳 - - - - - - - - - - - - int a,b,c; scanf%d%d%d,a,b,c .ifab&ac ifbcprintfmin=%dn,b.elseprintfmin=%dn,c. ifab&ac printfmin=%dn,a.再次运行程序,输入为“2,1,3”,程序输出却是“min=2”.用单
10、步执行的方法,立刻发觉变量a、b、c 的值是不对的,缘由是程序要求输入数据的分隔符是空格(仍答应使用回车或 键).改正输入数据的分隔方式后,程序没有输出,仍是用单步执行的方法,监视程序的执行过程,发觉程序中条件设计有误,经过改正的程序如下:# include“ stdio.h”voidmain int a,b,c; scanf%d%d%d,&a,&b,&c. ifab&acprintfmin=%dn,aelse ifba&bc printfmin=%dn,b.else ifca&cb printfmin=%dn,c.elseprintfNo find minimumn.上述程序是按在三个数中仅
11、有一个最小值时才称其为最小值进行设计的.另外, 留意程序的书写格式,肯定要采纳缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效的提高程序的可读性.相关学问:类似abc 表达式的表示方法.if 语句的嵌套.调试工具的使用.求最值的简洁算法.2.参考上一题,编写一个C 程序,求a、b、 c、d 四个数中的最大者.编程点拨:多定义一个变量,并一开头令变量max=a; ifmaxbmax=b; 其余多个数据中求最值依此类推.3.输入 4 个整数,要求按由小到大次序输出.得到正确结果后,修改程序使之按由大到小次序输出.相关学问:输入函数scanf的使用.简洁的排序算法.通过中间变量t 交换
12、 a 和b 值的方法: t=a; a=b; b=t; .4.依据以下c30108.c 函数关系,对输入的每个x 值,运算出相应的y 值.可编辑资料 - - - 欢迎下载精品_精品资料_ex1y|x|20x13x4可编辑资料 - - - 欢迎下载精品_精品资料_sinx 2 当 x 取其他值时可编辑资料 - - - 欢迎下载精品_精品资料_#include#include void main float x,y;可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 4 页,共 26 页 - - - - - - - - - -可编辑资料 -
13、- - 欢迎下载精品_精品资料_资料word 精心总结归纳 - - - - - - - - - - - -scanf%f,&x;if y=;elseif ()y=;elseprintfx=%f,y=%f,x,y;相关学问点: if 语句的嵌套.数学函数的调用方式.5 仿照第 4 题,写程序实现以下函数:x x1可编辑资料 - - - 欢迎下载精品_精品资料_y2 x3x1111 xx105可编辑资料 - - - 欢迎下载精品_精品资料_用 scanf 函数输入x 的值,求 y 值.运行程序,输入 x 的值(分别为 x1 、1x10、 x 10三种情形),检查输出的y 值是否正确.相关学问:用i
14、f 的嵌套实现分段函数.比较运算符的正确使用.算术运算符* 的正确使用.6.阅读分析以下c30110.c 程序的功能.#include void main int choice; int value;printfConvert:n;/*显示菜单*/printf 1:decimal to hexadecimaln ; printf 2:hexadecimal to decimaln ; printf 3:decimal to octaln ;printf 4:octal to decimaln; printfenter your choice: ; scanf%d,&choice;switch
15、choice case 1:/*选中 1 时处理*/printfenter decimal value:; scanf%d,&value;printf%d in hexadecimal is:%xn,value,value; break;case 2:/*选中 2 时处理*/printfenter hexadecimal value:; scanf%x,&value;printf%x in decimal is:%dn,value,value; break;case 3:/*选中 3 时处理*/printfenter decimal value:; scanf%d,&value;printf%
16、d in octal is:%on,value,value; break;case 4:/*选中 4 时处理*/printfenter octal value:; scanf%o,&value;printf%o in decimal is:%dn,value,value;break;相关学问:用switch 语句实现菜单的方法.数制转换的方法.7. 仿照第 6 题,要求对输入的数字17 转换成文字星期几,对其它数字不转换.例如,可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 5 页,共 26 页 - - - - - - - - -
17、-可编辑资料 - - - 欢迎下载精品_精品资料_资料word 精心总结归纳 - - - - - - - - - - - -输入 5 时,程序应当输出Friday. 编辑、调试和运行该程序,然后输入4.其输出结果是什么?为什么是这样的结果? 该程序有哪些错误?如何修改?相关学问:switch 语句的正确使用.break 在 switch 语句中的作用.四、试验重点、难点1. 表达式2. 挑选型程序设计语句3. 规律表达式五、操作要点按 Alt+C可进入Compile 菜单 , Buildall :重新编译项目里的全部文件, 并进行装配生成.EXE 文件.该命令不作过时检查.六、留意事项1. 误
18、把 “ =作”为关系运算符“等于 ”2. 没有留意大写字母和小写字母代表不同的标识符3. 当一个复合语句中使用多层括号时,常显现大括号不配对的现象.试验三循环掌握一、试验目的及要求1. 熟识把握用语句,语句和语句实现循环的方法.2. 把握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等).二、试验学时6 学时三、试验任务1.程序 c40101.c 求 1+100,填空,实现该功能.#include void mainints,i;s=0;/*第 5 行 */ fors=s+i; printf1+.+100=%dn,s;摸索:( 1)第 5 行能不能去掉?其作用是什么?( 2)不用
19、 for 语句,用while 语句改写该程序,实现同样的功能.2. 比较以下两个程序. (验证)/*c40102_1.c*/#include voidmainint i,n,sum=0; scanf%d,&i; n=i; whilei=10sum+=i; i+;printf%d+.+10=%d,n,sum;可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 6 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_/*c40102_2.c*/#include voidmainint i,
20、n,sum=0;scanf%d,&i; n=i;dosum+=i; i+; whilei=10.printf%d+.+10=%d,n,sum;分别运行这两题,如输入 7,这两个程序的结果分别是多少?如输入12,这两个程序的结果又分别是多少?比较为什么会有这样的区分?3. 预习 c40103.c程序,如输入12345,分析输出结果是多少?上机验证.#include void main longdata; scanf%ld,&data; whiledataprintf%ld,data%10; data=data/10;4. 程序 c40104.c实现求 Fibonacci数列的前n 个数.(验证、
21、调试)1n1或n2Fn可编辑资料 - - - 欢迎下载精品_精品资料_Fn 1Fn 2n3可编辑资料 - - - 欢迎下载精品_精品资料_运行程序,写出运行结果.采纳单步跟踪技术运行该程序,观看一下变量的变化.#includevoidmain long intf1, f2; int i,n;printfInputn:;/*第5 行*/scanf%d,&n;/*第 6 行*/f1=f2=1;fori=1;in;i+printf%ldt%ldn,f1,f2;/*第 9 行*/ f1=f1+f2;f2=f2+f1;摸索:( 1)f1 、f2 这两个变量为什么定义为long int型?( 2)第 5
22、行和第 6 行的相互作用,你会用这种方式来实现输入吗?( 3)留意第9 行的输出“ %ld ”中的“ 1”是字母“ L”的小写形式,不是数字 1 .5. 预习 c40105.c ,写出预习结果并上机验证.验证 #include void main inti,j,x; fori=0,x=0;i2;i+x+;forj=0;j3;j+ifj%2continue; x+;可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 7 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_ x+;prin
23、tfx=%dn, x;摸索 : 用一句话概括ifj%2语句的作用.相关学问:嵌套for 循环的执行过程及continue 语句的作用.6.程序 c40201.c 输入一批考试分数,用 1 作为终止标志,如输入大于100 分,就提示重新输入,然后运算最高分、最低分与平均分.请调试、检查程序中的错误,并改正之.#include void main intmark;intn=0 ;sum=0 ;intmax=100 ;min=0 ;for ; ; ;scanf%d, &mark; if mark 100 printf Mark 100 , Pleasereinput n ; break;if mar
24、k=-1break; n + ;sum=sum + mark ; if mark max max = mark ;if mark min min = mark ;sum=sum/ n ;printfmax =%d , min = %d, aver = %d n, max , min , sum;提示:该程序有许多错误,下面给出某些错误的说明.当求一批数中的最大值时,如已知一批数的最小值,就将这个最小值作为最大值的初始值.当求最小值时,情形相反,即如 已知这批数的最大值,就将这个最大值作为最小值的初始值.本例中求一批分数的最高分, 就最高分的初始值应当设为0,然后在程序循环中逐步的上升,直至求出
25、最高分.本例中仍要求这批分数的最低分,就最低分的初始值设为100,然后在程序循环中逐步的降低,直至求出最小值.实现“如输入大于100 分,就提示重新输入”功能的语句有错.实现“用1作为终止标志”功能的语句有错.摸索:( 1)“一批数据”是几个数据?输入的数据如何终止?程序中哪一行是实现终止这个要求的,写出该语句.( 2)程序中哪个语句是实现”如输入大于100 分,就提示重新输入”这个要求的,写出该语句.( 3)写出您的测试数据及运行结果,留意输入的数据序列中最终一个应是-1 .7.编程: 输入 20 个 1 90 的整数, 分类统计1 30、31 60、6190 的数各有多少个?编程点拨:(1
26、) count1 计 1 30 的个数, count2 计 31 60 的个数, count3 计 61 90 的个数.(2) 用 for 循环 20 次实现该程序的功能:输入一个整数x ,判定该数所在的范畴,如x是 130,就 count1 加 1.如 x 是 31 60,就 count2 加 1.如 x 是 61 90,就 count3加 1.(3) 最终,输出统计的结果.#include void main intcount1=0,count2=0,count3=0;可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 8 页,共
27、26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_资料word 精心总结归纳 - - - - - - - - - - - -inti,x;printf“ Please input 20 numbers:” ; fori=0;i20;i+scanf“ %d” ,&x;/* 补充完成程序*/*输出统计结果*/补充完成该程序.8.编程:素数是除了1 和其本身以外,不能被其他自然数整除的自然数.从键盘输入一个数,判定该数是不是素数?编程点拨:a) 输入这个数x .b) 用 for 循环 2x-1 ,用 2 x-1 的每一个数去除x ,如有一个数整除x,就说
28、明x 不是素数.否就,x 就是素数.c) 最终,将判定结果输出.#include void main inti, x;printfEnteronenaturalinteger: ; scanf%d ,&x;fori=2;ix-1;i+/* 补充完成该程序*/摸索:其实,只需要判定2x 之间的整数能否整除x 就可以判定x 是否为素数,此时,如何修改程序?9.编程:显示全部的水仙花数.谓水仙花数,是指一个3 位数,其各位数字立方和等于该数字本身.例,153 是水仙花数,由于153=1 3+53+3 3 .有两种解题思路,挑选其中之一编程实现:( 1)利用三重循环,将这三个数通过肯定的运算符连接成一
29、个3 位数,然后判定是否是水仙花数.fori=1;i=9;i+ forj=0;j=9;j+fork=0;k=9;k+留意,因水仙花是一个三位数,百位i 是从 1 开头,不能从0 开头,十位j和个数位k 可以从 0 开头.( 2)利用一个循环,对100999 范畴内的每个3 位数逐位分别后进行判定.fori=100;i999;i+a=i/100;b=i-a*100/10; c=i%10;可编辑资料 - - - 欢迎下载精品_精品资料_10.编程:输出以下图形.*可编辑资料 - - - 欢迎下载精品_精品资料_分析:这是由星号构成的5 行 5 列的三角形图形.每一行的星号数量为:1、3、5、7、9
30、.考虑两点,一是每一行上星号的生成规章,二是每一行第一个星号字符的输出位置.每一行的星号与行号有关,即2*i+1 ,其中 i 是行号.每一行的输出位置比上一行少一个空格,可以这样实现:forj=1;j=40- i;j+printf“%c”,其中i 是行号.可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 9 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_四、试验重点、难点1. 循环语句2. 循环的嵌套3. break 和 continue 语句五、操作要点Run 菜单中 Go
31、to cursor: :调试程序时使用, 挑选该项可使程序运行到光标所在行.光 标所在行必需为一条可执行语句, 否就提示错误.其热键为F4.Trace into :在执行一条调用其它用户定义的子函数时, 如用 Trace into 项, 就执行长条将跟踪到该子函数内部去执行,其热键为F7.六、留意事项1. 对应当有花括号的复合语句,遗忘加花括号2. 在不该加分号的的方加了分号3. 引用数组元素时误用圆括号4. 引用数组元素超界5. 对二维或多维数组定义和引用的方式不对6. 误以为数组名代表整个数组7. 混淆字符数组与字符指针的区分试验四数组一、试验目的及要求1. 把握一维数组和二维数组的定义、
32、赋值和输入输出的方法.2. 把握字符数组和字符串函数的使用.3. 把握与数组有关的算法(特殊是排序算法).二、试验学时6 学时三、试验任务1.调试以下c50101.c 程序,使之具有如下功能:输入10 个整数,按每行3 个数输出这些整数,最终输出10 个整数的平均值.写出调试过程.#inclue #defineN10 void main int i,aN,av.fori=0 . iN . i+ scanf%d,ai .fori=0 . iN . i+ printf%d,ai.ifi%3=0printfn .fori=0 . i.=N . i+ av+=ai .printfav=%fn,av.上
33、面给出的程序是完全可以运行的,但是运行结果是完全错误的.调试时请留意数组元素的输入问题、输出格式问题等.请使用前面试验所把握的调试工具,判定程序中的错误并可编辑资料 - - - 欢迎下载精品_精品资料_学习资料 名师精选 - - - - - - - - - -第 10 页,共 26 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品_精品资料_改正.相关学问:数组元素值的输入.求和求平均值的相关变量初始化问题.输出格式符的正确使用.数组元素的格式化输出.2.下面 c50102.c 程序是输入5 个数据,然后求它们的和并输出结果.#include void main
34、inti, a5, sum = 0; scanf%d,%d,%d,%d,%d, a ; for i = 0; i = 4; i +sum += ai;printfsum = %d n, sum;该程序中有哪些错误?如何修改?写出正确运行后的结果.相关学问: 数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作.3.有一个 3 行 4 列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号.程序c50103.c 的初始说明和输出语句如下所示,请补充完成该程序.#include void main inti, j, row, colum, max;static inta3
35、4 = 1,2,3,4, 9,8,7,6, -10,10,-5,2;printf Max = %d, Row = %d, Colum = %d n,max,row,colum;编程点拨: 初始化 row 、colum 及 max. 使用 for 循环的双重循环逐行把元素值与max 值进行比较,比较结果假如元素值比max 值大,就转变max 值,同时转变row 和 colum 的值.最终输出max, row 和 colum 的值.相关学问:二维数组的定义和初始化.使用二重循环对二维数组元素的拜访.求最值时相关变量初值的设定.4.数组中已存互不相同的10 个整数,从键盘输入一个整数,输出与该值相同
36、的数组元素下标.编程点拨:输入要查找的变量x 的值.使用循环将输入的数和数组元素逐个进行比较,如找到,就提前退出循环.依据循环是正常终止仍是提前终止来判定是否找到x.c50104.c 部分源代码:#include void main inti, x, a10=1,2,3,4,5,6,7,8,9,10;可编辑资料 - - - 欢迎下载精品_精品资料_for i=0; i=k & j=j;i- ai+1=ai;可编辑资料 - - - 欢迎下载精品_精品资料_下标 =a0123456789102018161412108642可编辑资料 - - - 欢迎下载精品_精品资料_可编辑资料 - - - 欢迎下载精品_精品资料_插入.k15可编辑资料 - - - 欢迎下载精品_精品资料_