20201015-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises03
P122
题解和分析
/*
编写一程序P122.C实现以下功能
从键盘读入4个数num1、num2、num3、num4,输出:(num1÷num2的余数)×num3+num4,不需考虑num2为0和计算结果溢出的情况。
要求输出的结果中,整数部分宽度为8(不足8时以0补足)、小数部分宽度为7。
编程可用素材:printf("请输入4个数:")、printf("\n计算结果为:…。
程序的运行效果应类似地如图1和图2所示,图中的红色部分是从键盘输入的内容。
请输入4个数:100 30 100.1234567 25
计算结果为:00001026.2345670
图1 程序运行效果示例
请输入4个数:22 12 100.12345678 1000000
计算结果为:01001001.2345678
知识点:
1. 取模运算,必须是整数,即求余运算
2. 自动发生类型转换,编译器会把运算结果向double转换
3. 格式输出时,位宽,小数点位数限制
%lf 保留6位小数
%m.nlf 共占m位,包括小数点,有n位小数
%0m.nlf 共占m位,包括小数点,有n位小数,整数位不足时,高位补0
*/
#include <stdio.h>
int main(void)
{
int num1, num2, num4;
double num3;
printf("请输入4个数:");
scanf("%d %d %lf %d", &num1, &num2, &num3, &num4);
// 输出:(num1÷num2的余数)×num3+num4
printf("\n计算结果为:%016.7lf", (num1 % num2) * num3 + num4);
return 0;
}
P708
题解和分析
/*
编写一程序P708.C实现以下功能
输入一个三位正整数,然后逆序输出。如输入123,则输出321。
编程可用素材:printf("Input an integer: ")、printf("\nThe result is …。
程序的运行效果应类似地如图1所示,图中的红色部分是从键盘输入的内容。
Input an integer: 750
The result is 057
*/
#include <stdio.h>
int main(void)
{
int data;
int gw, sw, bw;
printf("Input an integer: ");
scanf("%d", &data);
// 解析出每一位
gw = data % 10;
bw = data / 100;
sw = data % 100 / 10;
printf("\nThe result is %d%d%d\n", gw, sw, bw);
return 0;
}
/*
分析:
1. 整数除法,得到的是商这一部分
2. 整数取模,或叫整数取余,得到的是余这一部分
*/
P133
题解和分析
/*
编写一程序P133.C实现以下功能
通过键盘输入一组十进制数(约定为11个),输出每个数对应的ASCII码字符。
编程可用素材:printf("\n请输入11个数字:")、printf("\n解密结果为:…。
程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。
请输入11个数字:73 32 76 111 118 101 32 89 111 117 33
解密结果为:I Love You!
*/
#include <stdio.h>
int main(void)
{
int data1, data2, data3, data4, data5;
int data6, data7, data8, data9, data10;
int data11;
printf("请输入11个数字:");
scanf("%d %d %d %d %d %d %d %d %d %d %d",
&data1, &data2, &data3, &data4, &data5,
&data6, &data7, &data8, &data9, &data10, &data11);
printf("\n解密结果为:%c%c%c%c%c%c%c%c%c%c%c\n",
data1, data2, data3, data4, data5,
data6, data7, data8, data9, data10, data11);
return 0;
}
/*
分析:
1. 在实际编程时,变量多了以后,要注意排版,让程序更容易编写和调试
2. 当把输入和输出的格式对调以后,就是所谓的加密和解密,如果对方觉得这很浪漫,可以试一下用这样的方式来加密自己的表白,但:祝你好运。
3. 真正的信息安全学里的加密和解密,原理上和这差不多,但算法实现上,差别很大,有兴趣可以做进一步的学习和了解
4. 熟悉ASCII码表,是一个程序员的基本素养
*/
P135
题解和分析
/*
编写一程序P135.C实现以下功能
通过键盘输入弧度x,输出x的正弦值(可用库函数sin)。
编程可用素材:printf("请输入弧度 x: ")、printf("\nSin(…) = …\n"…。
程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。
请输入弧度 x: 1.552
Sin(1.55) = 0.99982
*/
#include <stdio.h>
#include <math.h>
int main(void)
{
double rad;
printf("请输入弧度 x: ");
scanf("%lf", &rad);
printf("\nSin(%.2lf) = %.5lf\n", rad, sin(rad));
return 0;
}
/*
分析:
1. 对于库函数的了解和使用,是一个程序员的基本技能,这也是“站到巨人肩上”的第一步
2. 对于函数的调用,要明确
所在头文件名
函数名
入口参数,顺序,类型等
函数的返回
3. 以后,在库不够的情况下,就需要自己写编写函数了
4. 可以充分相信C的库函数,因数它是结晶,是经过工业和行业检验了的
*/
P721
题解和分析
/*
编写一程序P721.C实现以下功能
从键盘输入x,y,z的值,编写程序输出以下表达式的值:
x+z%3*(int)(x+y)%2/4
编程可用素材:printf("please input x,y,z: ")、printf("\nResult = …。
程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。
please input x,y,z: 2.5,4.7,7
Result = 2.500000
*/
#include <stdio.h>
int main(void)
{
int data3;
double data1, data2;
printf("please input x,y,z: ");
scanf("%lf,%lf,%d", &data1, &data2, &data3);
printf("\nResult = %lf\n", data1 + data3 % 3 * (int)(data1 + data2) % 2 / 4);
return 0;
}
/*
分析:
1. 数学表达式【数学课中】和程序表达式【C语言中】有区别
2. 事先进行强制转换,是可以保证结果正确,精度可靠的,但如果使用自动转算方式,不利于初学者思考和学习
3. %f和%lf默认的小数点后是6位
4. 整个表达式最终结果是什么数据类型,取决于程序员对运算过程的控制和参与运算的数据或是变量的类型,但肯定是往范围更大的数据类型转换,才可以保证结果和精度是正确的
*/
P735
题解和分析
/*
编写一程序P735.C实现以下功能
从键盘输入一个正三角形的边长(整型),计算该三角形的面积和周长。
注:根据“海伦-秦九韶”公式,area=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2、a,b,c为三角形的3条边长。
编程可用素材:
printf("Input a side of triangle: ")、
printf("\nThe area of triangle is …, the circle of triangle is ….。
程序的运行效果应类似地如图1所示,图1中的5是从键盘输入的内容。
Input a side of triangle: 5
The area of triangle is 10.83, the circle of triangle is 15.
*/
#include <stdio.h>
#include <math.h>
int main(void)
{
int edge;
int circle;
double semi_circle;
double area;
printf("Input a side of triangle: ");
scanf("%d", &edge);
circle = 3 * edge;
semi_circle = (double)circle / 2;
area = sqrt(semi_circle * (semi_circle - edge) * (semi_circle - edge) * (semi_circle - edge));
printf("\nThe area of triangle is %.2lf, the circle of triangle is %d.\n", area, circle);
return 0;
}
/*
分析
1. 库函数应用,程序员要熟悉常用的库函数,否则,同一道题不同的程序员,难度读解就差别很大
2. 要特别注意运算完成后的数据类型的变化,先是整型,运算完成后,可能产生浮点型,就建议先做转化再运算,以保证精度
3. 中间变量,在性能要求不高的情况下,建议自己定义变量业代入,方便编写,调试,思考
4. 表达式和语句,不宜写太长,注意适当使用短句或是断句,断行编辑
*/