




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计实验教案高级语言程序设计实验指导书实验一顺序结构程序设计一、实验目的及要求1. 掌握C语言中使用最多的一种语句赋值语句的使用方法。2. 掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。二、实验学时4学时三、实验任务1.以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。#includevoidmain ( ) double a,b,c,s,v;printf(input 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);printf(s=%fn,s,v=%dn,v);当程序执行时,屏幕的显示和要求输入形式如下:2.0 3.0此处的1.0 2.0 3.0是用户输入的数据a=1.000000b=2.000000,c=3.000000此处是要求的输出格式s=2.000000,v=6.000000相关知识: 检查程序错误时应注意几点:a)有时程序中一个错误会引发一系列错误信息,工作中不应被这种情况所迷惑,改正了一些错误后应及时对源程序重新进行编译;b)如果修改错误时增删了行,或是一个行里有多个错误,更正前面错误时增删了字符,就可能导致系统对错误定位不准,此时应该重新编译;c)系统给出的警告信息一般都说明程序中有问题,因为系统发现了可疑情况。对于警告信息同样要逐个仔细分析。除非明确认定不是问题,否则绝不能简单地认为不是错误而不予理睬。实际上,很多警告都是因为程序中确实有严重的隐含错误。d) 在连接中发现新错误也需要仔细检查和修改程序。连接时发现的错误一般是由于函数名或外部变量名字写错,或者一些函数、外部变量没有定义引起的。系统不能对连接错误给以自动定位,只能提供有关的名字信息等。对于这类问题,可以借助编辑器的字符串查找命令进行定位。 正确调用scanf函数和printf函数构成输入和输出语句。2.有以下程序#includevoidmain char c1,c2;int n1,n2;c1=getchar;c2=getchar;n1=c1-0;n2= n1*10+(c2-0);printf(%dn,n2);程序运行时输入:12,执行后输出结果是什么?相关知识:getchar函数用来输入两个字符分别赋给变量c1和c2;n1=c1-0相当于n1=1 -0,字符1的ASCII码值比0大一,所以n1中的值为1,c2-0相当于2 -0;把字符串转换为多位数的算法。3.若有以下程序#includevoid main int i,j;int *,y;scanf(i=%d,j=%d,&i,&j);scanf(%d%d,&*,&y);printf(i=%d,j=%dn,i,j);printf(%4d%4dn,*,y);要求给i赋值为10,j赋值为20,则应该怎样从键盘输入数字?相关知识:在调用scanf函数时在格式串中若包含有格式描述符之外的字符时,则要求在输入数据时在对应的位置上输入完全匹配的字符;scanf函数只包含格式描述符时可用跳格键Tab、空格和回车分隔数据;在调用printf 函数时在格式串中若包含有格式描述符之外的字符时,则在输出数据时在对应的位置上输出完全匹配的字符,%d之类的格式符位置输出对应输出项的值;故输出时要注意插入适当的非格式符以便区分各个输出结果。4. 计算定期存款本利之和设银行定期存款的年利率rate为*.*%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。四、实验重点、难点1. 符数据输入输出函数2. 格式输入输出函数五、操作要点按Alt+R可进入Run菜单, 其中Run:运行由Project/Project name项指定的文件名或当前编辑区的文件。如果对上次编译后的源代码未做过修改, 则直接运行到下一个断点(没有断点则运行到结束)。否则先进行编译、连接后才运行, 其热键为Ctrl+F9。User screen:显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。六、注意事项1. 输入输出的数据类型与所用格式说明符不一致2. 输入变量时忘记使用地址符号实验二逻辑结构程序设计一、实验目的及要求1. 了解C语言表示逻辑量的方法(以0代表“假”,以非代表“真” )。2. 学会正确使用逻辑运算符和逻辑表达。3. 熟练掌握if语句和switch语句.4. 学习调试程序。二、实验学时6学时三、实验任务1 源程序中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值c)if(b再次运行程序,输入为“2,1,3”,程序输出却是“min=2”。用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回车或键)。改正输入数据的分隔方式后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:# include “stdio.h”voidmain int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a显示菜单 */printf( 1:decimal to he*adecimaln );printf( 2:he*adecimal to decimaln );printf( 3:decimal to octaln ); printf( 4:octal to decimaln);printf(enter your choice: );scanf(%d,&choice);switch (choice) case 1:/* 选中1时处理 */printf(enter decimal value:);scanf(%d,&value);printf(%d in he*adecimal is:%*n,value,value);break;case 2:/* 选中2时处理 */printf(enter he*adecimal value:);scanf(%*,&value);printf(%* in decimal is:%dn,value,value);break;case 3:/* 选中3时处理 */printf(enter decimal value:);scanf(%d,&value);printf(%d in octal is:%on,value,value);break; case 4:/* 选中4时处理 */ printf(enter octal value:);scanf(%o,&value);printf(%o in decimal is:%dn,value,value);break;相关知识:用switch语句实现菜单的方法;数制转换的方法。7. 模仿第6题,要求对输入的数字17转换成文字星期几,对其它数字不转换。例如,输入5时,程序应该输出Friday。 编辑、调试和运行该程序,然后输入4。其输出结果是什么?为什么是这样的结果? 该程序有哪些错误?如何修改?相关知识:switch语句的正确使用;break在switch语句中的作用。四、实验重点、难点1. 表达式2. 选择型程序设计语句3. 逻辑表达式五、操作要点按Alt+C可进入Compile菜单, Build all:重新编译项目里的所有文件, 并进行装配生成.E*E文件。该命令不作过时检查。六、注意事项1. 误把“=”作为关系运算符“等于”2. 没有注意大写字母和小写字母代表不同的标识符3. 当一个复合语句中使用多层括号时,常出现大括号不配对的现象。实验三循环控制一、实验目的及要求1. 熟悉掌握用语句,语句和语句实现循环的方法。2. 掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。二、实验学时6学时三、实验任务1. 下面程序求1+100,填空,实现该功能。#includevoid mainints,i;s=0;/*第5行 */for()s=s+i;printf(1+.+100=%dn,s);思考:(1)第5行能不能去掉?其作用是什么?(2)不用for语句,用while语句改写该程序,实现同样的功能。2. 比较下列两个程序。(验证)#includevoidmainint i,n,sum=0;scanf(%d,&i);n=i;do sum+=i; i+; while(i分别运行这两题,若输入7,这两个程序的结果分别是多少?若输入12,这两个程序的结果又分别是多少?比较为什么会有这样的区别?3. 预习下面程序,若输入12345,分析输出结果是多少?上机验证。#includevoid main( ) longdata;scanf(%ld,&data);while(data)printf(%ld,data%10);data=data/10;4. 下面程序实现求Fibonacci数列的前n个数。(验证、调试)运行程序,写出运行结果;采用单步跟踪技术运行该程序,观察一下变量的变化。#includevoidmain( ) long intf1, f2;int i,n;printf(Inputn:);/*第5行*/scanf(%d,&n);/*第6行*/f1=f2=1;for(i=1;i第9行*/f1=f1+f2;f2=f2+f1;思考:(1)f1、f2这两个变量为什么定义为long int 型?(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?(3)注意第9行的输出“%ld”中的“1”是字母“L”的小写形式,不是数字1。5. 预习下面程序,写出预习结果并上机验证。(验证)#includevoid main( ) inti,j,*;for(i=0,*=0;i思考:用一句话概括if(j%2)语句的作用。相关知识:嵌套for循环的执行过程及continue语句的作用。6.下面程序输入一批考试分数,用-1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。请调试、检查程序中的错误,并改正之。#include ma* )ma* = mark ;if( mark 提示:该程序有很多错误,下面给出某些错误的说明。当求一批数中的最大值时,若已知一批数的最小值,则将这个最小值作为最大值的初始值;当求最小值时,情况相反,即若已知这批数的最大值,则将这个最大值作为最小值的初始值。本例中求一批分数的最高分,则最高分的初始值应该设为0,然后在程序循环中逐渐地升高,直至求出最高分;本例中还要求这批分数的最低分,则最低分的初始值设为100,然后在程序循环中逐渐地降低,直至求出最小值。实现“若输入大于100分,则提示重新输入”功能的语句有错;实现“用-1作为结束标志”功能的语句有错。思考:(1)“一批数据”是几个数据?输入的数据如何结束?程序中哪一行是实现结束这个要求的,写出该语句。(2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写出该语句。(3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是-1。7.编程:输入*个190的整数,分类统计130、3160、6190的数各有多少个? 编程点拨:(1) count1计130的个数,count2计3160的个数,count3计6190的个数。(2) 用for循环20次实现该程序的功能:输入一个整数*,判断该数所在的范围,若*是130,则count1加1;若*是3160,则count2加1;若*是6190,则count3加1。(3) 最后,输出统计的结果。#includevoid main( ) intcount1=0,count2=0,count3=0;inti,*;printf(“Please input 20 numbers:”);for(i=0;i补充完成程序*/* 输出统计结果*/补充完成该程序。8.编程:素数是除了1和其本身以外,不能被其他自然数整除的自然数。从键盘输入一个数,判断该数是不是素数? 编程点拨:a) 输入这个数*。b) 用for循环2*-1,用2*-1的每一个数去除*,若有一个数整除*,则说明*不是素数;否则,*就是素数。c) 最后,将判断结果输出。#includevoid main( ) inti, *;printf(Enteronenaturalinteger: );scanf(%d ,&*);for(i=2;i补充完成该程序*/思考:其实,只需要判断2之间的整数能否整除*就可以判断*是否为素数,此时,如何修改程序?9.编程:显示所有的水仙花数。谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例,153是水仙花数,因为153=13+53+33 。有两种解题思路,选择其中之一编程实现:(1) 利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙花数。for(i=1;i注意,因水仙花是一个三位数,百位i是从1开始,不能从0开始,十位j和个数位k可以从0开始。(2) 利用一个循环,对100999范围内的每个3位数逐位分离后进行判断。for(i=100;i编程:输出下列图形。分析:这是由星号构成的5行5列的三角形图形。每一行的星号数量为:1、3、5、7、9。考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。每一行的星号与行号有关,即2*i+1,其中i是行号;每一行的输出位置比上一行少一个空格,可以这样实现:for(j=1;j其中i是行号。四、实验重点、难点1. 循环语句2. 循环的嵌套3. break和continue语句五、操作要点Run菜单中Go to cursor::调试程序时使用, 选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句, 否则提示错误。其热键为F4。Trace into:在执行一条调用其它用户定义的子函数时, 若用Trace into项, 则执行长条将跟踪到该子函数内部去执行, 其热键为F7。六、注意事项1. 对应该有花括号的复合语句,忘记加花括号2. 在不该加分号的地方加了分号3. 引用数组元素时误用圆括号4. 引用数组元素超界5. 对二维或多维数组定义和引用的方式不对6. 误以为数组名代表整个数组7. 混淆字符数组与字符指针的区别实验四数组一、实验目的及要求1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法;2. 掌握字符数组和字符串函数的使用;3. 掌握与数组有关的算法(特别是排序算法)。二、实验学时6学时三、实验任务1.调试下列程序,使之具有如下功能:输入*个整数,按每行3个数输出这些整数,最后输出*个整数的平均值。写出调试过程。#inclue#defineN10void main( ) int i,aN,av;for(i=0;i上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元素的输入问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。相关知识:数组元素值的输入;求和求平均值的相关变量初始化问题;输出格式符的正确使用。数组元素的格式化输出。2.下面程序是输入5个数据,然后求它们的和并输出结果。#includevoid main( )inti, a5, sum = 0; scanf(%d,%d,%d,%d,%d, a ); for (i = 0; i 该程序中有哪些错误?如何修改?写出正确运行后的结果。相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。下面程序的初始说明和输出语句如下所示,请补充完成该程序。#includevoid main( ) inti, j, row, colum, ma*; static inta34 = 1,2,3,4, 9,8,7,6, -10,10,-5,2; printf( Ma* = %d, Row = %d, Colum = %d n,ma*,row,colum);编程点拨: 初始化row、colum及ma*。 使用for循环的双重循环逐行把元素值与ma*值进行比较,比较结果如果元素值比ma*值大,则改变ma*值,同时改变row和colum的值。最后输出ma*,row和colum的值。相关知识:二维数组的定义和初始化;使用二重循环对二维数组元素的访问;求最值时相关变量初值的设定。4.数组中已存互不相同的*个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。编程点拨:输入要查找的变量*的值;使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环;根据循环是正常结束还是提前结束来判断是否找到*。部分源代码:#includevoid main( )inti, *, a10=1,2,3,4,5,6,7,8,9,10;/*输入*变量的值*/for ( i=0; i循环查找与*相等的元素*/if() printf(%dn,i);/* 输出查找结论 ,输出下标值 */elseprintf(Not found %dn,*);5.编写程序,任意输入*个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。编程点拨:定义数组时多开辟一个存储单元;找合适的插入位置;2018161412108642a0123456789下标=10k15找合适的插入位置:j=3aj k?即20 15 ? 是 j+j=1 aj k?即18 15 ? 是 j+j=2 aj k?即16 15 ? 是 j+j=3 aj k?即14 15 ? 不是,结束循环=k & j找不到比k小的元素时也要退出循环向右移动插入点后的元素;先把a9移到a10,a8移到a9,ai移到ai+1,直到把aj移到aj+1,即:i=j停止移动元素=j;i- ) ai+1=ai;2018161412108642a0123456789下标=10k15插入。部分源代码:#include#define N 11void mainint i,j,aN;printf(“Please input 10 numbers:”);for (i=0; i乱序输入*个整数*/相关知识:比较排序法、选择排序法和冒泡排序法;数据元素的插入。6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。编程点拨:求最大值所在元素下标:不必用ma*记住最大值,只要用k记住最大值所在的元素下标;删除最大值:从最大值开始将其后面元素依次前移一个位置。2816141108164206a0123456789下标=10部分源代码=0.0 & n综合编程题:打印如下杨辉三角形1111211331146411510编程点拨:杨辉三角形有如下特点:只有下半三角形有确定的值;第一列和对角线上的元素值都是1;其它元素值均是前一行同一列元素与前一行前一列元素之和。9.调试下列程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。#include d)for(k=0;k相关知识:程序中的strlen是库函数,功能是求字符串的长度,它的原型保存在头文件string.h中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。10.阅读下面的程序,然后回答后面的问题:#includevoid main( ) char s180, s240;inti = 0,j = 0;printf( n Please input string1:);scanf(%s, s1);printf( n Please input string2:);scanf(%s, s2);while (s1i!= 0 )i+;while (s2j!= 0 )s1i+=s2j +;s1i= 0;printf(n New string: %s, s1);编辑、运行该程序,然后分别输入Country 和side。请问:程序执行的结果是什么?该程序的功能是什么?相关知识: 串结束符0; 自编写库函数。11.填空完成下面程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下:#include void main ( ) char str1100,str2100;int i,s;printf(n Input string 1:n);gets(str1);printf(“n Input string 2:n”);gets(str2);i= (1);while(str1i=str2i)&(str1i!= (2)i+;s= (3);printf(%dn,s);12.填空完成下面程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下:#includevoid main ( ) int num26,i; charc;for (i=0;i统计从终端输入的大写字母个数*/if (isupper(c)(2);for (i=0;i输出大写字母和该字母的个数*/if (numi)printf(%c:%dn,i(3),numi);13.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。相关知识: 字符数组的输入输出可以有两种方法: 逐个字符输入输出。用格式符“%c”输入或输出一个字符,此时输入输出函数中的输入输出项是数组元素名,而不是字符数组名; 将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串(string),此时输入输出函数中的输入输出项是字符数组名,而不是数组元素名。写成下面这样是不对的:printf(%s,c0); gets函数和scanf函数输入字符串的区别,puts函数和printf函数输出字符串的区别; 求每个字符串的长度函数strlen的使用,字符串比较函数strcmp的使用; 二维数组处理多个字符串。14.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如:输入BEIJING、123和位置3,则输出:BEI123JING123。四、实验重点、难点1. 一维数组2. 二维数组和多维数组3. 字符数组五、操作要点Run菜单中Go to cursor::调试程序时使用, 选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句, 否则提示错误。其热键为F4。Trace into:在执行一条调用其它用户定义的子函数时, 若用Trace into项, 则执行长条将跟踪到该子函数内部去执行, 其热键为F7。六、注意事项1. 对应该有花括号的复合语句,忘记加花括号2. 在不该加分号的地方加了分号3. 引用数组元素时误用圆括号4. 引用数组元素超界5. 对二维或多维数组定义和引用的方式不对6. 误以为数组名代表整个数组7. 混淆字符数组与字符指针的区别实验五函数与编译预处理一、实验目的及要求1. 掌握函数定义的方法;2. 掌握函数实参与形参的对应关系以及“值传递”的方式;3. 掌握函数的嵌调用和递归调用的方法;4. 掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。5. 学习对多文件程序的编译和运行。二、实验学时4学时三、实验任务1. 阅读下面程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F7和F8的不同。#includevoid main void fun(int i, int j, int k);int *,y,z;*=y=z=6;fun(*,y,z);printf(%*=%d;y=%d;z=%dn,*,y,z);void fun(int i, int j, int k)int t;t=(i+j+k)*2;printf(t=%dn,t);2. 阅读下面程序,注意在调试时F11和F10的区别,还要注意函数调用过程中形参、实参的关系。#includevoid main int *=10,y=20;voidswap (int ,int);printf(1)in main :*=%d,y=%dn,*,y);swap(*,y);printf(4)in main :*=%d,y=%dn,*,y);void swap (int m,int n) inttemp;printf(2)in main :m=%d,n=%dn,m,n);temp=m;m=n;n=temp;printf(3)in main :m=%d,n=%dn,m,n);把用户自定义函数swap中的形式参数m和n对应改成*和y,使其与实参变量同名,再用F7跟踪程序的运行,看看有什么变化。相关知识:形参具有“用之则建,用完则撤”的特点。在函数定义时,函数名后面圆括号内的参数称为形参;在函数调用时,函数名后面圆括号内的参数称为实参。对于实参,在调用函数中对其进行定义时,不仅指明它的类型,而且系统还为其分配存储单元。而对于形参,定义时仅仅只是指明它的类型,并不在内存中为它们分配存储单元,只是在调用时才为其分配临时存储单元,函数执行结束,返回调用函数时,该存储单元立即撤销。3. 下面程序是实现求素数的,请填空完成该程序,并上机运行测试。#includevoid main int m;/* 申明求素数函数 */printf(Please input a data m=:); /* 调用求素数函数 */voidprime(int n) int i,k;k=sqrt(n);for(i=2;i=k+1)printf(This is a prime number);elseprintf(This isnt a prime number);4. 下面程序的功能是从键盘上输入的若干个数并求出最大值。请填空完成该程序。#includevoid main()inti; ia*;/*Findma*函数的申明 */; printf(Input 10 number : n); /* 输入*个数据到s数组中 */; /* 调用Findma*函数 */; for (i=0;i相关知识:练习形参是数组的函数申明、调用格式;复习数组的输入方法。5. 下面程序的功能是从键盘上输入的若干个数按升序排序。请调试检查该程序中的错误,程序如下:#includevoid main()inti ,k; float s100,j ; printf( Input number : n); for (i=0; scanf(%f,&j); i+)si=j; sort(s, i); for (k=0; k错误提示:形参和实参的数据类型不一致;一般形参数组在说明时不指定数组的长度,而仅给出类型、数组名和一对方括号;用户自定义函数sort没有申明过。注意:for (i = 0; scanf(%f,&j); i+)这一行中for语句第二个表达式的使用形式,此处用了scanf函数的出错来结束输出循环。请读者查一下教材后面的附录,看看什么时候scanf函数返回0,此时就可以结束循环。6. 编写程序,实现由主函数输入m、n,按下述公式计算并输出的值。提示:定义一个求阶层的函数,然后在主函数中调用三次即可求得。7. 阅读如下递归程序,其功能是什么?上机调试。#include =r)dtoo(n/r,r);printf(%d,n%r); 8.预习下面程序,写出预习结果,上机验证并写出分析。变量的作用范围#defineLOW10#defineHIGH5#defineCHANGE2inti = LOW ;#includevoid main( )intworkover ( inti ) , reset ( inti );inti = HIGH ;reset ( i / 2) ;printf( i = %d n , i );reset ( i = i / 2) ;printf( i = %d n , i );reset ( i / 2) ;printf( i = %d n , i );workover ( i );printf( i = %d n , i );int workover ( inti ) i = ( i % i ) * ( i * i ) / ( 2 * i ) + 4) ;printf( i = %d n , i );return ( i );intreset ( inti )i = i 相关知识:“变量用之不尽,一写就走”。在main主函数中reset(i/2)和reset(i=i/2)不同,第一个reset的i没有被赋值到,所以该函数调用结束后还保持原来的值;而第二个reset的i被赋值了,所以函数调用结束后以前的值就没有。全局变量:在所函数外面定义的变量,其有效范围到整个源程序结尾;局部变量:在函数内部定义的变量或在函数头部定义的形参,其有效范围只在所定义的函数,局部变量具有“用之则建,用完则撤”的特点。在不同函数内定义的变量同名互不干扰。如果一个源程序中的局部变量和全局变量同名,则局部变量优先。9.上机调试下面程序,观察静态局部变量在调用过程中的变化。#includevoid main() inti ;intf(int); for ( i = 1; i 相关知识:静态局部变量。如果希望在函数调用结束后仍然保留函数中定义的局部变量的值,则可以将该局部变量定义为静态局部变量(或称局部静态变量)。静态局部变量具有这样一些特点:全局寿命:静态局部变量的数据存储在静态存储区的存储单元中,在函数调用结束后,它的值并不消失,直到整个应用程序执行结束,它的存储空间才被收回去。局部可见性:其作用域只在定义它的函数内部,尽管它的值在函数调用结束后并不消失,但其他函数仍然不能访问它,在进入到它所在的函数内,它的值才可见。初始化的特点:若在定义该局部变量时有赋初值的,则赋初值只在编译过程中进行,只赋值一次;若没有赋初值,则默认的初值为0(数值型)或空字符(字符型)。10.预习下面程序,分析在程序运行前宏NUM的值,并上机运行,比较一下的预习结果和实际结果。#includestdio.h#defineN2#defineMN+1#definain int i,n=0;for (i=1; i分析下面程序的运行结果,上机验证(y)?(*):(y)#definePRprintf#includevoid mainint a,b,c,d,*;=POWER(a+b);*=*/POWER(a+b);d=MA*(a+6,b);PR( c=%d,d=%d,*=%d n, c,d,*);12.编写:输入*个学生的3门课的成绩,分别用函数求:(1) 每个学生的平均分。(2) 每门课的平均分。(3) 按学生平均分降序排列输出学生信息。(4) 统计不及格学生,输出其相应信息。(5) 编写一菜单主函数,菜单内容包括以上4部分。分析:本题要求完成的操作有录入数据、求平均分、排序、统计。这些操作分别用函数来实现。先分析表示这些数据的数据结构,可用如下结构来表示学生的成绩:课程1课程2课程3平均分687450即*个学生的3门课程成绩可以登记在一个二维数组中score104,其中最后一列用于保存平均分,学生的学号不单独记录,学生的序号用二维表的行号来表示。下面给出了主菜单的参考程序,其他功能的函数学生自己编写。#include#define N 10#define M 4void mainint scoreNM;charchoice=1;void input(int ,int,int);void aver_stu(int ,int,int);void aver_cour(int ,int,int);void orde_aver(int ,int,int);void failed(int ,int,int);input(score,N,M);/*显示主菜单*/while(choice!=0)clrscr;printf( =the Score Processing System =n);printf(1.print each students averagen);printf(2.print each courses averagen);printf(3.Order the students by students average decreasingly n);printf(4.print the failed student n);printf(0.E*it the system n);printf(=n);printf(Please choise (0-4): n);choice=getchar;switch(choice)case 1:aver_stu(score,N,M); break;case 2:aver_cour(score,N,M); break;case 3:orde_aver(score,N,M); break;case 4:failed(score,N,M); break;case 0:e*it(0);default:printf(Choice Error,Please select again(0-4).);四、实验重点、难点1. 函数的定义2. 函数的参数及返回值3. 函数的调用4. 数组作为函数参数5. 局部变量和全局
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年临沂市农业学校公开招聘教师(8名)模拟试卷有答案详解
- 2025金华市教育局所属金华教育学院公开招聘教师6人模拟试卷及答案详解(各地真题)
- 2025贵州黔东南州台江县民族中医院第二次长期招聘备案制专业技术人员1人考前自测高频考点模拟试题有完整答案详解
- 2025贵州罗甸县第一医共体板庚分院招聘合同制专业技术人员考前自测高频考点模拟试题及一套答案详解
- 2025河南洛阳市洛宁县招聘看护队伍工作人员45人考前自测高频考点模拟试题完整参考答案详解
- 2025江苏盐城市中心血站招聘编外专业技术人员3人考前自测高频考点模拟试题及答案详解(新)
- 2025湖南邵阳市洞口县教育局所属事业单位招聘39人模拟试卷附答案详解(突破训练)
- 2025年耐蚀热交换器铜合金管材合作协议书
- 安全培训教室装饰图画课件
- 2025电子工业出版社有限公司招聘应届高校毕业生15人考前自测高频考点模拟试题及答案详解参考
- 一种鞘翅目林木害虫的辐照灭虫方法
- 国旗的知识课件
- 胸部肿瘤放疗讲课
- 【自考复习资料】05175税收筹划(重点知识汇总)
- 充电桩采购安装投标方案(技术方案)
- 高校教师职业道德概论练习试题
- 低血压的护理和处理课件
- GB/T 19494.2-2023煤炭机械化采样第2部分:煤样的制备
- 2023年【汽车驾驶员(技师)】考试题及汽车驾驶员(技师)试题答案
- 我的家乡威海荣成宣传介绍课件
- 仪器维护、保养记录表
评论
0/150
提交评论