已知直线L的方程是 Ax+By+C=0 ,点P的坐标是(x,y) ,求点P到直线L的距离。点到直线的距离公式为:
要求先输入A,B,C三个参数,确定直线L;然后再输入x和y,确定点P;最后根据点到直线的距离公式,计算点到直线的距离。
#include
#include
int main() {
double A, B, C;//直线的参数
double x, y;//点坐标
double d;//点到直线的距离
puts("请输入直线的方程Ax+By+C=0");//puts用于简单的输出字符串,自动换行。但功能小于printf
puts("A="); scanf_s("%lf", &A);//scanf_s和scanf一样(微软编译器大多用前者
puts("B="); scanf_s("%lf", &B);
puts("C="); scanf_s("%lf", &C);
//printf("所输入的方程是(%lf)x+(%lf)y+(%lf)=0\n", A, B, C);一级
//printf("所输入的方程是(%.lf)x+(%.lf)y+(%.lf)=0\n", A, B, C);二级
printf("所输入的方程是%.lfx%+.lfy%+.lf=0\n", A, B, C);//三级 知识点!
/* 首先“断句”
%.lf x %+.lf y %+.lf = 0
'.'是精度修饰符,这里省略不必要的零
'+'是符号修饰符,用于在输出正数时也显示符号 即避免出现’+-‘连用的情况
拓展
'-'用于左对齐输出。因为默认是右对齐的
如 “%5d”和“%-5d”
*/
puts("请再输入点的坐标,依次输入 x(回车)y");
scanf_s("%lf%lf", &x, &y);
printf("所输入的点坐标是(%lf,%lf)\n", x, y);
d = fabs(A * x + B * y + C) / sqrt(pow(A, 2) + pow(B, 2));
//fabs 绝对值;sprt 根号;pow(,n) n次方
printf("点到直线的距离是%lf", d);
return 0;
}
编写代码,以菜单形式完成简单的算术运算。算术运算包括加减乘除,取模,幂级数,对数,正余弦函数。
#include
#include
#include
int main() {
puts("小小计算器");//上一章1—1提到过
printf("算术运算 1\n");
puts("请选择");
int S;
scanf_s("%d", &S);//scanf_s 函数是 Microsoft Visual Studio 编译器提供的一个安全版本的 scanf 函数,用于防止缓冲区溢出。但是,scanf_s 函数的使用方式与 scanf 函数有所不同。
for (int i = 0; i < 20; i++)
printf("……");//仅仅是分区
printf("\n");
short F;
if (S == 1) {
printf("请输入你想要的计算功能\n加减乘除 请按1\n取模(余) 请按2\n幂级数 请按3\n自然对数 请按4\n正余弦函数 请按5\n");
scanf_s("%hd", &F);
if (F >= 1 && F <= 5)//输入有效值
{
for (int i = 0; i < 20; i++)
printf("……");
printf("\n");
switch (F) {
case 1: {// case可以不加括号
double num1, num2;
char x;
printf("请输入表达式(如:num1符号num2)\n");
scanf_s("%lf %c %lf", &num1, &x, 1, &num2);
if (x == '+')
printf("%.2lf %c %.2lf=%lf\n", num1, x, num2, num1 + num2);//%.lf 在上一章1—1中有提到
else if (x == '-')
printf("%.2lf %c %.2lf=%lf\n", num1, x, num2, num1 - num2);
else if (x == '*')
printf("%.2lf %c %.2lf=%lf\n", num1, x, num2, num1 * num2);
else if (x == '/')
printf("%.2lf %c %.2lf=%lf\n", num1, x, num2, num1 / num2);
break;//终止选择
}
case 2: {
double Y, X;
puts("请输入Y X计算Y除以X的余数");
scanf_s("%lf%lf", &Y, &X);
//scanf_s("%lf%lf", &Y, &X, sizeof(Y), sizeof(X));// 增加了输入参数的最大长度限
printf("%.lf%%%.lf=%.lf\n", X, Y, fmod(Y, X));//fmod(,)表示两数相除的余数
//printf("%.lf%%%.lf=%d\n", X, Y, Y%X);//这是不对的 小知识点!
/*
"Y%X"这种是计算整形和整形之间的取余运算
%%在printf中表示输出一个%
*/
break;
}
case 3: {
double X, n;
puts("计算X的n次方输入X再输入n");
scanf_s("%lf%lf", &X, &n);
printf("%.2lf^%.2f=%lf\n", X, n, pow(X, n));//pow(,)表示X的n次方
break;
}
case 4: {
double X;
puts("求X的自然对数(底数为e)");
scanf_s("%lf", &X);
printf("log(%.2lf)=%lf\n", X, log(X));//log 小知识点 !
/*
"log(x)"表示 x的自然对数
“log10(x)”表示x的以10为底数的对数
//如果要计算X以n为底的对数 要用到换底公式
log(X)/log(n)
*/
break;
}
case 5: {
puts("请输入操作符 (sin 或 cos): ");
double X;
char op;
scanf_s(" %c", &op, 1); // 跳过输入流中的前导 (空白字符) ! 小知识点 !
/*注意这里的空格“_%c”,用于清除缓冲区中的换行符(空白字符),因为用户输入时会点击换行符
*否则 scanf or scanf_s 都会自动把换行符识别输入
* 除了这样做还可以 使用 getchar(); 它也可以清除缓冲区的一个字符
数字1用来限制读取的字符个数为1
*/
getchar();//清除缓冲区的i
getchar();//清除缓冲区的n
if (op == 's' || op == 'S') {
printf("请输入 X 以计算 sin(X): ");
scanf_s("%lf", &X);
printf("sin(%.2lf) = %lf\n", X, sin(X));
}
else if (op == 'c' || op == 'C') {
printf("请输入 X 以计算 cos(X): ");
scanf_s("%lf", &X);
printf("cos(%.2lf) = %lf\n", X, cos(X));
}
else
printf("无效的操作符!\n");
break;
}
}
}
else
printf("选择有误!\n");
}
else
printf("选择有误!\n");
return 0;
}
制作一个饭店菜单供客人阅读,要求菜单能够在第一,二级菜单之间切换,直到客人选择了第一级菜单的退出选项结束程序。
第一级菜单选项:
菜品,主食,退出
第二级菜单选项:
家常豆腐 10元 ;番茄鸡蛋 8元 ;鱼香肉丝 16元 ;水煮肉片 24元 。
#include//“std”标准;"i"输入;"o"输出;"."的;"h"头文件。标准输入输出的头文件
int main() {
int select1, select2;
int leave1=0, leave2=0;
do {//do while 也是可以嵌套的这里嵌套了多次
puts("_________________________________________________________________\n");
puts(" 主菜单 \n");
puts("\n");
puts(" 菜品 1\n");
puts(" 主食 2\n");
puts("\n");
puts(" 退出 3\n");
puts("__________________________________________________________________\n");
do {
printf("请输入选择\n");
scanf_s("%d", &select1);
if (select1 == 1 || select1 == 2 || select1 == 3)
break;
else
puts("选择有误!\n");
} while (1);//一直循环,除非break
switch (select1) {
case 1:
do {
puts("_________________________________________________________________\n");
puts(" 菜品菜单 \n ");
puts("\n");
puts(" 1 家常豆腐 10元\n");
puts(" 2 番茄鸡蛋 8 元\n");
puts(" 3 鱼香肉丝 16元\n");
puts(" 4 水煮肉片 24元\n");
puts(" 5 返回 主 菜 单");
puts("__________________________________________________________________\n");
do {
puts("请选择:\n");
scanf_s("%d", &select2);
if (select2 >= 1 && select2 <= 5)
break;
else
puts("输入错误\n");
} while (1);
switch (select2) {
case 1:
puts("您选择了:家常豆腐 10元\n");
break;
case 2:
puts("您选择了:番茄鸡蛋 8元\n");
break;
case 3:
puts("您选择了:鱼香肉丝 16元\n");
break;
case 4:
puts("您选择了:水煮肉片 24元\n");
break;
case 5:
leave2 = 1;
break;
}
if ("leave2==0") {
printf("按回车键继续\n");
getchar();//吸收换行符
}//让程序停顿一下
} while (leave2 == 0);
break;
case 2:
printf("您选择了主食\n");
break;
case 3:
leave1 = 1;
break;
}
if (leave1 == 0) {
printf("按回车键继续\n");
getchar();
}
} while (leave1==0);
printf("程序结束\n");
return 0;
}
/*:首先显示主菜单,然后等待用户输入选择。如果用户选择菜品,
则进入菜品菜单,再次等待用户输入选择。
如果用户选择主食,则输出“您选择了主食”。
如果用户选择退出,则程序结束。在每个菜单中,如果用户输入错误,
程序会提示“选择有误!”,并要求用户重新输入*/
//用函数会更简单
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2401_87095818/article/details/144158274