C语言程序设计实验教学(7)
【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。实验目的是掌握函数的定义、变量的作用域和函数的调用。
【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。要学会函数声明。
【实验课时】6.0
【实验内容】
1. 编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,
否返回0。编写main函数,输入一个数num,调用fun(num)函数,并输出函数的返回值。
#include "stdio.h"
int fun(int n)
{int a,b,c;
a=n%10; b=n/10%10; c=n/100;
if(a*a*a+b*b*b+c*c*c==n) return(1);
else return(0);}
main()
{int num; scanf("%d",&num);
while(num<100||num>=1000)
{printf("please enter the num again! (num>=100&&num<1000) \n");
scanf("%d",&num);}
if(fun(num)==1) printf(" yes \n");
else printf(" no \n");}
2. 编写函数ss(n), 判断n是否为素数,是返回1,否返回0。编写main
函数,输入一个数num,调用ss(num)函数,并输出函数的返回值。#include "stdio.h"
int ss(int n)
{int i;
for(i=2;i if(n%i==0) break; if(i>=n) return(1); else return(0);} main() { int num; scanf("%d",&num); if(ss(num)==1) printf(" yes \n"); else printf(" no \n");} 3. 编写一个函数fun(n),计算n!,并编写main函数测试,在main函数 中输入num,调用fun(num),输出计算的结果。 #include "stdio.h" long fun(int n) {long s=1; int i; for(i=1;i<=n;i++) s=s*i; return(s);} main() {int num; scanf("%d",&num); if(num>=0) printf("%d!=%ld \n",num,fun(num)); else printf("input data error! \n");} 4. 使用递归函数实现计算n!,并在main函数中调用。 #include "stdio.h" long fun(int n) {long f; if(n==1||n==0) f=1; else f=n*fun(n-1); return f;} main() {int num; scanf("%d",&num); if(num>=0) printf("%d!=%ld \n",num,fun(num)); else printf("input data error! \n");} 5. 某数列为K(n)的定义为:用递归的方法求该数列的第6项k(6)。 1 n=1 k(n)= k(n-1)×2 n为偶数 k(n-1)×3 n为奇数 int k(int n) {int c; if(n==1) c=1; else if(n%2==0) c=k(n-1)*2; else c=k(n-1)*3; return c;} main() {int m; scanf("%d",&m); if(m>=1) printf("k(%d)=%d\n",m,k(m)); else printf("input data error!\n");} 6. 计算s=(1!)+(1!+2!)+…+(1!+…+n!)。n由用户输入,小于10。(设计: 函数h1()计算阶乘;函数h2()计算每个数据项的累加运算。用函数的嵌套来做) long h1(int n) {long t=1;int i; for(i=1;i<=n;i++) t=t*i; return t;} long h2(int m) {long s=0;int i; for(i=1;i<=m;i++) s=s+h1(i); return s;} main() {int k,j;long sum=0; scanf("%d",&k); for(j=1;j<=k;j++) sum=sum+h2(j); printf("(1!)+(1!+2!)+...+(1!+2!+...+%d!)=%ld\n",k,sum);} 7. 设计一个函数fc,其功能为统计数组中偶数的个数。编写main函数, 用数组名num做为函数传递的参数调用fc函数,实现对数组num的统计,并输出统计结果。 #include "stdio.h" int fc(int a[],int n) {int i,c=0; for(i=0;i if(a[i]%2==0) c=c+1; return(c);} main() {int i,num[10]; for(i=0;i<10;i++) scanf("%d",&num[i]); printf("oushu: %d \n",fc(num,10)); printf("jishu: %d \n",10-fc(num,10));} 8. 在一个一维数组a中存放10个正整数, 求其中所有的素数。(用数组元 素作为函数的实际参数) int sushu(int x) {int i,k=1; if(x==1) k=0; for(i=2;i<=x/2;i++) if(x%i==0) k=0; return(k); } main( ) {int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("sushu of array a are:\n"); for(i=0;i<10;i++) if(sushu(a[i])) printf("%5d",a[i]); printf("\n");} 9. 设计一个函数,计算两个自然数的最大公约数。 int gcd(int m,int n) {int r;r=m%n; while(r!=0) {m=n;n=r;r=m%n;} return n;} main() {int m,n; scanf("%d,%d",&m,&n); printf("%d\n",gcd(m,n));} 10. 设计一个函数float ave(int a[10]),计算数组a所有元素的平均值。(用 数组名作为函数的实际参数) float ave(int a[10]) {int i,sum=a[0] ; float aver; for(i=1;i<10;i++) sum=sum+a[i] ; aver=1.0*sum/10 ; return(aver); } void main() {int i,score[10]; float aver; for(i=0;i<10;i++) scanf("%d",&score[i]); printf("\n"); aver=ave(score); printf("average score is %5.2f\n",aver);} 11. 用选择法对数组中10个整数按升序排序。(要求将排序功能设计成函 数,数组名作为参数)。 void sort(int array[],int n) {int i,j,k,t; for(i=0;i {k=i; for(j=i+1;j if(array[j] t=array[k];array[k]=array[i];array[i]=t;} } void main() {int a[10],i; printf("input the array:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); sort(a,10); printf("output the array after ordered:\n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n");} 12. 设有一个3×4的矩阵,求出其中的最大元素。(要求:将计算最大值的 功能设计成函数,数组名作为参数) max_value(int array[12]) {int i,max; max=array[0]; for(i=0;i<12;i++) if(array[i]>max) max=array[i]; return(max);} main() {int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}; printf("max=%d\n",max_value(a));} 13. 设计一个函数,使输入的一个字符串按反序存放,在主函数中输入和输 出字符串。(学习指导书P74) #include main() {int inverse (char str[]);/*函数原型声明*/ char str[100]; printf("Input string:\n"); gets(str); inverse(str); printf("Output string after inverse:\n"); puts(str);} int inverse(char st[]) /* 函数定义*/ {char t; int i,j; for(i=0,j=strlen(st);i { t=st[i]; st[i]=st[j-1]; st[j-1]=t;} } 14. 设计一个函数,输入一个4位数字,要求输出这4个数字字符,但每两 个数字间空一个空格。如输入1990,应输出“1 9 9 0”。(学习指导书P76) #include main() {char str[80]; void insert(char str []); printf("\nInput four digits:\n"); gets(str); insert(str); printf("\nOutput digits after insert space:\n"); puts(str); } void insert(char str[]) {int i; for (i=strlen(str);i>0;i--) {str[2*i]=str[i]; str[2*i-1]=' ';} } 15. 使用局部静态变量,求1到5的阶乘。 int fac(int n) {static int f=1; f=f*n; return f;} main() {int i; for(i=1;i<=5;i++) printf("%d!=%d\n",i,fac(i));} 16. 从键盘上输入一个字符串,内有若干个字符,再输入一个字符,编写程 序将字符串中该字符删去。(用外部函数实现) ____参考课件和教材。 /* 文件名为:zy161.c*/ main() { extern enter_string(),delete_string(),print_string(); char c; static char str[80]; enter_string(str); scanf("%c",&c); delete_string(str,c); print_string(str); } /* 文件名为:zy162.c*/ #include "string.h" enter_string(char str[]) { gets(str); } /* 文件名为:zy163.c*/ delete_string(char str[],char ch) {int i,j; for(i=j=0;str[i]!='\0';i++) if(str[i]!=ch) str[j++]=str[i]; str[j]='\0'; } /* 文件名为:zy164.c*/ #include "string.h" print_string(char str[]) {puts(str);} 实验九 Servlet应用 1.实验目标 1.掌握Servlet的编写与配置 2.理解Servlet的生命周期 3.理解Servlet与JSP的区别 2.实验内容与要求 1.主要通过实践掌握对servlet的使用、编写 2.创建一个简单的servlet程序并在tomcat中进行配置 3.创建一个可以接收客户端提交参数,处理后返回给客户端的servlet程序。 4.使用request.getParameterValues(“”)获取复选框数据,实现用户注册功能 3.实验步骤 1. 实现一个简单的HelloServlet,要求在IE中显示“Hello XXX”字符串。 1)通过继承HttpServlet类创建自己的servlet类 2)在servlet类的doGet()方法中输出自己的信息 3)将生成的HelloServlet.java类编译成HelloServlet.class类,注意编译的时候要用到servlet-api.jar文件。 2.创建和部署Servlet 1)在Tomcat\webapps\目录下创建自己的项目名称myExample 2)在Tomcat\webapps\myExample目录下创建WEB-INF目录,并在该目录下创建一个classes目录,将编译后的HelloServlet.class文件拷贝到这里。 3)在Tomcat\webapps\myExample目录下创建WEB-INF目录并创建一个web.xml文件。 内容为 实验七EXCEL公式与函数 一﹑实验目的 1熟练掌握Excel中公式的应用。 2熟练掌握Excel中函数的应用。 二﹑基本知识 Excel具有强大的计算和处理数据功能。在工作表中无论输入简单的公式还是复杂的公式,应用内部函数,在瞬间得到计算结果,为用户估算和分析数据提供结果和解决方案。 三﹑实验内容 1打开工作簿文件table.xls,将下列要求处理数据表格。 表7.1 职工号姓名入公司时间基本工资补贴 200201宋大纲1991-3-440050 200202黄惠惠1983-6-760030 200203翁光明1986-7-770060 200204钱宝方1999-12-154093 200207周甲红1994-7-570056 200208叶秋阳1997-4-468954 200209方昌霞1988-12-422925 200210张之刚1989-9-555998 200211王胜平1987-7-755455 200212傅海英1989-9-845650 200213骆程琳1986-10-378960 2在工作表中添加一列“工龄”,工龄计算公式:2012-year(入公司时间)。 3在工作表中添加一列“奖励后工资”,奖励办法:基本工资>500者,加200,否则加150。提示:利用IF函数。 4在工作表中添加一列“实发工资”,实发工资=奖励后工资+补贴。 5在D15单元格计算出最低工资值。 6在Sheet3中根据下列已知数据建立表。 表7.2 元亨简单科技产业有限公司2007年销售统计表(万元) 公司名称第一季度第二季度第三季度第四季度 北京分公司256.56240.56195.83310.5 上海分公司185.45205.45172.85250.68 天津分公司150.46180.62140.87215.52 深渊分公司225.55255.45197.68265.56 实验九函数的重载和变量的作用域 一、实验目的 1、了解内联函数、重载函数、带默认参数函数的定义及使用方法。 2、掌握作用域的概念、变量的存储类型及它们之间的差别。 3、掌握程序的多文件组织。 二、实验内容 1、重载函数允许不同的函数使用相同的名字,这使得完成类似的任务时可以使用相同的函数名。 范例:编写几个计算面积的函数,分别计算圆、矩形、梯形和三角形的面积,计算边长为1的正方形及其内切圆、内接等腰三角形和等腰梯形面积。 函数原型如下: double area(double radius=0); //圆面积,参数为半径,默认参数为0,表示点面积 double area(double a, double b); // 计算矩形面积,参数为长和宽 double area(double a, double b, double h); //计算梯形面积,参数为两底和高 double area(double a, double b, double c, int); //计算三角形面积,参数为三边长,int 型参数起标示作用,以区别于梯形,不参加计算。 #include 实验9 使用T-SQL编写程序 【实验目的】 1)掌握常用函数的使用方法。 2)掌握流程控制语句的使用方法。 【实验环境】 Sql server 2005 【实验重点及难点】 1)启动SQL Server 2005查询编辑器。 2)应用转换函数。 3)应用聚合函数。 4)应用字符串函数。 5)应用IF〃〃〃ELSE语句。 6)应用WHILE语句。 【实验内容】 (1)应用转换函数 1)打开“SQL Server Manageement Studio”窗口。 2)单击“标准”工具栏上的“新建查询”按钮,打开“查询编辑器”窗口。 3)在窗口内直接输入以下语句,求Course表中课程号为“7”的课程名称的长度,并输入结果。 declare @课程名称长度int select @课程名称长度=len(Cname) from course where Cno ='7' print'课程名称长度为'+str(@课程名称长度); 4)单击“SQL编辑器”工具栏上的“分析”按钮,检查输入的T-SQL语句是否有语法错误。如果有语法错误,则进行修改,直到没有语法错误为止。 5)确保无语法错误后,单击“SQL编辑器”工具栏上的“执行”按钮。将执行结果记录下来。 (2)应用聚合函数 1)在“查询编辑器”窗口内输入以下语句,统计Student表中的学生人数,并输出结果。 declare @学生人数int select @学生人数=count(*) from Student print'学生人数为'+str(@学生人数); 2 )单击“SQL编辑器”工具栏上的“执行”按钮。将执行结果记录下来。 淮海工学院计算机科学系实验报告书 课程名:《C语言程序设计A 》 题目:实验7 函数 ——函数的定义和调用 班级:软嵌151 学号:2015123349 姓名:陈正宁 1、实验内容或题目 (1)编写函数求一元二次方程的根,并在main主函数中调用该函数。 (2)编写函数fac(int n)求n!,并在main主函数中进行调用,输出6!的值。 (3)写一个判别素数的函数,在主函数中输入一个整数,输出是否为素数的信息。 2、实验目的与要求 (1)要求熟练掌握函数的定义和调用,熟悉函数返回值的使用。 (2)熟悉函数调用的方式和过程。 3、实验步骤与源程序 ⑴实验步骤 (1)、 N ⑵源代码 (1)、 #include 实验九数组 一、实验目的 ①掌握数组的声明、数组元素的引用。 ②掌握静态数组和动态数组的使用差别。 ③掌握用数组解决与数组有关的常用算法,如:求最大(最小)值、求和、求平均值、排序(冒泡法排序、选择法排序和插入法排序)和查找等。 二、实验任务 实验内容1: 设有如下两组数据:A:2,8,7,6,4,26,24B:79,27,32,40,57,66,82 编写一个程序,把上面两组数据分别读入两个数组中,然后把两个数组中对应下标的元素相加,即2+79,8+27,…,24+82,并把相应的结果放入第三个数组中,最后输出第三个数组的值。分别以姓名1.frm 和姓名1.vbp为窗体名和工程名保存在计算机上。 【分析】 两个一维数组中下标相同的元素相加之和是第三个一维数组中对应下标的元素。 实验内容2: 使用Array函数给数组进行初始化为:6,2,5,8,9,15,26,18,然后计算数组各元素的和,并在窗体上输出数组各元素的值和数组元素的和。分别以姓名 2.frm 和姓名2.vbp为窗体名和工程名保存在计算机上。 【分析】 ?Array函数只能给variant类型的数组变量进行初始化,只能给一位数组进行初始化 ?数组的元素类型必须相同,单如果数组类型是variant时,可以包含不同类型的元 素 ?数组的下界缺省为0,也可用option语句将数组的下界设置为1.数组的上界可通过 ubound函数获得。 实验内容3: 从键盘上输入10个整数,并放入一个一维数组中, 然后将其前5个元素与后5个元素对换,即:第1个 元素与第10个元素互换,第2个元素与第9个元素互 换……第5个元素与第6个元素互换。分别输出数组 原来各元素的值和对换后各元素的值。 【分析】 同一数组中元素的互换与变量交换值是类同的, 需要借助与第三个变量来作为中转的对象。 表格格式设置及公式和函数的应用 实验目的:1、熟练掌握公式和函数的应用 2、熟练掌握数据的填充、复制和移动 3、熟练掌握对表格的格式设置以及格式刷的使用 实验内容共包括四项,总分100分。 实验内容一:以自己的学号和姓名建立一个电子表格,如在工作薄“050123456789张三.xls”中的sheet1工作表中完成下列操作,其中职员工资一览表如下:(25分) 操作要求: 1.输入正确数据,按要求设置单元格和表头文字。表格标题:黑色、黑体、 加粗、合并、居中。(5分) 2.在“税收”列计算税收,当月收入超过1600元,征收5%的个人所得税,保 留2位小数。(5分) 3.在“实发金额”列计算实际发放金额,保留2位小数。(4分) 4.合计“工资”、“奖金”、“税收”、“实发金额”列,保留2位小数。(5分) 5.在表格中将工资少于1600元的职工工资用红色标出(4分) 6.将工作表的名字“sheet1”改为“职工工资一览表”(2分) 说明。(共计15分) 1.标题设为20磅红色行文行楷。把第一行设置为合并居中。(2分) 2.在“姓名”前插入一列,标题为“学号”,数据从2005001开始,按步长为3 的等差数列有上至下填充。(3分) 3.所有数据都设置对齐方式为水平和垂直居中。将表的外边框设置为蓝色双线, 内部为蓝色单线,表格底纹为浅青绿色。如下图所示(5分) 4.正确计算各位同学的总分。(2分) (共计40分) 1、第一行字体要求16磅、黑体、合并及居中;(3分) 2、第一行和第二行分别加上底纹,如下图所示;(3分) 3、第二行8磅、华文细黑,自动换行,调整列宽如下图所示;(5分) 4、取消08普本通信内部的边框线,前6列合并单元格,第7、8、9列要求 左对齐,缩小字体填充,其余居中对齐,自动换行;(5分) 5、“07普本通信工程”的格式设置如“08普本通信工程”;(5分) 6、第一列加上虚线、绿色边框;(3分) 7、工作表名称“sheet3”修改为“开课计划”;(1分) 8、“合计”项使用求和函数,分别求出各年级“学分”,“课程总学时”, “理论学时”,“实践学时”的总和,并设置格式为蓝色加粗。(9分) C语言程序设计实验教学(7) 【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。实验目的是掌握函数的定义、变量的作用域和函数的调用。 【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。要学会函数声明。 【实验课时】6.0 【实验内容】 编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。编写main 函数,输入一个数num,调用fun(num)函数,并输出函数的返回值。 #include "stdio.h" int fun(int n) {int a,b,c; a=n%10; b=n/10%10; c=n/100; if(a*a*a+b*b*b+c*c*c==n) return(1); else return(0);} main() {int num; scanf("%d",&num); while(num<100||num>=1000) {printf("please enter the num again! (num>=100&&num<1000) \n"); scanf("%d",&num);} if(fun(num)==1) printf(" yes \n"); else printf(" no \n");} 编写函数ss(n), 判断n是否为素数,是返回1,否返回0。编写main函数,输入一个数num,调用ss(num)函数,并输出函数的返回值。 #include "stdio.h" int ss(int n) {int i; for(i=2;i 实验7-2 函数(二) 1 【实验目的】 (1)掌握函数的嵌套调用的方法 (2)掌握函数的递归调用的方法 (3)掌握全局变量和局部变量的概念和用法 【实验要求】 (1)熟练掌握函数的嵌套调用的方法 (2)熟练掌握函数的递归调用的方法 【实验环境】 (1) Microsoft XP操作系统 (2) Microsoft VC++ 6.0 【实验内容】 1、素数https://www.wendangku.net/doc/aa10545502.html,/acmhome/problemdetail.do?&method=showdetail&id=1098描述:输出100->200之间的素数的个数,以及所有的素数。 输入:无 输出:100->200之间的素数的个数,以及所有的素数。 样例输入:无 样例输出: 21 101 103 ... 197 199 2、字符串逆序https://www.wendangku.net/doc/aa10545502.html,/JudgeOnline/problem.php?id=1499 题目描述:写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入:一行字符 输出:逆序后的字符串 样例输入:123456abcdef 样例输出:fedcba654321 3、字符串拼接https://www.wendangku.net/doc/aa10545502.html,/JudgeOnline/problem.php?id=1500 题目描述:写一函数,将两个字符串连接 输入:两行字符串 输出:链接后的字符串 样例输入: 123 abc 样例输出 123abc 4、输出元音https://www.wendangku.net/doc/aa10545502.html,/JudgeOnline/problem.php?id=1501 实验九类和对象的使用实验报告 一实验目的 1、学会用构造函数对类对象进行初始化 2、掌握析构函数,并了解构造函数和析构函数的调用顺序 3、了解对象数组和对象指针的用法 4、学会共用数据的保护,了解常对象、常成员函数等的使用限制 二实验内容和要求 1.回顾课本知识,掌握重点和难点,认真分析例题熟悉本章内容。 2.完成本章课后习题2、6、7题,认真分析每一题的代码。 三实验环境 Visual C++6.0开发环境 四源程序 2、 #include Date::Date() { month=1; day=1; year=2005; } void Date::display() { cout< 实验九可逆计数器的功能测试及应用电路 实验目的: (1)掌握可逆计数器74LS191、74LS191、74LS192、74LS193的逻辑功能及使用方法。 (2)熟悉可逆计数器实现任意进制的数码倒计时电路的工作原理。 实验仪器与器件: 实验箱一个;双踪示波器一台;稳压电源一台;函数发生器一台。 74LS191、74LS191、74LS191或74HC48、74LS00和74LS04。 实验内容: 1测试74LS190和74LS191的逻辑功能,并用数码管显示,验证是否与表2-9-4一致,分别画出各单元的电路图,写出各自的状态 实验原理:单时钟74LS191二进制同步加/减计数器的功能表如下: 表2-9-4 单时钟74LS191二进制同步加/减计数器的功能表 单时钟74LS191二进制同步加/减计数器是十进制的,其他功能与74LS191一样。它的有效状态为0000~1001. 实验电路: 如图所示是减计数时当计数器的状态变为0时的电路状态:RCO=0,MAX/=1; MIN 实验现象与结果: 该结果是当CTEN =0,D L =1,D U /=1时,A B C D Q Q Q Q 的 波形图; 该结果是当CTEN =0,D L =1,D U /=1时, RCO 与MIN MAX /的波形图 需要说明的是:当CTEN= D L=1时,电路保持原来的状态。 2测试74LS192和74LS193的逻辑功能,并用数码管显示,验证是否与表2-9-3及2-9-5一致。画出测试电路图。 实验原理: 双时钟74LS192同步十进制可逆计数器的功能表如下表所示,74LS192是十进制计数器。 表2-9-3双时钟74LS192同步十进制可逆计数器的功能表 输入输出工作 状态 U CP UP D CP DOW N CLR D L DCBA A B C D Q Q Q Q U TC D TC **H H ****0000 H H 异步 清零**L L 1001 1001 H H 异步 置数 H ↑L H ****1001→ 0001→ 0000H H H L 减法 计数 ↑H L H ****0000→ 1000→ 1001H L H H 加法 计数 双时钟74LS193二进制同步加/减法计数器的功能表如下表所示,74LS193是一个十六进制的计数器。 实验七函数(一) 1.实验目的 (1)熟悉定义函数的方法 (2)熟悉声明函数的方法 (3)熟悉调用函数时实参与形参的对应关系,以及“值传递”的方式 (4)学习对多文件的程序的编译和运行 2.实验内容 编程序并上机调试运行之 (1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息 本程序应当准备以下测试数据: 17,34,2,1,0。分别运行并检查结果是否正确。要求所编写的程序,主函数的位置在其他函数之前,在主函数中对其所调用的函数作声明。进行以下工作: <1>输人自己编写的程序,编译和运行程序,分析结果 <2>将主函数的函数声明删掉,再进行编译,分析编译结果 <3>把主函数的位置改为在其他函数之后,在主函数中不含函数声明 <4>保留判别素数的函数,修改主函数,要求实现输出100~200之间的素数(2)写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出 <1>输人程序,编译和运行程序,分析结果 <2>分析函数声明中参数的写法。先后用以下两种形式 i: 函数声明中参数的写法与定义函数时的形式完全相同,如 void cpy(char s[ ],char c[ ]); ii:函数声明中参数的写法与定义函数时的形式基本相同,但省略写数组名。如: void cpy(char[ ],char[ ]) ; 分别编译和运行,分析结果。 思考形参数组为什么可以不指定数组大小。 <3>如果随便指定数组大小行不行,如: void cpy(char s[40 ],char [40]) 请分别上机试一下。 (3)输人10个学生5门课的成绩,分别用函数实现下列功能: <1>计算每个学生平均分; <2>计算每门课的平均分; <3>找出所有50个分数中最高的分数所对应的学生和课程 实验报告 课程名称:高级语言程序设计 实验九:函数与数组 班级: 学生姓名: 学号: 专业: 指导教师: 学期:2010-2011学年上学期 云南大学信息学院 一、实验目的 1、掌握数组作为参数的函数编写与调用方法 2、掌握数组作为参数的特殊性 3、掌握字符串作为参数的函数编写与调用方法 二、知识要点 1、地址传递的概念及使用 2、数组元素和数组名作为函数参数的特点与区别 3、字符串作为参数的特点:‘\0’字符的使用 三、实验预习(要求做实验前完成) 1、数组作为函数参数时,其特殊性是 2、定义作为参数的函数时,通常需要提供长度作为参数;而定义 作为参数的函数时,通常不需要提供长度参数 3、写出满足如下要求函数的函数首部: ①函数名为fmax,求一个实型数组的最大元素值: ②函数名为scount,求一个字符串中大写字母的个数: ③函数名为delf,删除一个字符串的第一个字符: 四、实验内容 1、编写一个函数,其功能是将字符串中的大写字母改为小写字母,其他字 符不变。 2、编写一个函数,求出给定的二维数组中每一行最大的元素,并显示出来。 3、在主函数中输入N个人的某门课程的成绩,分别用函数求:①平均分、最 高分和最低分;②分别统计90~100分的人数、80~89分的人数、70~ 79分的人数、60~69分的人数及59分以下的人数。结果在主函数中输出。 五、实验结果(要求写出运行界面及输出的运行结果) 六、实验小结 1.#include 实验八学生成绩表------数学函数、统计函数 一、实验目的 1、掌握数组公式、Sum()函数 2、掌握Averageif()和Sumif() 3、掌握COUNT()、COUNTA()、COUNTIF()、Countblank() 4、RANK.EQ 5、数据库函数的使用 二、实验内容 1、利用数组公式或Sum()函数来统计每个同学上学期的总分。 2、利用Averageif()和Sumif()统计平均分和总分。 3、利用统计函数统计班级人数,每门课程不及格人数,缺考科目数。 4、对班级同学的考试情况进行排名。 5、选择合适的数据库函数统计信息 三、实验任务 小王是班级学习委员,现正值新学期评优时期,班主任委托小王统计班级同学上学期的考试成绩情况。小王要应用函数分析学生信息、计算考试成绩,分析每科成绩的最高分、最低分和平均分,统计每个学生的总分排名,并统计不同寝室的学习情况。 本例效果图如图9- 1所示,小王需要完成的工作包括: (1)统计每个同学各门课程的总分并排名。 (2)统计每个寝室的平均分。 (3)统计每门课程的不及格人数和缺考人数。 (4)统计符合特定条件的学生信息。 图9- 1 学生成绩表效果图 9. 3 案例实现 9.3.1统计班级每个学生的考试总分 1.使用一般公式方法 公式是Excel工作表中进行数值计算的等式,公式输入是以“=”开始的,简单的公式有加、减、乘、除等计算。 我们可以在I3单元格中编辑公式,输入“=D3+E3+F3+G3+H3”,回车后即可,其他同学的总分可以通过填充柄拖动来求得。 2.数组公式计算总分 Excel中数组公式非常有用,尤其在不能使用工作表函数直接得到结果时,数组公式显得特别重要,它可建立产生多值或对一组值而不是单个值进行操作的公式。 输入数组公式首先必须选择用来存放结果的单元格区域(可以是一个单元格),在编辑栏输入公式,然后按Ctrl+Shift+Enter组合键锁定数组公式,Excel将在公式两边自动加上花括号“{}”。注意:不要自己键入花括号,否则,Excel认为输入的是一个正文标签。 利用数组公式计算I3:I32单元格的总分。选中I3:I32单元格,然后按下“=”键编辑加法公式计算总分,因为数组公式是对一组值进行操作,所以直接用鼠标选择D3:D32,按下“+”号,再用鼠标选择其余科目成绩依次累加,然后按Ctrl+Shift+Enter组合键完成数组公式的编辑,如图9- 2所示。 图9- 2 数组公式 在数组公式的编辑过程中,第一步选中I3:I32单元格尤为关键。绝不能开始只选中I3单元格,在最后用填充柄填充其他单元格,那样其他单元格的左上角将会出现绿色小三角,是错误的方法。 3.使用Sum()函数计算总分 Sum()求和函数,可以用来计算总分列。选择I3单元格,使用“公式”→“插入函数”或“自动求和”按钮,可选择Sum()函数,选中求和区域D3:H3,如图9- 3所示,按Enter 键,求和结果显示在单元格中。 通过填充操作完成其余各行总分的计算。 《数据库开发技术》课程之实验七 PL/SQL过程和函数 1、实验目的 1.掌握正确使用异常处理的方法。 2.掌握局部(本地)过程和存储过程的正确使用方法。 3.掌握局部(本地)函数和存储函数的正确使用方法。 2、实验内容和要求 1. 创建一个显示EMP表中雇员总人数的存储过程。然后在程序块 中和SQL*Plus环境中调用该存储过程。 执行结果: 雇员总人数为:17 2. 编写一个存储函数函数,用于判断DEPT表中某一编号的部门是 否存在,若存在此部门编号,则返回TRUE,否则返回FALSE。 3. 编写一过程,调用第2题的函数判断某一编号的部门是否存在, 存在则输出该部门员工的姓名、工作,否则提示不存在此部门 或此部门无员工。 4. 调用第2题的存储函数,查询并显示30号部门的人数。要求函数 体内有对不存在部门的异常处理,给用户的错误指示信息是: 该部门不存在! 5. 有一个权限控制的表中有三个字段,分别存放用户姓名、密码 和权限级别。创建一个用户登录存储函数,用户登录时核对用 户名和密码,正确则函数返回真,否则返回假。要求有适当的 异常处理,还要求进行适当的测试以验证函数的正确性。Create table login(uname varchar(12), pw varchar(12), right_lel varchar(12)); insert into login values('xiaoli','12345','DBA'); insert into login values('zhangsan','zzz','GUEST'); --登录函数测试 输入 user_name 的值: xiaoli 输入 password 的值: 12345 登录成功! PL/SQL 过程已成功完成。 6. *阅读、理解并执行以下程序,并在注释处完成填空,指明当条 实验七公式与函数的使用 2.1实验内容 利用公式、函数对图2-1所示的“学生成绩表”实现自动计算,统计出每个学生的总分、平均分、是否通过、等级;统计各科的最高分、最低分;统计所有学生成绩的通过率、优秀率。 要求: 1.利用函数产生学生的“是否通过”结果:平均分在60分以上计为“是”,60分以下计为“否”。 2.“等级”结果分三档:平均分在80分以上计为“优秀”,60-80之间为“合格”,60分以下为“不合格”。 3.“通过率”是计算“是否通过”结果为“是”的学生占总人数的百分比。 4.“优秀率”是计算“等级”为“优秀”的的学生占总人数的百分比。 图2-1 学生成绩表 2.2 实验目的 熟练掌握工作表中公式、常用函数的使用。 熟练掌握公式的复制操作。 2.3 实验步骤 2.3.1新建工作薄,建立工作表 启动Excel2003后,在新工作簿的Sheet1中建立如图2-1所示的学生成绩表。在相应的单元格中输入数据。 2.3.2使用公式计算总分 在H3单元格中输入公式“=SUM(D3:G3)”, 按下Enter键或单击确定按钮,计算出第1个学生的总分。 当然,也可输入公式“=D3+E3+F3+G3”,或者使用“自动求和”。 利用“填充柄”复制公式到H3:H12,计算出其他学生的总分。 2.3.3使用函数计算平均分 1.使用“函数向导”输入函数 ①选定单元格I3,单击“插入”菜单 “函数”命令,或者单击工具栏上的“插入函数”按纽,屏幕显示“粘贴函数”对话框,如图2-2所示。 ②在“选择函数”列表框中选择函数“AVERAGE”,单击“确定”。 ③在弹出的“函数参数”对话框中,如图2-3所示, 单击“Number1”右侧的箭头,用鼠标在工作表中选定区域D3:G3,单击“确定”,计算结果显示在单元格中。 图2-2 “插入函数”对话框 图2-3 “函数参数”对话框 2.使用“自动求和”命令按钮输入函数 ①选定单元格I3,按下键盘上的Delete键,先删除单元格中的内容;再单击自动求和按钮右侧的向下箭头,弹出“常用函数”菜单。 ②选择“平均值”,会自动填充函数并用闪动的边框围住被选择的区域,再用鼠标选定 实验十函数应用 一?实验目的 1.掌握函数的定义和调用; 2.理解形参和实参的使用和传值调用; 3.理解函数声明的使用; 4.掌握函数的嵌套调用; 5.了解函数的嵌套与递归调用,掌握递归函数的编写规律; 6.了解数组元素、数组名作函数参数。 二?实验学时数 2学时 三?实验步骤 (一)阅读程序 1.#include x=x-y; printf("%d,%d\n",x,y); 3.#include 实验七 参考答案(参考答案) (1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。 注意:n 的值要求不大于100。 算法分析: 使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。注意:i 的倒数要表示成:1.0/i; 参考子函数如下: double fun(int n) { double sum=0; int i; for(i=5;i<=n;i++) if(i%5==0||i%9==0) sum=sum+1.0/i; return sum; } (2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。 n s ?++++?++++++=321132112111 例如:若n 的值为11时,函数的值为1.83333 算法分析: 等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。 参考子函数如下: float fun(int n) { float sum=1; //sum 中已经累加了第一项的值 int i,m=1; //m 表示每项的分母; for(i=2;i<=n;i++) { m=m+i; sum=sum+1.0/m; } return sum; } (3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。 例如,当a=45,b=12,调用该函数后,c=5241。 算法分析: 对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。 参考子函数如下: long fun(int a, int b) { long c=0; c=a%10*1000+a/10*10+b/10+b%10*100; return c; } (4) (sy7-4.c)请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567, 则函数返回1234.570000;实型数为1234.564, 则函数返回1234.560000。 算法分析: 先把这个数乘以100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。 参考自定义函数如下: float fun ( float h ) { long w ; w = h * 100 + 0.5 ; return (float) w / 100 ; } (5) (sy7-5.c)请编写一个函数unsigned fun ( unsigned w ),w 是一个大于10的无符号整数,若w 是n (n ≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。 例如:w 值为5923,则函数返回923;w 值为923 则函数返回23。 算法分析: 首先应求出w的位数,有一位,i就乘以10(如果有4位,i就等于10000);然后通过求模运算舍弃最高位; 参考子函数如下: unsigned fun ( unsigned w ) { int i=1;//i用来存放整数的位数 实验七函数 实验目的与要求: 1、掌握函数的定义方法和调用规则。 2、掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则。 3、了解函数的返回值及其类型,并正确使用它。 4、理解宏的概念,掌握定义无参宏和带参宏的方法。了解文件包含的概念,掌握其用法。实验内容: 实验6-1:1 int prime(int n) 实验6-2:1 x/1000%10 实验6-1:2 (0) 实验6-2:2 0 实验6-1:3 (1) 实验6-2:3 huiwen( x) 实验6-1程序运行结果: 实验6-2程序运行结果: 附实验:6-1的代码: #include int huiwen(int x) { int ge,shi,qian,wan; wan=x/10000; qian=x/1000%10; //分解出千位上的数 shi=x%100/10; ge=x%10; if(ge==wan&&shi==qian) return 1; return 0; //不满足回文数的条件返回一个值 } void main() { int x; printf("\n输入一个五位整数:"); scanf("%d ",&x); if(huiwen( x)) printf("yes!\n"); //调用函数huiwen()来判断是否是回文数 else printf("no\n"); } 2 程序代码: #include实验九 Servlet应用
实验七EXCEL 公式与函数
实验九 函数的重载和变量的作用域
实验9 使用T-SQL编写程序
实验7 函数——函数的定义和调用
实验九 数组
Excel实验2表格格式设置及公式和函数的应用
实验(7)-函数-参考答案
实验7-2-函数调用
C++实验九类和对象的使用实验报告
实验九-可逆计数器的功能测试及应用电路
实验七 函数
实验报告9答案
Excel 实验指导——函数的使用
实验7 过程和函数
实验七 公式与函数的使用
实验十函数应用答案
大学生C语言程序设计(第四版 谭洪强)实验7 答案
C语言程序实验七 函数