高级语言程序设计第三次作业
| 这个作业属于哪个课程 | <班级的链接> |
|---|---|
| 这个作业要求在哪里 | <作业链接> |
| 学号 | 092300303 |
| 姓名 | 池博洋 |
@
目录
作业基本信息
作业4.8
4.8-2
点击查看代码
#include <stdio.h>
#include <string.h>
int main() {
char name[100];
// 提示用户输入名字
printf("请输入您的名字:");
scanf("%s", name);
// a. 打印名字,包括双引号
printf("a. 带双引号的名字:\"%s\"\n", name);
// b. 在宽度为20的字段左端打印名字,包括双引号
printf("b. 左对齐(宽度20):\"%-*s\"\n", 20 - 2, name); // -2是因为双引号占2个字符宽度
// c. 在宽度为20的字段右端打印名字,包括双引号
printf("c. 右对齐(宽度20):\"%*s\"\n", 20 - 2, name);
// d. 在比名字宽度宽3的字段中打印名字
int name_length = strlen(name);
int field_width = name_length + 3;
printf("d. 比名字宽3的字段:\"%*s\"\n", field_width - 2, name);
return 0;
}
结果:

4.8-3
点击查看代码
#include <stdio.h>
int main() {
float num;
// 提示用户输入浮点数
printf("请输入一个浮点数: ");
scanf("%f", &num);
// a. 以小数点记数法和指数记数法打印
printf("The input is %.1f or %.1e.\n", num, num);
// b. 显示正号,小数点后3位,指数记数法用大写E
printf("The input is %+.3f or %.3E.\n", num, num);
return 0;
}
结果:

4.8-4
点击查看代码
#include <stdio.h>
int main() {
char name[50];
float height_inch, height_feet;
// 提示用户输入身高(英寸)和姓名
printf("请输入您的姓名: ");
scanf("%s", name);
printf("请输入您的身高(单位: 英寸): ");
scanf("%f", &height_inch);
// 将英寸转换为英尺(1英尺 = 12英寸)
height_feet = height_inch / 12.0;
// 显示结果
printf("%s, you are %.3f feet tall\n", name, height_feet);
return 0;
}
结果:

4.8-6
点击查看代码
#include <stdio.h>
#include <string.h>
int main() {
char first_name[50], last_name[50];
// 提示用户输入名和姓
printf("请输入名: ");
scanf("%s", first_name);
printf("请输入姓: ");
scanf("%s", last_name);
// 第一行打印名和姓
printf("%s %s\n", first_name, last_name);
// 第二行:字母数与结尾对齐
printf("%*d %*d\n",
(int)strlen(first_name), (int)strlen(first_name),
(int)strlen(last_name), (int)strlen(last_name));
// 第三行再次打印名和姓
printf("%s %s\n", first_name, last_name);
// 第四行:字母数与开头对齐
printf("%-*d %-*d\n",
(int)strlen(first_name), (int)strlen(first_name),
(int)strlen(last_name), (int)strlen(last_name));
return 0;
}
结果:

4.8-7
点击查看代码
#include <stdio.h>
#include <float.h>
int main() {
double d_var = 1.0 / 3.0;
float f_var = 1.0 / 3.0;
printf("FLT_DIG = %d, DBL_DIG = %d\n\n", FLT_DIG, DBL_DIG);
// 显示6位小数
printf("显示6位小数:\n");
printf("double: %.6f\n", d_var);
printf("float: %.6f\n\n", f_var);
// 显示12位小数
printf("显示12位小数:\n");
printf("double: %.12f\n", d_var);
printf("float: %.12f\n\n", f_var);
// 显示16位小数
printf("显示16位小数:\n");
printf("double: %.16f\n", d_var);
printf("float: %.16f\n\n", f_var);
// 检查与FLT_DIG和DBL_DIG的一致性
printf("float类型的有效位数: %d\n", FLT_DIG);
printf("double类型的有效位数: %d\n", DBL_DIG);
printf("1.0/3.0的值在这些有效位数内是精确的。\n");
return 0;
}
结果:

4.8-8
点击查看代码
#include <stdio.h>
// 使用#define定义符号常量
#define LITERS_PER_GALLON 3.785
#define KILOMETERS_PER_MILE 1.609
int main() {
float miles, gallons;
float mpg, liters_per_100km;
// 提示用户输入里程和汽油消耗量
printf("请输入旅行的里程(英里): ");
scanf("%f", &miles);
printf("请输入消耗的汽油量(加仑): ");
scanf("%f", &gallons);
// 计算每加仑行驶的英里数
mpg = miles / gallons;
printf("消耗每加仑汽油行驶的英里数: %.1f 英里/加仑\n", mpg);
// 转换为升/100公里
// 公式: (100 * 升数) / 公里数
// 升数 = 加仑数 * 3.785
// 公里数 = 英里数 * 1.609
liters_per_100km = (100 * gallons * LITERS_PER_GALLON) / (miles * KILOMETERS_PER_MILE);
printf("燃料消耗: %.1f 升/100公里\n", liters_per_100km);
return 0;
}
结果:

