C语言for循环必备练习题

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: C语言for循环必备练习题

1.


作业标题(663)


关于while(条件表达式) 循环体,以下叙述正确的是( )? (假设循环体里面没有break,continue,return,goto等等语句)  


作业内容


A.循环体的执行次数总是比条件表达式的执行次数多一次


B.条件表达式的执行次数总是比循环体的执行次数多一次


C.条件表达式的执行次数与循环体的执行次数一样


D.条件表达式的执行次数与循环体的执行次数无关


参考解析为:


答案解析(提交后可在已完成作业列表查看答案)


答案解析:


 while(条件表达式)


   循环体


 while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束


 故:while循环条件将会比循环体多执行一次。


 因此:选择B


2.


作业标题(662)


有以下程序


#include <stdio.h>
int main()
{
  int a = 0, b = 0;
  for (a = 1, b = 1; a <= 100; a++)
  {
  if (b >= 20) break;
  if (b % 3 == 1)
  {
    b = b + 3;
    continue;
  }
  b = b-5;
  }
  printf("%d\n", a);
  return 0;
}


程序的输出结果是?( )


作业内容


A.10


B.9


C.8


D.7


答案解析(提交后可在已完成作业列表查看答案)


答案分析:


  参考代码注释。


#include <stdio.h>
  int main()
  {
   int a = 0, b = 0;
    // for循环将a和b的初始值均设置为1
   for (a = 1, b = 1; a <= 100; a++)
   {
   if (b >= 20) break;
   if (b % 3 == 1)
   {
   b = b + 3;
   continue;
   }
   b = b-5;
   }
   printf("%d\n", a);
   return 0;
  }

 第一次循环:a = 1,b=1--->b小于20,if不成立,b%3==1%3==1成立,b=b+3, 此时b的值为4


 第一次循环:a = 2,b=4--->b小于20,if不成立,b%3==4%3==1成立,b=b+3, 此时b的值为7


 第一次循环:a = 3,b=7--->b小于20,if不成立,b%3==7%3==1成立,b=b+3, 此时b的值为10


 第一次循环:a = 4,b=10--->b小于20,if不成立,b%3==10%3==1成立,b=b+3, 此时b的值为13


 第一次循环:a = 5,b=13--->b小于20,if不成立,b%3==13%3==1成立,b=b+3, 此时b的值为16


 第一次循环:a = 6,b=16--->b小于20,if不成立,b%3==16%3==1成立,b=b+3, 此时b的值为19


 第一次循环:a = 7,b=19--->b小于20,if不成立,b%3==19%3==1成立,b=b+3, 此时b的值为22


 第一次循环:a = 8,b=22--->b大于20,if成立,循环break提出


 最后打印a:8


 因此:选择C


3.


作业标题(659)


分数求和


作业内容


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


参考代码为:


/*

思路:

1. 从上述表达式可以分析出

  a. 该表达式主要由100项,基数项为正,偶数项为负

2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0

   然后使用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;
}

4.


作业标题(660)


数9的个数


作业内容


编写程序数一下 1到 100 的所有整数中出现多少个数字9(注意一下99中的两个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;
}

5.


作业标题(661)


猜数字游戏


作业内容


完成上课的猜数字游戏


//猜数字游戏
//电脑随机生成一个数字
//猜数字
//如果猜大了,告知猜大了
//如果猜小了,告知猜小了
//如果猜对了,告知猜对了
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
  printf("********************************\n");
  printf("*********   1.play  ************\n");
    printf("*********   0.exit  ************\n");
  printf("********************************\n");
}
//rand函数可以随机生成一个数
//返回1到32767之间的随机数字
void game()
{
  int guess = 0;
  //1.生成随机数
  int ret = rand() % 100 + 1;    //0到99———》+1变成0到100
  //printf("%d\n",ret);
  //2.猜数字
  while (1)
  {
  printf("请猜数字: \n");
  scanf_s("%d", &guess);
  if (guess < ret)
  {
    printf("猜小了\n");
  }
  else if (guess > ret)
  {
    printf("猜大了\n");
  }
  else
  {
    printf("恭喜你,猜对了\n");
  }
  }
}
int main()
{
  int input = 0;
  //设置随机数生成器
  srand((unsigned int)time(NULL));
  do
  {
  menu();
  printf("请选择:》\n");
  scanf_s("%d", &input);
  switch (input)
  {
  case 1:game(); break;
  case 0:printf("退出游戏\n"); break;
  default:
    printf("选择错误,请重新选择\n"); break;
  }
  } while (input);
  return 0;
}


代码的运行结果为:


0a2653c851af460fa595bd959398a8f1.png


6.


作业标题(664)


二分查找


作业内容


编写代码在一个整形有序数组中查找具体的某个数


要求:找到了就打印数字所在的下标,找不到则输出:找不到。


参考代码为:


/*

二分查找:

在一个有序的序列中,找某个数据是否在该集合中,如果在打印该数据在集合中的下标,否则打印找不到

 

具体找的方式:

 1. 找到数组的中间位置

 2. 检测中间位置的数据是否与要查找的数据key相等

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

   b: key < arr[mid], 则key可能在arr[mid]的左半侧,继续到左半侧进行二分查找

   c: key > arr[mid], 则key可能在arr[mid]的右半侧,继续到右半侧进行二分查找

 

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

 

易错点:

1. right的右半侧区间取值,该值决定了后序的写法

2. while循环的条件是否有等号

3. 求中间位置的方法,直接相加除2容易造成溢出

4. 更改left和right的边界时,不确定是否要+1和-1

*/
// 方法一,采用[left, right] 区间
#include <stdio.h>
int main()
{
  int arr[] = {1,2,3,4,5,6,7,8,9,10};
  int key = 3;
  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;
}
// 方法二,采用[left, right) 区间
#include <stdio.h>
int main()
{
  int arr[] = {1,2,3,4,5,6,7,8,9,10};
  int key = 3;
  int left = 0;
  int right = sizeof(arr)/sizeof(arr[0]); // right位置的数据取不到
  while(left<right) // right位置没有数据,此处不需要添加=
  {
  int mid = left+(right-left)/2;
  if(arr[mid]>key) // key小于中间位置数据,说明key可能在左半侧,需要改变右边界
  {
    right = mid; // 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;
}
相关文章
|
22天前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
186 88
|
3月前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
35 2
【C语言】循环语句
|
4月前
|
C语言
【C语言基础】:分支与循环
【C语言基础】:分支与循环
|
23天前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
26天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
2月前
|
机器学习/深度学习 C语言
【C语言篇】循环语句详解(超详细)
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环.
|
2月前
|
C语言
C语言的循环语句
C语言的循环语句
49 6
|
4月前
|
C语言
C语言循环与分支
C语言循环与分支
40 5
|
4月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
3月前
|
Linux C语言
【编程小实验】C语言实现:无限循环写入文本文件,支持Ctrl+C中断与数据追加(附完整源码)
在Linux中,文件I/O(输入/输出)是程序与文件进行交互的基本方式,包括读取文件内容和向文件写入数据。这通常通过标准的C库函数来实现,下面是一些基本的文件读写操作和代码示例。
133 0

相关实验场景

更多
下一篇
无影云桌面