C语言程序设计实验教案_第1页
C语言程序设计实验教案_第2页
C语言程序设计实验教案_第3页
C语言程序设计实验教案_第4页
C语言程序设计实验教案_第5页
免费预览已结束,剩余21页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级语言程序设计实验指导书实验一顺序结构程序设计一、实验目的及要求1 .掌握C语言中使用最多的一种语句一一赋值语句的使用方法。2 .掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。二、实验学时4学时三、实验任务一' L以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应 的修改。include <stdio.h>void main ()double a,b,c,s,v;printf(input a,b,c:n);scanf("%d%d%cT,a,b,c);s=a*b;v=a*b*c;%d %d”,a,b,c);pnntffs=%f

2、W,s,"v=%dir',v);)当程序执行时,屏幕的显示和要求输入形式如下:inputa,b,c:LO 2.03.0玲 此处的L0 2.0 3.0是用户输入的数据a=l.000000 b=2.000000,c=3.000000玲 此处是要求的输出格式s=2.000000,v=6.000000相关知识: 检查程序错误时应注意几点:a)有时程序中一个错误会引发一系列错误信息,工作中不应被这种情况所迷惑,改正 了一些错误后应及时对源程序重新进行编译;b)如果修改错误时增删了行,或是一个行里有多个错误,更正前面错误时增删了字符, 就可能导致系统对错误定位不准,此时应该重新编译;c)

3、系统给出的警告信息一般都说明程序中有问题,因为系统发现了可疑情况。对于警 告信息同样要逐个仔细分析。除非明确认定不是问题,否则绝不能简单地认为不是错误而不 予理睬。实际上,很多警告都是因为程序中确实有严重的隐含错误。d)在连接中发现新错误也需要仔细检查和修改程序。连接时发现的错误一般是由于函 数名或外部变量名字写错,或者一些函数、外部变量没有定义引起的。系统不能对连接错误 给以自动定位,只能提供有关的名字信息等。对于这类问题,可以借助编辑器的字符串查找 命令进行定位。 正确调用scanf函数和pnntf函数构成输入和输出语句。2 .有以下程序include <stdio.h>voi

4、d mam() char cl,c2;mt nl,ii2;cl=getcharQ;c2=getcharQ;nl=cl-'0'n2= nl*10+(c2-'0');)程序运行时输入:12回车,执行后输出结果是什么?相关知识:getchar()函数用来输入两个字符分别赋给变量cl和c2:nl=cl-O相当于nl=T-O,字符1的ASCH码值比0大一,所以中的值为b c2-'O' 相当于2-阴把字符串转换为多位数的算法。3 .若有以下程序include <stdio.h>void main。HltlJ;mt x,y;scanR"i

