zl程序教程

您现在的位置是:首页 >  其他

当前栏目

习题 8.4 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图8.43。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。

输入输出 实现 函数 功能 位置 顺序 调整
2023-09-14 09:06:57 时间

C程序设计(第四版) 谭浩强 习题8.4 个人设计

习题 8.4 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图8.43。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。

代码块:

方法1:

#include <stdio.h>
void sort(int *s, int n, int x);     //定义排序函数
int main()
{
	int n[10], *p, m;
	for (p=n, printf("Please enter 10 numbers: "); p<n+10; scanf("%d", p++));   //输入10个整数
	printf("Please enter move number: ");                                       //输入要移动的个数
	scanf("%d", &m);
	sort(n, 10, m);                                                             //调用排序函数
	for (p=n, printf("Sort by: "); p<n+10; printf("%d ", *p++));                //输出排序后的10个整数
	printf("\n");
	return 0;
}
//排序函数
void sort(int *s, int n, int x)
{
	int *i, j, *k, t[10];
	for (i=s+n-x, j=0; i<s+n; t[j++]=*i++);
	for (i=s+n-x-1, k=s+n-1; k>=s+x; *k--=*i--);
	for (j=0; j<x; *s++=t[j++]);
}

方法2:(利用动态分配内存和指针)

#include< stdio.h>
#include <stdlib.h>
void input(int *pNum, int n);                    //定义输入函数
void print(int *pNum, int n);                    //定义输出函数
void exchange(int *pNum, int mov, int n);        //定义交换函数
int main()
{
    int *numb, len, move_num;                    //定义数组,数组长度,移动个数
	printf("Please enter length: ");             //此两行输入数组长度
	scanf("%d", &len);
	numb=(int *)malloc(len*sizeof(int));         //给数组分配空间
    input(numb, len);                            //调用输入函数
	printf("Please enter move number: ");        //此两行为输入移动的长度
	scanf("%d", &move_num);
    exchange(numb, move_num, len);               //调用交换函数
    print(numb, len);                            //调用输出函数
    system("pause");
    return 0;
}
//输入函数
void input(int *pNum, int n)
{
    int *p;
	for (p=pNum, printf("Please enter %d numbers: ", n); p<pNum+n; scanf("%d", p++));
}
//输出函数
void print(int *pNum, int n)
{
	int *p;
	for (p=pNum, printf("New line: "); p<pNum+n; printf("%d ", *p++));
    printf("\n");
}
//交换函数
void exchange(int *pNum, int mov, int n)
{
    int *p, i, j, *temp;
    temp=(int *)malloc(mov*sizeof(int));
	for (p=pNum+(n-mov), i=0; i<mov; *(temp+i++)=*p++);
	for (p=pNum+(n-mov-1), j=n-1; j>=mov; *(pNum+j--)=*p--);
	for (p=pNum, i=0; p<pNum+mov; *p++=*(temp+i++));
}

方法3:

#include <stdio.h>
#include <stdlib.h>
void sort(int *s, int n, int x);     //定义排序函数
int main()
{
    int n[10], *p, m;
    for (p=n, printf("Please enter 10 numbers: "); p<n+10; scanf("%d", p++));   //输入10个整数
    printf("Please enter move number: ");                                       //输入要移动的个数
    scanf("%d", &m);
	for (; m<0||m>10; printf("Error! Retry!\nPlease enter move number: "), scanf("%d", &m));
    sort(n, 10, m);                                                             //调用排序函数
    for (p=n, printf("Sort by: "); p<n+10; printf("%d ", *p++));                //输出排序后的10个整数
    printf("\n");
	system("pause");
    return 0;
}
//排序函数
void sort(int *s, int n, int x)
{
    int *i, j, *k, *m, t[10];
    for (i=s+n-1, j=0, m=s+n-x-1, k=s+n-1; i>=s+n-x||k>=s+x; t[j++]=*i--, *k--=*m--);
    for (j=0, m=s+x-1; j<x; *m--=t[j++]);
}