循环语句经典例题(2)

简介: 循环语句经典例题(2)

一、选择题

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


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

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

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

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

答案解析:

正确答案:B

while语句:条件表达式为真,才执行后面的循环语句,否则不执行。-->选项B对

知识点:

1、循环语句:

       (1)while语句--->先判断,再执行

//语法结构:

while(条件表达式)

{

       循环体;

}

我们可以while语句和if语句相似:

①条件表达式为真,才执行后面的循环语句,否则不执行。(注if语句只会执行一次,但while语句可以重复执行)

②while后面只能控制一条语句,循环体如果要包含一个以上的语句,必须使用代码块(复合语句)

       (2)for语句--->与while一样的效果,但是形式更优

//语法结构:

for(初始化部分;循环条件部分;调整部分)

{

       循环体;

}

理解for的三个部分:

①初始化部分:用来初始化循环变量,注只在循环开始时,执行一次

②循环条件部分:用来判断循环什么时候终止(每次循环都要执行,如果循环条件为true,进入循环体,如果为false,退出循环)

③调整部分:用于循环条件的调整,每次循环结束的时候执行(使循环条件趋于false的语句)

       (3)do……while语句--->先执行,在判断(至少执行一次)

//语法结构:

do

{

       循环体;

}while(条件表达式);

循环的使用:for>while>do……while(具体按实际情况使用)

2、总结一个循环有着三个重要组成:

①循环初始化部分

②循环条件判断部分

③循环调整部分(使循环条件趋于false的语句,如果无此语句,则循环变量始终不改变,可能无限循环)

2、程序的输出结果是?( )

#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

答案解析:

正确答案:C

知识点:

1、break的作用和应用

       ①break只在switch和循环中应用

       ②作用:在switch中break的作用是实现分支;在循环中的作用是终止循环

       ③应用:当某种情况(条件)满足时,想让循环提前终止

2、continue的作用和应用

       ①continue只在循环中应用

       ②作用:终止本次循环,进入下一次循环

       ③应用:当某种情况(条件)满足时,这一次循环内部后面的代码我不想它执行  

二、编程题

1、在屏幕上输出9*9乘法口诀表


//在屏幕上输出9*9乘法口诀表

//1*1=1

//2*1=2 2*2=4

//3*1=3 3*2=6 3*3=9

//4*1=4 4*2=1 4*3=12 4*4=16

/*

   思路:两个循环进行控制

   外层循环控制打印几行

   内层循环控制一行打印几列以及表达式内容

 

   分析:①行控制列,行等于列

       ②为了打印整齐,i*j的结果的格式控制用%2d,

*/

#include<stdio.h>
int main()
{
  int i = 0;//行
  int j = 0;//列
  //打印9行
  for (i = 1; i <= 9; i++)
  {
    //一行打印几列
    for (j = 1; j <= i; j++)
    {
      printf("%d*%d=%2d ", i, j, i * j);
    }
    //打印完一行换行
    printf("\n");
  }
  return 0;
}

运行结果:

2、求10 个整数中最大值

/*

   分析:①10个整数--->定义一个整形数组

       ②要求一个集合中的最大值max,先假设集合中的第一个元素为max,

       再与集合中的每个元素一一比较。

       注:max的初值不能用集合外的元素。

   步骤:

       ①定义一个整形数组

       ②采用循环的方式输入一个数组

       ③max赋初值

       ④采用循环的方式依次获取数组中的每一个元素,

       与max进行比较,if(arr[i]>max)更新max标记的最大值

       数组遍历结束后,max中保存的即为数组中的最大值

*/  

#include<stdio.h>
int main()
{
  int arr[10] = { 0 };
  //给数组赋值
  int i = 0;//下标
  for (i = 0; i < 10; i++)
  {
    scanf("%d", &arr[i]);
  }
  int max = arr[0];//使用max标记最大值,并赋初值
  //遍历数组,找到数组中的最大值
  for (i = 0; i < 10; i++)
  {
    if (max < arr[i])
    {
      max = arr[i];
    }
  }
  //输出
  printf("%d\n", max);
  return 0;
}

3、分数求和:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

/*

   分析:

       ①表达式有100项,分母1~100

       ②‘/’操作符:

           a.整数除法:两个操作数都为整数

           b.浮点数除法:只要有操作数是浮点数即可

           c.计算结果是商

       ③正负交替(用flag标记控制):一个正数*1还是一个正数,*-1变成负数

       或用if……else语句判断“奇正偶负”

*/