5、=%d,j=%cT,&i,&j);scanf(H%d%dH,&x,&y);pHntf("i=%d ,j=%dn”, i ,j);pnntf(M%4d%4dn,x,y);)要求给i赋值为10, J赋值为20,则应该怎样从键盘输入数字?相关知识:在调用scanf()函数时在格式串中若包含有格式描述符之外的字符时,则要 求在输入数据时在对应的位置上输入完全匹配的字符;scanfO函数只包含格式描述符时可用跳格键Tab.空格和回车分隔数据;在调用pnntf ()函数时在格式串中若包含有格式描述符之外的字符时,则在输出数据 时在对应的位置上输出完全匹配的字符,%

6、d之类的格式符位置输出对应输出项的值;故输 出时要注意插入适当的非格式符以便区分各个输出结果。4.计算定期存款本利之和设银行定期存款的年利率rate为2.25%,并已知存款期为年,存款本金为capital元, 试编程计算年后的本利之和deposito要求定期存款的年利率rate,存款期和存款本金 capital均由键盘输入。四、实验重点、难点1 .符数据输入输出函数2 .格式输入输出函数五、操作要点按Alt+R可进入Run菜单,其中Run:运行由Project/Project name项指定的文件名或当 前编辑区的文件。如果对上次编译后的源代码未做过修改,则直接运行到下一个断点(没有断 点则运

7、行到结束)。否则先进行编译、连接后才运行,其热键为Ctrl+F9o Uset screen:显示 程序运行时在屏幕上显示的结果。其热键为Alt+F5。六、注意事项1 .输入输出的数据类型与所用格式说明符不一致2 .输入变量时忘记使用地址符号实验二逻辑结构程序设计一、实验目的及要求1 . 了解C语言表示逻辑量的方法(以0代表“假”,以非代表“真”)。2 .学会正确使用逻辑运算符和逻辑表达。3 .熟练掌握if语句和switch语句.4 .学习调试程序。二、实验学时6学时三、实验任务1源程序中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整 数,求最小值。# include &q

8、uot;stdio.h"void )int a,b,c;scanf("%d%d%d”,a,b,c);if(a>b)&&(a>c)if(b<c)printf(',min=%dn,b);elsepiintf(”min=%dn”,c);if(a<b)&&(a<c)prmtf(nmm=%dii,a);)再次运行程序,输入为“2, 1, 3”,程序输出却是用单步执行的方法,马上 发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回 车或<Tab>键)。改正输入数据的分隔方式

9、后,程序没有输出,还是用单步执行的方法,监 视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:# include "stdio.h"void mam() int a,b,c;scanff%d%d%d&a,&b,&c);if(a<b)&&(a<c)printf(,min=%dii,a)else if(b<a)&&(b<c)printf(,mm=%dii,b);else if(c<a)&&(c<b)printf(,mm=%dii,c);elseprintf(H

10、No find mininiumXiT);)上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。另外,注意程 序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可 以有效地提高程序的可读性。相关知识:类似a<b<c表达式的表示方法;if语句的嵌套;调试工具的使用。 求最值的简单算法。2参考上一题,编写一个C程序,求a、b、c、d四个数中的最大者。编程点拨:多定义一个变量,并一开始令变量inax=a;if(maxb) max=b;其余多个数据中求最值依此类推。3,输入4个整数,要求按由小到大顺序输出。得到正确结果后,修改程序使之按由大到 小顺序

11、输出。相关知识:输入函数scanf()的使用;简单的排序算法;通过中间变量t交换a和 b 值的方法:t=a; a=b; b=t>4.根据以下函数关系,对输入的每个x值,计算出相应的y值。_ 10 < x < 1、= |x|+23 < X < 4)当x取其他值时#include #include void main() float x,y;scaiif(H%f;&x);if(')y=; else if ()y=;else pnntfTx=%f,v=%F,x,y);) 相关知识点:if语句的嵌套;数学函数的调用方式。5模仿第4题,写程序实现以下函数:x

12、(x < 1)y = J2x-l(l<x<10)3x-ll(x> 5)用scanf函数输入x的值,求y值。运行程序,输入x的值(分别为x<l、£x<10、 x210三种情况),检查输出的y值是否正确。相关知识:用if的嵌套实现分段函数;比较运算符的正确使用;算术运算符*的 正确使用。6.阅读分析以下程序的功能。#include <stdio.h> void main() mt choice;mt value;prmtf(HConveil:ii,r);/* 显示菜单*/piintff' 1 decimal to hexadecim

