已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章 上机实验与指导第13章 实验与指导为了结合实际,强化操作,加强实践环节,激励创新意识,增强实验的针对性,提高程序设计的编程能力和调试能力,本章给出了与各章对应的实验题目,并给以必要的指导。读者也可以举一反三,根据自己的学习兴趣,将自己专业领域或生活中的某些问题,作为实验题目,创造性地解决自己面临的实际问题,提高成就感和自豪感。实验1 C程序的运行环境和运行C程序的方法一、目的要求1认识在计算机系统上编辑、编译、连接和运行C程序的步骤。2在调试程序中观察系统提示,改正编译错误或连接错误。3了解语言源程序的结构及书写格式,了解表达C语言程序的各个组成成分的术语。二、实验内容思考问题:什么是源程序?语言源程序的结构是怎样的?语言源程序的书写格式怎样?指出第1章例题的程序中哪些是注释、预处理命令、声明部分、可执行语句、函数定义、函数调用、关键字、main函数等。1练习进入C语言编程界面。输入下列源程序,进行修改、编译、连接和运行。应了解是用什么命令进行编译、连接和运行的。运行的结果是什么?程序如下:#include stdio.hmain ( ) printf(Programming is Fun.n);运行结果为: 2输入下列源程序,进行修改、编译、连接和运行。运行的结果是什么?程序如下:#include stdio.hmain ( ) printf(Programming n); printf(is Fun.n);运行结果为:运行结果比上题多一行,可知n的作用是:3输入下列源程序,进行修改、编译、连接和运行。运行的结果是什么?程序如下:#include stdio.h#include main ( ) float x; x=sin(3.141593/4); printf(%fn,x);运行结果为:语句float x; 的作用是:实验2 数据类型、运算符与表达式一、目的要求1掌握C语言的基本数据类型。2学会如何书写整型、实型常量,如何定义整型、实型变量。3掌握C语言的算术运算符、赋值运算符、逗号运算符及运算规则。4掌握表达式的求值规则。二、实验内容思考问题:数据类型、运算符、表达式在C语句中充当什么成分?什么是标识符?如何书写整型、实型、字符型常量?如何定义整型、实型、字符型变量?怎样表示字符串?如何求表达式的值?混合表达式的求值规则是怎样的?1输入下列源程序,进行修改、编译、连接和运行。分析+运算符。程序如下:#include stdio.hmain ( ) int i,j,m,n; i=8; j=10; m=+i; n=j+; printf(%d,%d,%d,%dn,i,j,m,n);运行结果为: 前+的含义是:后+的含义是:2输入下列源程序,进行修改、编译、连接和运行。分析+和-运算符。程序如下:#include stdio.hmain ( ) int i,j; i=8; j=10; printf(%d,%dn,i,j); printf(%d,%dn,i+,j-); printf(%d,%dn,i,j); printf(%d,%dn,+i,-j);运行结果为:分析如何得出此运行结果:3. 输入下列源程序,进行修改、编译、连接和运行。分析表达式的值。#include main ( ) int a=7,b=3; float x=2.5,y=4.7,z1,z2; printf(z1=%fn,x+a%3*(int)(x+y)%2/4); printf(z2=%fn,(float)(a+b)/2+(int)x%(int)y);运行结果为: 表达式x+a%3*(int)(x+y)%2/4得到这样的结果是因为:表达式(float)(a+b)/2+(int)x%(int)y得到这样的结果是因为:4. 输入下列源程序,进行修改、编译、连接和运行。分析表达式的值。#include stdio.hmain( ) int x, z; float y, w; x=(1+2, 5/2, -2*4, 17%4); y=(1.+2. , 5./2. , -2.*4.); z=(1+2, 5/2 , -2*4 , -17%4); w=(1+2, -2*4 , -17%4, 5/2); printf(x=%d,y=%f,z=%d,w=%fn, x, y, z, w); 运行结果为: 思考得出此运行结果的原因。实验3 顺序结构程序设计一、目的要求1正确使用数据输入/输出函数scanf、printf及整型、实型、字符型数据的输入/输出格式。2正确使用字符输入/输出函数getchar、putchar。3学会编写简单顺序结构的程序。二、实验内容思考问题:scanf与printf函数的格式控制字符串由什么组成?scanf与printf函数中不同数据类型对应的格式字符和附加格式说明字符是怎样的?1输入下列源程序,进行修改、编译、连接和运行。程序如下:#include main ( ) char c1,c2,x; c1=97; c2=98; printf(%c,%cn,c1,c2); printf(The following output int of c1 and c2. yes or no?n);/*下面是否输出c1和c2的数值*/ printf(Please input y:n);/*请输入字母y,从而输出*/ x=getchar( ); printf(%d,%dn,c1,c2);运行结果为:程序最后两个printf输出的结果不同,这种不同是由什么引起的:2运行下面的程序,写出运行结果。#include stdio.hmain( ) int a=5,b=7; float x=67.8564,y=-789.124; long n=1234567; char c=A; printf(a=%3d,b=%3dn,a,b); printf(x=%10.2f,y=%10.2fn,x,y); printf(n=%ldn,n); printf(c=%c or c=%d(ASCII)n,c,c); putchar(c); putchar(n);运行结果为:3编程求圆周长c、圆面积s、圆球表面积area、圆球体积v。在程序中调用scanf函数通过键盘输入半径r,输出计算结果,输出要求有文字说明,计算结果精确到小数点后两位。圆周长、圆面积、圆球表面积、圆球体积的计算公式为:c=2r, s=r2,area=4r2,v=4/3r3。算法提示: 定义符号常量PI的值为3.1416; 定义实型变量r、c、s、area、v; 提示输入Please enter r:; 读入r; 根据公式计算c=2* PI *r,s= PI *r*r,area=4* PI *r*r,v=PI *r*r*r*4/3; 打印两位小数的结果c、s、area、v。编写程序:测试结果为:rcsareav1.53.454输入一个华氏温度f,要求输出摄氏温度c。公式为c=5/9(f-32)。输出要求有文字说明,取2位小数。算法提示: 定义实型变量c、f; 提示输入Please enter f:; 读入f; 根据公式计算c; 打印两位小数的结果。编写程序:测试结果为:华氏温度f摄氏温度c100.250.523.78实验4 顺序结构程序设计(续)一、目的要求1掌握编写简单顺序结构程序的方法。2掌握表达式的求值规则。二、实验内容1输入两个正整数,求它们相除所得的商,商的整数部分、小数部分及余数。例如17除以2,其商为8.5,商的整数部分为8,小数部分为0.5,余数为1。算法提示:若商为x,则(int)x即为商的整数部分。编写程序:输入为:输出结果为:2设a=12,分析下列表达式的值,并编写一个(不是四个)程序,上机进行验证。 a+=a a-=2 a*=2+3 a/=a+a 算法提示:给a赋值后,输出第一个表达式的值;重新给a赋值后,输出第二个表达式的值;程序为:四个表达式的值分别为:3. 从键盘输入一个小写字母,把它转化为大写字母后输出。编写程序:输入为:输出结果为:实验5 选择结构程序设计一、目的要求1掌握6个关系运算符、3个逻辑运算符及运算规则。2掌握if语句的3种形式及对应的语法规则、执行流程。二、实验内容思考问题:比较运算符=与赋值运算符=有何区别?如何表示复杂条件?逻辑表达式的求值规则是怎样的?怎样比较实数相等? 1有3个整数a、b、c,由键盘输入,输出其中最大的数。算法提示: 定义整型变量a、b、c、max; 提示输入Please enter a,b,c:; 读入a、b、c; 找出a、b中的较大数存入max; 找出第3个数c与max中的较大数,并再次存入max; 3个数中的最大数就是max,打印max。编写程序:测试结果为:abcmax120030-3008892132有一函数如下:x x1y= 2x-1 ,当1x0,b2-4ac=0,b2-4ac0时有两个不相等的实根,b2-4ac=0时有两个相等的实根,b2-4ac20; 输出2位小数的结果。编写程序:方法1,用while语句:方法2,用dowhile语句:方法3,用for语句:3次测试结果,数列前20项之和sum为多少?2计算多项式的值:s=1!+2!+3!+4!+20!算法提示:该多项式迭代公式为:term=term*i,sum=sum+term。请思考哪些变量需要初始化?变量应采用什么类型?编写程序:上机运行结果为:336块砖36人搬,男搬4女搬3,小孩2人搬1砖。要求一次全搬完,问男、女、小孩各若干(人)?算法提示:设x、y、z表示男、女、小孩的人数,则有不定方程:x+y+z=364x+3y+z/2=36用穷举法,对x、y、z所有可能的组合测试出满足条件的解。x、y、z的取值范围如下:x:18,步长1;y:111,步长1;z:236,步长2。对x、y、z所有可能的组合:811(36/2)重复测试条件:4*x+3*y+z/2=36 &x+y+z=36是否成立,若成立则打印出x、y、z的值。编写程序:上机运行结果有几组解?男、女、小孩各多少人?4打印ASCII码值为4080的ASCII码值对照表。注意打印格式,如何在一行中同时打印若干列?编写程序:观察上机输出结果。输出结果为:实验8 循环结构程序设计(续)一、目的要求掌握循环结构程序设计的方法。二、实验内容1把1张100元的人民币兑换成5元、2元和1元的纸币(每种都要有)共50张,问有哪几种兑换方案?算法提示:可参考百钱百鸡问题,本题与之类似。编写程序:2韩信点兵问题:有兵一队,若五人排成一行,则末行一人;六人排成一行,则末行五人;七人排成一行,则末行四人;十一人排成一行,则末行十人,问最少有多少兵?算法提示:用兵数作循环变量进行循环测试,若满足所说的条件则输出兵数并用break退出循环,否则兵数加1继续循环。编写程序:3求100300间的所有素数。算法提示:可参考第5章的例题,采用一个for循环,将例题中的多数语句作为for的循环体。编写程序:实验9 选择、循环结构程序设计一、目的要求1掌握switch语句的语法规则、执行流程;进一步掌握选择结构程序设计的方法。2进一步掌握循环结构程序设计的方法。二、实验内容思考问题:用else if语句和switch语句都能处理同一个问题,从程序的可读性上讲,那一种更好?1给出一个百分制成绩,要求输出成绩等级、。90分以上(含90分)为;80分以上、90分以下(含80分、不含90分)为;70分以上、80分以下(含70分、不含80分)为;60分以上、70分以下(含60分、不含70分)为;60分以下(不含60分)为(使用switch语句)。算法提示: 定义百分制成绩(整型变量)score; 提示输入Please enter score:; 读入score; 构造switch表达式; 将switch表达式的值与case常量匹配,打印相应等级。编写程序:测试结果为:score打印等级score打印等级65895492771002请用switch 语句求一笔定期存款的到期利息:输入存款数、存款年数,输出到期利息。设存款利率为1年期2%,2年期2.5%,3年期2.8%,5年期3%。利息计算公式为a=prn,设:a为到期利息,p为存款数,n为年数,r为利率(使用switch语句)。算法提示: 定义实型变量a、p、r,整型变量n; 提示输入Please enter p,n:; 读入p、n; 构造switch表达式; 将switch表达式的值n与case常量匹配,得到存款利率r; 根据 p、n、r 计算利息 a=p*r*n; 输出2位小数的结果。编写程序:测试结果为:pna100011000210003100053计算多项式前n项的值:s=a+aa+aaa+aaaa+,整数a、n由键盘输入(0a9,0n9)。算法提示:该多项式迭代公式为:term=term*10+a,sum=sum+term。请思考:哪些变量需要初始化?变量应采用什么类型?请画出流程图:编写程序:输入a=2,n=4时上机运行结果为:输入a=5,n=6时上机运行结果为:输入a=1,n=8时上机运行结果为:实验10 一维数组一、目的要求1掌握一维数组的基本概念,定义一维数组和初始化一维数组的方法。2掌握一维数组的基本操作,如输入/输出、引用数组元素等。3掌握与数组有关的算法,例如找最大或最小值、排序、数列首尾颠倒等。二、实验内容思考问题:如何定义一维数组?如何初始化一维数组?int a10;定义了几个数组元素?各数组元素如何表示(引用)。1某整数数组a具有8个数组元素,用冒泡法对这些元素从小到大进行排序。8个数组元素用scanf函数输入。输入为:运行结果为:2将一个数列首尾颠倒。设该数列为1,3,6,7,9,11,15。要求按15,11,9,7,6,3,1的顺序存放并输出。算法提示:先找到数组的中点位置,然后依次将首尾元素交换。编写程序:实验11 二维数组一、目的要求1掌握二维数组的基本概念,定义二维数组和初始化二维数组的方法。2掌握二维数组的基本操作:引用数组元素、行(列)求和,整个数组的输入/输出等。二、实验内容思考问题:说出二维数组的存储结构。二维数组的输入/输出采用什么方法?1求一个56矩阵的所有靠外侧的元素之和,元素均为整数。编写程序:输入数据:运行结果为:2分别求一个44矩阵的一条对角线上的元素之和与另一条对角线上的元素之和的乘积。编写程序:输入数据:运行结果为:3打印杨辉三角形前10行。1 1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1算法提示:N-S图如图13-1所示。创建二维数组aNN,i,jfor (i =0 , i N, i+)ai0=1aii=1for (i=2;iN; i+)for (j=1;ji;j+)aij= ai-1j-1+ai-1jfor (i=0;iN;i+)for (j=0;j=i;j+)printf(%6d,aij)printf(n)图13-1 打印杨辉三角形的N-S图编写程序:运行程序。实验12 字符数组和字符串一、目的要求1掌握字符数组的基本概念,定义字符数组和初始化字符数组的方法。2掌握字符数组和字符串的关系,用字符串初始化字符数组的方法。3了解常用字符串处理函数的使用方法。二、实验内容思考问题:字符串的结构是怎样的?字符数组可以用字符串来初始化,这时要注意什么?设char word10= China,那么strlen(word)=? sizeof(word)=?(sizeof函数求表达式和类型的字节数)常用的字符串处理函数有哪些?1输出钻石图形,用字符串初始化二维字符数组编写程序。上机验证。 * * * * * * * *提示:用char a5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*;初始化。编写程序:运行程序。2输出下面几何图形。* * * * *编写程序:运行程序。3将字符数组a中下标为单号(1,3,5,)的元素值赋给另一个字符数组b,然后输出a和b的内容。编写程序:输入字符串a:输出字符串:a=b=4输入一行字符,统计其中有多少个单词。比如,输入“I am a boy”,有4个单词。算法提示:令num为单词数目(初值为0),word=0表示字符为空格,word=1表示字符不是空格,word初值为0。如果当前字符是空格,令word=0,否则如果当前字符不是空格,而word=0,说明出现新单词,令num+=1,word=1。 创建字符数组char string81; 初始化num=0, word=0; 输入一行字符string; 重复执行以下操作,直到遇到空字符:如果stringi =空格,令word=0;否则如果word=0,令word=1,num+。 输出num。编写程序:输入一行字符:统计结果:num=实验13 函数(一)一、目的要求1掌握函数、函数参数的基本概念。2定义和调用用户自定义函数的语法规则。3掌握函数声明的概念及函数声明的时机。二、实验内容思考问题:调用库函数时应在程序开头添加什么命令?什么是void函数?void函数与有返回值函数的调用格式有什么不同?形参、实参的对应有什么规定?1根据下列公式,编写一个函数fun(float x),并编写一个主函数调用它。要求在主函数中输入已知值和输出结果。x2-6x+1 x0时,当y=x3+2x-5 x0编写程序:运行结果为:2编写一个函数prt(char c,int n),重复输出给定的字符c(这里的c是),输出n次。在主函数中调用该函数,输出如下的直角三角形。函数prt(char c,int n)完成输出一行的功能,是一个void函数,有两个形参。编写程序:运行程序。实验14 函数(二)一、目的要求1了解或掌握函数的嵌套调用规则。2了解或掌握函数的递归适合用于解决什么问题及其使用方法。3掌握数组元素作函数实参、数组名作函数参数的优缺点。二、实验内容思考问题:递归算法是利用函数处理问题的技术。递归函数每一次调用都保存了形参和变量的值;然后通过逐次返回上一次调用,实现回代过程,从而解决原始问题。1用函数的嵌套编写程序计算的值,n为大于等于0的整数。编写程序:输入n=6,输出结果是:2用递归方法求n阶勒让德多项式的值,递归公式如下:1 n=0pn(x)= x ,当n=1 时 (2n-1)x-pn-1(x)-(n-1)pn-2(x)/n n1编写程序:输入x=3,n=5,输出结果为:3数组元素作函数实参,求数组5个元素(实数)的立方和。编写程序:输入为:运行结果为:4数组名作函数实参,求数组5个元素(实数)的立方和。编写程序:输入为:运行结果为:实验15 函数(三)一、目的要求1了解或掌握局部变量、全局变量的作用域和使用场合。2了解或掌握auto、register、extern和static变量的生存期和使用场合。3掌握#define命令的用法。 4掌握使用宏的方法。二、实验内容思考问题:尽量不使用全局变量的原因是什么?带参的宏在定义时需注意什么问题?1分析下面程序的运行结果,为什么会出现这种结果?#include stdio.hvoid fun(int i, int j);main( ) int i,j,x,y,n,g; i=2,j=3,g=x=5,y=9,n=7; fun(n,6); printf(g=%d;i=%d;j=%dn,g,i,j); printf(x=%d;y=%dn,x,y); fun(n,6);void fun(int i, int j) int x,y,g; g=8;x=7;y=2; printf(g=%d;i=%d;j=%dn,g,i,j); printf(x=%d;y=%dn,x,y); x=8,y=6;运行结果为:分析:2分析下面程序的运行结果,为什么会出现这种结果。#include stdio.hvoid incx(void);void incy(void);main( ) incx( ); incy( ); incx( ); incy( ); incx( ); incy( );void incx(void) int x=0; printf(x=%dt,+x);void incy(void) static int y=0; printf(ny=%dn,+y);运行结果为:分析:3分析下面程序的运行结果,为什么会出现这种结果?#include stdio.h#define MAX 3int aMAX;void fun1(void);void fun2(b );main( ) fun1( ); fun2(a); printf(n);void fun1(void) int k, t=0; for (k=0;kMAX;k+,t+) ak=t+t;void fun2(b) int k; for(k=0;k MAX;k+) printf(%d,bk);运行结果为:分析:4定义一个带参的宏,求两个整数(例如97和62)相除所得的余数。并编写main函数,输入这两个整数,输出结果。编写程序:运行结果为:5定义一个宏,将大写字母变成小写字母。并编写main函数,输入大写字母,输出由该宏转换成的小写字母。编写程序:输入大写字母A:输出结果为:实验16 指针(一)一、目的要求1掌握指针的基本概念。2掌握指针变量的定义和初始化。二、实验内容思考问题:在int a=2, *p; *p=2;中,两个*的作用有什么不同?1两个指针变量各自指向一个整型变量,请使这两个指针变量交换指向。编写程序:运行结果为:2两个指针变量各自指向一个整型变量,请交换这两个指针变量所指向的变量的值。编写程序:运行结果为:3有3个整型变量i、j、k。请编写程序,设置3个指针变量p1、p2、p3,分别指向i、j、k。然后通过指针变量使i、j、k这3个变量的值顺序交换,即原来i的值赋给j,原来j的值赋给k,原来k的值赋给i。i、j、k的原值由键盘输入,要求输出i、j、k的原值和新值。提示:可参考【例9.3】。编写程序:运行结果为:4从键盘输入3个整数给整型变量i、j、k,要求设置3个指针变量p1、p2、p3分别指向i、j、k,通过比较使p1指向3个数的最大者,p2指向次大者,p3指向最小者,然后由从大到小的顺序输出三个数。提示:*p1与*p2比较,若*p1*p2,则*p1与*p2交换;*p1与*p3比较,若*p1*p3,则*p1与*p3交换;*p2与*p3比较,若*p2*p3,则*p2与*p3交换。经过这3次比较,即可使*p1最大,*p2次之,*p3最小。编写程序:运行结果为:实验17 指针(二)一、目的要求1掌握用指针作函数参数的编程方法。2掌握使用指向函数的指针的使用方法。3掌握返回指针值的函数(函数的返回值是指针)。二、实验内容思考问题:使用指针有什么优越性?1练习指针作为函数参数。使用指针,定义一个函数,能够将main函数传递过来的3个整型数据按从小到大的顺序排好序;在main函数中输出排序的正确结果。提示:可参考【例9.4】。编写程序:运行结果为:2练习指向函数的指针。编写一个函数,求3个实数的最小者;在main函数中定义指向函数的指针变量调用它。提示:可参考【例9.6】。编写程序:运行结果为:3练习返回指针值的函数。编写一个函数,求某班级学生的某门课的最高分(整数)、最低分(整数)、平均分(实数,保留2位小数)和成绩优秀(大于和等于90分)的学生的平均分(实数,保留2位小数)。要求学生的成绩在main函数中输入,所求结果也在main函数中输出。用返回指针的函数实现。提示:可参考【例9.11】。编写程序:输入:运行结果为:实验18 指针(三)一、目的要求1掌握指针与数组的关系,通过指针访问数组。2掌握使用指针数组来处理字符串数组。3掌握指向字符串的指针。4练习使用带参的main函数。二、实验内容思考问题:用下标法和指针法访问数组元素时,各有哪些表示方法?1分别用下标法、指针法(指针变量p)访问数组a10=-2,-10,0,-1,7,99,-35,43,61,-8,用这两种方法输出数组各元素的值,每种方法输出的10个元素在一行上。编写程序:下标法:指针变量法:运行结果为:2练习指针数组。有3个字符串China、America、France,请按字母顺序(A、C、F)的逆顺序(F、C、A)输出这3个字符串。(要求用指针数组指向这三个字符串。)编写程序:运行结果为:3练习指针与字符串。在一行字符串中删除指定的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电镀加工协议书范本
- 礼品菜购买合同范本
- 绿化保洁技术协议书
- 监理区域承包协议书
- 节目编排协议书范本
- 艺人业务合同协议书
- 电销跟员工合同协议
- 心功能不全护理的临床与实践指南
- 研学合作框架协议书
- 危重病人护理质量评价标准
- (高清版)DBJ∕T 13-91-2025 《福建省房屋市政工程安全风险分级管控与隐患排查治理标准》
- 智慧渔业AI大模型数字化平台规划设计方案
- 学堂在线 遥测原理 期末考试答案
- 美团外卖的现状及发展
- 消控设施培训课件
- 学堂在线 工程伦理2.0 章节测试答案
- 2024体彩考试题目及答案大全
- 校园智能零售合作计划:自动售货机服务方案探索
- 综治中心规范化建设授课
- 群众体育管理的概述
- 专题4战略性矿产资源与我国的能源安全(课件)-2024年高考地理一轮复习辑
评论
0/150
提交评论