
C语言习题
小小小小关同学
路虽远,行则将至。
展开
-
数组旋转问题【有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数】
目录一、问题描述:二、解题思路三、代码实现四、运行结果一、问题描述:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。比如原数组:1 2 3 4 5 6 7(n=7,m=4)===>旋转后4 5 6 7 1 2 3二、解题思路第一步:先将数组前n-m个数逆置第二部:再将数组剩下的m个数逆置第三步:最后将数组整体逆置三、代码实现#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>//4 . 有n原创 2022-05-01 23:06:27 · 5032 阅读 · 0 评论 -
递归实现数组原地逆转
题目要求编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列,不是逆序打印。要求:不能使用C函数库中的字符串操作函数。比如:char arr[] = “abcdef”,逆序之后数组的内容变成:fedcba代码实现int my_strlen(const char* a) { if (*a != '\0') { return 1 + my_strlen(a + 1); } else {原创 2022-04-25 14:11:48 · 880 阅读 · 11 评论 -
strlen()详解及模拟实现
strlen函数详解以及模拟实现原创 2022-04-10 00:36:41 · 1105 阅读 · 5 评论 -
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果。
问题描述计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果。解题思路题目的规律十分明显,每一项的分子都是1,而分母是由1到100逐渐递增的,并且在’+‘和’-'循环切换。假设每一项都是正号,那我们直接递增。那么对于这一题我们可以设置一个flag变量赋值为1,flag乘以我们的通项然后累加,之后令flag=-flag来改变下一次的符号。代码实现int main() { //计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/1原创 2022-04-17 21:07:49 · 1430 阅读 · 2 评论 -
用简单选择排序对十个数字进行排序,要求十个数字从键盘输入。
问题描述用简单选择排序对十个数字进行选择排序,要求十个数字从键盘输入。例如从键盘输入12 14 5 8 3 13 19 7 21 9 将输出:3 5 7 8 9 12 13 14 19 21。什么是简单选择排序工作原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法步骤:1、设待排序的记录存放在数组a[1…n]中。第一趟从a[1]开姶,通过 n-1 次比较,从n个原创 2022-04-14 17:06:35 · 3091 阅读 · 5 评论 -
约瑟夫环经典问题(c语言利用数组和指针解决)
问题描述现在有m个人首尾相连围成一圈将他们一次编号为:1,2,3…n,然后从编号为1的人开始报数 1、2、3…n,报到n的这个人将离开队列,然后按照循环队列从下一个人从新按照以上规则报数。如此循环下去求最后获胜者的编号是多少?并讲每次出列的人的编号一次打印出来。举一个简单的例子:现在有6个人围成一圈,依次编号为:1、2、3、4、5、6,按照1、2、3报数。那么出队的顺序就是:3、6、4、2、5。最后留下的就是1号。解题方法c语言数组解决代码以及思想如下:int main(){ int pe原创 2022-04-07 17:23:25 · 4805 阅读 · 8 评论 -
输入十个整数,将其中最小的与第一个交换,最大的与最后一个交换。
问题描述从键盘输入十个整数,将其中最小的数字与输入的第一个数字交换,将最大的数字与输入的最后一个数字交换。例:解决思路先在数组中遍历一遍,找到其中的最大值与最小值;再分别将最小值与数组中第一个数字交换,最大的值与最后一个数字交换,然后将交换后的结果输出。代码实现//获取数组最大值int getMax(int* a, int n){ int max = 0; for (int i = 1; i < n; i++) { if (a[max] < a[i]) { ma原创 2022-04-13 11:46:43 · 2913 阅读 · 3 评论