第5章 第4节:for语句(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 2份
| 24页
| 44人阅读
| 0人下载

内容正文:

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); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第5章 第4节:for语句(练习)-《C语言程序设计》(电子工业出版社)上好课
1
第5章 第4节:for语句(练习)-《C语言程序设计》(电子工业出版社)上好课
2
第5章 第4节:for语句(练习)-《C语言程序设计》(电子工业出版社)上好课
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。