写一个二分查找函数 功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.
二分查找是一种高效的搜索算法,仅适用于有序数组。它通过每次将搜索范围缩小一半来快速定位目标值。 算法步骤

代码如下:
#include <stdio.h>
int binarySearch(int arr[], int len, int target)
{
int left = 0;
int right = len - 1;
while (left <= right)
{
int mid = left + (right - left) / 2; // 避免溢出
if (arr[mid] == target)
{
return mid; // 找到目标,返回下标
}
else if (arr[mid] < target) {
left = mid + 1; // 搜索右半部分
}
else {
right = mid - 1; // 搜索左半部分
}
}
return -1; // 未找到
}
int main() {
int arr[] = { 1, 3, 5, 7, 9, 11 };
int len = sizeof(arr) / sizeof(arr[0]);
int target = 7;
int result = binarySearch(arr, len, target);
if (result != -1) {
printf("找到目标 %d,下标为 %d\n", target, result);
}
else {
printf("未找到目标 %d\n", target);
}
return 0;
}实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定 如:输入9,输出99口诀表,输出12,输出1212的乘法口诀表。
关键解析
代码如下:
#include <stdio.h>
void printMultiplicationTable(int n)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%d*%d=%-4d", j, i, i * j); // -4d保证至少占4位,左对齐
}
printf("\n");
}
}
int main() {
int n;
printf("请输入乘法口诀表的行数:");
scanf("%d", &n);
printMultiplicationTable(n);
return 0;
}实现函数判断year是不是润年。
闰年规则
关键解析
代码如下:
#include <stdio.h>
#include <stdbool.h> // 使用bool类型(C99标准)
bool isLeapYear(int year) {
// 逻辑判断
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int year;
printf("请输入年份:");
scanf("%d", &year);
if (isLeapYear(year)) {
printf("%d年是闰年\n", year);
} else {
printf("%d年不是闰年\n", year);
}
return 0;
}实现一个函数is_prime,判断一个数是不是素数。 利用上面实现的is_prime函数,打印100到200之间的素数。
关键解析
为什么要用sqrt?


代码如下:
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
// 判断是否为素数
bool is_prime(int n)
{
if (n <= 1) return false; // 1和负数不是素数
if (n == 2) return true; // 2是唯一的偶素数
if (n % 2 == 0) return false; // 排除其他偶数
// 检查奇数因子,只需遍历到sqrt(n)
for (int i = 3; i <= sqrt(n); i += 2)
{
if (n % i == 0) return false;
}
return true;
}
int main()
{
int start = 100, end = 200;
printf("%d到%d之间的素数:\n", start, end);
for (int num = start; num <= end; num++)
{
if (is_prime(num))
{
printf("%d ", num);
}
}
printf("\n");
return 0;
}创建一个整形数组,完成对数组的操作 实现函数init() 初始化数组为全0 实现print() 打印数组的每个元素 实现reverse() 函数完成数组元素的逆置。 要求:自己设计以上函数的参数,返回值。
代码解析
#include <stdio.h>
// 1. 初始化数组为全0
void init(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
arr[i] = 0;
}
}
// 2. 打印数组元素
void print(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
// 3. 逆置数组元素
void reverse(int arr[], int len)
{
int left = 0; // 首元素下标
int right = len - 1; // 末元素下标
while (left < right)
{
// 交换首尾元素
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
int main()
{
int arr[5] = {1, 2, 3, 4, 5}; // 测试数组
int len = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
printf("原始数组:");
print(arr, len);
reverse(arr, len);
printf("逆置后数组:");
print(arr, len);
init(arr, len);
printf("初始化后数组:");
print(arr, len);
return 0;
}