实验14 指针3——指向函数的指针(编辑)

实验14 指针3——指向函数的指针(编辑)
实验14 指针3——指向函数的指针(编辑)

实验14 指针3——指向函数的指针

实验时间:12月14日星期五12节实验地点:2机房

一、实验实训目的及要求

1、掌握用函数指针变量调用函数。

2、掌握用指向函数的指针作函数参数。

二、实验实训内容

1、求a和b中的大者,先用一般方法的程序,再用一个指针变量指向一个函数,通过函数来访问它的函数。

2、设一个函数process,在调用它的时候,每次实现不同的功能。输入a和b两个数,第一次调用process时找出a和b中的大者,第二次找出其中小者,第三次求a与b之和。

三、实验实训指导

1、程序清单:

/*用函数指针变量调用函数*/

#include

main()

{int max(int,int);

int a,b,c;

scanf(“%d,%d”,&a,&b);

c=max(a,b);

printf(“a=%d,b=%d,max=%d\n”,a,b,c);

}

int max(int x,int y)

{int z;

if(x>y) z=x;

else z=y;

return(z);

}

再用一个指针变量指向一个函数,通过函数来访问它的函数。

将程序改写为:

#include

main()

{int max(int,int);

int(*p)(int,int);

2

int a,b,c;

p=max;

scanf(“%d,%d”,&a,&b);

c=(*p)(a,b);

printf(“a=%d,b=%d,max=%d\n”,a,b,c);

getch(); /*此句在VC++6.0中不需要*/

}

int max(int x,int y)

{int z;

if(x>y)z=x;

else z=y;

return(z);

}

2、程序清单:

程序如下:

/*用指向函数的指针作为函数参数*/

#include

void main()

{int max(int,int);

int min(int,int);

int add(int,int);

void process(int,int,int(*fun)(int,int));

int a,b;

printf("enter a and b:");

scanf("%d,%d",&a,&b);

printf("max=");

process(a,b,max);

printf("min=");

process(a,b,min);

printf("sum=");

process(a,b,add);

getch(); /*此句在VC++6.0中不需要*/

}

int max(int x,int y)

{int z;

3 if(x>y)z=x;

else z=y;

return(z);

}

int min(int x,int y)

