内容正文:
5.7、5.8、5.9节:循环结构程序设计应用
一、单项选择题
1.执行int x=0;for(;x<4;x++);,循环结束后 x 的值为( )
A.0 B.3 C.4 D.5
【答案】C
【解析】空循环执行 4 次,x 自增到 4 后退出循环。
2.执行for(int i=1;i<=3;i++){if(i==2)continue;printf("%d",i);},输出结果是( )
A. 123 B. 13 C. 23 D. 12
【答案】B
【解析】i=2 时执行 continue,跳过输出,仅输出 1、3。
3.设有定义:int i,则以下能实现循环执行 5 次的 for 语句是( )
A. for (int i=0;i<5;i++) B. for (int i=1;i<5;i++)
C. for (int i=0;i<=5;i++) D. for (int i=2;i<5;i++)
【答案】A
【解析】i=0~4,共 5 次;其余选项执行次数均不满足。
4.执行int a=0,b=0;while(a<3){a++;b+=a;},b 最终的值是( )
A. 3 B. 4 C. 5 D. 6
【答案】D
【解析】a=1→b=1;a=2→b=3;a=3→b=6,循环结束。
5.执行以下程序段后,变量s的值是( )
int i, s = 0;
for(i = 1; i <= 10; i++){
if(i % 3 == 0) continue;
if(i % 7 == 0) break;
s += i; }
A. 1 B. 3 C. 7 D. 12
【答案】D
【解析】 循环从1到10,当i为3、6、9时跳过,i为7时终止循环。所以累加1+2+4+5=12,和为12。
6.要使以下代码输出5行"Hello",下划线处应填入( )
int i = 0;
do {printf("Hello
");
i++;
} while(_______);
A. i < 5 B. i <= 5 C. i < 4 D. i <= 4
【答案】D
【解析】do-while至少执行一次,i从0开始,执行5次的条件是i<=4,即i=0,1,2,3,4时执行,共5次。
7.以下代码的输出结果是( )
int a = 0, b = 0;
while(a < 5){
a++;
if(a % 2 == 0) continue;
b += a; }
printf("%d", b);
A. 4 B. 9 C. 16 D. 25
【答案】B
【解析】循环5次(a=1~5),当a为奇数(1,3,5)时累加到b,b=1+3+5=9。
8.以下代码段的功能是( )
int n, m, t, r;
scanf("%d%d", &n, &m);
if(n < m){ t = n; n = m; m = t; }
while(m != 0){
r = n % m;n = m;m = r;}
printf("%d", n);
A. 求n和m的最小公倍数 B. 求n和m的最大公约数
C. 交换n和m的值 D. 判断n是否能被m整除
【答案】B
【解析】这是辗转相除法(欧几里得算法)求最大公约数的实现。
9.要使k的值最终为10,下划线处应填( )
int i, j, k = 0;
for(i = 0; i < 10; i++){
for(______)
k++;}
A. j = 0; j < 1; j++ B. j = 0; j < i; j++
C. j = i; j < 10; j++ D. j = 0; j < 10; j++
【答案】A
【解析】外层循环10次,要使k=10,内层每次循环只能执行1次。A选项内层循环j从0到<1,执行1次。
10.以下代码的输出是( )
int i = 1, s = 0;
while(i <= 5){
s += i * i;
if(s > 20) break;
i++;}
printf("%d", s);
A. 14 B. 30 C. 55 D. 91
【答案】B
【解析】计算平方和:1²=1, 2²=4(和5), 3²=9(和14), 4²=16(和30), 此时s=30>20,break,输出30。
二、填空题。
1.int i=1;while(i<=4)i++; 循环执行次数为___________。
【答案】4
【解析】i=1、2、3、4 时执行,共 4 次。
2.for(int i=1;i<=5;i++){if(i==3)continue;printf("%d",i);} 输出结果为___________。
【答案】1245
【解析】i=3 跳过输出,其余数字正常打印。
3.int x=5;do{x--;}while(x>3); 循环结束后 x=___________。
【答案】3
【解析】x 依次 4→3,3 不满足 x>3,循环结束。
4.嵌套循环for(i=1;i<=3;i++)for(j=1;j<=2;j++) 内层总执行次数___________。
【答案】6
【解析】3×2=6 次。
5.for(int i=2;i<10;i+=3) 循环中 i 的取值为___________。
【答案】2、5、8
【解析】步长为 3,i=2→5→8,11 退出循环。
6.int a=6;while(a>2)a-=2; 循环执行次数___________。
【答案】2
【解析】a=6→4→2,执行 2 次后退出。
7.int k=0;for(;k<3;k++); 空循环结束后 k=___________。
【答案】3
【解析】循环执行 3 次,k 自增到 3。
8.int m=0;while(m<5){if(m%2==1)break;m++;} 循环结束后 m=___________。
【答案】1
【解析】m=0→m=1,满足 break 条件,终止循环。
9.int x=1,y=0;while(x<=4){y+=x;x++;} y 最终值___________。
【答案】10
【解析】1+2+3+4=10。
10.int a=3;while(a) 循环条件等价于___________。
【答案】a!=0
【解析】非 0 值为真,a=0 时条件为假。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
if ((i + j) % 2 == 0)
printf("1");
else
printf("0");
}
printf("
");
}
}
【答案】
101
010
101
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int n = 1;
do {
int m = 1;
while (m <= 3) {
if (n + m == 4) {
m++;
continue;
}
if (n == 2 && m == 1) {
n++;
break;
}
printf("%d", n + m);
m++;
}
n++; } while (n <= 3);
}
【答案】23
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x = 0,y;
for (; x < 5; x++) {
if (x == 1) {
for (y = 0; y < 2; y++) {
if (y == 1)
break;
printf("X");
}
continue;
}
if (x == 3)
break;
printf("%d", x);
}
printf("END");
}
【答案】0X2END
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, n = 4;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
if(i + j <= n + 1) printf("*");
else printf(" ");
}
printf("
");
}
}
【答案】
****
***
**
*
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int i, j;
for(i = 1; i <= 4; i++){
for(j = 1; j <= 5; j++){
if(i == 3 && j == 3) break;
printf("%d ", i*j);
}
printf("
");
}
}
【答案】
1 2 3 4 5
2 4 6 8 10
3 6
4 8 12 16 20
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int i, s = 0;
for(i = 1; i <= 10; i++){
s += i*i;
if(s > 50) break;
}
printf("i=%d,s=%d", i, s);
}
【答案】i=5,s=55
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int x = 12321, t = 0, y = 0, z = x;
while(x > 0){
t = x % 10;
y = y * 10 + t;
x /= 10;
}
if(z == y) printf("Yes");
else printf("No");
}
【答案】Yes
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int m = 5, n = 0;
while(m > 0){
switch(m){
case 5: n += 2; break;
case 4: n += 3;
case 3: n += 4; break;
case 2: n += 5;
default: n += 6;
}
m--;
}
printf("n=%d", n);
}
【答案】n=30
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int a = 0, b = 1, c, i;
printf("%d %d ", a, b);
for(i = 3; i <= 8; i++){
c = a + b;
printf("%d ", c);
a = b;
b = c;
}
}
【答案】0 1 1 2 3 5 8 13
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, k = 0;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
k++;
continue; }
k++; }
}
printf("%d", k);}
【答案】9
四、程序填空题(根据题意,将空缺的语句补上)
1.找出 1000 以内的“完全数”(完全数等于其所有真因子之和,如 6=1+2+3 )。
#include <stdio.h>
main() {
int n, i, sum;
for (n = 2; n <= 1000; n++) {
sum = 0;
for (i = 1; ___①___; i++) {
if (___②___)
sum += i;
}
if (___③___)
printf("%d ", n); }}
【答案】①i < n ②n % i == 0 ③sum == n
2.求 S=a+aa+aaa+aaaa+... 的值。例如 2+22+222+2222 。假设求前 5 项和,a=2。
#include <stdio.h>
main() {
int i, j;
int a = 2, n = 5;
long long sum = 0;
long long term = 0; // 当前项的值
for (i = 1; i <= n; i++) {
term = 0;
for (j = 1; j <= i; j++)
term = ___①___;
sum = ___②___;
}
printf("%lld", sum); }
【答案】①term * 10 + a ②sum + term
3.打印由星号组成的沙漏形状。
*****
***
*
***
*****
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j, n = 3;
for (i = 0; i < n; i++) {
for (j = 0; j < i; j++) printf(" ");
for (j = 0; j < ___①___; j++) printf("*");
printf("
");
}
for (i = n - 2; i >= 0; i--) {
for (j = 0; j < i; j++) printf(" ");
for (j = 0; j < ___②___; j++) printf("*");
printf("
");
}
}
【答案】①2 * (n - i) - 1 ②2 * (n - i) - 1
4.以下程序的功能是判断输入的数是否为素数。
#include <stdio.h>
main() {
int n, i, flag = 1;
scanf("%d", &n);
for(i = 2; i <= n/2; i++){
if(___①___){
flag = 0;
break;
}
}
if(flag && n > 1) printf("Yes");
else printf("No");
}
【答案】①n % i == 0
5.以下程序的功能是验证哥德巴赫猜想:大于2的偶数可表示为两素数之和。
#include <stdio.h>
main() {
int n, i, j, flag1, flag2, k;
scanf("%d", &n); // n为偶数
for(i = 2; i <= n/2; i++){
_______①_______;
for(k = 2; k <= i/2; k++){
if(i % k == 0){ flag1 = 0; break; }
}
if(flag1){
j = n - i;
flag2 = 1;
for(k = 2; k <= j/2; k++){
if(_____②______){ flag2 = 0; break; }
}
if(______③_____) printf("%d = %d + %d
", n, i, j);
}
}
}
【答案】①flag1 = 1 ②j % k == 0 ③flag2
五、编程题。
1. 编写程序,输出指定行数的空心菱形图案(例如输入5行,输出如下图案)。
*
* *
* *
* *
*
【参考代码】
#include <stdio.h>
main() {
int rows = 5, i, j, spaces;
// 输出上半部分
for (i = 1; i <= rows / 2 + 1; i++) {
for (spaces = 1; spaces <= rows / 2 - i + 1; spaces++) {
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
if (j == 1 || j == 2 * i - 1) printf("*");
else printf(" ");
}
printf("
");
}
// 输出下半部分
for (i = rows / 2; i >= 1; i--) {
for (spaces = 1; spaces <= rows / 2 - i + 1; spaces++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++) {
if (j == 1 || j == 2 * i - 1)
printf("*");
else printf(" ");
}
printf("
");
}
}
2.编写程序,输出指定行数的空心三角形(例如输入5行,输出如下图案)。
*
* *
* *
* *
*********
【参考代码】
#include <stdio.h>
main() {
int rows = 5, i, j, spaces;
for (i = 1; i <= rows; i++) {
// 输出空格
for (spaces = 1; spaces <= rows - i; spaces++)
printf(" ");
// 输出星号
for (j = 1; j <= 2 * i - 1; j++) {
if (i == rows || j == 1 || j == 2 * i - 1)
printf("*");
else printf(" ");
}
printf("
");
}
}
3.编写程序,输出100以内所有能被7整除或包含数字7的数。
【参考代码】
#include <stdio.h>
main(){
int i;
for(i = 1; i <= 100; i++){
if(i % 7 == 0 || i % 10 == 7 || i / 10 == 7)
printf("%d ", i);
}
}
4.编写程序,输入一个整数,将它逆序输出。例如输入12345,输出54321。
【参考代码】
#include <stdio.h>
main(){
int n, digit;
scanf("%d", &n);
if(n < 0){
printf("-");
n = -n;
}
while(n > 0){
digit = n % 10;
printf("%d", digit);
n /= 10;
}
}
5.编写程序,输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数(以回车结束输入)。
【参考代码】
#include <stdio.h>
main(){
char ch;
int letters = 0, digits = 0, spaces = 0, others = 0;
while((ch = getchar()) != '
'){
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
letters++;
else if(ch >= '0' && ch <= '9')
digits++;
else if(ch == ' ')
spaces++;
else
others++;
}
printf("letters=%d, digits=%d, spaces=%d, others=%d",
letters, digits, spaces, others);
}
6.编写程序,用迭代法求a的平方根。求平方根的迭代公式为:x_{n+1} = (x_n + a/x_n)/2,要求前后两次求出的x的差的绝对值小于10^{-5}。
【参考代码】
#include <stdio.h>
#include <math.h>
main(){
double a, x0, x1;
scanf("%lf", &a);
if(a < 0) return 0;
x0 = a / 2;
x1 = (x0 + a / x0) / 2;
while(fabs(x1 - x0) >= 1e-5){
x0 = x1;
x1 = (x0 + a / x0) / 2;
}
printf("sqrt(%.2f)=%.5f", a, x1);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
5.7、5.8、5.9节:循环结构程序设计应用
一、单项选择题
1.执行int x=0;for(;x<4;x++);,循环结束后 x 的值为( )
A.0 B.3 C.4 D.5
2.执行for(int i=1;i<=3;i++){if(i==2)continue;printf("%d",i);},输出结果是()
A. 123 B. 13 C. 23 D. 12
3.设有定义:int i,则以下能实现循环执行 5 次的 for 语句是()
A. for (int i=0;i<5;i++) B. for (int i=1;i<5;i++)
C. for (int i=0;i<=5;i++) D. for (int i=2;i<5;i++)
4.执行int a=0,b=0;while(a<3){a++;b+=a;},b 最终的值是()
A. 3 B. 4 C. 5 D. 6
5.执行以下程序段后,变量s的值是()
int i, s = 0;
for(i = 1; i <= 10; i++){
if(i % 3 == 0) continue;
if(i % 7 == 0) break;
s += i; }
A. 1 B. 3 C. 7 D. 12
6.要使以下代码输出5行"Hello",下划线处应填入()
int i = 0;
do {printf("Hello
");
i++;
} while(_______);
A. i < 5 B. i <= 5 C. i < 4 D. i <= 4
7.以下代码的输出结果是()
int a = 0, b = 0;
while(a < 5){
a++;
if(a % 2 == 0) continue;
b += a; }
printf("%d", b);
A. 4 B. 9 C. 16 D. 25
8.以下代码段的功能是()
int n, m, t, r;
scanf("%d%d", &n, &m);
if(n < m){ t = n; n = m; m = t; }
while(m != 0){
r = n % m;n = m;m = r;}
printf("%d", n);
A. 求n和m的最小公倍数 B. 求n和m的最大公约数
C. 交换n和m的值 D. 判断n是否能被m整除
9.要使k的值最终为10,下划线处应填()
int i, j, k = 0;
for(i = 0; i < 10; i++){
for(______)
k++;}
A. j = 0; j < 1; j++ B. j = 0; j < i; j++
C. j = i; j < 10; j++ D. j = 0; j < 10; j++
10.以下代码的输出是()
int i = 1, s = 0;
while(i <= 5){
s += i * i;
if(s > 20) break;
i++;}
printf("%d", s);
A. 14 B. 30 C. 55 D. 91
二、填空题。
1.int i=1;while(i<=4)i++; 循环执行次数为___________。
2.for(int i=1;i<=5;i++){if(i==3)continue;printf("%d",i);} 输出结果为___________。
3.int x=5;do{x--;}while(x>3); 循环结束后 x=___________。
4.嵌套循环for(i=1;i<=3;i++)for(j=1;j<=2;j++) 内层总执行次数___________。
5.for(int i=2;i<10;i+=3) 循环中 i 的取值为___________。
6.int a=6;while(a>2)a-=2; 循环执行次数___________。
7.int k=0;for(;k<3;k++); 空循环结束后 k=___________。
8.int m=0;while(m<5){if(m%2==1)break;m++;} 循环结束后 m=___________。
9.int x=1,y=0;while(x<=4){y+=x;x++;} y 最终值___________。
10.int a=3;while(a) 循环条件等价于___________。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
if ((i + j) % 2 == 0)
printf("1");
else
printf("0");
}
printf("
");
}
}
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int n = 1;
do {
int m = 1;
while (m <= 3) {
if (n + m == 4) {
m++;
continue;
}
if (n == 2 && m == 1) {
n++;
break;
}
printf("%d", n + m);
m++;
}
n++; } while (n <= 3);
}
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x = 0,y;
for (; x < 5; x++) {
if (x == 1) {
for (y = 0; y < 2; y++) {
if (y == 1)
break;
printf("X");
}
continue;
}
if (x == 3)
break;
printf("%d", x);
}
printf("END");
}
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, n = 4;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
if(i + j <= n + 1) printf("*");
else printf(" ");
}
printf("
");
}
}
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int i, j;
for(i = 1; i <= 4; i++){
for(j = 1; j <= 5; j++){
if(i == 3 && j == 3) break;
printf("%d ", i*j);
}
printf("
");
}
}
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int i, s = 0;
for(i = 1; i <= 10; i++){
s += i*i;
if(s > 50) break;
}
printf("i=%d,s=%d", i, s);
}
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int x = 12321, t = 0, y = 0, z = x;
while(x > 0){
t = x % 10;
y = y * 10 + t;
x /= 10;
}
if(z == y) printf("Yes");
else printf("No");
}
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int m = 5, n = 0;
while(m > 0){
switch(m){
case 5: n += 2; break;
case 4: n += 3;
case 3: n += 4; break;
case 2: n += 5;
default: n += 6;
}
m--;
}
printf("n=%d", n);
}
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int a = 0, b = 1, c, i;
printf("%d %d ", a, b);
for(i = 3; i <= 8; i++){
c = a + b;
printf("%d ", c);
a = b;
b = c;
}
}
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, k = 0;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
k++;
continue; }
k++; }
}
printf("%d", k);}
四、程序填空题(根据题意,将空缺的语句补上)
1.找出 1000 以内的“完全数”(完全数等于其所有真因子之和,如 6=1+2+3 )。
#include <stdio.h>
main() {
int n, i, sum;
for (n = 2; n <= 1000; n++) {
sum = 0;
for (i = 1; ___①___; i++) {
if (___②___)
sum += i;
}
if (___③___)
printf("%d ", n); }}
2.求 S=a+aa+aaa+aaaa+... 的值。例如 2+22+222+2222 。假设求前 5 项和,a=2。
#include <stdio.h>
main() {
int i, j;
int a = 2, n = 5;
long long sum = 0;
long long term = 0; // 当前项的值
for (i = 1; i <= n; i++) {
term = 0;
for (j = 1; j <= i; j++)
term = ___①___;
sum = ___②___;
}
printf("%lld", sum); }
3.打印由星号组成的沙漏形状。
*****
***
*
***
*****
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j, n = 3;
for (i = 0; i < n; i++) {
for (j = 0; j < i; j++) printf(" ");
for (j = 0; j < ___①___; j++) printf("*");
printf("
");
}
for (i = n - 2; i >= 0; i--) {
for (j = 0; j < i; j++) printf(" ");
for (j = 0; j < ___②___; j++) printf("*");
printf("
");
}
}
4.以下程序的功能是判断输入的数是否为素数。
#include <stdio.h>
main() {
int n, i, flag = 1;
scanf("%d", &n);
for(i = 2; i <= n/2; i++){
if(___①___){
flag = 0;
break;
}
}
if(flag && n > 1) printf("Yes");
else printf("No");
}
5.以下程序的功能是验证哥德巴赫猜想:大于2的偶数可表示为两素数之和。
#include <stdio.h>
main() {
int n, i, j, flag1, flag2, k;
scanf("%d", &n); // n为偶数
for(i = 2; i <= n/2; i++){
_______①_______;
for(k = 2; k <= i/2; k++){
if(i % k == 0){ flag1 = 0; break; }
}
if(flag1){
j = n - i;
flag2 = 1;
for(k = 2; k <= j/2; k++){
if(_____②______){ flag2 = 0; break; }
}
if(______③_____) printf("%d = %d + %d
", n, i, j);
}
}
}
五、编程题。
1. 编写程序,输出指定行数的空心菱形图案(例如输入5行,输出如下图案)。
*
* *
* *
* *
*
2.编写程序,输出指定行数的空心三角形(例如输入5行,输出如下图案)。
*
* *
* *
* *
*********
3.编写程序,输出100以内所有能被7整除或包含数字7的数。
4.编写程序,输入一个整数,将它逆序输出。例如输入12345,输出54321。
5.编写程序,输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数(以回车结束输入)。
6.编写程序,用迭代法求a的平方根。求平方根的迭代公式为:x_{n+1} = (x_n + a/x_n)/2,要求前后两次求出的x的差的绝对值小于10^{-5}。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$