每日一练

目录

1.1

1162:题目描述

             有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。

1.2  答案:


1.1

1162:题目描述

有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。


题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}


输入

输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。

输出

输出n个整数,由空格隔开。输出占一行。

1.2

答案:

#include <stdio.h>
#include <stdlib.h>
void fx(int p[],int n,int m); 
int main()
{
	int n,m,i,*p;
	scanf("%d",&n);
	p=(int *)malloc(n*sizeof(int));//指针*p指向数组p 
	for(i=0; i<n; i++)
		scanf("%d",p+i);
	scanf("%d",&m);
	fx(p,n,m);
	for(i=0; i<n; i++)
		printf("%d ",p[i]);
	return 0;
}
void fx(int p[],int n,int m)
{
	int i,j,t;
	for(i=0; i<m; i++)        //循环m次,代表移动m次 
	{
		t=p[n-1];             //保存最后一个
		for(j=n-2; j>=0; j--)  //把前面n-1个 从最后一个开始,赋值到下一个位置,循环n-1次 
			p[j+1]=p[j];
		p[0]=t;               //第一个位置赋值为(保存的最后一个)。
	}
}

 ps:

思路:
每次  先保存最后一个,再把前面n-1个从最后一个开始,赋值到下一个位置,
再把第一个位置赋值为(保存的最后一个)。

关于malloc函数:

mallocnew 函数

new 返回指定类型的指针,并且可以自动计算所需要大小。例如:

      int *p;

  p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);

  或:

  int* parr;

parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;

malloc 则必须由我们计算需要字节数sizeof(int)

(sizeof(),括号内为变量类型,该函数将自动翻译为类型所对应的字节数,例如sizeof(int)=4字节

,并且在返回后强行转换为实际类型的指针。((强行转化类型 *)

    int* p;

p = (int *) malloc (sizeof(int));

p = (int *) malloc ( sizeof(int) * 100 );// 申请出一段连续的内存

第一、malloc 函数返回的是 void * 类型,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。

  第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。如果你写成:

  int* p = (int *) malloc (1);

  代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空。

p = (int *) malloc (sizeof(int));  ==   p = (int *) malloc (4);

malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。

具体解析如下链接:

(52条消息) malloc函数详解_xwdreamer的专栏-CSDN博客_malloc函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值