内容正文:
5.4节:for语句
一、单项选择题
1.有代码for(int i=1;i<=5;i++){},该循环正常执行次数为( )
A. 4 次 B. 5 次 C. 6 次 D. 0 次
2.若定义int k=2;,语句for(;k<7;k++)下列说法正确的是()
A. 初始化表达式省略,语法非法 B. 初始化表达式省略,使用变量原有值
C. 循环条件永远为假 D. 循环增量表达式无效
3.已知int m=3;,for(;m--;)该循环终止条件是()
A. m 的值等于 0 B. m 的值大于 0
C. m 的值小于 0 D. m 等于 3
4.语句for(int x=5;x>0;x--)循环结束后 x 的最终值为()
A. 0 B. 1 C. -1 D. 5
5.若有int n;for(n=1;n<=4;n+=2),循环执行次数为()
A. 2 次 B. 3 次 C. 4 次 D. 1 次
6.已知代码int s=0;for(int i=1;i<=3;i++) s=s+1;,循环结束后 s 的值为()
A. 1 B. 3 C. 6 D. 0
7.对于for(int t=10;t>2;t-=3),循环内部执行次数为()
A. 2 次 B. 3 次 C. 4 次 D. 5 次
8.设有程序段:for(i=0; i<5; i++) printf("%d", i);,循环结束后变量i的值为()
A. 4 B. 5 C. 6 D. 不确定
9.以下程序段的输出结果是()
int i, s = 0;
for (i = 1; i <= 5; i += 2) {
s += i;}
printf("%d", s);
A. 15 B. 9 C. 6 D. 10
10.以下程序段运行后,sum的值是()
int i, sum = 0;
for (i = 1; i <= 100; i++) {
if (i % 2 == 0) sum += i;}
A. 5050 B. 2550 C. 2500 D. 100
二、填空题。
1.表达式 2 的值为______时,for 循环判定条件不成立,直接退出循环。
2.代码for(int i=1;i<=6;i++),该循环总共执行______次。
3.循环语句for(int a=4;a>0;a--)执行完毕后,变量 a 的值为______。
4.已知int sum=0,i;for(i=1;i<=2;i++) sum+=i;,sum 最终结果为___________。
5.for(int k=3;k<=9;k+=3)循环的执行次数是___________。
6.for(int i=5;i<5;i++)的循环执行次数为___________。
7.int m=0,t;for(t=1;t<=4;t++) m++;程序运行后 m=___________。
8.for(int b=10;b>=5;b-=2)循环执行次数为___________。
9.语句 for(int x = 12; x > 4; x -= 4) 一共会执行________次循环体。
10.书写 for 循环时,若循环体包含多条执行语句,必须使用________包裹复合语句。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i, s = 0;
for(i = 1; i <= 3; i++)
{
s = s + 2;
}
printf("%d", s);
}
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x, y;
for (x = 1, y = 5; x < y; x++, y--) {
}
printf("%d %d", x, y);
}
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i = 0, k = 0;
for (; i < 5 && (k = i + 10) > 12; i++) {
printf("%d ", k);
}
printf("%d", k);
}
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int i, n = 5;
long long fact = 1;
for (i = 1; i <= n; fact *= i, i++);
printf("%lld", fact);
}
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, a = 0, b = 1, temp;
for (i = 0; i < 4; i++) {
temp = a + b;
a = b;
b = temp;
}
printf("%d", b);
}
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int n = 9, i, is_prime = 1;
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
is_prime = 0;
break;
}
}
printf("%d", is_prime);
}
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
char c;
for (c = 'A'; c <= 'C'; c++) {
printf("%d", c - 'A' + 1);
}
}
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int a = 18, b = 12;
for (; a != b; ) {
if (a > b) a -= b;
else b -= a;
}
printf("%d", a);
}
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int n = 13;
int count = 0;
int temp = n;
for (; temp > 0; temp >>= 1) {
if (temp & 1) {
count++; }
}
printf("%d", count);
}
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, sign = 1;
double sum = 0.0;
for (i = 1; i <= 4; i++) {
sum += sign * (1.0 / i);
sign = -sign;
}
printf("%.2f", sum);
}
四、程序填空题(根据题意,将空缺的语句补上)
1.题目描述:判断 n 是否为素数。循环只需遍历到
#include <stdio.h>
main() {
int n = 29, i, is_prime = 1;
for (i = 2; ___(1)___; i++) {
if (n % i == 0) {
is_prime = 0;
break; }
}
}
2.题目描述:输出斐波那契数列的第 n 项(从第 1 项 1, 第 2 项 1 开始)。
#include <stdio.h>
main() {
int n = 7, i;
long long a = 1, b = 1, temp;
if (n <= 2) {
printf("1"); }
else {
for (i = 3; i <= n; i++) {
temp = a + b;
a = b;
b = ___(1)___;
}
printf("%lld", b);
}
}
3.题目描述:判断 n 是否为完全数(所有真因子之和等于自身)。
#include <stdio.h>
main() {
int n = 28, sum = 1, i;
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
sum += i;
if (i != n / i) {
sum += ___(1)___; }
}
}
if (sum == n && n != 1) printf("Yes");
}
4.题目描述:将整数 n 反转(例如 123 -> 321)。
#include <stdio.h>
main() {
int n = 123, rev = 0, digit;
for (; n > 0; n /= 10) {
digit = n % 10;
rev = _____________;
}
printf("%d", rev);
}
5.计算1!+2!+3!+……+n!。
#include <stdio.h>
main() {
int n = 4, i;
long long sum = 0, fact = 1;
for (i = 1; i <= n; i++) {
fact *= i;
________________;
}
printf("%lld", sum);
}
五、编程题(使用for语句编写程序代码)。
1. 同构数是指一个数出现在其平方数的右边(末尾)。例如52=25,5在25右边;252=625,25在625右边,输入一个正整数,判断它是否是同构数。
输入示例:76
输出示例:Yes(因为762=5776)
2.佩尔数列的定义为:P0=0,P1=1,Pn=2*Pn-1+Pn-2。输入一个正数n,输出第n项佩尔数。
输入示例:5
输出示例:29(序列为0,1,2,5,12,29……)
3.输入一个正整数,将其转换为二进制,找出其中连续出现的数字 1 的最大个数。
例如:13 的二进制是 1101,最大连续 1 的个数是 2。
输入示例:13
输出示例:2
4.有一分数序列:
输入示例:5
输出示例:8.39
5.计算 n!(n的阶乘)结果中,末尾有多少个连续的 0。
原理:末尾的 0 是由因子 2 和 5 相乘得到的。在阶乘中,因子 2 的数量远多于因子 5,所以只需要计算有多少个因子 5。
输入示例:100
输出示例:24
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
5.4节:for语句
一、单项选择题
1.有代码for(int i=1;i<=5;i++){},该循环正常执行次数为( )
A. 4 次 B. 5 次 C. 6 次 D. 0 次
【答案】B
【解析】i 取值 1、2、3、4、5,满足条件执行 5 次,i=6 时条件不成立退出循环。
2.若定义int k=2;,语句for(;k<7;k++)下列说法正确的是( )
A. 初始化表达式省略,语法非法 B. 初始化表达式省略,使用变量原有值
C. 循环条件永远为假 D. 循环增量表达式无效
【答案】B
【解析】for 允许省略表达式 1,直接使用已定义变量的初始值参与循环判断。
3.已知int m=3;,for(;m--;)该循环终止条件是( )
A. m 的值等于 0 B. m 的值大于 0
C. m 的值小于 0 D. m 等于 3
【答案】A
【解析】C 语言中非 0 为真,0 为假;m-- 后置自减,m=0 时条件为假,循环结束。
4.语句for(int x=5;x>0;x--)循环结束后 x 的最终值为( )
A. 0 B. 1 C. -1 D. 5
【答案】A
【解析】x=1 执行循环体、x-- 变为 0;判断 x>0 不成立,循环结束,最终 x=0。
5.若有int n;for(n=1;n<=4;n+=2),循环执行次数为( )
A. 2 次 B. 3 次 C. 4 次 D. 1 次
【答案】A
【解析】n=1、3 满足条件,n+=2 后为 5,条件不成立,共 2 次。
6.已知代码int s=0;for(int i=1;i<=3;i++) s=s+1;,循环结束后 s 的值为( )
A. 1 B. 3 C. 6 D. 0
【答案】B
【解析】循环 3 次,每次 s 自增 1,0+1+1+1=3。
7.对于for(int t=10;t>2;t-=3),循环内部执行次数为( )
A. 2 次 B. 3 次 C. 4 次 D. 5 次
【答案】B
【解析】t=10、7、4 满足条件,共 3 次,下次 t=1 退出。
8.设有程序段:for(i=0; i<5; i++) printf("%d", i);,循环结束后变量i的值为( )
A. 4 B. 5 C. 6 D. 不确定
【答案】B
【解析】循环条件为i<5。当i=4时,条件满足,执行循环体,然后执行i++变为5;再次判断条件5<5为假,循环结束。故i最终为5。
9.以下程序段的输出结果是( )
int i, s = 0;
for (i = 1; i <= 5; i += 2) {
s += i;}
printf("%d", s);
A. 15 B. 9 C. 6 D. 10
【答案】B
【解析】i取值依次为1, 3, 5。s = 1 + 3 + 5 = 9。
10.以下程序段运行后,sum的值是( )
int i, sum = 0;
for (i = 1; i <= 100; i++) {
if (i % 2 == 0) sum += i;}
A. 5050 B. 2550 C. 2500 D. 100
【答案】B
【解析】计算1到100之间所有偶数的和。2+4+...+100 = 2*(1+...+50) = 2 * 1275 = 2550。
二、填空题。
1.表达式 2 的值为______时,for 循环判定条件不成立,直接退出循环。
【答案】0
【解析】C 语言规则:0 代表逻辑假,非 0 代表逻辑真。
2.代码for(int i=1;i<=6;i++),该循环总共执行______次。
【答案】6
【解析】i 取值 1~6,共 6 次有效循环。
3.循环语句for(int a=4;a>0;a--)执行完毕后,变量 a 的值为______。
【答案】0
【解析】a=1 执行循环,a-- 变为 0;再次判断不成立,结束后 a=0。
4.已知int sum=0,i;for(i=1;i<=2;i++) sum+=i;,sum 最终结果为___________。
【答案】3
【解析】第一次 sum=1,第二次 sum=1+2=3。
5.for(int k=3;k<=9;k+=3)循环的执行次数是___________。
【答案】3
【解析】k=3、6、9,三次循环。
6.for(int i=5;i<5;i++)的循环执行次数为___________。
【答案】0
【解析】初始条件不满足,循环体完全不执行。
7.int m=0,t;for(t=1;t<=4;t++) m++;程序运行后 m=___________。
【答案】4
【解析】循环 4 次,m 自增 4 次。
8.for(int b=10;b>=5;b-=2)循环执行次数为___________。
【答案】3
【解析】b=10、8、6,三次,下次 b=4 退出。
9.语句 for(int x = 12; x > 4; x -= 4) 一共会执行________次循环体。
【答案】2
【解析】有效取值:12、8;下一次 x=4,条件不成立,共计 2 次。
10.书写 for 循环时,若循环体包含多条执行语句,必须使用________包裹复合语句。
【答案】大括号 { }
【解析】无大括号时,for 仅控制紧邻的单条语句,多条语句必须加大括号。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i, s = 0;
for(i = 1; i <= 3; i++)
{
s = s + 2;
}
printf("%d", s);
}
【答案】6
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int x, y;
for (x = 1, y = 5; x < y; x++, y--) {
}
printf("%d %d", x, y);
}
【答案】3 3
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i = 0, k = 0;
for (; i < 5 && (k = i + 10) > 12; i++) {
printf("%d ", k);
}
printf("%d", k);
}
【答案】10
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int i, n = 5;
long long fact = 1;
for (i = 1; i <= n; fact *= i, i++);
printf("%lld", fact);
}
【答案】120
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, a = 0, b = 1, temp;
for (i = 0; i < 4; i++) {
temp = a + b;
a = b;
b = temp;
}
printf("%d", b);
}
【答案】5
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int n = 9, i, is_prime = 1;
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
is_prime = 0;
break;
}
}
printf("%d", is_prime);
}
【答案】0
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
char c;
for (c = 'A'; c <= 'C'; c++) {
printf("%d", c - 'A' + 1);
}
}
【答案】123
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int a = 18, b = 12;
for (; a != b; ) {
if (a > b) a -= b;
else b -= a;
}
printf("%d", a);
}
【答案】6
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int n = 13;
int count = 0;
int temp = n;
for (; temp > 0; temp >>= 1) {
if (temp & 1) {
count++; }
}
printf("%d", count);
}
【答案】3
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, sign = 1;
double sum = 0.0;
for (i = 1; i <= 4; i++) {
sum += sign * (1.0 / i);
sign = -sign;
}
printf("%.2f", sum);
}
【答案】0.58
四、程序填空题(根据题意,将空缺的语句补上)
1.题目描述:判断 n 是否为素数。循环只需遍历到
#include <stdio.h>
main() {
int n = 29, i, is_prime = 1;
for (i = 2; ___(1)___; i++) {
if (n % i == 0) {
is_prime = 0;
break; }
}
}
【答案】i * i <= n
2.题目描述:输出斐波那契数列的第 n 项(从第 1 项 1, 第 2 项 1 开始)。
#include <stdio.h>
main() {
int n = 7, i;
long long a = 1, b = 1, temp;
if (n <= 2) {
printf("1"); }
else {
for (i = 3; i <= n; i++) {
temp = a + b;
a = b;
b = ___(1)___;
}
printf("%lld", b);
}
}
【答案】temp
3.题目描述:判断 n 是否为完全数(所有真因子之和等于自身)。
#include <stdio.h>
main() {
int n = 28, sum = 1, i;
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
sum += i;
if (i != n / i) {
sum += ___(1)___; }
}
}
if (sum == n && n != 1) printf("Yes");
}
【答案】n / i
4.题目描述:将整数 n 反转(例如 123 -> 321)。
#include <stdio.h>
main() {
int n = 123, rev = 0, digit;
for (; n > 0; n /= 10) {
digit = n % 10;
rev = _____________;
}
printf("%d", rev);
}
【答案】rev * 10 + digit
5.计算1!+2!+3!+……+n!。
#include <stdio.h>
main() {
int n = 4, i;
long long sum = 0, fact = 1;
for (i = 1; i <= n; i++) {
fact *= i;
________________;
}
printf("%lld", sum);
}
【答案】sum += fact
五、编程题(使用for语句编写程序代码)。
1. 同构数是指一个数出现在其平方数的右边(末尾)。例如52=25,5在25右边;252=625,25在625右边,输入一个正整数,判断它是否是同构数。
输入示例:76
输出示例:Yes(因为762=5776)
【参考代码】
#include <stdio.h>
main() {
int n, temp;
long long square;
int divisor = 1;
printf("请输入一个整数: ");
scanf("%d", &n);
square = (long long)n * n;
temp = n;
// 计算模数,例如 n=76,模数应为 100
for (; temp > 0; temp /= 10)
divisor *= 10;
if (square % divisor == n)
printf("Yes
");
else
printf("No
");
}
2.佩尔数列的定义为:P0=0,P1=1,Pn=2*Pn-1+Pn-2。输入一个正数n,输出第n项佩尔数。
输入示例:5
输出示例:29(序列为0,1,2,5,12,29……)
【参考代码】
#include <stdio.h>
main() {
int n, i;
long long p0 = 0, p1 = 1, pn;
printf("请输入 n: ");
scanf("%d", &n);
if (n == 0) printf("0
");
else if (n == 1) printf("1
");
else {
for (i = 2; i <= n; i++) {
pn = 2 * p1 + p0; // 核心公式
p0 = p1; // 更新前两项
p1 = pn;
}
printf("%lld
", p1);
}
}
3.输入一个正整数,将其转换为二进制,找出其中连续出现的数字 1 的最大个数。
例如:13 的二进制是 1101,最大连续 1 的个数是 2。
输入示例:13
输出示例:2
【参考代码】
#include <stdio.h>
main() {
int n;
int current_len = 0;
int max_len = 0;
printf("请输入一个整数: ");
scanf("%d", &n);
// 模拟二进制转换过程
for (; n > 0; n /= 2) {
if (n % 2 == 1) {
current_len++; // 遇到 1,当前长度加 1
if (current_len > max_len)
max_len = current_len; // 更新最大值
}
else
current_len = 0; // 遇到 0,重置当前长度
}
printf("%d
", max_len);
}
4.有一分数序列:
输入示例:5
输出示例:8.39
【参考代码】
#include <stdio.h>
main() {
int n, i;
double sum = 0.0;
double num = 2.0, den = 1.0, temp;
printf("请输入项数 n: ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += num / den;
// 更新分子分母,注意使用临时变量
temp = num;
num = num + den;
den = temp;
}
printf("%.2f
", sum);
}
5.计算 n!(n的阶乘)结果中,末尾有多少个连续的 0。
原理:末尾的 0 是由因子 2 和 5 相乘得到的。在阶乘中,因子 2 的数量远多于因子 5,所以只需要计算有多少个因子 5。
输入示例:100
输出示例:24
【参考代码】
#include <stdio.h>
main() {
int n, count = 0;
int i;
printf("请输入 n: ");
scanf("%d", &n);
// 使用 for 循环模拟公式:i 依次为 5, 25, 125...
for (i = 5; n / i >= 1; i *= 5)
count += n / i;
printf("%d
", count);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$