高级语言程序设计课程第三次个人作业
高级语言程序设计课程第三次个人作业
这个作业属于哪个课程:2026高级语言程序设计(福州大学)
这个作业要求在哪里:高级语言程序设计课程第三次个人作业
学号:072506135
姓名:张锦程
第4章 4.8 编程练习
第2题:姓名格式化
#include <stdio.h>
#include <string.h>
int main(void) {
char first[40], last[40];
char full[82];
printf("请输入名和姓:");
scanf("%39s %39s", first, last);
snprintf(full, sizeof full, "%s %s", first, last);
printf("a. \"%s\"\n", full);
printf("b. \"%20s\"\n", full);
printf("c. \"%-20s\"\n", full);
printf("d. \"%*s\"\n", (int)strlen(full) + 3, full);
return 0;
}
运行结果截图:

第3题:小数与指数记数法
#include <stdio.h>
int main(void) {
float value;
printf("请输入一个浮点数:");
scanf("%f", &value);
printf("fixed: %f\n", value);
printf("exponential: %e\n", value);
return 0;
}
运行结果截图:

第4题:身高换算
#include <stdio.h>
int main(void) {
char name[40];
float inches;
printf("请输入身高(英寸):");
scanf("%f", &inches);
printf("请输入姓名:");
scanf("%39s", name);
printf("%s, you are %.3f feet tall\n", name, inches / 12.0f);
return 0;
}
运行结果截图:

第6题:姓名与字母数对齐
#include <stdio.h>
#include <string.h>
int main(void) {
char first[40], last[40];
int lf, ll;
printf("请输入名和姓:");
scanf("%39s %39s", first, last);
lf = (int)strlen(first);
ll = (int)strlen(last);
printf("%s %s\n", first, last);
printf("%*d %*d\n", lf, lf, ll, ll);
printf("%s %s\n", first, last);
printf("%-*d %-*d\n", lf, lf, ll, ll);
return 0;
}
运行结果截图:

第7题:float 与 double 精度
#include <float.h>
#include <stdio.h>
int main(void) {
double d = 1.0 / 3.0;
float f = 1.0f / 3.0f;
printf("float 6: %.6f\n", f);
printf("float 12: %.12f\n", f);
printf("float 16: %.16f\n", f);
printf("double 6: %.6f\n", d);
printf("double 12: %.12f\n", d);
printf("double 16: %.16f\n", d);
printf("FLT_DIG = %d, DBL_DIG = %d\n", FLT_DIG, DBL_DIG);
return 0;
}
运行结果截图:

第8题:燃油经济性换算
#include <stdio.h>
#define GALLON_TO_LITER 3.785f
#define MILE_TO_KM 1.609f
int main(void) {
float miles, gallons;
printf("请输入行驶里程(英里)和耗油量(加仑):");
scanf("%f %f", &miles, &gallons);
printf("miles per gallon: %.1f\n", miles / gallons);
printf("liters per 100 km: %.1f\n",
gallons * GALLON_TO_LITER / (miles * MILE_TO_KM) * 100.0f);
return 0;
}
运行结果截图:

第5章 5.11 编程练习
第1题:分钟转换
#include <stdio.h>
#define MIN_PER_HOUR 60
int main(void) {
int minutes;
while (1) {
printf("请输入分钟数(<=0 退出):");
if (scanf("%d", &minutes) != 1 || minutes <= 0) break;
printf("%d 分钟 = %d 小时 %d 分钟\n", minutes,
minutes / MIN_PER_HOUR, minutes % MIN_PER_HOUR);
}
puts("结束。");
return 0;
}
运行结果截图:

第2题:连续整数
#include <stdio.h>
int main(void) {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
for (int i = n; i <= n + 10; ++i) printf("%d%c", i, i == n + 10 ? '\n' : ' ');
return 0;
}
运行结果截图:

第3题:天数转换
#include <stdio.h>
int main(void) {
int days;
while (1) {
printf("请输入天数(<=0 退出):");
if (scanf("%d", &days) != 1 || days <= 0) break;
printf("%d 天 = %d 周 %d 天。\n", days, days / 7, days % 7);
}
puts("结束。");
return 0;
}
运行结果截图:

第4题:厘米转换
#include <stdio.h>
int main(void) {
double cm;
while (1) {
printf("请输入身高厘米数(<=0 退出):");
if (scanf("%lf", &cm) != 1 || cm <= 0) break;
double inches = cm / 2.54;
printf("%.1f 厘米 = %d 英尺 %.1f 英寸\n", cm, (int)(inches / 12),
inches - (int)(inches / 12) * 12);
}
puts("结束。");
return 0;
}
运行结果截图:

第5题:整数累加
#include <stdio.h>
int main(void) {
int n, sum = 0;
printf("请输入一个正整数:");
scanf("%d", &n);
for (int i = 1; i <= n; ++i) sum += i;
printf("总和 = %d\n", sum);
return 0;
}
运行结果截图:

第6题:平方和
#include <stdio.h>
int main(void) {
int n, sum = 0;
printf("请输入一个正整数:");
scanf("%d", &n);
for (int i = 1; i <= n; ++i) sum += i * i;
printf("平方和 = %d\n", sum);
return 0;
}
运行结果截图:

