循环语句经典例题(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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值