《高级语言程序设计》实验指导书《高级语言程序设计》实验指导书1实验一顺序结构程序设计………………………………2实验二逻辑结构程序设计………………………………4实验三循环控制…………………………………………7实验四数组………………………………………………11实验五函数和编译预处理………………………………18实验六指针………………………………………………25实验七结构体和共用体…………………………………28《高级语言程序设计》实验指导书2实验一顺序结构程序设计一、实验目的及要求1.掌握C语言中使用最多的一种语句——赋值语句的使用方法。2.掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。二、实验任务1.以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。#includestdio.hvoidmain(){doublea,b,c,s,v;printf(inputa,b,c:\n);scanf(%d%d%d,a,b,c);s=a*b;v=a*b*c;printf(%d%d%d,a,b,c);printf(s=%f\n,s,v=%d\n,v);}当程序执行时,屏幕的显示和要求输入形式如下:inputa,b,c:1.02.03.0此处的1.02.03.0是用户输入的数据a=1.000000b=2.000000,c=3.000000此处是要求的输出格式s=2.000000,v=6.000000相关知识:①检查程序错误时应注意几点:a)有时程序中一个错误会引发一系列错误信息,工作中不应被这种情况所迷惑,改正了一些错误后应及时对源程序重新进行编译;b)如果修改错误时增删了行,或是一个行里有多个错误,更正前面错误时增删了字符,就可能导致系统对错误定位不准,此时应该重新编译;c)系统给出的警告信息一般都说明程序中有问题,因为系统发现了可疑情况。对于警告信息同样要逐个仔细分析。除非明确认定不是问题,否则绝不能简单地认为不是错误而不予理睬。实际上,很多警告都是因为程序中确实有严重的隐含错误。d)在连接中发现新错误也需要仔细检查和修改程序。连接时发现的错误一般是由于函数名或外部变量名字写错,或者一些函数、外部变量没有定义引起的。系统不能对连接错误给以自动定位,只能提供有关的名字信息等。对于这类问题,可以借助编辑器的字符串查找命令进行定位。②正确调用scanf函数和printf函数构成输入和输出语句。2.有以下程序#includestdio.hvoidmain(){charc1,c2;intn1,n2;c1=getchar();c2=getchar();n1=c1-'0';n2=n1*10+(c2-'0');printf(%d\n,n2);《高级语言程序设计》实验指导书3}程序运行时输入:12回车,执行后输出结果是什么?相关知识:①getchar()函数用来输入两个字符分别赋给变量c1和c2;②n1=c1-'0'相当于n1='1'-'0',字符1的ASCII码值比0大一,所以n1中的值为1,c2-'0'相当于'2'-'0';③把字符串转换为多位数的算法。3.若有以下程序#includestdio.hvoidmain(){inti,j;intx,y;scanf(i=%d,j=%d,&i,&j);scanf(%d%d,&x,&y);printf(i=%d,j=%d\n,i,j);printf(%4d%4d\n,x,y);}要求给i赋值为10,j赋值为20,则应该怎样从键盘输入数字?相关知识:①在调用scanf()函数时在格式串中若包含有格式描述符之外的字符时,则要求在输入数据时在对应的位置上输入完全匹配的字符;②scanf()函数只包含格式描述符时可用跳格键Tab、空格和回车分隔数据;③在调用printf()函数时在格式串中若包含有格式描述符之外的字符时,则在输出数据时在对应的位置上输出完全匹配的字符,%d之类的格式符位置输出对应输出项的值;故输出时要注意插入适当的非格式符以便区分各个输出结果。4.计算定期存款本利之和设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。三、实验重点、难点1.符数据输入输出函数2.格式输入输出函数四、操作要点按Alt+R可进入Run菜单,其中Run:运行由Project/Projectname项指定的文件名或当前编辑区的文件。如果对上次编译后的源代码未做过修改,则直接运行到下一个断点(没有断点则运行到结束)。否则先进行编译、连接后才运行,其热键为Ctrl+F9。Userscreen:显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。五、注意事项1.输入输出的数据类型与所用格式说明符不一致2.输入变量时忘记使用地址符号《高级语言程序设计》实验指导书4实验二逻辑结构程序设计一、实验目的及要求1.了解C语言表示逻辑量的方法(以0代表“假”,以非代表“真”)。2.学会正确使用逻辑运算符和逻辑表达。3.熟练掌握if语句和switch语句.4.学习调试程序。二、实验任务1源程序中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值。#include“stdio.h”voidmain(){inta,b,c;scanf(%d%d%d,a,b,c);if((ab)&&(ac))if(bc)printf(min=%d\n,b);elseprintf(min=%d\n,c);if((ab)&&(ac))printf(min=%d\n,a);}再次运行程序,输入为“2,1,3”,程序输出却是“min=2”。用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回车或Tab键)。改正输入数据的分隔方式后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:#include“stdio.h”voidmain(){inta,b,c;scanf(%d%d%d,&a,&b,&c);if((ab)&&(ac))printf(min=%d\n,a)elseif((ba)&&(bc))printf(min=%d\n,b);elseif((ca)&&(cb))printf(min=%d\n,c);elseprintf(Nofindminimum\n);}上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。另外,注意程序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效地提高程序的可读性。相关知识:①类似abc表达式的表示方法;②if语句的嵌套;③调试工具的使用。④求最值的简单算法。《高级语言程序设计》实验指导书52.参考上一题,编写一个C程序,求a、b、c、d四个数中的最大者。编程点拨:①多定义一个变量,并一开始令变量max=a;②if(maxb)max=b;其余多个数据中求最值依此类推。3.输入4个整数,要求按由小到大顺序输出。得到正确结果后,修改程序使之按由大到小顺序输出。相关知识:①输入函数scanf()的使用;②简单的排序算法;③通过中间变量t交换a和b值的方法:t=a;a=b;b=t;。4.根据以下函数关系,对输入的每个x值,计算出相应的y值。#include#includevoidmain(){floatx,y;scanf(%f,&x);if()y=;elseif()y=;elseprintf(x=%f,y=%f,x,y);}相关知识点:if语句的嵌套;数学函数的调用方式。5模仿第4题,写程序实现以下函数:)10(113)101(12)1(xxxxxxy用scanf函数输入x的值,求y值。运行程序,输入x的值(分别为x1、1≤x10、x10三种情况),检查输出的y值是否正确。相关知识:①用if的嵌套实现分段函数;②比较运算符的正确使用;③算术运算符*的正确使用。6.阅读分析以下程序的功能。#includestdio.hvoidmain(){intchoice;intvalue;printf(Convert:\n);/*显示菜单*/printf(1:decimaltohexadecimal\n);printf(2:hexadecimaltodecimal\n);printf(3:decimaltooctal\n);)sin(2||12xxeyx4310xx当x取其他值时《高级语言程序设计》实验指导书6printf(4:octaltodecimal\n);printf(enteryourchoice:);scanf(%d,&choice);switch(choice){case1:/*选中1时处理*/printf(enterdecimalvalue:);scanf(%d,&value);printf(%dinhexadecimalis:%x\n,value,value);break;case2:/*选中2时处理*/printf(enterhexadecimalvalue:);scanf(%x,&value);printf(%xindecimalis:%d\n,value,value);break;case3:/*选中3时处理*/printf(enterdecimalvalue:);scanf(%d,&value);printf(%dinoctalis:%o\n,value,value);break;case4:/*选中4时处理*/printf(enteroctalvalue:);scanf(%o,&value);printf(%oindecimalis:%d\n,value,value);break;}}相关知识:①用switch语句实现菜单的方法;②数制转换的方法。7.模仿第6题,要求对输入的数字1~7转换成文字星期几,对其它数字不转换。例如,输入5时,程序应该输出Friday。①编辑、调试和运行该程序,然后输入4。其输出结果是什么?为什么是这样的结果?②该程序有哪些错误?如何修改?相关知识:①switch语句的正确使用;②break在switch语句中的作用。三、实验重点、难点1.表达式2.选择型程序设计语句3.逻辑表达式四、操作要点按Alt+C可进入Compile菜单,Buildall:重新编译项目里的所有文件,并进行装配生成.EXE文件。该命令不作过时检查。五、注意事项1.误把“=”作为关系运算符“等于”2.没有注意大写字母和小写字母代表不同的标识符3.当一个复合语句中使用多层括号时,常出现大括号不配对的现象。《高级语言程序设计》实验指导书7实验三循环控制一、实验目的及要求1.熟悉掌握用分for语句,while语句和do_while语句实现循环的方法。2.掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。二、实验任务1.下面程序求1+…+100,填空,实现该功能。#includestdio.hvoidmain(){ints,i;s=0;/*第5行*/for()s=s+i;printf(1+...+100=%d\n,s);}思考:(1)第5行能不能去掉?其作用是什么?(2)不用for语句,用while语句改写该程序,实现同样的功能。2.比较下列两个程序。(验证)#includestdio.hvoidmain(){inti,n,sum=0;scanf(%d,&i);n=i;while(i=10){sum+=i;i++;}printf(%d+...+10=%d,n,sum);}#includestdio.hvoidmain(){inti,n,sum=0;scanf(%d,&i);n=i;do{sum+=i;i++;}while(i=