C语言基础练习之数组
2017-11-28 11:13
316 查看
1,字符串的循环移动
#include <stdio.h> #include <string.h> void func(char buf[], int steps) { int i = 0, j = 0, lenth = 0; char temp = 0; lenth = strlen(buf); for (i=0; i<steps; i++) // 等同于 while (steps--) { temp = buf[lenth-1]; for (j=lenth-1; j>0; j--) { buf[j] = buf[j-1]; } buf[0] = temp; } } int main(void) { char buf[] = "123456789"; int steps = 0; printf("输入要移动的位数:"); scanf("%d", &steps); printf("buf = [%s].\n", buf); func(buf, steps); printf("buf = [%s].\n", buf); return 0; }
2,数组的首位对调排序
#include <stdio.h> void func(int arr[], int lenth) { int i = 0, temp = 0; for (i=0; i<lenth/2; i++) { temp = arr[lenth-1-i]; arr[lenth-1-i] = arr[i]; arr[i] = temp; } } int main(void) { int i = 0; int arr[5] = {1, 2, 3, 4, 5}; //调用函数,首尾元素对调{5, 4, 3, 2, 1} func(arr, 5); for (i=0; i<5; i++) { printf("arr[%d] = %d\n",i,arr[i]); } return 0; }
3,二分法查找有序特定元素列
//正确返回数组下标,没有这个数返回-1. int search_arr_element(int arr[], int left, int right, int data) { //定义保存中间下标的变量 int mid = 0; while (left <= right) { //中间下标赋值 mid = (left + right) / 2; //比较符合条件的下标 if ( data > arr[mid]) { left = mid + 1; } else if (data < arr[mid]) { right = mid - 1; } else { printf("找到了%d下标%d.\n", data, mid); return mid; } } printf("%d查无此数.\n", data); return -1; } int main(void) { int arr[5] = {2, 5, 8, 11, 13}; search_arr_element(arr, 0, 4, 11); return 0; }
递归的方式(二分法)
void search(int arr[], int left, int right, int data) { int mid = (left + right) / 2; //回归条件(得到正确结果) if (data == arr[mid]) { printf("找到数组下标%d的数据%d.\n", mid, data); return mid; } //回归条件(得到非正确结果) if (left > right) { printf("找不到数据%d.\n", data); return; } if (data > arr[mid]) { search(arr, mid+1, right, data); } if (data < arr[mid]) { search(arr, left, mid-1, data); } }
相关文章推荐
- 编程练习——求无序数组第k小的数
- java例程练习(数三退一[用数组模拟])
- java例程练习(数组复制与arraycopy)
- CH7--数组,p128,练习二
- 练习五 数组交换
- 日常练习:lintcode:50. 数组剔除元素后的乘积
- 2018年全国多校算法寒假训练营练习比赛(第五场) Big Water Problem(树状数组)
- 简单数组练习(for+if)
- java练习——数组去重
- C#练习记录(请计算出一个整型数组的平均值。{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }。要求:计算结果如果有小数,则显示小数点后两位(四舍五入)。Math.Round())
- JSP简单练习-数组应用实例
- 动态数组的声明与例子练习
- 函数、数组练习
- sdut 面向对象程序设计上机练习八(对象数组)
- java-数组静态初始化、选择排序、冒泡排序、数组的折半查找、折半查找练习
- Java数组练习
- 【LeetCode004-005算法/编程练习C++】--两个数组的中间数,找出最长回文子串
- 练习系列 - 5、求子数组的最大和
- 练习找出数组中最大的一个数
- javaSE_06Java中的数组(array)-提高练习