习题 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++]);
}
相关文章
- 合理的实现输入校验
- 经典CNN网络:Resnet18网络结构输入和输出[通俗易懂]
- java输入Scanner基本用法[通俗易懂]
- C语言编写一个程序,输入10个整数,统计并输出其中正数,负数和零的个数。
- C++ 中的基本输入u002F输出
- QQ对话框提示“当前网页非官方页面,请勿输入QQ帐号和密码,如需访问,请复制后使用浏览器访问”怎么办?
- Java从键盘上输入与输出
- 【数据挖掘】神经网络 后向传播算法 向前传播输入 案例计算分析 ( 网络拓扑 | 输入层计算 | 隐藏层计算 | 输出层计算 )
- 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( LTI 系统单位脉冲响应 | 卷积 | 卷积推导过程 )
- 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 周期性分析 | 卷积运算规律 | 交换律 | 结合律 | 分配率 | 冲击不变性 )
- 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 线性卷积起点定理 | 左边序列概念 | 推理 )
- 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 线性卷积计算案例二 | 计算 卷积 )
- [EMI知识充电节] BUCK输入环路和输出环路哪个更重要?
- 网络工程师学Python-23-命令行输入input()
- SAP获取函数/接口输入参数、输出参数、表结构等信息详解编程语言
- Java字节流和字符流的区别及如何区分输入流和输出流
- Linux 管道:实现输出到输入的高效操作(linux管道操作)
- 输出重定向Linux SH管道:输入输出重定向(linuxsh输入)
- 用大写字母输入 Linux 命令以将其作为 sudo 用户运行
- Linux进程重定向:如何转移输入/输出流的目标?(linux进程重定向)
- Redis:安全验证的重要性(redis输入密码)
- 安全访问Redis借助密码器输入保护(redis输入密码器)
- 让Redis输出中文不再乱码(redis输入中文乱码)
- 上海科技大学曹煊博士:Magic Leap负责光场的显示输出,我们负责光场的采集输入
- 限制字符输入数功能(jquery版和原生JS版)
- SqlServer中存储过程中输入和输出参数(简单实例一看就懂)
- php中filter函数验证、过滤用户输入的数据
- python基础教程之popen函数操作其它程序的输入和输出示例