{int z;

if(x

else z=y;

return(z);

}

int add(int x,int y)

{int z;

z=x+y;

return(z);

}

void process(int x,int y,int(*fun)(int,int))

{int result;

result=(*fun)(x,y);

printf("%d\n",result);

}

四、实验体会

1、指向函数的指针变量的一般定义形式为:

数据类型(*指针变量名)(函数参数表列)

这里的“数据类型”是指函数返回值的类型。

2、函数调用可以通过函数名调用,也可以通过函数指针调用。

3、在给函数指针变量赋值时,只需给出函数名而不必给出参数。

4、用函数指针变量调用函数时只需将(*p)代替函数名即可(p为指针变量名),在(*p)之后的括号中根据需要写上实参。

5、不可以对函数的指针进行运算如:p++,p- -等。

函数指针

方法 指针函数和函数指针的区别 关于函数指针数组的定义 为函数指针数组赋值 函数指针的声明方法为: 数据类型标志符 (指针变量名) (形参列表); 注1:“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如: int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。 注2:函数括号中的形参可有可无,视情况而定。 下面的程序说明了函数指针调用函数的方法: 例一、 #include int max(int x,int y){ return(x>y?x:y); } void main() { int (*ptr)(int, int); int a,b,c; ptr=max; scanf("%d%d",&a,&b); c=(*ptr)(a,b); printf("a=%d,b=%d,max=%d",a,b,c); } ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr 和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个

C++程序设计实验七_参考答案

广东金融学院实验报告 课程名称:C++程序设计 实验编号 实验7数组与指针练习系别参考答案及实验名称 姓名学号班级 实验地点新电403实验日期2011-11-24实验时数4 指导教师曲政同组其他成员无成绩 一、实验目的及要求 1.学习C/C++数组和指针的概念和使用方法。 2.练习C++/CLI托管数组的创建方法和元素访问方法。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio2005

三、实验内容及步骤(包含简要的实验步骤流程) 1.内容和步骤 ⑴仔细阅读本课件的知识点和例题,努力理解其中的文字阐述和源代码,必要时可将源代码拷入Visual Studio2005生成的C++/CLR框架编译和运行,将运行结果与源代码对照,加深对C/C++数组和指针的理解。 ⑵在理解本课件内容的基础上,编写C/C++程序实现下列文字描述: a.声明一个int型变量x,并赋初值3; b.打印x的值; c.打印x的地址; d.声明一个指向int的指针p,并让其指向变量x; e.打印p所指变量的值 f.打印p的值; g.声明一个有10个元素的一维本地整型数组A,并为其赋初值0~9; h.在一个循环中打印A的所有元素的值; i.打印A的值; j.打印A的第一个元素的地址; k.声明一个指向int的指针q,并让其指向A的第一个元素; l.在一个循环中通过q后跟下标,打印出A的所有元素的值; m.在一个循环中通过q加上循环变量和取值运算,打印出A的所有元素的值; n.在一个循环中通过q的增量和取值运算,打印出A的所有元素的值; o.在一个循环中通过q的负增量,反序打印出A的所有元素的值; p.声明一个int型指针r,在堆中创建一个int型变量,为该变量赋初值3,并将该变量的地址赋给该指针,打印出该变量的值,然后删除该变量。 q.声明一个本地类Point(可以用包含2个int型变量和一个有参数构造函数的结构体表示)的指针s,在堆中创建一个Point类的对象,调用构造函数为该对象的两个数据成员赋初值3和4,并将该对象的地址赋给该指针,打印两个数据成员的值,然后删除该对象。 r.声明一个int型指针t,在堆中创建一个3个元素的int类型数组并将该数组的首地址赋给该指针,为三个数组元素分别赋值3、4、5,在一个循环中打印出所有元素的值,然后删除该数组。 s.声明一个本地类Point类的指针u,在堆中创建一个3个元素的Point类的对象数组(需在Point 中添加无参数构造函数)并将数组的首地址赋给该指针,为三个数组元素分别赋值(1,2)、(3,4)、(5,6),在一个循环中打印该数组所有元素分量的值,然后删除该数组。 t.用基本语法声明并创建一个10个元素的一维托管整型数组B,并在一个循环中为元素赋值0~9; u.在另一个循环中打印B所有元素的值。 v.用初值表方式声明并创建一个10个元素的一维托管整型数组C,并为其元素赋初值10~19; w.在一个循环中打印C所有元素的值。 x.用数组C为数组B赋值。 y.在一个循环中打印B和C所有元素的值。 2.提示和要求 ⑴首先将上面的文字描述拷入Visual Studio2005生成的C++/CLR框架,在每条文字描述之前加“//”将其变为注释,并在其下留一个空行准备编写对应的程序。 ⑵对应于逐条文字描述,在其下编写程序(可能是一个或一组语句),每编写一条文字描述对应的程序,就编译(运行)一次,以保证语法和算法的正确性。 ⑶当全部文字描述所对应的程序编写完成,并编译、运行正确,将文字描述和源代码拷入实验报告。 ⑷对C/C++的数组和指针做简要总结。

实验10 指针作为函数的参数

实验10 指针作为函数的参数 一、实验目的 1、学会使用指针变量作为函数的参数。 2、学会使用数组作为函数的参数。 3、正确理解和掌握指针与数组的关系。 二、实验知识点 1、指针变量的定义。注意:指针变量和一般简单变量的区别。 2、简单变量作为函数的参数是一种值传递方式。 3、指针作为函数参数是一种地址传递方式。 4、数组作为函数的参数也是一种地址传递方式。 三、实验内容和步骤 1、分析下面程序的运行结果,并调试程序。 //指针作为函数的参数 #include int fun(char *s); void main() { cout<

# include #include fun(char *s); //函数fun声明 void main() {char a[]=”abcdefgh”; fun(a); cout< #include void f(int b[]) //函数f的定义 {int i=0;

实验七EXCEL 公式与函数

实验七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

C指针函数习题

C++指针函数习题 一、选择题 1.以下程序的运行结果是()。 sub(int x, int y, int *z) { *z=y-x; } void main() { int a,b; sub(10,5,&a); sub(7,a,&b); cout< #include<>

【实验指导书】实验7:指针 (1)

(2014~2015学年-第1学期) 1. 理解指针、地址和数组间的关系。 2. 掌握通过指针操作数组元素的方法; 3. 掌握数组名作为函数参数的编程方式。 4. 掌握通过指针操作字符串的方法。 5. 了解掌握使用断点调试程序的方法。 二、实验环境: 操作系统:Window 8 编译环境:CodeBlock 13.02 三、实验要求及内容(根据实验要求,将整个实验过程需要的数据和截屏记录于此,并整理成实验步骤。): 1.设计一个程序计算输入的两个数的和与差,要求自定义一个函数sum_diff(float op1,float op2,float *psum,float *pdiff),其中op1和op2是输入的两个数,*psum和*pdiff是计算得出的和与差。 解: (1)流程图如图1所示: 图1 程序7-1的流程图

图2 实验7-1实验源代码 (3)运行结果(测试用例) 实验7-1运行结果如图3所示 图3 实验7-1运行结果 2. 输入n 个正整数,使用选择法将它们从小到大排序后输出。要求:利用所学指针的内容实现。 提示:在指针这一章所学的冒泡排序算法基础上改写。 解: (1)流程图如图1所示: 图1 程序7-2的流程图

图2 实验7-2实验源代码(3)运行结果(测试用例)实验7-2运行结果如图3所示 图3 实验7-2运行结果

3. 输入10个整数存入数组a ,再输入一个整数x ,在数组a 中查找x ,若找到则输出相应的下标,否则显示“Not found ”。要求定义和调用函数seach(int list[],int n ,int x),在数组list 中查找元素x ,若找到则返回相应的下标,否则返回-1,参数n 代表数组list 中元素的数量。试编写相应程序。 解:(1)流程图如图1 7-3的流程图 (2)源代码 源代码如图2所示

实验10指针做函数参数编程训练

实验10指针做函数参数编程训练 实验目的: 1.掌握指针的定义及使用; 2.体会使用指针的作用; 3.掌握指针做函数参数的作用; 4.掌握指针做函数参数的基本步骤; 实验题目: 1.输入某年某月某日,计算并输出它是这一年的第几天。 /*函数功能:对给定的某年某月某日,计算它是这一年第几天 函数参数:整型变量year,month,day,分别代表年,月,日 函数返回值:这一年的第几天*/ int DayofYear(int year,int month,int day); 2.输入某一年的第几天,计算并输出它是这一年的第几月第几日。 /*函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日函数入口参数:整型变量year,存储年 整型变量yearDay,存储这一年的第几天 函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量 整型指针pDay,指向存储第几日的整型变量 函数返回值:无*/ void MonthDay(int year,int yearDay,int *pMonth,int *pDay); 3.输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。 1.year/month/day->yearDay 2.yearDay->year/month/day 3.Exit Please enter your choice: 参考程序及注释: #include #include int DayofYear(int year, int month, int day); void MonthDay(int year, int yearDay, int *pMonth, int *pDay); void Menu(void); int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int main() { int year, month, day, yearDay; char c; Menu(); /* 调用Menu函数显示一个固定式菜单*/ c = getchar(); /* 输入选择*/ switch (c) /* 判断选择的是何种操作*/ { case '1': printf("Please enter year, month, day:"); scanf("%d,%d,%d", &year, &month, &day);

实验7 函数——函数的定义和调用

淮海工学院计算机科学系实验报告书 课程名:《C语言程序设计A 》 题目:实验7 函数 ——函数的定义和调用 班级:软嵌151 学号:2015123349 姓名:陈正宁

1、实验内容或题目 (1)编写函数求一元二次方程的根,并在main主函数中调用该函数。 (2)编写函数fac(int n)求n!,并在main主函数中进行调用,输出6!的值。 (3)写一个判别素数的函数,在主函数中输入一个整数,输出是否为素数的信息。 2、实验目的与要求 (1)要求熟练掌握函数的定义和调用,熟悉函数返回值的使用。 (2)熟悉函数调用的方式和过程。 3、实验步骤与源程序 ⑴实验步骤 (1)、

N

⑵源代码 (1)、 #include #include void root(float a,float b,float c) { float delt; delt=b*b-4*a*c; if(a==0) printf("该方程不是一元二次"); else if(delt>0) printf("x1=%f,x2=%f\n",(-b+sqrt(delt))/(2*a),(-b-sqrt(delt))/(2*a)); else if(delt==0) printf("x1=x2=%f\n",-b/(2*a)); else printf("此方程无实数根\n"); } void main() { float a,b,c; printf("请输入方程的实系数[a b c enter]\n"); scanf("%f %f %f",&a,&b,&c); root(a,b,c); } (2)、 #include long fac (int n) { int i; long f=1; for(i=1;i<=n;i++) f=f*i; return f; } void main() { int n;

C++语言程序设计中函数指针论文

C++语言程序设计中函数指针的分析与研究摘要:指针作为c++语言程序设计中的一个重要概念,其应用也是c++语言程序设计中的非常重要的一个内容。指针作为一种特殊的数据结构类型,它可以有效地表示数据之间复杂的逻辑结构关系。灵活正确地运用指针可以给程序的设计带很多的便捷,其中效果最为显著的就是函数指针的应用,通过使用函数指针,可以在调用函数时可以获得多个返回值以及实现对内存地址的直接处理等。本文从对c++语言程序设计中的函数指针的介绍谈起,然后详细说明了使用c++语言程序设计函数指针需要注意的问题,最后就c++语言程序设计中函数指针的应用技巧进行了系统的分析。 关键词:c++语言程序设计;函数指针;分析研究 中图分类号:tp311.11 文献标识码:a文章编号:1007-9599 (2011) 24-0000-01 analysis and research of function pointers for c++ language programming zhang suxia (shandong rural credit cooperatives,qingdao266550,china) abstract:pointer as c++ language programming is an important concept,its application is the c++ programming language is very important content.pointer as a special type of data structure,which can effectively express complex data between the logical structure of the relationship.flexible

C语言实验习题

实验七:指针程序设计 实验内容 以下均用指针方法编程: 1. 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 main() { int j,k,a[12],*p; for(j=0;j<12;j++) scanf("%d",p++); for(j=0;j<12;j++) { printf("%d",*p++); if(j%4 == 0) printf("\n"); } } 调试此程序时将a设置为一个"watch",数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。 2. 在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。 3. 自己编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s小于t 时返回-1,s等于t?时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。 4.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值。 要求用函数指针调用这两个函数,结果在主函数中输出。 main() { int a,b,c,(*p)(); scanf("%d,%d",&a,&b); p=sum; *p(a,b,c); p=swap;

*p(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } sum(int a,int b,int c) { c=a+b; } swap(int a;int b) { int t; t=a; a=b; b=t; } 调试程序时注意参数传递的是数值还是地址。 5.输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。 例如:输入:123 输出:1+2+3=6→ June 输入:139 输出:1+3+9=13→ *** 用指针数组记录各月份英文单词的首地址。 6.任意输入5个字符串,调用函数按从大到小顺序对字符串进行排序,在主函数中输出排序结果。

C++上机实验报告(指针)

C++上机实验报告 实验名称:指针 专业班级: 姓名: 学号: 实验日期:

目录 1.实验目的 2.实验内容 3.程序代码 4.调试结果 5.实验心得

1.实验目的 (1)通过实验进一步掌握指针的概念,会定义和使用指针变量;(2)能正确使用数组的指针和指向数组的指针变量; (3)能正确使用字符串的指针和指向字符串的指针变量; (4)能正确使用引用型变量。 2.实验内容 编程序并上机调试运行程序(要求用指针或引用处理)。 (1)输入3个整数,按由小到大的顺序输出。编译一个程序,用指针变量作为参数。 (2)在上题的基础上将程序改为:输入3个字符串,按由小到大的顺序输出。 (3)用引用指针变量作为形参,实现3个整数由小到大输出。(4)有n个人围成一圈,顺序排号。从第1个人开始报数(从1~3报数),凡是到3的人退出圈子,问最后留下的人原来排在第几号。(5)在主函数中输入10个字符串。用另一个函数最它们排序。然后在主函数输出这10个已排好的字符串。 要求用以下方法编程: Ⅰ.指向一维数组的指针座函数参数; Ⅱ.用string数组方法。

3.程序代码 (1) #include using namespace std; int main() {void swap(int *p1,int *p2); int n1,n2,n3; int *p1,*p2,*p3; cout<<"input three integers n1,n2,n3:"; cin>>n1>>n2>>n3; p1=&n1; p2=&n2; p3=&n3; if(n1>n2) swap(p1,p2); if(n1>n3) swap(p1,p3); if(n2>n3) swap(p2,p3); cout<<"Now,the order is:"<

实验7-2-函数调用

实验7-2 函数(二) 1 【实验目的】 (1)掌握函数的嵌套调用的方法 (2)掌握函数的递归调用的方法 (3)掌握全局变量和局部变量的概念和用法 【实验要求】 (1)熟练掌握函数的嵌套调用的方法 (2)熟练掌握函数的递归调用的方法 【实验环境】 (1) Microsoft XP操作系统 (2) Microsoft VC++ 6.0 【实验内容】 1、素数https://www.360docs.net/doc/dd3376323.html,/acmhome/problemdetail.do?&method=showdetail&id=1098描述:输出100->200之间的素数的个数,以及所有的素数。 输入:无 输出:100->200之间的素数的个数,以及所有的素数。 样例输入:无 样例输出:

21 101 103 ... 197 199 2、字符串逆序https://www.360docs.net/doc/dd3376323.html,/JudgeOnline/problem.php?id=1499 题目描述:写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入:一行字符 输出:逆序后的字符串 样例输入:123456abcdef 样例输出:fedcba654321 3、字符串拼接https://www.360docs.net/doc/dd3376323.html,/JudgeOnline/problem.php?id=1500 题目描述:写一函数,将两个字符串连接 输入:两行字符串 输出:链接后的字符串 样例输入: 123 abc 样例输出 123abc 4、输出元音https://www.360docs.net/doc/dd3376323.html,/JudgeOnline/problem.php?id=1501

指针函数与函数指针的区别

指针函数与函数指针的区别 一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。来讲详细一些吧!请看下面 指针函数: 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符* 函数名(参数) 当然了,由于返回的是一个地址,所以类型说明符一般都是int。 例如:int *GetDate(); int * aaa(int,int); 函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。 int * GetDate(int wk,int dy); main() { int wk,dy; do { printf(Enter week(1-5)day(1-7)\n); scanf(%d%d,&wk,&dy); } while(wk<1||wk>5||dy<1||dy>7); printf(%d\n,*GetDate(wk,dy));

实验7 指针及其运算

实验七指针及其运算 实验目的 理解指针的概念,会定义和使用指针变量,掌握指针的运算规则,学会使用数组的指针和指向数组的指针变量。 要点提示 1.变量在内存单元的地址称为该变量的“指针”。 2.指针变量是用来存放其它变量地址的变量。 3.指针变量定义的一般形式: 类型标识符*指针变量名; 4.指针运算符 &(取变量地址运算符)和*(取值运算符)是互逆的运算符,右结合。 ++,--,+,- 运算符是按地址计算规则进行的。 5.用指针作为函数参数,可以实现“调用函数改变变量的值,在主调函数中使用这些改变的值。 6.数组的指针是指数组的起始地址(首地址),数组元素的指针是指数组元素的地址。数组名代表数组的首地址,是地址常量。 实验内容 1.指针变量的说明,初始化和使用。 2.指针作为函数参数。 3.数组的指针和指针数组的指针变量的说明和使用 4. 数组名作为函数参数 实验步骤 读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入) 1. 输入a和b两个整数,按先大后小的顺序输出。 算法提示:不交换变量的值,而是交换两个指针变量的值,使p1指向较大的数,p2指向较小的数。 #include using namespace std; main() { int *p1,*p2, 【】;/* 变量说明语句*/ int a, b; cout<<"\n Please input a and b:"; cin>>a>>b; p1=&a; p2=&b; if (a

实验10 指针2 (修复的)

《C语言程序设计》 实验报告 实验时间: 6月7号 实验班级:计算机双学位1501 实验报告总份(片)数: 1 份(片) 实验教师:饶东宁 计算机学院工一实验室 广东工业大学 《C语言程序设计》 实验报告 实验题目: 实验10 实验时间: 6月7号 实验班级:双学位1501

实验人学号: 3213010359 实验人姓名:梁雪卿 实验教师:饶东宁 计算机学院工一实验室 广东工业大学 实验10 指针2 1 实验目得 (1)进一步掌握指针得应用 (2)能正确使用数组得指针与指向数组得指针变量 (3)能正确使用字符串得指针与指向字符串得指针变量 (4)了解指向指针得指针得用法 2 实验内容 根据题目要求,编写程序(要求用指针处理),运行程序,分析结果,并进行必要得讨论分析。 (1)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3得人退出圈子,问最后留下得就是原来得第几号得人。 算法说明:

#include int main { int i,k,m,n,num[50],*p; scanf("n=%d",&n); p=num; for(i=0;i

{ *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("The last one is NO、%d\n",*p); return 0; } 运行结果: 分析与思考: 以1到n为序给每个人编号,i为每次循环时计数变量,k为按

实验七 函数

实验七函数(一) 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个分数中最高的分数所对应的学生和课程

实验7-指针

《C语言程序设计》实验报告实验序号:7 实验项目:指针 一、实验目的及要求 1、通过实验掌握指针的定义和使用指针变量; 2、掌握使用指针对数组和字符串进行操作; 3、掌握函数中指针类型参数的使用; 4、要求采用指针方法完成。 二、实验设备(环境)及要求 使用Turbo C 或Visual C++ 6.0;windows系列操作系统的环境。 三、实验内容与步骤 1.输入运行下面这个程序,观察并分析结果: #include "stdio.h" void main() { int a[]={2,3,4,5,6}; int *p1; char *p2="computer\n"; p1=a; printf("%d\n",p1+2); printf("%d\n",*(p1+2)); p1=a+2; printf("%d\n",p1+2); printf("%d\n",*(p1+2)); printf(p2+2); printf("%s",p2+2); } 运行结果截图:

2.以下程序调用invert 函数按逆序重新放置a 数组中的值,a 数组中的值在main 函数中读入,请填空。 #include "stdio.h" void invert(int *s,int i,int j) { int t; if(i

实验七 公式与函数的使用

实验七公式与函数的使用 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键,先删除单元格中的内容;再单击自动求和按钮右侧的向下箭头,弹出“常用函数”菜单。 ②选择“平均值”,会自动填充函数并用闪动的边框围住被选择的区域,再用鼠标选定

指向函数的指针

指向函数的指针 c/c++ 2010-11-20 13:17:02 阅读41 评论0 字号:大中小订阅首先看这个程序: #include using namespace std; void max(int a, int b) { cout<<"now call max("<b?a:b; cout<

我曾经写过一个命令行程序,有很多命令,于是构着了一个结构的数组,大概是这样 struct{ char *cmd_name; bool (*cmd_fun)(); }cmd_info_list[MAX_CMD_NUM]; 程序中得到一个用户输入的命令字符串后,就匹配这个数组,找到对应的处理函数。 以后每次添加一个命令,只需要加个函数,然后在这个数组中加一个记录就可以了,不需要修改太多的代码。 这可以算是一种用法吧。呵呵。 Windows 中,窗口的回调函数就用到了函数指针。 用VC向导 New Projects ----> Win32 Application ----> A typical "Hello World!" application 其中的WndProc 是WNDPROC 类型的函数typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM); WndProc 作为窗口的回调函数,用来填充WNDCLASSEX 结构。 WNDCLASSEX wcex; wcex.lpfnWndProc = (WNDPROC)WndProc; void ListTraverse(LinkList L,void (*visit)(int)) { Link p; p=L->next; while(p) { visit(p->data); p=p->next; } return OK; } void print(int c) { printf("%d",c); } ListTraverse(L,print); 这算是个例子吧??? #include #include #include double Add (double x, double y) { return x+y; } double Sub (double x, double y) { return x-y; } double Mul (double x, double y)

实验7 指针习题及参考答案

上机实验十指针 一.目的要求 1.掌握指针的基本概念; 2.掌握指针变量的定义和初始化; 3.掌握用下标、数组名或指针等不同方式引用数组元素; 4.掌握数组名作函数参数的方法; 5.请添加签名,本实验均用指针方法处理。 二.实验内容 【实验题1】 1)程序填空,交换指针p1,p2所指向的变量。(10 分) # include void main ( ) { int a=1,b=2, *p1, *p2, pt; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); pt=p1 ; p1=p2 ; p2=pt ;//交换指针变量p1,p2所指向的变量printf(“*p1=%d, *p2=%d \n”,*p1,*p2); } 运行结果: 2)程序填空,交换指针p1,p2所指变量的值。 # include void main ( ) { int a=1,b=2, *p1, *p2, temp; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); temp=*p1 ; *p1=*p2 ; *p2=temp ;///交换指针p1,p2所指变量的值 printf(“*p1=%d, *p2=%d \n”, *p1,*p2); } 运行结果: 【实验题2】程序填空:输入三个整型变量i,j,k的值。请设置三个指针变量p1,p2,p3,分别指向i,j,k。

然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。输出交换后i,j,k的值。(10 分) i j k 分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。设temp 为临时变量,则temp=i; i=k; k=j; j=temp ,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k. 源程序: #include void main ( ) { int i,j,k,temp, *p1=&i ,*p2=&j,*p3= &k ; printf("Input i j k: "); scanf("%d%d%d",&i,&j,&k); //输入i j k //i-->j-->k-->i temp=*p1 ; *p1=*p3 ; *p3=*p2 ; *p2= temp; printf("%d %d %d \n", *p1,*p2, *p3);//输出轮换后的i j k } 输入:1 2 3 输出: 【实验题3】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。(10 分) # include void main ( ) { int a,b,c, *p1, *p2, *p3; scanf(“%d%d%d”,&a,&b,&c); // 令p1指向最大值 p1=(a>b)?&a:&b ; //p1指向a,b中较大者 if(*p1c ) p2=&c; printf(“max=%d, min=%d”, *p1,*p2 ); printf("Hello,c\n" ); }

相关文档
最新文档