高级语言程序设计作业第三次作业
作业内容
编写并运行第4章4.8编程练习题目中的第2题~第4题, 第6题~第8题。
- 第二题:编写一个程序,提示用户输入名字,并执行以下操作:
#include <stdio.h>
#include <string.h>
int main(void){
char name[30];
printf("请输入姓名: ");
scanf("%s",name);
printf("\"%s\"\n",name); \\打印名字,包括双引号
printf("\"%20s\"\n",name); \\在宽度为20的字段右端打印名字,包括双引号
printf("\"%-20s\"\n",name); \\在宽度为20的字段左端打印名字,包括双引号
int wieth=strlen(name)+3;
printf("\"%*s\"\n",wieth,name); \\在比姓名宽度宽3的字段打印名字
return 0;
}
![屏幕截图 2025-11-02 203751]()
- 第三题:编写一个程序,读取一个浮点数,首先以小数点计数法打印,然后以指数级数法打印:
#include <stdio.h>
#include <string.h>
int main(void){
float num ;
printf("请输入一个浮点数: ");
scanf("%f",&num);
printf("The input is %.1f or %.1e.\n",num,num);
printf("The input is %+.3f or %.3E.\n",num,num);
return 0;
}
![屏幕截图 2025-11-02 212259]()
- 第四题:编写一个程序,提示用户输入身高(inch)和姓名,然后以以下格式显示用户输入:
Dabney,you are 6.028 feet tall.
#include <stdio.h>
#include <string.h>
int main(void){
float tall ;
char name[30];
printf("请输入身高(inch)和姓名: ");
scanf("%f %s",&tall,name);
printf("%s,you are %.3f feet tall.\n",name,tall/12);
return 0;
}
![屏幕截图 2025-11-02 213106]()
- 第六题:编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数,字母数要与相应名和姓的结尾对齐。在再下一行字母数要与相应名和姓的开头对齐。
#include <stdio.h>
#include <string.h>
int main(void){
char name1[30] ;
char name2[30];
printf("请输入名: ");scanf(" %s",name1);
printf("请输入姓: ");scanf(" %s",name2);
printf("%s %s\n",name1,name2);
printf("%*d %*d\n",strlen(name1),strlen(name1),strlen(name2),strlen(name2));
printf("%s %s\n",name1,name2);
printf("%-*d %-*d\n",strlen(name1),strlen(name1),strlen(name2),strlen(name2));
return 0;
}
![屏幕截图 2025-11-02 214144]()
- 第七题:编写一个程序,将一个double类型的变量设置为1.0/3.0, 一个float类型的变量设置为1.0/3.0。分别显示两次计算的结果各3次: 一次显示小数点后面6位数字;一次显示小数点后面12位数字;一次显示小数点后面16位数字。程序中要包含float.h 头文件,并显示 FLT_DIG 和DBL DIG的值。1.0/3.0的值与这些值一致吗?
#include <stdio.h>
#include<float.h>
int main(void){
double num1=1.0/3.0 ;
float num2=1.0/3.0;
printf("double: %.6f %.12f %.16f\n",num1,num1,num1);
printf("float: %.6f %.12f %.16f\n",num2,num2,num2);
printf("FLT_DIG: %d\nDBL_DIG: %d",FLT_DIG,DBL_DIG);
return 0;
}
![屏幕截图 2025-11-02 215731]()
- 第八题:编写一个程序, 提示用户输入旅行的里程和消耗的汽油量。然后计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下来, 使用1加仑大约3.785升,1英里大约为1.609千米,把单位是英里/加仑的值转换为升/100公里(欧洲通用的燃料消耗表示法),并显示结果, 显示小数点后面1位数字。注意,美国采用的方案测量消耗单位燃料的行程(值越大越好), 而欧洲则采用单位距离消耗的燃料测量方案(值越低越好)。使用#define创建符号常量或使用const限定符创建变量来表示两个转换系数。
#include <stdio.h>
#define km 3.785
#define L 1.609
int main(void){
double a,b;
printf("请输入旅行的里程(英里)和消耗的汽油量(加仑):");
scanf("%lf %lf",&a,&b);
printf("消耗单位燃料的行程:%.1f L/100km",b*L/a/km*100);
return 0;
}
![屏幕截图 2025-11-02 235721]()
编写并运行第5章5.11编程练习题目中的第1题~第9题
- 第一题:编写一个程序, 把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const 变量。通过 while循环让用户重复输入值, 直到用户输入小于或等于0的值才停止循环。
#include <stdio.h>
int main(void){
const int h=60;
int minute=1;
while(1){
printf("请输入分钟数:");
scanf("%d",&minute);
if(minute>0){printf("%d分钟 = %d小时 %d分钟\n",minute,minute/h,minute%h);}
else{break;}
}
return 0;
}
![屏幕截图 2025-11-02 222803]()
- 第二题:编写一个程序, 提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如,用户输入5,则打印5~15的所有整数, 包括5和15)。要求打印的各值之间用一个空格、制表符或换行符分开。
#include <stdio.h>
int main(void){
int num;
printf("请输入一个整数:");
scanf("%d",&num);
for(int i=0;i<=10;i++){
printf("%d ",num+i);
}
return 0;
}
![屏幕截图 2025-11-02 223258]()
- 第三题:编写一个程序, 提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面格式显示结果:
18 days are weeks, 4 days.
通过while循环让用户重复输入天数,当用户输入一个非负数时循环结束。
#include <stdio.h>
int main(void){
const int w=7;
int days;
printf("请输入天数:");
scanf("%d",&days);
while(days>0){
printf("%d 天 = %d 周 %d 天\n",days,days/w,days%w);
printf("请输入天数:");
scanf("%d",&days);
}
return 0;
}
![image]()
![屏幕截图 2025-11-02 224147]()
- 第四题:编写一个程序,提示用户输入一个身高(单位:厘米),并分别以厘米和英尺、英寸为单位显示该值允许有小数部分。程序应该能让用户重复输入身高,直到用户输入一个非正值。其输出示例如下:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters (<=0 to quit): 168.7
168.7 cm = 5 feet, 6.4 inches
Enter a height in centineters (<=0 to quit): 0
bye
#include <stdio.h>
#define feet 30.48
#define inch 2.54
int main(void){
float tall;
int f;
printf("Enter a height in centimeters:");
scanf("%f",&tall);
while(tall>0){
f=tall/feet;
printf("%.1f cm = %d feet, %.1f inches\n",tall,f,(tall-f*feet)/inch);
printf("Enter a height in centimeters(<=0 to quit):");
scanf("%f",&tall);
}
printf("bye");
return 0;
}
![屏幕截图 2025-11-02 230526]()
- 第五题: 修改程序addemup.c(程序清单5.13),你可以认为addemup.c是计算20天里赚多少钱的程序(假设第1天赚S1、第2天赚$2、第3天赚$3,以此类推)。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)。
#include <stdio.h>
int main(void){
int count=0,sum=0,days;
printf("请输入赚钱天数:");
scanf("%d",&days);
while(count++<days){
sum+=count;
}
printf("%d天总共赚了$%d\n",days,sum);
return 0;
}
![屏幕截图 2025-11-02 231741]()
- 第六题:修改编程练习5的程序, 使其能计算整数的平方和(可以认为第1天赚$1、第2天赚S4、第3天赚$9,以此类推,这看起来很不错)。C没有平方函数,但是可以用n*n来表示n的平方。
#include <stdio.h>
int main(void){
int count=0,sum=0,days;
printf("请输入赚钱天数:");
scanf("%d",&days);
while(count++<days){
sum+=count*count;
}
printf("%d天总共赚了$%d\n",days,sum);
return 0;
}
![屏幕截图 2025-11-02 231933]()
- 第七题:编写一个程序,提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
#include <stdio.h>
double cube(double num){
return (num*num*num);
}
int main(void){
double num;
printf("请输入一个double型的数:");
scanf("%lf",&num);
printf("%f的立方值为:%f",num,cube(num));
return 0;
}
![屏幕截图 2025-11-02 235410]()
- 第八题:编写一个程序,显示求模运算的结果。把用户输入的第1个整数作为求模运算符的第2个运算对象,该数在运算过程中保持不变。用户后面输入的数是第1个运算对象。当用输入一个非正值时,程序结束。其输出示例如下:
This program computes moduli
Enter an integer to serve as the second operand: 256
Now enter the first operand: 438
438 号256 is 182
Enter next number for first operand (<= 0 to quit): 1234567
1234567 8 256 is 135
Enter next number for first operand (<= 0 to quit): 0Done
#include <stdio.h>
int main(void){
int num1,num2;
printf("This program computes moduli.\n");
printf("Enter an integer to serve as the second operand: ");
scanf("%d",&num1);
printf("Now enter the first operand: ");
scanf("%d",&num2);
while(num2>0){
printf("%d %% %d is %d\n",num2,num1,num2%num1);
printf("Enter next number for first operand(<= 0 to quit): ");
scanf("%d",&num2);
}
printf("Done");
return 0;
}
![屏幕截图 2025-11-03 000839]()
- 第九题:编写个程序,要求用户输入一个华氏温度。程序应读取double类型的值作为温度值,并把该值作为参数传递给一个用户自定义的函数Temperatures() 该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示3种温度。要使用不同的温标来表示这3个温度值。下面是华氏温度转摄氏温度的公式:
摄氏温度=5.0/9.0(华氏温度-32.0)
开氏温标常用于科学研究,0表示绝对零,代表最低的温度。下面是摄氏温度转开氏温度的公式:
开氏温度=摄氏温度+273.16
Temperatures()函数中用const创建温度转换中使用的变量。在main()函数中使用一个循环让用户重复输入温度,当用户输入q或其他非数字时,循环结束。 scanf()函数返回读取数据的数量,所以如果读取数字则返回1, 如果读取q则不返回1。可以使用一—运算符将scanf ()的返回值和1作比较,测试两值是否相等
#include <stdio.h>
void Temperatures(double F){
const double C1=5.0/9.0,C2=32.0;
const double K=273.16;
double c=C1*(F-C2);
double k=c+K;
printf("%.2f ℉ = %.2f ℃ = %.2f K\n",F,c,k);
}
int main(void){
double F;
printf("Enter a temperatures(℉): ");
while(scanf("%lf",&F)==1){
Temperatures(F);
printf("Enter a temperatures ℉(q or not number to quit): ");
}
printf("Done");
return 0;
}
![屏幕截图 2025-11-03 002755]()
运行以下程序给出程序结果
![屏幕截图 2025-11-03 003051]()
![屏幕截图 2025-11-03 003317]()
![屏幕截图 2025-11-03 003332]()
![屏幕截图 2025-11-03 003513]()
- 4
![屏幕截图 2025-11-03 003745]()
程序设计
- 设计一个可以将程序运算符优先级展示出来的程序(例如自增或者自减运算与四则运算符混用)
#include <stdio.h>
int main(void){
int a=5 ,b=6,c=1;
int pri[3]={1,1,1}; //'++' '--' 优先级:pri[0]; '*' '/' 优先级:pri[1]; '+' '-' 优先级:pri[2]
if((++a-b)==0){pri[2]+=1;} //++a-b=0 说明'++'的优先级高于'-'
else{pri[0]++;}
if((a*--c)==0){ pri[1]+=1; } //a*--b=0 说明'--'的优先级高于'*'
else{pri[0]++;}
if((a*b-b)!=0){ pri[2]+=1; } //a*b-b!=0 说明'*'的优先级高于'-'
else{pri[1]++;}
printf("'++' '--' 优先级:%d\n",pri[0]); //pri越小,优先级越高
printf("'*' '/' 优先级:%d\n",pri[1]);
printf("'+' '-' 优先级:%d\n",pri[2]);
return 0;
}
![屏幕截图 2025-11-03 213629]()
- 设计一个程序将这些运算符的优先级按照从高到低一行行展示出来
#include <stdio.h>
int main(void){
int pri=1;
printf("输出运算符,按优先级从高到低:\n");
printf("优先级%d:'()' '[]' \n",pri++);
printf("优先级%d:'++' '--' \n",pri++);
printf("优先级%d:'*' '/' '%%' \n",pri++);
printf("优先级%d:'+' '-' \n",pri++);
return 0;
}
![屏幕截图 2025-11-03 215431]()
总结&思考
- 学习了
while()循环的用法
- 学习了用
const限定符创建变量 #define创建符号常量
- 了解了各个运算符的优先级
- 掌握了如何自定义函数