①
编写函数fun(int *p1,int *p2,int *p3),其功能是:求p1所指一维数组中的所有能被5整除的数的个数以及这些所有能被5整除的数的积;分别将所求得的个数以及积通过指针p2和p3返回主函数。
主函数中,由键盘输入3个整数存入一维数组, 调用函数fun后, 在主函数输出最后的结果。
例如:
输入: 10 2 5
输出: 2 50
方案一:
#include<stdio.h>
//函数功能:寻找数组中能被5整除的数的个数及其乘积
void fun(int *p1,int *p2,int *p3)
{
int count=0; //用以记录能被5整除的数的个数
int product=1; //用以记录乘积
for(int i=0;p1[i]!='\0';i++) //遍历数组
{
if(p1[i]%5==0) //若某数能被5整除
{
count++;
product*=p1[i];
}
}
*p2=count; //令p2指向的数为count的值
*p3=product; //令p3指向的数为product的值
}
int main()
{
int a[4]={0};
scanf("%d %d %d",&a[0],&a[1],&a[2]); //将输入的三个值作为数组前三个数
fun(a,&a[3],&a[4]); //数组第4、5个值用以记录能被5整除的数的个数及其乘积
printf("%d %d\n",a[3],a[4]);
return 0;
}
# include <stdio.h>
void fun(int *p1,int *p2,int *p3)
{
int i;
for(i=0;i<3;i++,p1++)
{
if((*p1)%5==0)
{
(*p2)++;
*p3=(*p3)*(*p1);
}
}
}
int main()
{
int a[3];
int i, p2=0,p3=1;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
fun(a,&p2,&p3);
printf("%d %d",p2,p3);
return 0;
}
②
有5个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能,在主函数中输入5个整数和输出调整后的5个数
方案一:
#include<stdio.h>
//函数功能:移动数字
void renew(int *p,int m)
{
for(int i=5-1;i>=0;i--)
{
*(p+i+m)=*(p+i); //将数组整体往后移动m位
}
for(int i=0;i<m;i++)
{
*(p+i)=*(p+i+5); //将后端数字填补至前方空白处
}
}
int main()
{
int a[10];
int m;
for(int i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
renew(a,m);
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
return 0;
}
方案二【函数递归】:
#include "stdio.h"
int main()
{
void move(int [20],int,int);
int number[20],n=5,m,i;
for (i=0; i <n; i++)
scanf("%d",&number[i]);
scanf("%d",&m);
move(number,n,m);
for (i=0; i <n; i++)
printf("%d ",number[i]);
printf("");
return 0;
}
void move(int array[20],int n,int m) {
int *p,array_end;
array_end=*(array+n-1);
for (p=array+n-1; p>array; p--)
*p=*(p-1);
*array=array_end;
m--;
if (m>0) move(array,n,m);
}
③
编写函数计算一维实型数组前n个元素的最大值、最小值和平均值。数组、n、最大值、最小值和平均值均作为函数形参,函数无返回值;在主函数中输入数据,调用函数得到结果。(要求用指针方法实现)
#define _CRT_SECURE_NO_WARINGS
#include<stdio.h>
//函数功能:计算最大值、最小值、平均值
void calculate(float *a,int n,float *max,float *min,float *aveg)
{
*max=*min=*aveg=a[0]; //三个值均初始化为数组第一个数
for(int i=1;i<n;i++)
{
if(a[i]>*max)
*max = a[i];
else if(a[i]<*min)
*min=a[i];
*aveg+=a[i];
}
*aveg/=n;
}
int main()
{
float a[100] = { 0 };
int n;
float max,min,aveg;
scanf("%d", &n);
for (int i = 0;i < n;i++)
{
scanf("%f", &a[i]);
}
calculate(a,n,&max,&min,&aveg);
//输出
printf("max:%.2f\n", max);
printf("min:%.2f\n", min);
printf("aveg:%.2f\n",aveg);
return 0;
}