C语言练习题

embedded/2025/2/9 11:55:03/

文章目录

  • 1. 递归实现将字符串str中的元素逆序
  • 2. 对数组arr进行冒泡排序(升序)
  • 3. 对数组从下标low到下标hihg区间内的元素进行快速排序(升序)
  • 4. 在数组中利用二分查找(折半查找)目标关键字
  • 5. 求n的阶乘
  • 6. 判断year是否为闰年
  • 7. 求两个数的最大公约数(暴力求解)
  • 8. 求两个数的最大公约数(辗转相除法)
  • 9. 统计1~100的所有整数中,出现多少个数字9
  • 10. 计算1/1 + 1/2 + 1/3 + 1/4 + ... + 1/100的和
  • 11. 打印99乘法表
  • 12. 求一个数的每位之和(递归)
  • 13. 求一个整数n的k次方

1. 递归实现将字符串str中的元素逆序

void ReverseStr2(char* str) {char temp = *str;int len = strlen(str);*str = *(str + len - 1);*(str + len - 1) = '\0';if (strlen(str + 1) > 1) ReverseStr2(str + 1);*(str + len - 1) = temp;
}

2. 对数组arr进行冒泡排序(升序)

void BubbleSort(int arr[], int size)
{// 这里求sizeof(arr)是错误的,因为arr实际上是一个指针,其长度是固定的8个字节// int size = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < size - 1; i++) {int flag = 0;for (int j = size - 1; j > i; j--) {if (arr[j - 1] > arr[j]) {swap_2(&arr[j - 1], &arr[j]);flag = 1;}}if (!flag) return;}
}

3. 对数组从下标low到下标hihg区间内的元素进行快速排序(升序)

/// <summary>
/// 对数组从下标low到下标hihg区间内的元素进行快速排序(升序)
/// </summary>
/// <param name="arr">整形数组</param>
/// <param name="low">起始元素下标</param>
/// <param name="high">终止元素下标</param>
void QuickSort(int arr[], int low, int high) {if (low < high) {int pivot_pos = Partition(arr, low, high);QuickSort(arr, low, pivot_pos - 1);QuickSort(arr, pivot_pos + 1, high);}
}
int Partition(int arr[], int low, int high) {int pivot = arr[low];while (low < high) {while (low < high && arr[high] >= pivot) --high;arr[low] = arr[high];while (low < high && arr[low] <= pivot) ++low;arr[high] = arr[low];}arr[low] = pivot;return low;
}

4. 在数组中利用二分查找(折半查找)目标关键字

/// <summary>
/// 二分查找
/// </summary>
/// <param name="a">数组名</param>
/// <param name="size">数组长度</param>
/// <param name="key">目标关键字</param>
/// <returns>
/// 查找成功返回目标关键字在数组中的下标
/// 否则返回-1
/// </returns>
int BianrySearch(int a[], int size,int key) {int low = 0;int high = size;int mid;while (low <= high) {mid = (low + high) / 2;if (a[mid] == key) return mid;else if (a[mid] < key) low = mid + 1;else high = mid - 1;}return -1;
}

5. 求n的阶乘

int factorial(int n) {if (n == 1) return 1;else return n * factorial(n - 1);
}

6. 判断year是否为闰年

/// <summary>
/// 判断year是否为闰年
/// </summary>
/// <param name="year">年份year</param>
/// <returns>是闰年返回1, 否则返回0</returns>
int isLeapYear(int year) {// 闰年的判断规则:能被4整除且不能被100整除 或 能被400整除if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) return 1;else return 0;
}

7. 求两个数的最大公约数(暴力求解)

int GetGCD(int a, int b) {int min = a < b ? a : b; int m = min;while (1) {if (a % m == 0 && b % m == 0) break;m--;}return m;
}

8. 求两个数的最大公约数(辗转相除法)

int GetGCD_2(int a, int b) {int c;c = a % b; // 不用管a,b谁大谁小,结果都是一样的while (c > 0) {a = b;b = c;c = a % b;}return b;
}

9. 统计1~100的所有整数中,出现多少个数字9

// 9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99
int GetNum9(void) {int count = 0;for (int i = 1; i <= 100; i++) {int num = i;while (num > 0) {if (num % 10 == 9) {count++;	}num /= 10;}}return count;
}

10. 计算1/1 + 1/2 + 1/3 + 1/4 + … + 1/100的和

