C语言:指针内容的小练习

编写函数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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值