高级程序语言设计个人作业第四次
| 这个作业属于哪个课程 | <班级的链接> |
|---|---|
| 这个作业要求在哪里 | <作业链接> |
| 学号 | 092300303 |
| 姓名 | 池博洋 |
@
目录
作业基本信息
运行程序
(1)

(2)

求π近似值
while方式:
点击查看代码
#include <stdio.h>
#include <math.h>
int main() {
double sum = 0.0;
int k = 0;
double term = 1.0;
while (fabs(term) >= 1e-4) {
term = pow(-1, k) / (2 * k + 1);
sum += term;
k++;
}
double pi = 4 * sum;
printf("π的近似值: %f\n", pi);
return 0;
}
结果:

do while方式:
点击查看代码
#include <stdio.h>
#include <math.h>
int main() {
double sum = 0.0;
int k = 0;
double term;
do {
term = pow(-1, k) / (2 * k + 1);
sum += term;
k++;
} while (fabs(term) >= 1e-4);
double pi = 4 * sum;
printf("π的近似值: %f\n", pi);
return 0;
}
结果:

实现逻辑表达式中的运算符
点击查看代码
#include <stdio.h>
int func1() {
printf("func1 executed\n");
return 0;
}
int func2() {
printf("func2 executed\n");
return 1;
}
int main() {
int a = 0, b = 1;
// 使用 &&,左侧为假时右侧不执行
if (a && func1()) {
printf("Condition 1 true\n");
} else {
printf("Condition 1 false\n");
}
// 使用 ||,左侧为真时右侧不执行
if (b || func2()) {
printf("Condition 2 true\n");
} else {
printf("Condition 2 false\n");
}
return 0;
}
结果:

for循环输出六行
点击查看代码
#include <stdio.h>
int main() {
for (int i = 0; i < 6; i++) {
for (char c = 'F'; c >= 'A' + i; c--) {
printf("%c", c);
}
printf("\n");
}
return 0;
}
结果:

for循环计算值
点击查看代码
#include <stdio.h>
int main() {
int n, i, j;
long s = 0, sum;
printf("请输入n: ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum = 0; // 计算第i项(1+2+...+i)
for (j = 1; j <= i; j++) {
sum += j;
}
s += sum; // 累加所有部分和
}
printf("s = %ld\n", s);
return 0;
}
结果:

for循环数组赋值求和
点击查看代码
#include <stdio.h>
int main() {
int arr[8];
int sum = 0;
// 赋值
for (int i = 0; i < 8; i++) {
arr[i] = i + 1; // 赋值1到8
}
// 输出
printf("数组元素: ");
for (int i = 0; i < 8; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 求和
for (int i = 0; i < 8; i++) {
sum += arr[i];
}
printf("数组和: %d\n", sum);
return 0;
}
结果:

分支程序
if-else分支
点击查看代码
#include <stdio.h>
int main() {
int score;
printf("输入分数: ");
scanf("%d", &score);
char grade;
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
printf("等级: %c\n", grade);
return 0;
}
switch语句
点击查看代码
#include <stdio.h>
int main() {
int score;
printf("输入分数: ");
scanf("%d", &score);
char grade;
switch (score / 10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default:
grade = 'F';
}
printf("等级: %c\n", grade);
return 0;
}
条件运算符:
点击查看代码
#include <stdio.h>
int main() {
int a, b;
printf("输入两个数: ");
scanf("%d %d", &a, &b);
int max = (a > b) ? a : b;
printf("较大值: %d\n", max);
return 0;
}
结果:

循环程序再循环中用break和continue语句
点击查看代码
#include <stdio.h>
int main() {
// 使用break:当i=5时终止循环
printf("使用break:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
printf("%d ", i);
}
printf("\n");
// 使用continue:当i=5时跳过当前迭代
printf("使用continue:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue;
}
printf("%d ", i);
}
printf("\n");
return 0;
}
结果:

求100~200间的全部素数
点击查看代码
#include <stdio.h>
#include <math.h>
int main() {
int i, j, flag;
for (i = 100; i <= 200; i++) {
flag = 1;
for (j = 2; j <= sqrt(i); j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
结果:

传统流程图:
开始
↓
for i从100到200
↓
flag = 1
↓
for j从2到√i
↓
如果 i % j == 0
↓
flag = 0
↓
break内层循环
↓
如果 flag == 1
↓
输出 i
↓
结束
算法思想:
素数是指大于1且只能被1和自身整除的数。对于每个数i(100到200),检查是否能被2到√i之间的任何整数整除。如果不能,则是素数。
6.16
6.16-1
点击查看代码
#include <stdio.h>
int main(void)
{
char letters[26];
// 在数组中存储26个小写字母
for (int i = 0; i < 26; i++) {
letters[i] = 'a' + i;
}
// 打印数组的所有内容
for (int i = 0; i < 26; i++) {
printf("%c ", letters[i]);
}
printf("\n");
return 0;
}
结果:

6.16-5
点击查看代码
#include <stdio.h>
int main(void)
{
char ch;
int i, j, k, n;
// 提示用户输入大写字母
printf("请输入一个大写字母: ");
scanf("%c", &ch);
// 计算行数(从A到输入字母的行数)
n = ch - 'A' + 1;
// 外层循环处理每一行
for (i = 0; i < n; i++) {
// 第一个内层循环:打印前导空格
for (j = 0; j < n - i - 1; j++) {
printf(" ");
}
// 第二个内层循环:升序打印字母
for (k = 0; k <= i; k++) {
printf("%c", 'A' + k);
}
// 第三个内层循环:降序打印字母
for (k = i - 1; k >= 0; k--) {
printf("%c", 'A' + k);
}
printf("\n"); // 换行
}
return 0;
}
结果:

6.16-7
点击查看代码
#include <stdio.h>
#include <string.h>
int main(void)
{
char word[100];
int length, i;
printf("请输入一个单词: ");
scanf("%s", word);
length = strlen(word);
printf("倒序打印: ");
for (i = length - 1; i >= 0; i--) {
printf("%c", word[i]);
}
printf("\n");
return 0;
}
结果:

6.16-10
点击查看代码
#include <stdio.h>
int main(void)
{
int lower, upper, i;
long sum;
printf("Enter lower and upper integer limits: ");
while (scanf("%d %d", &lower, &upper) == 2 && lower < upper) {
sum = 0;
// 计算从lower到upper的平方和
for (i = lower; i <= upper; i++) {
sum += i * i;
}
printf("The sums of the squares from %d to %d is %ld\n",
lower * lower, upper * upper, sum);
printf("Enter next set of limits: ");
}
printf("Done\n");
return 0;
}
结果:

6.16-13
点击查看代码
#include <stdio.h>
int main(void)
{
int powers[8];
int i, value = 1;
// 使用for循环设置数组元素的值(2的前8次幂)
for (i = 0; i < 8; i++) {
value *= 2;
powers[i] = value;
}
i = 0; // 重置索引
printf("2的前8次幂: ");
// 使用do while循环显示数组元素的值
do {
printf("%d ", powers[i]);
i++;
} while (i < 8);
printf("\n");
return 0;
}
结果:

6.16-16
点击查看代码
#include <stdio.h>
int main(void)
{
double daphne_balance = 100.0; // Daphne的投资余额(单利)
double deirdre_balance = 100.0; // Deirdre的投资余额(复利)
int years = 0;
printf("年份\tDaphne余额\tDeirdre余额\n");
printf("-----------------------------------\n");
// 循环直到Deirdre的投资超过Daphne
while (deirdre_balance <= daphne_balance) {
years++;
// Daphne: 单利,每年增加原始本金的10%
daphne_balance += 100.0 * 0.10;
// Deirdre: 复利,每年增加当前余额的5%
deirdre_balance *= 1.05;
printf("%d\t$%.2f\t\t$%.2f\n", years, daphne_balance, deirdre_balance);
}
printf("\n经过 %d 年,Deirdre的投资额超过了Daphne\n", years);
printf("Daphne的投资额: $%.2f\n", daphne_balance);
printf("Deirdre的投资额: $%.2f\n", deirdre_balance);
return 0;
}
结果:

6.16-18
点击查看代码
#include <stdio.h>
#define DUNBAR_NUMBER 150
int main(void)
{
int friends = 5; // 初始朋友数量
int week = 0;
printf("周数\t朋友数量\n");
printf("--------------\n");
printf("%d\t%d\n", week, friends);
// 循环直到朋友数量超过邓巴数
while (friends <= DUNBAR_NUMBER) {
week++;
// 第N周:少了N个朋友,然后剩下的朋友数量翻倍
friends = (friends - week) * 2;
printf("%d\t%d\n", week, friends);
}
printf("\n在第 %d 周,Rabnud博士的朋友数量超过了邓巴数(%d)\n",
week, DUNBAR_NUMBER);
return 0;
}
结果:

7.12
1
点击查看代码
#include <stdio.h>
int main(void)
{
char ch;
int space_count = 0, newline_count = 0, other_count = 0;
printf("请输入字符(以#结束): ");
while ((ch = getchar()) != '#') {
if (ch == ' ') {
space_count++;
} else if (ch == '\n') {
newline_count++;
} else {
other_count++;
}
}
printf("空格数: %d\n", space_count);
printf("换行符数: %d\n", newline_count);
printf("其他字符数: %d\n", other_count);
return 0;
}
结果:

2
点击查看代码
#include <stdio.h>
int main(void)
{
char ch;
int count = 0;
printf("请输入字符(以#结束): ");
while ((ch = getchar()) != '#') {
printf("'%c'-%d ", ch, ch);
count++;
// 每打印8个字符换行
if (count % 8 == 0) {
printf("\n");
}
}
printf("\n");
return 0;
}
结果:

4
点击查看代码
#include <stdio.h>
int main(void)
{
char ch;
int replace_count = 0;
printf("请输入字符(以#结束): ");
while ((ch = getchar()) != '#') {
if (ch == '.') {
putchar('!');
replace_count++;
} else if (ch == '!') {
putchar('!');
putchar('!');
replace_count++;
} else {
putchar(ch);
}
}
printf("\n总共进行了 %d 次替换\n", replace_count);
return 0;
}
结果:

5
点击查看代码
#include <stdio.h>
int main(void)
{
char ch;
int replace_count = 0;
printf("请输入字符(以#结束): ");
while ((ch = getchar()) != '#') {
switch (ch) {
case '.':
putchar('!');
replace_count++;
break;
case '!':
putchar('!');
putchar('!');
replace_count++;
break;
default:
putchar(ch);
break;
}
}
printf("\n总共进行了 %d 次替换\n", replace_count);
return 0;
}
结果:

7
点击查看代码
#include <stdio.h>
#define BASIC_WAGE 10.00
#define OVERTIME_RATE 1.5
#define OVERTIME_HOURS 40
#define TAX_RATE1 0.15
#define TAX_RATE2 0.20
#define TAX_RATE3 0.25
#define TAX_LIMIT1 300
#define TAX_LIMIT2 450
int main(void)
{
float hours, gross_pay, taxes, net_income;
printf("请输入一周工作的小时数: ");
scanf("%f", &hours);
// 计算工资总额
if (hours <= OVERTIME_HOURS) {
gross_pay = hours * BASIC_WAGE;
} else {
gross_pay = OVERTIME_HOURS * BASIC_WAGE +
(hours - OVERTIME_HOURS) * BASIC_WAGE * OVERTIME_RATE;
}
// 计算税金
if (gross_pay <= TAX_LIMIT1) {
taxes = gross_pay * TAX_RATE1;
} else if (gross_pay <= TAX_LIMIT2) {
taxes = TAX_LIMIT1 * TAX_RATE1 +
(gross_pay - TAX_LIMIT1) * TAX_RATE2;
} else {
taxes = TAX_LIMIT1 * TAX_RATE1 +
(TAX_LIMIT2 - TAX_LIMIT1) * TAX_RATE2 +
(gross_pay - TAX_LIMIT2) * TAX_RATE3;
}
// 计算净收入
net_income = gross_pay - taxes;
printf("\n工资总额: $%.2f\n", gross_pay);
printf("税金: $%.2f\n", taxes);
printf("净收入: $%.2f\n", net_income);
return 0;
}
结果:

浙公网安备 33010602011771号