作业5.11
5.11-1
点击查看代码
#include <stdio.h>
#define MIN_PER_HOUR 60
int main() {
int minutes;
printf("请输入分钟数(输入<=0的值退出): ");
scanf("%d", &minutes);
while (minutes > 0) {
int hours = minutes / MIN_PER_HOUR;
int remaining_minutes = minutes % MIN_PER_HOUR;
printf("%d 分钟 = %d 小时 %d 分钟\n",
minutes, hours, remaining_minutes);
printf("请输入分钟数(输入<=0的值退出): ");
scanf("%d", &minutes);
}
printf("程序结束。\n");
return 0;
}
结果:

5-11.2
点击查看代码
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
for (int i = num; i <= num + 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
结果:

5.11-3
点击查看代码
#include <stdio.h>
#define DAYS_PER_WEEK 7
int main() {
int days;
printf("请输入天数(输入<=0的值退出): ");
scanf("%d", &days);
while (days > 0) {
int weeks = days / DAYS_PER_WEEK;
int remaining_days = days % DAYS_PER_WEEK;
printf("%d days are %d weeks, %d days.\n",
days, weeks, remaining_days);
printf("请输入天数(输入<=0的值退出): ");
scanf("%d", &days);
}
printf("程序结束。\n");
return 0;
}
结果:

5.11-4
点击查看代码
#include <stdio.h>
int main() {
float cm;
const float CM_PER_INCH = 2.54;
const int INCHES_PER_FOOT = 12;
printf("Enter a height in centimeters: ");
scanf("%f", &cm);
while (cm > 0) {
float total_inches = cm / CM_PER_INCH;
int feet = total_inches / INCHES_PER_FOOT;
float inches = total_inches - feet * INCHES_PER_FOOT;
printf("%.1f cm = %d feet, %.1f inches\n",
cm, feet, inches);
printf("Enter a height in centimeters (<= 0 to quit): ");
scanf("%f", &cm);
}
printf("bye\n");
return 0;
}
结果:

5.11-5
点击查看代码
#include <stdio.h>
int main(void)
{
int count, sum, n; /* 声明 */
/* 提示用户输入天数 */
printf("请输入工作天数: ");
scanf("%d", &n);
count = 0; /* 表达式语句 */
sum = 0; /* 表达式语句 */
/* 迭代语句 - 根据用户输入的n进行计算 */
while (count++ < n) /* 用变量n代替固定的20 */
sum = sum + count;
printf("在 %d 天里总共赚了 %d 元\n", n, sum); /* 表达式语句 */
return 0; /* 跳转语句 */
}
结果:

5.11-6
点击查看代码
#include <stdio.h>
int main(void)
{
int count, sum_of_squares, n; /* 声明 */
/* 提示用户输入一个整数 */
printf("请输入一个整数: ");
scanf("%d", &n);
count = 0; /* 表达式语句 */
sum_of_squares = 0; /* 表达式语句 */
/* 迭代语句 - 计算从1到n的平方和 */
while (count++ < n) /* 用变量n代替固定的值 */
sum_of_squares = sum_of_squares + count * count; /* 使用n*n表示平方 */
printf("从1到%d的平方和是: %d\n", n, sum_of_squares); /* 表达式语句 */
return 0; /* 跳转语句 */
}
结果:

5.11-7
点击查看代码
#include <stdio.h>
double calculate_cube(double num); // 函数声明
int main(void)
{
double num, cube; /* 声明 */
/* 提示用户输入一个double类型的数 */
printf("请输入一个double类型的数: ");
scanf("%lf", &num);
/* 调用函数计算立方值 */
cube = calculate_cube(num); /* 表达式语句 */
/* 打印结果 */
printf("%.2f 的立方值是: %.2f\n", num, cube); /* 表达式语句 */
return 0; /* 跳转语句 */
}
/* 函数定义 - 计算立方值并返回结果 */
double calculate_cube(double num)
{
return num * num * num; /* 返回立方值 */
}
结果:

5.11-8
点击查看代码
#include <stdio.h>
int main() {
int second_operand, first_operand;
printf("This program computes moduli.\n");
printf("Enter an integer to serve as the second operand: ");
scanf("%d", &second_operand);
printf("Now enter the first operand: ");
scanf("%d", &first_operand);
while (first_operand > 0) {
int result = first_operand % second_operand;
printf("%d %% %d is %d\n", first_operand, second_operand, result);
printf("Enter next number for first operand (<= 0 to quit): ");
scanf("%d", &first_operand);
}
printf("Done\n");
return 0;
}
结果:

5.11-9
点击查看代码
#include <stdio.h>
void Temperatures(double fahrenheit);
int main() {
double fahr;
printf("请输入华氏温度(输入q退出): ");
while (scanf("%lf", &fahr) == 1) {
Temperatures(fahr);
printf("请输入华氏温度(输入q退出): ");
}
printf("程序结束。\n");
return 0;
}
void Temperatures(double fahrenheit) {
const double FREEZING_CELSIUS = 32.0;
const double CELSIUS_TO_KELVIN = 273.16;
double celsius = 5.0 / 9.0 * (fahrenheit - FREEZING_CELSIUS);
double kelvin = celsius + CELSIUS_TO_KELVIN;
printf("华氏温度: %.2f°F\n", fahrenheit);
printf("摄氏温度: %.2f°C\n", celsius);
printf("开氏温度: %.2fK\n", kelvin);
printf("-------------------\n");
}
结果:


运行程序
(1)

(2)


(3)
ch = 5212205.17; 这个赋值导致数据溢出,产生的字符可能是不可见的控制字符

(4)

设计
(1)设计一个可以将程序运算符优先级展示出来的程序(例如自增或者自减运算与四则运算符混用)。

点击查看代码
#include <stdio.h>
int main() {
printf("=== 运算符优先级演示 ===\n\n");
int a, b, result;
// 示例1:基础四则运算
printf("1. 乘除优先于加减:\n");
a = 10; b = 5;
result = a + b * 2;
printf(" %d + %d * 2 = %d\n", a, b, result);
printf(" 先算 %d * 2 = %d,再算 %d + %d = %d\n\n", b, b*2, a, b*2, result);
// 示例2:前置自增
printf("2. 前置自增优先级高:\n");
a = 5;
result = ++a * 3;
printf(" ++%d * 3 = %d\n", 5, result);
printf(" 先自增a=%d,再计算 %d * 3 = %d\n\n", a, a, result);
// 示例3:后置自增
printf("3. 后置自增的时机:\n");
a = 5;
result = a++ * 3;
printf(" %d++ * 3 = %d\n", 5, result);
printf(" 先用a=%d计算,再自增a=%d\n\n", 5, a);
// 示例4:混合运算
printf("4. 混合运算:\n");
a = 8; b = 4;
result = ++a * b--;
printf(" ++%d * %d-- = %d\n", 8, 4, result);
printf(" 先++a=9,再用b=4,计算9*4=36,最后b--=3\n");
printf(" 最终: a=%d, b=%d\n", a, b);
return 0;
}
(2)设计一个程序将这些运算符的优先级按照从高到低一行行展示出来。
点击查看代码
#include <stdio.h>
int main() {
printf("=== 运算符优先级实际演示 ===\n\n");
int a, b, c, result;
// 示例1:括号最高优先级
printf("1. 括号 > 乘除 > 加减\n");
a = 10; b = 5; c = 2;
result = (a + b) * c; // 括号改变顺序
printf(" (%d + %d) * %d = %d\n", a, b, c, result);
printf(" 不加括号: %d + %d * %d = %d\n\n", a, b, c, a + b * c);
// 示例2:自增自减 > 乘除
printf("2. 自增自减 > 乘除\n");
a = 5; b = 3;
result = ++a * b; // 先自增再乘法
printf(" ++%d * %d = %d\n", 5, b, result);
printf(" a先变为%d,然后计算 %d * %d = %d\n\n", a, a, b, result);
// 示例3:乘除 > 加减
printf("3. 乘除 > 加减\n");
a = 8; b = 4; c = 2;
result = a + b * c; // 先乘法后加法
printf(" %d + %d * %d = %d\n", a, b, c, result);
printf(" 先算 %d * %d = %d,再算 %d + %d = %d\n\n", b, c, b*c, a, b*c, result);
// 示例4:复杂混合运算
printf("4. 完整优先级演示\n");
a = 6; b = 2; c = 3;
result = ++a * b + c--; // 自增>乘法>加法>自减
printf(" ++%d * %d + %d-- = %d\n", 6, b, 3, result);
printf(" 步骤:\n");
printf(" - 先++a: a变为%d\n", a);
printf(" - 再计算 %d * %d = %d\n", a, b, a*b);
printf(" - 然后加上c的值: %d + %d = %d\n", a*b, 3, a*b+3);
printf(" - 最后c--: c变为%d\n", 2);
printf(" 最终结果: %d\n", result);
return 0;
}

总结
通过这次学习,我对字符串和格式化输入输出有了更深刻的理解,还充分了解了运算符的运用方式以及优先次序等等知识
浙公网安备 33010602011771号