高级语言程序设计课程第四次个人作业
这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/gjyycx
这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/gjyycx/homework/14577
学号:102500405
姓名:刘诺涵
一.运行以下程序给出程序结果(无需代码,截图程序输出结果,如有错误可自行修改)。
(1)
(2)
二.设计程序。
(1)用while和do while分别设计程序实现:用公式π/4=1-1/3+1/5-1/7+1/9+...求π的近似值,直到某一项的绝对值小于10^-4为止,对两个程序的不同之处进行讨论。
a.while

b.do while

讨论:while是先判断再执行,do while是先执行再判断,do while循环至少会进行一次,所以在这题中do while多做了一次循环。
(2)设计一个程序,实现功能:逻辑表达式中的运算符,只有会影响表达式求值时,才会执行。
说明:分为a.逻辑与(&&)这个运算符影响表达式求值并执行
b.逻辑或(||)这个运算符影响表达式求值并执行

(3)用for循环输出六行,第一行有FEDCBA,第二行是FEDCB,第三行是FEDC....,以此类推。
说明:使用for进行内外层分别设计循环(外层控制输出行数,内层控制每行输出的字符)

(4)编程输入n, 计算s=1+(1+2)+(1+2+3)+…+(1+2+3+4+…n)。
说明:使用for进行内外层分别设计循环(外层控制计算每一项的和,内层计算每一项的值)最后累加总和后输出即可。

(5)用for循环给一组整型类型的数组进行赋值,输出,以及求和,数组长度为8。
说明:用2个for循环分别表示数组和计算求和。

(6)设计一个if和else的多分支程序(分支数目大于3),该多分支程序再用switch语句进行改写,同时设计一个使用条件运算符(?:)的双分支语句。
a.if else

b.switch

c.条件运算符

(7)设计一个循环程序,再循环中用break和continue语句,实现不同的程序效果,给出结果并讨论。
说明:1. 影响范围不同:break终结循环整体,continue只跳过当前轮次,循环仍会继续。
2. 执行逻辑不同:break后循环体后续代码和下一轮循环都不执行;continue仅跳过当前轮剩余代码,下一轮循环正常触发。
3. 使用场景不同:break适合“满足条件即停止循环”(如找目标值);continue适合“过滤无效数据,只处理符合条件的内容”(如跳过异常值、特定规则数据)。

(8)设计一个程序求100~200间的全部素数,给出算法思想、传统流程图、程序NS流程图。
说明:
a.程序如下:

