登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] C语言寒假笔记

[复制链接]
发表于 2021-1-15 11:32:16 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: 看B站的视频,之后做编程题,递归算法与非递归算法
开始时间: 2021-01-15
结束时间: 2021-01-15
题目    有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。编写函数实现上述功能,在主函数中输入n个整数,并输出调整后的n个数。假设是20个数 移动4位
1.递归算法
2非递归算法

1.
#include <stdio.h>
void move (int array[],int n,int m);
main()
{
        int number[20],n=20,m=4,i;
        for(i=0;i<20;i++)//循环输入数组中的元素
        scanf("%d",&number[i]);
        move(number,n,m);//进入函数里
        for(i=0;i<20;i++)//打印出来变化后的数组
        printf("%d",number[i]);
}
void move (int array[],int n,int m)//定义函数框架
{
        int *p,array_end;//定义一个整型指针,array_end关键字用来存放最后一位数
        array_end=*(array+n-1);//将最后一位数赋给array_end
        for(p=array+n-1;p>array;p--)//进入循环体进行一次逐位移动
                *p=*(p-1);
        *array=array_end;//最后一位赋给第一位
        m--;
        if(m>0) move(array,n,m);//和上一条语句共同决定移动次数,递归的体现
}

2.非递归算法

#include<stdio.h>
main()
{
        int array_end=0,a,j;
        int array[20],n,m,i;
        n=20;
        for(i=0;i<20;i++)
        scanf("%d",&array[i]);//输入数组的各元素
        for(m=4;m>0;m--)//4次
        {       
                array_end=array[19];//把数组最后一个数赋给array_end
                for(j=20;j>0;j--)
                {
                array[n-1]=array[n-2];//数组中前一个赋值给后一个,从后往前进行
                n--;
                }
                array[0]=array_end;//最后一位赋给第一位
                n=20;//恢复n的值
        }
        for(a=0;a<20;a++)
                printf("%d ",array[a]);//打印出来新的数组
}




好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表