13、al piintff' 2:hexadeciinal to decimal s H);piint铲 31decimal to octalii ");piintff' 4:octal to decinialiiH);prmtf(Henter your choice: n);scanf(n%d,&choice);switch (choice)case 1:/*选中1时处理*/pnntf(Menter decimal value :M);scanf(H%d,&value);pnntf(,%d m hexadecimal is:%xin,value5value

14、); break;case 2: /*选中2时处理*/pnntf(Menter hexadecimal value:n);scanf("x”,&value);pHntfV'%x in decimal is:%duiH,value,value); break;case 3: /*选中3时处理*/pnntf(Menter decimal value :M);scanf(H%d,&value);pnntf(,%d in octal is:%on”,value,value); break;case 4: /*选中4时处理*/pnntf(Menter octal val

15、ue:"); scanf("%o”,&value);pnntf(,%o in decimal is:%d'din,value,value); break;)相关知识:用switch语句实现菜单的方法;数制转换的方法。7.模仿第6题,要求对输入的数字卜7转换成文字星期几,对其它数字不转换。例如, 输入5时,程序应该输出Fiiday。 编辑、调试和运行该程序,然后输入4。其输出结果是什么?为什么是这样的结 果?该程序有哪些错误?如何修改?相关知识:switch语句的正确使用;bieak在switch语句中的作用。四、实验重点、难点1 .表达式2 .选择型程序设计

16、语句3 .逻辑表达式五、操作要点按Alt+C可进入Compile菜单,Build all:重新编译项目里的所有文件,并进行装配生 成.EXE文件。该命令不作过时检查o六、注意事项1 .误把口 ”作为关系运算符“等于"2 .没有注意大写字母和小写字母代表不同的标识符3 .当一个好合语句中使用多层括号时,常出现大括号不配对的现象。实验三循环控制一、实验目的及要求1 .熟悉掌握用语句,语句和语句实现循环的方法。2 .掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 二、实验学时6学时三、实验任务1 .下面程序求1+-+100,填空,实现该功能。-include <

17、;stdio.h>void mam()(iiit s,i;s=0;/* 第 5 行 */for()s=s+i;printf(nl+.+l 00=%dn",s);)思考:(1)第5行能不能去掉?其作用是什么?(2)不用for语句,用while语句改写该程序,实现同样的功能。2 .比较下列两个程序。(验证)Sinclude <stdio. h> void main。 mt i,n,sum=0;scanf(”d”,&i);n=i;while(i<=10) sum+=i;piintfC%d+.+10=%d”,n,sum); j .include <std

18、io. h>void main。 iiit i,n,sum=0;scanfC%d”,&i);n=i; do sum+=i;i+; while(i<=10):printf("d+10=%d”,n,sum);分前运行这两题,若输入7,这两个程序的结果分别是多少?若输入12,这两个 程序的结果又分别是多少?比较为什么会有这样的区别?3 .预习下面程序,若输入12345,分析输出结果是多少?上机验证。#include<stdio.h>void main() long data;scanf(”ld”,&data);while(data) prmtf(n%

19、ld;data%10);data=data/10;)4 .下面程序实现求Fibonacci数列的前n个数。(验证、调试)(1 n = 1 或 =2Md n>3I - 1fl-2运行程序,写出运行结果:采用单步跟踪技术运行该程序,观察一下变量的变化。#include<stdio.h>void niaiii() long int fl, f2;int i,n;pnntfC'Input n:)/* 第 5 行 */scanf("%d”,&n);/* 第 6 行 */fl=f2=l;fbr(i=l;i<n;i-H-) prmtf(n%ldt%ldirf

20、l ,f2);/* 第 9 行 */fl=fl+f2;f2=f2+fl;)思考:(;)fl、f2这两个变量为什么定义为long int型?(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?(3)注意第9行的输出“ld”中的“1”是字母“L”的小写形式,不是数 字1。5 .预习下面程序,写出预习结果并上机验证。(验证)#include <stdio.h>void niain() mt ij,x;fbr(i=0.x=0;i<2;i+) x+;foi(j=Oj<3j+)continue;x+;)x+;)pnntf("x=%dW, x);)思考:用一句话概括

21、if (於2)语句的作用。相关知识:嵌套f。循环的执行过程及continue语句的作用。6 .下面程序输入一批考试分数,用-1作为结束标志,若输入大于100分,则提示重新输 入,然后计算最高分、最低分与平均分。请调试、检查程序中的错误,并改正之。#include <stdio.h>void main() mt maik;mt n=0 ; sum=0 ;mt max=100 ; min=0 ;for(;); scanf("d”,if ( mark > 100 ) printf(" Maik > 100 , Please reinput ii ”); b

22、reak;)if (niark=-l)break;n+;sum=sum + maik;if( mark > max)max = mark;if( mark < min) niiii = mark;)sum=suin/ n;priiitf(Hmax =%d , min = %d. aver = %d iif max , inin , sum); *提示:该程序有很多错误,下面给出某些错误的说明。当求一批数中的最大值时,若已 知一批数的最小值,则将这个最小值作为最大值的初始值;当求最小值时,情况相反,即若 已知这批数的最大值,则将这个最大值作为最小值的初始值。本例中求一批分数的最高分,

