题一:模拟实现strlen
strlen的模拟(递归实现)
递归和非递归分别实现strlen
非递归
#include <stdio.h> int my_strlen(char* arr) { int i = 0; int count = 0; while( *arr != '\0' ) { count++; arr++; } return count; } int main() { int n = 0; char arr[] = "ab111cdef"; n = my_strlen(arr); printf("%d\n", n); return 0; }
递归
#include <stdio.h> my_strlen(char* arr) { int count = 0; if (*arr == '\0') { return 0; } else { count++; count = count + my_strlen(++arr); } return count; } int main() { int n = 0; char arr[] = "ab111cdef"; n = my_strlen(arr); printf("%d\n", n); return 0; }
题二:求阶乘
求阶乘
递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
非递归
#include <stdio.h> int my_factorial(int n) { int i = 0; int sum = 1; for (i = 1; i <= n; i++) { sum *= i; } return sum; } int main() { int n = 0; int a = 0; scanf("%d", &n); a = my_factorial(n); printf("%d\n", a); return 0; }
递归实现
#include <stdio.h> int my_factorial(int n) { int sum = 0; if (n == 1) { return 1; } else { return sum = n * my_factorial( n-1 ); } } int main() { int n = 0; int a = 0; scanf("%d", &n); a = my_factorial(n); printf("%d\n", a); return 0; }
题三:递归打印
打印一个数的每一位
递归方式实现打印一个整数的每一位
#include <stdio.h> void my_int(int n) { int one = 0; if ((one = n % 10) > 0) { my_int(n / 10); printf("%d ", one); } } int main() { int n = 0; scanf("%d", &n); my_int(n); return 0; }
题四:操作数组
使用函数实现数组操作
创建一个整形数组,完成对数组的操作
实现函数init() 初始化数组为全0
实现print() 打印数组的每个元素
实现reverse() 函数完成数组元素的逆置。
要求:自己设计以上函数的参数,返回值。
#include <stdio.h> void init(int* arr, int sz) { int i = 0; for (i = 0; i <sz ;i++) *(arr + i) = 0; } void print(int* arr,int sz) { int i = 0; for (i = 0; i < sz+1; i++) { printf("%d ", arr[i]); } printf("\n"); } void reverse(int* arr, int sz) { int tmp = 0; int i = 0; for (i = 0; i <= (sz / 2); i++) { tmp = (arr[i]); (arr[i]) = (arr[sz]); (arr[sz]) = tmp; sz--; } } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,0 }; int sz = 0; sz = sizeof(arr) / sizeof(arr[0]) - 1; reverse(&arr, sz); print(&arr,sz); init(&arr,sz); print(&arr, sz); return 0; }
题五:冒泡排序
冒泡排序
实现一个对整形数组的冒泡排序
#include <stdio.h> int main() { int arr[] = {3,4,6,8,1,2,5,7,9,0}; int sz = 0; sz = sizeof(arr) / sizeof(arr[0]) - 1; int i = 0; int j = 0; for (j = 0;j <sz;j++ ) { for (i = 0; i < sz-j; i++) { // int isChange = 0;优化路线 int tmp = 0; if (arr[i] >= arr[i + 1]) { tmp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = tmp; // isChange = 1; } } //if(!isChange) // return;如果后面没有交换说明已经排好了,直接退出,(需要输出就用break)。 } for (i = 0; i < 10; i++) { printf("%d ",arr[i]); } return 0; }
题六:交换数组
【一维数组】交换数组
将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include <stdio.h> int main() { char arr1[20] = "abcde"; char arr2[20] = "zxcvb"; int tmp = 0; int right = sizeof(arr1)/sizeof(arr1[0] - 1); int len = 0; int i = 0; for (i = 0; i < right; i++) { tmp = arr1[i]; arr1[i] = arr2[i]; arr2[i] = tmp; } printf("%s\n", arr1); printf("%s\n", arr2); return 0; }