While和Do While循环知识点练习

精选自湖南省历年对口招生考试计算机应用类高考真题,包含While和Do While循环的典型题目,每道题均标注真题年份。

题目一:Do While循环基础

2023年真题

阅读以下程序,写出运行结果:

#include <stdio.h> int main() { int i = 0; do { printf("%d", i); } while(i++); printf("%d\n", i); return 0; }

运行结果:

01

解析:这是一个典型的do...while循环使用i++在每次循环后自增,但初始值0在条件判断时变为1。

题目二:While循环的应用

2021年真题

程序功能:计算二进制中1的个数。请补充完整代码:

#include <stdio.h> int main() { unsigned int V = 7; int num = 0; while(V) { V &= (V - 1); num++; } printf("num=%d", num); return 0; }
提示:此程序使用位运算计算二进制中1的个数

运行结果:

num=3

解析:数字7的二进制是111,有三个1。程序通过V &= (V - 1)每次消除一个二进制最低位的1。

题目四:While循环与位运算

2022年真题

阅读程序,写出运行结果:

#include <stdio.h> int main() { unsigned int a = 6; int b = -20; (a + b > 6) ? puts("sum>6") : puts("sum<=6"); return 0; }

运行结果:

sum>6

解析:当无符号整型与有符号整型运算时,有符号整型会转换为无符号整型。-20转换为很大的无符号数,因此a+b大于6。

题目五:循环综合应用

2020年真题

程序功能:使用二分查找在数组中查找元素。请补充完整代码:

#include <stdio.h> int binarySearch(int lib[], int bound, int value) { int lowKey = 0, highKey = bound - 1; while(lowKey <= highKey) { int midKey =________1________; int midValue = lib[midKey]; if(midValue < value) { ________2________ } else if(midValue > value) { highKey = midKey - 1; } else { return midKey; } } return -1; } int main() { int lib[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int n = sizeof(lib) / sizeof(int); int value = 12; int result = binarySearch(lib, n, value); if(________3________) { printf("元素 %d 在数组中的位置是 %d\n", value, result); } else { printf("元素 %d 不存在于数组中\n", value); } return 0; }

运行结果:

元素 12 在数组中的位置是 5

解析:此程序使用while循环实现了二分查找算法,在有序数组中查找指定元素的位置。