C语言实验6 实验报告(指针)
C语言程序设计实验报告
实验六 使用指针的程序设计(1)
班级 2012153 学号 201215317 姓名 杜顺永
一、实验目的
(1)掌握指针的概念,会定义和使用指针变量;
(2)能正确使用数组的指针和指向数组的指针变量;
(3)熟悉指针做函数参数的使用方法;
(4)能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容及步骤
1、按要求完善程序
下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。
程序代码如下所示:
#include
#define N 20
void fun(int *a,int n,int *odd,int *even)
{
int i;
*odd=0;
*even=0;
for(i=0;i
{
if(*a%2==0)
*even=*even+*a;
else
*odd=*odd+*a;
}
}
void main()
{
int a[N]={1,9,2,3,11,6},i,n=6,odd,even;
printf("The original data is:\n");
for(i=0;i
printf("%5d",*(a+i));
printf("\n\n");
fun(a,n,&odd,&even);
printf("The sum of odd numbers:%d\n",odd);
printf("The sum of even number:%d\n",even);
}
运行结果:
2.假设每班人数最多不超过30人,具体人数由键盘输入,试编程打印最高分及其学号。
要求:用一维数组和指针变量作函数参数,编程打印某班一门课成绩的最高分和学号。请编写相应的程序代码,并调试运行出正确结果。
程序代码:
#include
void main()
{
float search(float *p,int n);
int num[30],*p=num,i;long int n;
float score[30],*q=score,temp;
printf("请输入班级人数n(n<=30):");
scanf("%d",&n);
for(i=0;i
{
printf("请依次输入学号、成绩:\n");
scanf("%d%f",p,q);
}
temp=search(score,n);
printf("最高分 学号 如下:\n");
for(i=0;i
if(score[i]==temp)
printf("%5.1f%15d\n",score[i],num[i]);
}
float search(float *p,int n)
{
int i,j;
float max=*p;
for(i=0;i
if(*p>max)
max=*p;
return(max);
}
运行结果:
3.矩阵转置;
要求:从主程序中输入一个3*3的整形矩阵,调用一个函数,将此矩阵转置,用指针作为函数的形参,在主程序中输出转置后的矩阵。
程序代码:
#include
void main()
{void ex(int(*p)[3],int *q);
int str[3][3],i,j;
printf("请按行输入矩阵(3*3):\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%4d",&str[i][j]);
}
ex(str,str[0]);
printf("逆置后矩阵为:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",str[i][j]);
printf("\n");
}
}
void ex(int(*p)[3],int *q)
{
int i,temp;
for(i=0;i<2;i++)
{
p++;q++;
temp=*q;
*q=**p;
**p=temp;
}
temp=*(*p+1