函数练习.

发布于:2024-05-11 ⋅ 阅读:(149) ⋅ 点赞:(0)

1.打印乘法口诀表

口诀表的行数和列数自己指定如:输入9,输出9×9口诀表,输出12,输出12×12的乘法口诀表。

multiplication(int index) {
​
    if (index == 9) {
​
        int i = 0;
​
        for (i = 1; i < 10; i++) {
​
            int j = 0;
​
            for (j = 1; j < i; j++) {
​
                printf("%d * %d = %d ", i, j, i * j);
​
            }
​
            printf("\n");
​
        }
​
    }
​
​
​
    if (index == 12) {
​
        int i = 0;
​
        for (i = 1; i < 13; i++) {
​
            int j = 0;
​
            for (j = 1; j < i; j++) {
​
                printf("%d * %d = %d", i, j, i * j);
​
            }
​
            printf("\n");
​
        }
​
    }
​
​
​
    }
​
​
int main() {
​
    int index = 0;
​
    scanf("%d", &index);
​
    multiplication(index);
​
}

2.写一个二分查找函数

功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.

int bin_search(int arr[], int left, int right, int key) {
​
// arr 是查找的数组
​
//left 数组的左下标
​
//right 数组的右下标
​
//key 要查找的数字
​
    while (left<=right)
​
    {
​
        int mid = left + (right - left) / 2;//防止整形溢出
​
        if (arr[mid] ==key) {
​
            return mid;
​
            break;
​
        }
​
        else if(arr[mid]<key) //中间值小于右边
​
        {
​
            left = mid + 1;   //左下标往右
​
        }
​
        else
​
        {
​
            left = mid - 1;  //中间值大于右边 左下标往左
​
        }
​
    }
​
    return -1;
​
​
​
}
​
//二分查找
​
int main() {
​
    int key = 0;
​
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
​
    printf("请输入你想要查找的元素:\n");
​
    scanf("%d", &key);
​
    int sz = sizeof(arr) / sizeof(arr[0]);
​
    int left = 0;
​
    int right = sz-1;
​
    int ret = bin_search(arr,left,right,key);
​
    if (ret != -1) {
​
        printf("元素%d,的数组下标为%d", key, ret);
​
    }
​
    else {
​
        printf("没找到,返回%d", ret);
​
    }
​
    return 0;
​
}

3.判断闰年

int is_leap_year(int y);//函数声明 两种方法
​
int is_leap_year(int); //函数声明 形参可以省略
​
int main()
​
{
​
    int y = 0;
​
    scanf("%d", &y);
​
    int r = is_leap_year(y);
​
    if (r == 1)
​
        printf("闰年\n");
​
    else
​
        printf("⾮闰年\n");
​
    return 0;
​
}
​
​
​
//函数定义
​
int is_leap_year(int y) { //判断闰年函数 只有两种情况 用bool类型
​
    if (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)))
​
        return 1;
​
    else
​
        return 0;
​
​
​
}

4.判断素数

  • 实现一个函数is_prime,判断一个数是不是素数。

  • 利用上面实现的is_prime函数,打印100到200之间的素数。

#include <stdio.h>
​
#include <stdbool.h>
​
#include <math.h>
​
​
​
// 判断一个数是否是素数
​
bool is_prime(int n) {
​
  // 如果 n 小于 2,则不是素数
​
  if (n < 2) {
​
    return false;
​
  }
​
  // 如果 n 是 2,则是素数
​
  if (n == 2) {
​
    return true;
​
  }
​
  // 如果 n 是偶数,则不是素数
​
  if (n % 2 == 0) {
​
    return false;
​
  }
​
  // 检查 n 是否可以被小于或等于其平方根的奇数整除
​
  int limit = (int) sqrt(n) + 1;
​
  for (int i = 3; i < limit; i += 2) {
​
    if (n % i == 0) {
​
      return false;
​
    }
​
  }
​
  // 如果没有找到可以整除 n 的数,则 n 是素数
​
  return true;
​
}
​
​
​
int main() {
​
  // 打印100到200之间的素数
​
  for (int num = 100; num <= 200; num++) {
​
    if (is_prime(num)) {
​
      printf("%d\n", num);
​
    }
​
  }
​
  return 0;
​
}
​
​

5.创建一个整形数组,完成对数组的操作

  1. 实现函数init() 初始化数组为全0

  2. 实现print() 打印数组的每个元素

  3. 实现reverse() 函数完成数组元素的逆置。

要求:自己设计以上函数的参数,返回值。

void Init(int arr[], int sz, int set)
{
    int i = 0;
    for(i=0; i<sz; i++)
    {
        arr[i] = set;
    }
}
​
​
void Print(int arr[], int sz)
{
    int i = 0;
    for(i=0; i<sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
​
​
void Reverse(int arr[], int sz)
{
    int left = 0;
    int right = sz-1;
​
​
    while(left<right)
    {
        int tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;
        left++;
        right--;
    }
}
​
int main()
{
    int arry[] = { 0,1,2,3,4,5,6,7,8,9 };
    int sz = sizeof(arry) / sizeof(arry[0]);
    Print(arry, sz);
    Reverse(arry, sz);
    Print(arry, sz);
    Init(arry, sz,0);
    Print(arry, sz);
    return 0;
}