23、 则最高分的初始值应该设为0,然后在程序循环中逐渐地升高,直至求出最高分;本例中还 要求这批分数的最低分,则最低分的初始值设为100,然后在程序循环中逐渐地降低,直至 求出最小值。实现“若输入大于100分,则提示重新输入”功能的语句有错;实现“用T 作为结束标志”功能的语句有错。思考:(1) “一批数据”是几个数据?输入的数据如何结束?程序中哪一行是实现结束 这个要求的,写出该语句。(2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写 出该语句。(3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是7。7,编程:输入20个190的整数,分类统计130、31

24、60、6190的数各有多少个? 编程点拨:(1) count 1计130的个数,count2计3160的个数,count3计6190的个数。(2)用f。循环20次实现该程序的功能:输入一个整数x,判断该数所在的范围,若x 是130,则count 1加1;若x是3160,则count2加1:若x是6190,则count3 加L(3)最后,输出统计的结果。#include <stdio.h> void main() mt countl=0,count2=0,count3=0;int i,x;pmitf(tcPlease mput 20 numbers:”);fbr(i=0;i<2

25、0;i+) scanf,%d;&x);/*补充完成程序*/*输出统计结果*/)补充完成该程序。8 .编程:素数是除了 1和其本身以外,不能被其他自然数整除的自然数。从键盘输入一 个数,判断该数是不是素数?编程点拨:a)输入这个数x。b)用for循环2x-1,用2x-1的每一个数去除x,若有一个数整除x,则说明 x不是素数:否则,x就是素数。c)最后,将判断结果输出。#include <stdlib.h>void main() mt i, x;priiitf(MEnter one natural integer: ");scanff%dfbr(i=2;i<x-

26、l;i+) /* 补充完成该程序*/)思考:其实,只需要判断2瓜之间的整数能否整除x就可以判断x是否为素数,此 时,如何修改程序?9 .编程:显示所有的水仙花数。谓水仙花数,是指一个3位数,其各位数字立方和等于 该数字本身。例,153是水仙花数,因为153=1斗5斗33。有两种解题思路,选择其中之一 编程实现:(1)利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是 否是水仙花数。fbr(i=l;i<=9;i+)for(j=0j<=9:j+)fbi(k=0;k<=9 ;k+)注意,因水仙花是一个三位数,百位1是从1开始,不能从0开始,十位J 和个数位k可以从