b.算法思想
1. 遍历100~200的每个整数(候选数n);
2. 对每个候选数n,判断其是否为素数:
- 判断条件:用2~√n(根号n)之间的整数依次整除n;
- 若存在能整除n的数,说明n不是素数,直接跳过;
- 若遍历完2~√n都不能整除n,说明n是素数,输出n;
3. 重复步骤1~2,直到遍历完所有候选数。
c.传统流程图
开始
│
├─ 初始化 n = 100
│
├─ 循环:n ≤ 200?
│ ├─ 是 → 初始化判断标志 flag = 1(假设n是素数)
│ │ ├─ 初始化除数 i = 2
│ │ ├─ 循环:i ≤ √n?
│ │ │ ├─ 是 → n % i == 0?
│ │ │ │ ├─ 是 → flag = 0(标记为非素数),跳出除数循环
│ │ │ │ └─ 否 → i = i + 1,继续除数循环
│ │ │ └─ 否 → 结束除数循环
│ │ ├─ flag == 1?
│ │ │ ├─ 是 → 输出n(素数)
│ │ │ └─ 否 → 不输出
│ │ └─ n = n + 1,回到候选数循环
│ └─ 否 → 结束程序
│
结束
d.程序NS流程图
┌─────────────────────────────────────────────────────────────┐
│ 开始 │ // 程序启动
├─────────────────────────────────────────────────────────────┤
│ n = 100 │ // 候选数从100开始(要找100~200的素数)
├─────────────────────────────────────────────────────────────┤
│ for (n = 100; n ≤ 200; n++) { // 外层循环:逐个检查100~200的数 │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 1. 初始化:flag=1(先假设当前n是素数),i=2(除数从2开始) │ // flag是“素数标记”,i是用来试除的数
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ for (i = 2; i ≤ sqrt(n); i++) { // 内层循环:试除判断素数 │ // 除数只需要到√n,效率更高
│ │ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ if (n % i == 0) { // 能被i整除 → 不是素数 │ │
│ │ │ flag = 0; // 标记为非素数 │ │
│ │ │ break; // 跳出内层循环,不用再试除了 │ │
│ │ │ } │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ i = i + 1; // 除数+1,继续试除下一个数 │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ if (flag == 1) { // 若还是1 → 确实是素数 │ │
│ │ printf("%d ", n); // 输出这个素数 │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ } // 外层循环结束:n+1,检查下一个数 │
├─────────────────────────────────────────────────────────────┤
│ 结束 │ // 程序结束
└─────────────────────────────────────────────────────────────┘
三.编写并运行书本第6章6.16编程练习题目中的第1,5,7,10,13,16,18题。
1.编写一个程序,创建一个包含26个元素的数组,并在其中存储26个小写字母。然后打印数组的所有内容。
说明:使用for循环,注意圆括号中要用分号将三个表达式隔开。(第一个是初始化;第二个是测试条件;第三个是执行更新)

5.编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔型的格式打印字母:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是在用户输入 E 后的打印结果。
提示:用外层循环处理行,每行使用3个内层循环,分别处理空格、以升序打印字母、以降序打印字母。如果系统不使用 ASCII 或其他以数字顺序编码的代码,请参照练习3的解决方案。
说明:按照练习3的方法,将字符数组初始化为字母表中的字母。使用for的嵌套循环(按提示进行处理)注意一开始没有使用break跳出循环导致行数无法确定,并且尽量用明显的分层让for循环更加整齐,编写的时候就不会乱。

7.编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单词。提示: strlen ()函数(第4章介绍过)可用于计算数组最后一个字符的下标。
说明:使用字符串记得标记宽度,并使用strlen()语句和for循环完成编写。

10.编写一个程序,要求用户输入一个上限整数和一个下限整数,计算从上限到下限范围内所有整数
的平方和,并显示计算结果。然后程序继续提示用户输入上限和下限整数,并显示结果,直到用户输入的上限整数等于或小于下限整数为止。程序的运行示例如下:
Enter lower and upper integer limits :59
The sums of the squares from 25 to 81 is 255
Enter next set of limits :325
The sums of the squares from 9 to 625 is 5520
Enter next set of limits :55
说明:使用while(1)构造一个无限循环,再通过scanf读取用户输入的上下限,设置如果upper<=lower,打印Done,并使用break退出循环。
初始化sum为0,使用for循环,每次将当前整数的平方累加到sum中,最后输出数值即可。

13.编写一个程序,创建一个包含8个元素的 int 类型数组,分别把数组元素设置为2的前8次幂。使用 for 循环设置数组元素的值,使用 do while 循环显示数组元素的值。
说明:分别用for和do while循环,要注意格式和字符不要漏。

-
Daphne以10%的单利息投资了100美元(也就是说,每年投资获利相当于原始投资的10%)。Deirdre以5%的复合利息投资了100美元(也就是说,利息是当前余额的5%,包含之前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne ,并显示那时两人的投资额。
说明:设置多个变量,使用do while循环,根据单利和复利公式(使用poe函数计算幂)而后规定当Deirdre的投资额超过Daphne时退出循环即可。
![QQ_1762698718993]()
-
Rabnud 博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的方式增长。第1周少了1个朋友,剩下的朋友数量翻倍;第2周少了2个朋友,剩下的朋友数量翻倍。一般而言,第 n 周少了 n 个朋友,剩下的朋友数量翻倍。编写一个程序,计算并显示 Rabnud 博士每周的朋友数量。该程序一直运行,直到超过邓巴数( Dunbar ' s number )。邓巴数是粗略估算一个人在社交圈中有稳定关系的成员的最大值,该值大约是150。
说明:定义邓巴数为150,使用while循环以及计算公式,当数值大于邓巴数时结束循环。
![QQ_1762699443268]()
四.编写并运行书本第7章7.12编程练习题目中的第1,2,4~5,7题。
1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。
说明:先定义变量,再使用while循环通过getchar()读取字符,其中用if区分当前字符种类,并进行计数+1处理,最后打印出结果。

2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的 ASCII 码(十进制)。每行打印8个"字符﹣ ASCII 码"组合。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
说明:使用while循环,if使每行打印8个“字符+ASCII码”组合以及换行符。

4.使用 if else 语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
说明:用if else,结合while进行循环读取与替换

5.使用 switch 重写练习4。
说明:注意switch格式,case和default后都需接:

7.编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设: a .基本工资=10.00美元/小时
b .加班(超过40小时)=1.5倍的时间
c .税率:前300美元为15%
续150美元为20%
余下的为25%
用# define 定义符号常量。不用在意是否符合当前的税法。
说明:先用符号常量定义,再提示用户输入工作小时数,再使用if else判断工资计算种类并计算,还有税金也通过相同判断进行计算,最后输出结果。

五.总结
通过本次作业,我学会和巩固了核心涵盖循环(for/while)、分支(if-else/switch)、数组操作,及素数判断、累加求和等算法,含break/continue、条件运算符、逻辑短路等关键用法。希望在后续课程中我能够学会更多方法,累积更多经验。


浙公网安备 33010602011771号