double fractionSum(void) {double sum = 0.0;for (int i = 1; i <= 100; i++) {sum += 1.0 / i;}return sum;
}

11. 打印99乘法表

void print_multiplication_table(void) {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {printf("%2d ×%2d = %2d\t", i, j, i * j);}printf("\n");}
}

12. 求一个数的每位之和(递归)

/// <summary>
/// 计算一个数的每位之和(递归)
/// </summary>
/// <param name="n">非负整数n</param>
/// <returns>返回组成它的数字之后</returns>
unsigned int DigitSum(unsigned int n) {//unsigned int sum = n % 10;//n /= 10;//if (n > 0) return sum + DigitSum(n);//return sum;if (n > 9) return DigitSum(n / 10) + n % 10;else return n;
}

13. 求一个整数n的k次方

/// <summary>
/// 求一个数的k次方
/// </summary>
/// <param name="n">整数n</param>
/// <param name="k">次方数k</param>
/// <returns>返回n^k</returns>
double myPow(int n, int k) {if (k > 0) {return n * myPow(n, k - 1);}else if (k == 0) return 1;else return 1.0 / myPow(n, -k);
}

http://www.ppmy.cn/embedded/160805.html

相关文章

【再谈设计模式】状态模式~对象行为的状态驱动者

一、引言 在软件开发,软将工程,软件设计过程中,我们常常会遇到对象的行为依赖于其状态的情况。例如,一个任务对象可能有“未开始”、“进行中”、“已完成”等状态,并且在不同状态下执行相同操作会有不同的结果。传统的方法可能会使用大量的条件判断语句来处理不同状态下的…

申论 应用文 【2017副省第四题 “水生态+扶贫”】

材料&#xff1a; 近日&#xff0c;“秋水长天 水美中国”采访团调研了G市的水生态文明建设情况。记者经过走访发现&#xff0c;G市某些区县的“水生态扶贫”模式&#xff0c;对欠发达地区在保持青山绿水的同时大力推进脱贫工作&#xff0c;具有很强的借鉴意义。 G市以山地、…

关于知识蒸馏的概念原理以及常见方法

1. 概念与原理 知识蒸馏的基本定义 知识蒸馏(Knowledge Distillation) 是一种将模型压缩与迁移学习结合的技术:它利用预先训练好的大模型(通常参数量大、精度高、计算开销大)指导一个更轻量(参数量小、推理速度快)的学生模型进行训练,从而在保持模型精度的同时显著减少…

AI 编程工具—Cursor 进阶篇 文章改写生成整理爬取

AI 编程工具—Cursor 进阶篇 文章改写生成整理爬取 其实对做自媒体的人而言,整理素材其实是一件非常耗时的事情,今天我们来看一下如何使用Cursor来帮我们解决这些问题,首先我们要建一个单独的项目,因为这个项目不涉及任何代码操作,只是文字相关的事情,还有就是这个项目需…

高级java每日一道面试题-2025年01月30日-框架篇[SpringBoot篇]-如何理解 Spring Boot 配置加载顺序 ?

如果有遗漏,评论区告诉我进行补充 面试官: 如何理解 Spring Boot 配置加载顺序 ? 我回答: 在 Java 高级面试中讨论 Spring Boot 配置加载顺序时&#xff0c;理解其机制对于有效管理和调试应用程序配置至关重要。Spring Boot 通过一系列预定义的规则来确定如何加载和覆盖配置…

vscode和pycharm的区别

VSCode&#xff08;Visual Studio Code&#xff09;和 PyCharm 是两款常用的 Python 开发工具&#xff0c;它们在功能和使用体验上有一些关键区别&#xff1a; 1. 核心定位 VSCode&#xff1a;轻量级、多语言支持的代码编辑器&#xff0c;依靠插件扩展 Python 开发能力。PyCh…

【C语言】常量指针和指针常量,指针数组和数组指针,指针函数和函数指针怎么区分?

文章目录 1、常量指针和指针常量2、指针数组和数组指针3、指针函数和函数指针 1、常量指针和指针常量 int a 0; const int* p &a;//常量指针 int* const p1 &a;//指针常量常量指针&#xff1a;无法通过该指针修改指向地址中的内容。 指针常量&#xff1a;指针指向的…

瑞友天翼应用虚拟化系统 GetPwdPolicy SQL注入漏洞复现

免责声明 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使…