C语言程序设计基础(例题(请看注释)03

一,基础篇


案例1—1《点到直线的距离》

        已知直线L的方程是 Ax+By+C=0 ,点P的坐标是(x,y) ,求点P到直线L的距离。点到直线的距离公式为:

d=\frac{\left | Ax_{0}+By_{0}+C \right |}{\sqrt{A^{2}+B^{2}}}

要求先输入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;
}

二,流程控制篇


1.选择控制结构


案例2—1《小小计算器》

编写代码,以菜单形式完成简单的算术运算。算术运算包括加减乘除,取模,幂级数,对数,正余弦函数。

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

2循环控制结构

案例2—2 《多级菜单》

制作一个饭店菜单供客人阅读,要求菜单能够在第一,二级菜单之间切换,直到客人选择了第一级菜单的退出选项结束程序。

第一级菜单选项:

菜品,主食,退出

第二级菜单选项:

家常豆腐 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

你可能感兴趣的:(c语言,开发语言)