27、0开始。(2) 利用一个循环,对100999范闱内的每个3位数逐位分离后进行判断。for(i=100;i<999;i+) a=i/100:b=(i-a* 100)/10;c=i%10;)10.编程:输出下列图形。*分析:这是由星号构成的5行5列的三角形图形。每一行的星号数量为:1、3、5、7、 9。考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。每 一行的星号与行号有关,即2*1+1,其中I是行号;每一行的输出位置比上一行少一个空格, 可以这样实现:for(j=lJ<=40-i;j+) pnntf(“%c"J)其中i是行号。四、实验重点、难点1

28、.循环语句2 .循环的嵌套3 . break 和 contmue 语句五、操作要点Run菜单中G。to cursor::调试程序时使用,选择该项可使程序运行到光标所在行。光 标所在行必须为一条可执行语句,否则提示错误。其热键为F40 Trace into:在执行一条调 用其它用户定义的子函数时,若用Trace into项,则执行长条将跟踪到该子函数内部去执行, 其热键为F7。六、注意事项1 .对应该有花括号的好合语句,忘记加花括号2 .在不该加分号的地方加了分号3 .引用数组元素时误用圆括号4 .引用数组元素超界5 .对二维或多维数组定义和引用的方式不对6 .误以为数组名代表整个数组7 .混淆

29、字符数组与字符指针的区别实验四数组一、实验目的及要求1 .掌握一维数组和二维数组的定义、赋值和输入输出的方法;2 .掌握字符数组和字符串函数的使用;3 .掌握与数组有关的算法(特别是排序算法)。二、实验学时6学时三、实验任务1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最 后输出10个整数的平均值。写出调试过程。#inclue <stdio.h>#defuie N 10 void main() int i,aN,av ;fbr(i=O ; i<N ; i+)scanf(H%cl,ai);fbr(i=O ; i<N ; i+) printf

30、(M%d,ai); if(i%3=0) pnntffW”);fbr(i=O ; i!=N ; i+)av+=ai;printf("av=%fn”,av);上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元 素的输入问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并 改正。相关知识:数组元素值的输入;求和求平均值的相关变量初始化问题;输出格式 符的正确使用。数组元素的格式化输出。2,下面程序是输入5个数据,然后求它们的和并输出结果。#include <stdio.h>void )iiit i, a5, sum = 0;scan

31、fC%d,%d,%d,%d,%d”,a );for (i = 0; i <= 4; i +)sum += ai;piintf(Hsum = %d n". sum);)该程序中有哪些错误?如何修改?写出正确运行后的结果。相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行 号与列号。下面程序的初始说明和输出语句如下所示,请补充完成该程序。include <stdio.h>void main() int i, j, row, colum, max;static mt a3

32、4 = 1,2,3,4, 9,8,7,6, -10,10,-5,2;printf(M Max = %d. Row = %d, Colum = %d n",max, row, colum);)编程点拨:初始化low、colum及maxo 使用for循环的双重循环逐行把元素值与max值进行比较,比较结果如 果元素值比max值大,则改变max值,同时改变row和colum的值。最后输出max, row和colum的值。相关知识:二维数组的定义和初始化;使用二重循环对二维数组元素的访问;求最值时相关变量初值的设定。4,数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元

33、 素下标。编程点拨:输入要查找的变量x的值:使用循环将输入的数和数组元素逐个进行比较, 若找到,则提前退出循环;根据循环是正常结束还是提前结束来判断是否找到X。部分源代码:#include <stdio.h>void ) mt i,x,aI0= 1,2,3,4,5,6,7,8,9,10;/*输入x变量的值*/for (i=0; i<10; i+ ) prmtf(H%4d,ai);pnntffW)/*循环查找与x相等的元素*/if ()pnntf("%diT,i); /*输出查找结论,输出下标值*/elsepnntf(MNot found %dn”,x);)5,编写程

34、序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然 后输入一个整数插入到数列中,使数列保持从大到小的顺序。编程点拨:定义数组时多开辟一个存储单元:找合适的插入位置;J=oaj>k?J=1aj>k?J=2aj>k?J=3ah>k?即 20 >15?即 18>15?即 16>15?即 14>15?S 曰结束循环while( aj>=k && j<10 )j+;丁找不到比k小的元素时也要退出循环向右移动插入点后的元素;先把a9移到a10,a8移到a9,a国移到ai+l,直到 把叫移到即:门停止移动元素。fo

35、r(i=9;i>=j;i-)ai+l=ai;下标=012345678910201816141210864215插入O部分源代码:#include <stdio.h>#defiiie N 11 void mam() nit ij.afN;printf(cTlease input 10 numbers:n);for (i=0; i<N-l; i+)scanf(«%d”,&ai);/*乱序输入 10 个整数*/)相关知识:比较排序法、选择排序法和冒泡排序法;数据元素的插入。6 .输入十个互不相同的整数并存在数组中,找出最大元素,并删除。编程点拨:求最大值所在

36、元素下标:不必用max记住最大值,只要用k记住最大值所在的元素下标;删除最大值:从最大值开始将其后面元素依次前移一个位置。下标=0123456789102816141108164206部分源代码:k=0;for (i=l; i<10; i+ )if(ak<ai)k=i;k=0;if(ak<al)真k=l;执行if(ak<a2)假k=2;不执行if(ak<a3)真k=3;执行相关知识:删除数组元素的概念;移动数组元素的算法;求最大值位置的算法。7 .以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输 出低于平均分的学生成绩,用输入负数结束输入。

37、请填空:#include <stdio.h>void niain() float x1000, sum=0.0, ave, a;int n=0, i;printf (HEnter mark : n");scanf(n%f; &a);wliile (a>=0.0 && n<1000) sum+= ;xn= ;n+;scanff%P, &a);)ave= ;printf ("Output: n");printf (Have = %fn",ave);for (i=0; i<n; i+)if( ) p

38、nntfC%fiT,)11121314158 .综合编程题:打印如下杨辉三角形131641101051编程点拨:杨辉三角形有如下特点:只有下半三角形有确定的值;第一列和对角线上的元素值都是1:其它元素值均是前一行同一列元素与前一行前一列元素之和。9调试下列程序,使之具有如下功能:任意输入两个字符串(如:"abc 123"和"china"), 并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并 输出。#include <stdio.h>#include <striiig.h>void mam() ch

39、aia10,b10;int c,d,k,ch;scaiif(H%s,&a);scanfCHs&b);printf(,a=%s,b=%sn,a,b);c=stilen(a);d=stilen(b);if(c>d)fbi(k=O;k<d;k+) ch=a k ;a k=b k; b k=ch;printf(Ha=%snM,a);printf(Hb=%sn,b);)相关知识:程序中的strleii()是库函数,功能是求字符串的长度,它的原型保存在头文 件"string.h”中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现 程序中的错误。10

