高级语言程序设计第三次作业

这个作业属于哪个课程 <班级的链接>
这个作业要求在哪里 <作业链接>
学号 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;
}

结果:
7e9899f5ada4fc126d299db779c90c3d

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;
}

结果
33b4e2f33ad3577ea1168b6691c98c37

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;
}

结果
73f31c2d2893dec5287f9689d348b890

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;
}

结果:
73bc5971af0270b373ada08af919be7b

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;
}

结果
daab7b78bd19eaae752e0574126b3eb6

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;
}

结果:
acef0aa1e0d60e86ef8dae2e59535395

作业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;
}

结果:
f661fd6ed19e8d529a75d1367b2b6ca8

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;
}

结果:
21145dcb9523d4504fcbf5bb750008c0

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;
}

结果:
91f8c832d391a27324e2cfb1c4d1af10

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;
}

结果:
53737019aee4da36f7ef4a579a20f880

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;    /* 跳转语句 */
}

结果:
7a4f56cb2877ada7659678eefa982e3b

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;    /* 跳转语句 */
}

结果:
1d6be9af9f1eb15fdf74a1dbf363620d

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;    /* 返回立方值 */
}

结果:
738ce69aef4dfb50f784781bef7cb547

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;
}

结果:
a0e980763c4ec2632aad4eaa4d0acadd

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");
}

结果:
cdf57e8691a3df977041dc5f53761448

d95821db7bb73d58ce0ef5284c9cfc0e

运行程序

(1)

3003d9a0fd7d0fb70e065d7b006253be

(2)

e804b91ce67395823e3dff91bc321a84
c516a6d42d9732bba103ce56202ee756

(3)

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

QQ_1761900702538

(4)

QQ_1761900819089

设计

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

b24fccd9e50926f59bbf17af539c2f8e

点击查看代码
#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;
}

QQ_1761901368066

总结

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

posted @ 2025-10-31 17:06  aaa(zzz)  阅读(20)  评论(0)    收藏  举报