函数实验报告
嘉应学院 计算机学院
实 验 报 告
课程名称
指导老师
班 级 C 语言程序设计 陈广明 实验名称 实验时间 姓 名 指针 实验地点 提交时间 学 号 锡科 2014.12.22 141110071 2014.12.17 蔡耀威 1402
一、实验目的和要求
(1)
(2)
(3)
(4)
(5) 熟悉掌握指针的指针变量的定义和使用. 掌握数组的指针和指向数组的指针变量的使用。 掌握字符串指针和指向字符串的指针变量的使用。 掌握使用指向函数的指针变量和函数指针的使用。 了解多重指针的概念及其使用方法。
二、 实验环境、内容和方法
1、根据题目要求,编写程序(要求用指针处理),运行程序,分析结果,并进行必要的讨论分析。
(1) 有n 个人围成一圈,顺序排号。从第一个人开始报数(从1道3报数),凡
报道3的人退出圈子,问最后留下的是原来第几号的人。
(2) 写一函数,将一个3﹡3的整型矩阵转换。
(3) 有一个班4个学生,5门课程
①求第一门课程的平均分。
②找出有两门以上课程不及格的同学,输出他们的学号和全部课程成绩及平均成绩。
③找出平均分成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。
(4) 将n 个数按输入时顺序的逆序排列,用函数实现
①在调用函数时用数组名作为函数参数。
②函数实参改为用指向数组首元素的指针,形参不变。
③分析以上二者的不同。
2、实验方法:通过上机操作完成各内容。
实验用PC 机一台,使用操作系统为Windows XP Professional,安装OFFICE 2003、VC++、VB 、VFP 等软件。
三、实验过程描述
1打开界面后,单击文件,点击“新建”,或者Ctrl+N,出现文本框后点
击文件中的C++ Source File,点击“确定”。输入以下(1)程
序
#include
int main()
{int i,k,m,n,num[50],*p;
printf(“\ninput number of person: n=”);
scanf(“%d”,&n);p=num;
for(i=0;i
*(p+i)=i+1;
i=0;
m=0;
while(m
{if(*(p+i)!=0) k++;
if(k==3)
{*(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;
}
}
确定没有错误后,输入8,可得“The last one is NO.7”
输入(4)的程序
#include
int main()
{void sort(char *p,int m);
int i,n;
char *p,num[20];
printf("input n:");
scanf("%d",&n);
printf("please input these numbers:\n");
for(i=0;i
scanf("%d",&num[i]);
p=&num[0];sort(p,n);
printf("now,the sequence is:\n");
for(i=0;i
printf("%d",num[i]);
printf("\n");
return 0;
}
void sort(char *p,int m)
{int i;
char temp,*p1,*p2;
for(i=0;i
{p1=p+i;p2=p+(m-1-i);
temp=*p1;*p1=*p2;*p2=temp;
}
}
输入10,再输入10 9 8 7 6 5 4 3 2 1
可得Now,the sequence is:
1 2 3 4 5 6 7 8 9 10
四、结果分析
1第一个程序定义了I,k.m,n, 数组num[50],*p为整型变量,后输入n 的值,将数组num 的首地址送给指针变量p ,后给指针变量p 赋值,后进行算法(将每次报道3的同学排除,直至最后剩下一个) 。
2注意函数定义中的temp 不要写成*temp,因为如果这样写的话,那temp 为指针变量,但不知道它指向哪里,不符合语法,是个错误的写法。还有i
3在实参传给形参时一定要符合要求,即类型一致,不能不一致,否则就是不按规矩办事,会出现错误。