40、.阅读下面的程序,然后回答后面的问题:#include <stdio.h>#include <striiig.h>void main() chai sl80,s240;int i = 0, j = 0;pnntf(" ii Please mputscanf("%s”, si);pnntf(" ii Please mput strmg2:M);scanf("%s”, s2);while (sli!=*Ojifwhile (s2j!=,0jsli+=s2|j +;sli=printf(HnNew suing: %s”, si);j高辑

41、、运行该程序,然后分别输入Country和side。请问:程序执行的结果是什么?该程序的功能是什么?相关知识:串结束符八(F;自编写库函数。1L填空完成下面程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出 两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdufg 和abceef,则输出为-1。程序如下:#include <stdio.h>void main () char strl100,str2100;int i,s;Input suing l:nM);gets(strl);pnnt$'n Input strmg 2:if,)

42、;gets(str2);(1);while(strl i=sti2i)&&(strl 11!=(2)i+;s= ;pnntf("%dn”,s);)12 .填空完成下面程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用井 号作为输入结束标志。程序如下:#iiiclude <stdio.h>#iiiclude <ctype.h> void main () mt num26 j; char c;for (i=0;i<26;i+) numi=0;while (1)!= W) /*统计从终端输入的大写字母个数*/if (isupper(c

43、) numFc-651(2);for(i=0;i<26;i+)/*输出大写字母和该字母的个数*/if (numHl )pniitf("%c:%dii”,i(3):13 .编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的 内容。以“stop”作为输入的最后一个字符串。相关知识: 字符数组的输入输出可以有两种方法:令 逐个字符输入输出。用格式符“c”输入或输出一个字符,此时输入输出函数 中的输入输出项是数组元素名,而不是字符数组名;令将整个字符串一次输入或输出。用“尸格式符,意思是输出字符串(stnng), 此时输入输出函数中的输入输出项是字符数组名,而不是

44、数组元素名。写成 下面这样是不对的:pnntf("%s",c0);gets。函数和scanf(J函数输入字符串的区别,puts。函数和pnntf()函数输出字符串 的区别; 求每个字符串的长度函数sWeii()的使用,字符串比较函数strcmp()的使用;二维数组处理多个字符串。14 .编写程序,输入字符串si和s2以及插入位置f,在字符串si中的指定位置f处插入 字符串s2。如:输入"BEUING”、“123”和位置3,则输出:”BEU23UNG123Z 四、实验重点、难点I 一维数组15 二加数加和多维数组16 字符数组五、操作要点Run菜单中G。to cur

45、sor::调试程序时使用,选择该项可使程序运行到光标所在行。光 标所在行必须为一条可执行语句,否则提示错误。其热键为F40 Trace into:在执行一条调 用其它用户定义的子函数时,若用Trace into项,则执行长条将跟踪到该子函数内部去执行, 其热键为F7。六、注意事项1 .对应该有花括号的更合语句,忘记加花括号2 .在不该加分号的地方加了分号3 .引用数组元素时误用圆括号4 .引用数组元素超界5 .对二维或多维数组定义和引用的方式不对6 .误以为数组名代表整个数组7 .混淆字符数组与字符指针的区别实验五函数与编译预处理一、实验目的及要求1 .掌握函数定义的方法;2 .掌握函数实参与

46、形参的对应关系以及“值传递”的方式;3 .掌握函数的嵌调用和递归调用的方法;4 .掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。5 .学习对多文件程序的编译和运行。二、实验学时4学时三、实验任务'1.阅读下面程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F7和F8的不 同。-include <stdio.h>void void fun(int i, intj, int k);mt x,y,z;x=y=z=6;玲 n(x,y,z);pnntff%x=%d;v=%d;z=%dir,x,v,z);)voidi, int j, iiit k)1 mt t;t=(i

47、+j+k)*2;printf(Ht=%dn,t);)2 .阅读下面程序,注意在调试时FU和F10的区别,还要注意函数调用过程中形参、 实参的关系。#include <stdio.h>void main() mt x=10,y=20;void swap (int,int);printf(M(l)m main :x=%d,y=%dn”,x,y);swap(x.y);prmtf(H(4)iii main :x=%d.y=%dn”,x,v);)void swap (int mjnt n) int temp;printf(”in main :m=%d,n=%dn”,m,n);temp=m;m

48、=n;n=temp;printf(M(3)m main :m=%d,n=%dn”,m,n);)把用户自定义函数swap。中的形式参数m和n对应改成x和y,使其与实参变量同名, 再用F7跟踪程序的运行,看看有什么变化。相关知识:形参具有“用之则建,用完则撤”的特点。在函数定义时,函数名后面圆括 号内的参数称为形参;在函数调用时,函数名后面圆括号内的参数称为实参。对于实参,在 调用函数中对其进行定义时,不仅指明它的类型,而且系统还为其分配存储单元。而对于形 参,定义时仅仅只是指明它的类型,并不在内存中为它们分配存储单元,只是在调用时才为 其分配临时存储单元,函数执行结束,返回调用函数时,该存储单元

49、立即撤销。3 .下面程序是实现求素数的,请填空完成该程序,并上机运行测试。#include <math.h>#include <stdio.h>void main() int m;/*申明求素数函数*/printfC'Please input a data m=:n);scanf(H%dH.&m);;/*调用求素数函数*/)void piiine(mt n) mt i,k;k=sqrt(n);fbr(i=2;i<=k;i+)if (n%i=O) break;if(i>=k+l)printfpThis is a prime number&quo

50、t;); else pnntfpThis isn't a prime number”);)4 .下面程序的功能是从键盘上输入的若干个数并求出最大值。请填空完成该程序。 #include <stdio.h> void mam() mt i;int s10, max;/* Findmax()函数的申明*/ printf(HInput 10 number : nH);/*输入10个数据到s数组中*/ /*调用Findmax函数用for(i=0;i<10; i+)p】nitf(”%4d”, si);printf(Hnthe max is %d H.max);)iiit Fin