#include<stdio.h>
//代码1:用flag标记控制“正负交替"
int main()
{
  int i = 0;//分母
  double sum = 0.0;//求和结果
  int flag = 1;
  //设置循环i:1~100
  for (i = 1; i <= 100; i++)
  {
    sum += flag * (1.0 / i);//累加
    flag *= -1;
  }
  //输出
  printf("%lf\n", sum);
  return 0;
}
//代码2:if……else语句判断“奇正偶负”
//int main()
//{
//  int i = 0;
//  double sum = 0.0;
//
//  for (i = 1; i <= 100; i++)
//  {
//    if (i % 2 == 1)
//    {
//      sum += 1.0 / i;
//    }
//    else
//    {
//      sum -= 1.0 / i;
//    }
//  }
//
//  printf("%lf\n", sum);
//
//  return 0;
//}

运行结果:

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

/*

   分析:

       ①循环从1遍历到100

       ②判断每一个数据9的个数,将所有9的个数统计在count计数中

           a.通过%10的方式取的当前数据的个位,判断个位数据是否为9

               是则,给计数器+1

           b.通过/10的方式取的当前数据的十位,判断十位数据是否为9

               是则,给计数器+1

           注意:判断个位和十位是两件不同事情,是有两个if语句分别判断

           循环结束,所有数据判断完,所有9的个数已经统计在count计数器中

*/  

#include<stdio.h>
int main()
{
  int i = 0;//存储数据
  int count = 0;//计数器
  //遍历1~100
  for (i = 1; i <= 100; i++)
  {
    //判断个位数据是否为9
    if (i % 10 == 9)
    {
      count++;
    }
    //判断十位数据是否为9
    if (i / 10 == 9)
    {
      count++;
    }
  }
  //输出9的个数
  printf("%d\n", count);
  return 0;
}

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

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

/*

   二分查找:

       前提:在一个有序数组

       准备:计算出右下标:right=sizeof(arr)/sizeof(arr[0])-1;//元素个数-1

   具体找的方式:

       1、找到数组的中间位置:mid=(left+right)/2

       2、判断中间位置的数据是否与要查找的数据key相等

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

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

               新的right:right=mid-1;

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

               新的left:left=mid+1;

           如果找到返回下标并退出,否则继续,直到区间中没有元素时(left>right)

               说明key不在数组中,打印找不到

     

*/

#include<stdio.h>
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int key = 7;//查找的数
  int left = 0;
  int right = sizeof(arr) / sizeof(arr[0]) - 1;
  //二分查找
  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (key == arr[mid])
    {
      printf("找到了,下标为%d\n", mid);
      break;//跳出循环
    }//判断是否相等
    else if (key < arr[mid])
    {
      right = mid - 1;
    }//判断key是否小于中间数据,是则需要改变右边界
    else
    {
      left = mid + 1;
    }//最后一种情况就是key大于中间数据,需要改变左边界
  }
  //判断是否为直到数组元素查找完left>right,是则说明key不再数组,找不到
  if (left > right)
  {
    printf("找不到\n");
  }
  return 0;
}
相关文章
|
存储 算法
蓝桥杯:递归 与 例题:斐波那契数列及优化与应用
蓝桥杯:递归 与 例题:斐波那契数列及优化与应用
90 0
|
7月前
|
机器学习/深度学习 人工智能 C语言
|
7月前
|
算法 C语言 计算机视觉
【数据结构与算法 经典例题】括号匹配问题
【数据结构与算法 经典例题】括号匹配问题
|
8月前
|
C语言
汉诺塔————经典递归问题(C语言实现)
汉诺塔————经典递归问题(C语言实现)
171 0
|
程序员 C语言
初阶函数经典例题(2)
初阶函数经典例题(2)
|
8月前
|
存储
【例题】逆波兰表达式求值(图解+代码)
【例题】逆波兰表达式求值(图解+代码)
215 0
递归经典例题——汉诺塔
递归经典例题——汉诺塔
120 1
|
机器学习/深度学习 数据安全/隐私保护
循环语句的经典例题(1)
循环语句的经典例题(1)
|
人工智能 BI
循环结构 编程例题
循环结构 编程例题
103 0

热门文章

最新文章

下一篇
开通oss服务