第7题:立方函数
#include <stdio.h>
static void print_cube(double x) { printf("%.3f 的立方 = %.3f\n", x, x * x * x); }
int main(void) {
double x;
printf("请输入一个数:");
scanf("%lf", &x);
print_cube(x);
return 0;
}
运行结果截图:

第8题:求模运算
#include <stdio.h>
int main(void) {
int divisor, value;
printf("请输入第二个操作数:");
scanf("%d", &divisor);
printf("请输入第一个操作数(<=0 退出):");
while (scanf("%d", &value) == 1 && value > 0) {
printf("%d %% %d = %d\n", value, divisor, value % divisor);
printf("请输入下一个数(<=0 退出):");
}
puts("结束。");
return 0;
}
运行结果截图:

第9题:温度转换
#include <stdio.h>
static void Temperatures(double fahrenheit) {
const double C_SCALE = 5.0 / 9.0;
const double K_OFFSET = 273.16;
double celsius = C_SCALE * (fahrenheit - 32.0);
double kelvin = celsius + K_OFFSET;
printf("%.2f 华氏度 = %.2f 摄氏度 = %.2f 开尔文\n", fahrenheit, celsius, kelvin);
}
int main(void) {
double f;
printf("请输入华氏温度(输入 q 退出):");
while (scanf("%lf", &f) == 1) {
Temperatures(f);
printf("请输入华氏温度(输入 q 退出):");
}
puts("结束。");
return 0;
}
运行结果截图:

题目给定程序运行结果
程序(1):字符串与 sizeof
#include <stdio.h>
#include <string.h>
#define PRAISE "What a super marvelous name!"
int main(void) {
char name[40];
printf("What's your name?\n");
scanf("%39s", name);
printf("Hello, %s. %s\n", name, PRAISE);
printf("Your name of %d letters occupies %d memory cells.\n", (int)strlen(name), (int)sizeof name);
printf("The phrase of praise has %d letters and occupies %d memory cells.\n", (int)strlen(PRAISE), (int)sizeof PRAISE);
return 0;
}
运行结果截图:

程序(2):棋盘麦粒问题
#include <stdio.h>
#define SQUARES 64
#define CROP 1E15
int main(void) {
double current, total;
int count = 1;
printf("square grains total fraction\n");
total = current = 1.0;
printf("%2d %13.2e %13.2e %13.2e\n", count, current, total, total / CROP);
while (count < SQUARES) {
++count;
current *= 2.0;
total += current;
printf("%2d %13.2e %13.2e %13.2e\n", count, current, total, total / CROP);
}
puts("That's all.");
return 0;
}
运行结果截图:

程序(3):自动类型转换
#include <stdio.h>
int main(void) {
char ch;
int i;
float fl;
fl = i = ch = 'C';
printf("ch = %c, i = %d, fl = %.2f\n", ch, i, fl);
ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0f * ch + i;
printf("ch = %c, i = %d, fl = %.2f\n", ch, i, fl);
ch = 5212205.17;
printf("Now ch = %c\n", ch);
return 0;
}
运行结果截图:

程序(4):函数参数类型转换
#include <stdio.h>
static void pound(int n) {
while (n-- > 0) putchar('#');
putchar('\n');
}
int main(void) {
int times = 5;
char ch = '!';
float f = 6.0f;
pound(times);
pound(ch);
pound((int)f);
return 0;
}
运行结果截图:

运算符优先级展示
示例程序:自增与四则运算混用
#include <stdio.h>
int main(void) {
int a = 3;
int result = ++a * 2 + 5;
int b = 3;
int result2 = b++ * 2 + 5;
printf("++a * 2 + 5: a=%d, result=%d\n", a, result);
printf("b++ * 2 + 5: b=%d, result=%d\n", b, result2);
return 0;
}
运行结果截图:

优先级从高到低
#include <stdio.h>
int main(void) {
const char *levels[] = {
"1 postfix: () [] -> . x++ x--",
"2 unary: ++x --x + - ! ~ (type) * & sizeof",
"3 multiplicative: * / %",
"4 additive: + -",
"5 shift: << >>",
"6 relational: < <= > >=",
"7 equality: == !=",
"8 bitwise AND: &",
"9 bitwise XOR: ^",
"10 bitwise OR: |",
"11 logical AND: &&",
"12 logical OR: ||",
"13 conditional: ?: ",
"14 assignment: = += -= *= /= %=",
"15 comma: ,"
};
for (size_t i = 0; i < sizeof levels / sizeof levels[0]; ++i) puts(levels[i]);
return 0;
}
运行结果截图:

编写和运行过程中遇到的问题及解决方法
无
总结和思考
本次作业集中练习了 printf 格式控制、字符串长度、浮点数精度、自动类型转换、while 循环、函数参数传递以及运算符优先级。通过实际编译和运行,我更加直观地理解了格式说明符对输出的影响,也看到浮点数并不能精确表示所有十进制小数。
在循环题中,结束条件决定了程序是否能够正常停止;在输入题中,scanf 的返回值和输入缓冲区处理同样重要。运算符优先级可以减少不必要的括号,但为了提高可读性,复杂表达式仍然应该主动使用括号。后续编程中还需要继续注意类型范围、隐式转换和边界输入。

浙公网安备 33010602011771号