51、dniax( mt x , mt n) int max.i;max=x0;fbr(i=l;i<n; i+)if(niax<xi)niax=xi;return max;)相关知识:练习形参是数组的函数申明、调用格式;爱习数组的输入方法。5,下面程序的功能是从键盘上输入的若干个数按升序排序。请调试检查该程序中的错 误,程序如下:#include <stdio.h>void maiii() mt i, k;float s100, j ;piintfV' Input number : W");for (i=0; scanf(n%f;&j); i+)si

52、=J;soit(s, i);for (k=0; k<i; k+)pnntf( H%f ; sk);pnntfTXiT);void sort( mt xn, mt n) mti, j, tempjiiin;for ( i=0; i<n-l; i+) niin=i;foi(j=i+lJ<n;j+)if (xj < xinui)muT temp=xi;xi=xniui;xniiii=temp;)错误提示:形参和实参的数据类型不一致;一般形参数组在说明时不指定数组的 长度,而仅给出类型、数组名和一对方括号;用户自定义函数sort。没有申明过。 注意:版(1 = 0;5皿吠&qu

53、ot;夕图);1+)这一行中期语句第二个表达式的使用形式,此处用 了 scanf()函数的出错来结束输出循环。请读者查一下教材后面的附录,看看什么时候 scanfO函数返回0,此时就可以结束循环。6.编写程序,实现由主函数输入叭n,按下述公式计算并输出C:;的值。加Cn =:提示:定义一个求阶层的函数,然后在主函数中调用三次即可求得。 7.阅读如下递归程序,其功能是什么?上机调试。-include <stdio.h> void maiii() int m, k;void dtoo( int n ,int r );piiiitf(MPleae mput the decimal num

54、ber:n); scanf("%d”,&m);piintff n,nPlease input a number in (2,8.16):"); scanfC%d”,&k);dtoo(m,k);)void dtoo( int n jnt r ) if(n>=r) dtoo(ii/i;r); pnntf("%d”,n%i);)8 .预习下面程序,写出预习结果,上机验证并写出分析。 变量的作用范围# define LOW 10# define HIGH 5# define CHANGE 2 int i = LOW ;#include <std

55、io.h>void niain() bit workover (int i), reset ( mt i); mt i = HIGH ;reset (i / 2);prmtf(" i = %d n ",i);reset (i = i / 2);prmtf(" i = %d n ",i);reset (i / 2);prmtf(" i = %d n ",i); workover (i);printff' i = %d n ”, i);i ) mt workover (int i) i = (i%i)*(i*i)/(2*i)

56、 + 4); printfp i = %d n i);return (i);iiit reset (int i) i = i v= CHANGE ? HIGH : LOW ;return (i);j相关知识:“变量用之不尽,一写就定匕在main。主函数中reset (i/2)和reset (i二i/2) 不同,第一个reset的i没有被赋值到,所以该函数调用结束后还保持原来的值;而第二个 reset的i被赋值了,所以函数调用结束后以前的值就没有。全局变量:在所函数外面定义 的变量,其有效范围到整个源程序结尾;局部变量:在函数内部定义的变量或在函数头部定 义的形参,其有效范围只在所定义的函数,局部变量具有“用之则建,用完则撤”的特点。 在不同函数内定义的变量同名互不干扰。如果一个源程序中的局部变量和全局变量同名,则 局部变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论