【C语言】经典题目(四) 1

简介: 【C语言】经典题目(四)

🍀🍀本篇文章主要利用函数完成所需的功能及程序的编写。
主要有:
①写一个函数判断一个数是不是素数。
②写一个函数判断一年是不是一年。
③写一个函数,实现一个整型有序数组的二分查找。
④写一个函数,每调用一次这个函数,num值就会增加1。


打印100~200之间的素数

思路首先,自定义函数,判断一个数是不是素数。在主函数中,对100~200个数依次利用所写的函数进行判断。如果是,则打印。如果是素数,则count+1,可以计算出100-200之间有多少个素数。

对于我们自定义的判断素数的函数,它的结果只有两种,是和不是。
①如果是素数,我们可以返回 1,如果不是素数,我们返回 0。

②对于判断一个数是不是素数这样的问题,它只有两种情况,是和不是,即True和False。所以这个题目,我们可以定义我们的函数类型是布尔类型,返回True或者False。但要注意,包含头文件

①代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int is_prime(int n)
{
  int i;
  for (i = 2; i <= sqrt(n); i++)
  {
    if (n % i == 0)
      return 0;
  }
  return 1;
}
int main(void)
{
  int i;
  int count = 0;
  for (i = 101; i < 200; i = i + 2)
  {
    if (is_prime(i)) 
    {
      printf("%d ", i);
      count++;
    }
  }
  printf("\n");
  printf("count=%d", count);
  return 0;
}

运行结果:

②代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool is_prime(int n)
{
  int i;
  for (i = 2; i <= sqrt(n); i++)
  {
    if (n % i == 0)
      return false;
  }
  return true;
}
int main(void)
{
  int i;
  int count = 0;
  for (i = 101; i < 200; i = i + 2)
  {
    if (is_prime(i))
    {
      printf("%d ", i);
      count++;
    }
  }
  printf("\n");
  printf("count=%d", count);
  return 0;
}

打印1000~2000之间的闰年

思路首先先写一个自定义函数判断一年是不是闰年。对于主函数,遍历1000-2000,对每一个年份利用所编写的函数进行判断。如果是,则打印。如果是,count+1,可以计算1000~2000之间闰年年份的个数。

对于我们自定义的判断是否是闰年的函数,它的结果也只有两种,是和不是。如同上面的题目一样

①如果是闰年,我们可以返回 1,如果不是闰年,我们返回 0

②定义我们的函数类型是布尔类型,如果是闰年,返回True如果不是,返回False。要注意,包含头文件**

①代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int is_leap_year(int year)
{
  if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
    return 1;
  else
    return 0;
}
int main()
{
  int i;
  int count = 0;
  for (i = 1000; i <= 2000; i ++)
  {
    if (is_leap_year(i))
    {
      printf("%d ", i);
      count++;
    }
  }
  printf("\ncount=%d\n", count);
  return 0;
}

②代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>
bool is_leap_year(int year)
{
  if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
    return true;
  else
    return false;
}
int main()
{
  int i;
  int count = 0;
  for (i = 1000; i <= 2000; i ++)
  {
    if (is_leap_year(i))
    {
      printf("%d ", i);
      count++;
    }
  }
  printf("\ncount=%d\n", count);
  return 0;
}

写一个函数,实现一个有序数组的二分查找

详解二分查找

首先,我们先抛开在函数中实现有序数组的二分查找这个问题。

我们先来探索一下如何用代码实现二分查找
假如我们给上一个如下的有序数组:

假设我们要查找的数字为5.

①我们要将5与这个有序数组的中间值进行比较:

而目标数5<7,下一步我们缩小二分查找的范围。

②缩小二分查找的范围

③进行下一次的二分查找:

而目标数5>3,接着我们再次缩小二分查找的范围。

④再次缩小二分查找的范围:

⑤进行二分查找

而目标数==mid,所以我们在这个有序数组中找到了。

总结:在一个有序数组中进行二分查找,我们是与中间值进行比较的,如果不相等,我们一步一步的缩小二分查找的范围。就像是一个数组的两个指针在进行一步一步移动,直到两个指针正好指的是同一个数时,那就必须要停止查找了,如果这时还没有找到,说明在这个数组中就没有了。

将上述的文字转化为代码描述:在数组中,将中间数mid和目标数进行比较,如果相等

则找到了,如果不相等,进一步更新修改缩小数组,对于新数组同样进行上述的过程…在产生新的数组,在进行判断…所以我们需要写一个循环,循环的条件就是left<=right

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int n = 0;
  int right = 0, left = 0, mid = 0;
  int flag = 0;
  printf("你想要查找的数字:");
  scanf("%d", &n);
  //初始化
  left = 0; right = 9; mid = (left + right) / 2;
  while (left <= right)
  {
    if (arr[mid] == n)
    {
      printf("找到了\n");
      printf("下标是%d", mid);
      flag = 1;
      break;
    }
    else if (n < arr[mid])
    {
      right = mid - 1;    //left不变
      mid = (right + left) / 2;
    }
    else
    {
      left = mid + 1;  //right 不变
      mid = (right + left) / 2;
    }
  }
  if (flag = 0)
    printf("没找到");
  return 0;
}


相关文章
|
17天前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
2月前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
19 1
|
5月前
2.C语言题目---字符串左旋
2.C语言题目---字符串左旋
50 1
|
7月前
|
存储 编译器 C语言
C语言: 数组指针/指针数组等相关的选择题目
C语言: 数组指针/指针数组等相关的选择题目
|
5月前
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
35 1
|
1天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
1天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
14天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
14天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
14天前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)