拿捏c语言循环

简介: 拿捏c语言循环

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。

c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。

本章用循环去写一些题目。

让我们开启c语言学习之旅吧!



1.计算n的阶乘

#include <stdio.h>
int main()
{
  int n = 0;
  scanf("%d", &n);
  int i = 0;       //用来控制循环
  int sum =1;     //存放乘积
  for (i = 1; i <= n; i++)   //产生1到n的数字
  {
    sum = sum * i;       //进行累乘
  }
  printf("%d", sum);
  return 0;
}

注意:在这里不考虑数据溢出的情况

2.计算1!+2!+3!+.......+10!

#include <stdio.h>
int main()
{
  int i = 0;
  int ret = 1;
  int sum = 0;
  for (i = 1; i <= 10; i++)
  {
    ret = ret * i;    //在前一个数的阶乘基础上再乘这个数就是这个数的阶乘
    sum = sum + ret;   //进行累加
  }
  printf("%d", sum);
  return 0;
}

3.二分查找

我第一次见到这个二分查找的时候觉得特别难,但是把逻辑梳理清楚好像也就那么回事。

二分查找的基本思想:

二分查找,也叫折半查找,其实二分查找的思想非常简单,二分查找针对的是一个有序的数据集合,每次都会和区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。

具体执行步骤:

第一步:确定左下标,右下标,中间元素下标

第二步:用要查找的值和中间元素进行对比(通常会有3种情况)

 1: 相等,找到,打印下标,跳出循环  

 2: key < arr[mid], 则right-1,继续到左半侧进行二分查找    

 3: key > arr[mid], 则left+1,继续到右半侧进行二分查找

如果找到返回下标,否则继续,直到区间中没有元素时,说明key不在集合中,打印找不到

以上是一个循环的过程,而结束循环的条件就是left<=right,或者找到了跳出循环。

代码如下:

#include <stdio.h>
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int key = 0;
  scanf("%d", &key);
  int left = 0;
  int right = sizeof(arr) / sizeof(arr[0]) - 1; // right位置的数据可以取到
  while (left <= right) // right位置有数据,必须要添加=号
  {
    int mid = left + (right - left) / 2;
    if (arr[mid] > key) // key小于中间位置数据,说明key可能在左半侧,需要改变右边界
    {
      right = mid - 1; // right位置的数据可以取到,因此right=mid-1
    }
    else if (arr[mid] < key)// key大于中间位置数据,说明key可能在右半侧,需要改变左边界
    {
      left = mid + 1; // left位置的数据可以取到,因此left=mid+1
    }
    else
    {
      printf("找到了,下标是:%d\n", mid);
      break;
    }
  }
  if (left > right)
    printf("找不到\n");
  return 0;
}

3.打印九九乘法表。

解题思路:

两个循环进行控制

外层循环控制打印多少行

内部循环控制每行打印多少个表达式以及表达式内容。

#include <stdio.h>
int main()
{
  int i = 0;
  //控制行数
  for(i=1; i<=9; i++)
  {
    //打印每一行内容,每行有i个表达式
    int j = 0;
    for(j=1; j<=i; j++)
    {
      printf("%d*%d=%2d ", i, j, i*j);
    }
    printf("\n");
  }
  return 0;
}

4.求十个数中的最大值

解题思路:

创建一个数组在里面输入十个元素,定义一个元素为max。

然后利用循环往后获取元素,每获取到一个元素都会和max去比较,如果比max大这个数就是max。当循环结束之后max中的元素就是max。

#include <stdio.h>
int main()
{
  int arr[10] = {0};
  int i = 0;
  int max = 0;
  for(i=0; i<10; i++)
  {
    scanf("%d", &arr[i]);
  }
  max = arr[0];
  for(i=1; i<10; i++)
  {
    if(arr[i]>max)
      max = arr[i];
  }
  printf("max = %d\n", max);
  return 0;
}

5.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

解题思路:

通过对题目的分析就会发现,基数项为正,偶数项为负

利用循环1.0/i,然后用flag控制奇偶项,奇数项为正,偶数项为负

#include <stdio.h>
int  main()
{
  int i = 0;
  double sum = 0.0;
  int flag = 1;
  for(i=1; i<=100; i++)
  {
    sum += flag*1.0/i;
    flag = -flag;
  }
  printf("%lf\n", sum);
  return 0;
}

6.编写程序数一下 1到 100 的所有整数中出现多少个数字9

解题思路:

1. 给一个循环从1遍历到100,拿到每个数据后进行一下操作

2.  a. 通过%的方式取当前数据的个位,检测个位数据是否为9

        如果是,给计数器加1    

    b. 通过/的方式取当前数据的十位,检测十位数据是否是9

         如果是,给计数器加1  

循环一直继续,直到所有的数据检测完,所有9的个数已经统计在count计数中。

#include <stdio.h>
int main()
{
  int i = 0;
  int count = 0;
  for(i=1; i<=100; i++)
  {
    if(i%10==9)
      count++;
    if(i/10==9)
      count++;
  }
  printf("%d\n", count);
  return 0;
}
目录
相关文章
|
1月前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
24 2
【C语言】循环语句
|
2月前
|
C语言
【C语言基础】:分支与循环
【C语言基础】:分支与循环
|
1天前
|
机器学习/深度学习 C语言
【C语言篇】循环语句详解(超详细)
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环.
|
12天前
|
C语言
C语言的循环语句
C语言的循环语句
23 6
|
2月前
|
C语言
C语言循环与分支
C语言循环与分支
31 5
|
2月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
1月前
|
Linux C语言
【编程小实验】C语言实现:无限循环写入文本文件,支持Ctrl+C中断与数据追加(附完整源码)
在Linux中,文件I/O(输入/输出)是程序与文件进行交互的基本方式,包括读取文件内容和向文件写入数据。这通常通过标准的C库函数来实现,下面是一些基本的文件读写操作和代码示例。
|
2月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
29 0
|
3月前
|
算法 C语言 索引
C语言中的for循环:深入探索与实用技巧
C语言中的for循环:深入探索与实用技巧
41 1
|
3月前
|
C语言
C语言中如何避免循环死循环
C语言中如何避免循环死循环
48 1