• 算法竞赛入门 (一)语言篇 顺序与分支结构


    1.1 算术表达式

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        printf("%d
    ",3+2);
        printf("%d
    ",3*2);
        printf("%d
    ",3/2);
        printf("%d
    ",3-2);
        return 0;
    }

    结果:

    5 6 1 1 

    3/2指3处以2所得商值的整数部分

    输出3/2的值,并保留小数点后一位

    【整数用 %d 输出,浮点数用 %f输出】

    【整数 / 整数 = 整数    浮点数 / 浮点数 = 浮点数】

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        printf("%d
    ",3/2);
    printf("%.1f ",3/2); printf(
    "%.1f ",3.0/2.0); return 0; }

    结果:

    1    0.0   1.5

     整数 - 浮点数 时,整数先变成浮点数,再减去浮点数

     

    1.2 变量及其输入

     例题:输入半径r 高h 求圆柱表面积

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
        const double pi = acos(-1.0);   //math.h中定义的常量M_PI,但这个常数不是ANSI C标准的,而此处的pi是一个真正的数学常数
        double r,h,s1,s2,s;
        scanf("%lf%lf",&r,&h);     //输入采用的 %lf 目前先跳过,后续补
        s1 = pi*r*r;
        s2 = 2*pi*r*h;
        s = s1*2.0 + s2;
        printf("Area = %.3f
    ",s);
        return 0;
    }

     const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数

    算法竞赛中注意事项:

    •  不要在输入前打印提示信息
    •  不要让程序“按任意键退出” ,输出完毕后立即终止程序————例如,调用  system("pause");  或 添加一个多余的 getchar()
    •  不要使用 getch() getche() gotoxy()  clrscr()
    •  不要使用头文件conio.h,包括getch() clrscr()等函数
    • 输出格式非常严格:
      1. 每行输出均以回车符结束,包括最后一行
      2. 每行行首不应有空格,行末可以有
      3. 输出的每两个数或字符串之间应以单个空格隔开
    •  尽量使用const 关键字声明常数

    1.3 顺序结构程序设计

     

    此处有个问题,如果个位是0,反转后应该输出吗?

    算法竞赛的题目非常严密,如有题目漏洞,可向监考人员询问,不可随意假定

    但此处要学会两种处理方法:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        printf("%d%d%d
    ",n%10,n/10%10,n/100);
        return 0;
    }

     三变量法————新加一个新的变量

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int a,b,c;
        scanf("%d %d",&a,&b);
        c = a;
        a = b;
        b = c;
        printf("%d %d",a,b);
        return 0;
    }

     1.4 分支结构程序设计

     例题1-4  鸡兔同笼子   鸡兔总数量n,总腿数m,求依次输出鸡兔的数目

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int m,n,x,y;
        scanf("%d %d",&n,&m);
        x = (4 * n - m) / 2;
        y = n - x;
        if(m %2 == 1 || x < 0 || y < 0)
            printf("No answer");
        else
            printf("%d %d",x,y);
        return 0;
    }

    C语言中的短路:
        如果a || b 中,a为真,就不会计算b的值  【速度更快】

     C语言中的逻辑运算符都是短路运算符,一旦确定整个表达式的值,就不再计算

    1-5 三整数排序

    输入 a  ,b,c 从大到小排序后输出

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int a,b,c;
        scanf("%d %d %d",&a,&b,&c);
        if( a >= b){
            if(b >= c){
                printf("%d %d %d",a,b,c);
            }else if(a >= c){
                printf("%d %d %d",a,c,b);
            }else{
                printf("%d %d %d",c,a,b);
            }
        }else{
            if(a >=c ){
                printf("%d %d %d",b,a,c);
            }else if(b >= c ){
                printf("%d %d %d",b,c,a);
            }else{
                printf("%d %d %d",c,b,a);
            }
        }
        return 0;
    }

    数据类型实验

    实验一

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        printf("%d
    ",11111*11111);
        printf("%d
    ",111111*111111);
        printf("%d
    
    ",1111111*1111111);
        printf("%f
    ",11111*11111);
        printf("%f
    ",111111*111111);
        printf("%f",1111111*1111111);
        return 0;
    }

    实验二

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        printf("%f
    ",1111.1*1111.1);
        printf("%f
    ",11111.1*11111.1);
        printf("%f",111111.1*111111.1);
        return 0;
    }

    实验三

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
       printf("%f
    ",sqrt(-10));
       printf("%d
    ",sqrt(-10));
        return 0;
    }

    计算过程中,系统不会报错

    实验四

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
       printf("%d
    ",1.0/0.0);
       printf("%d
    ",0.0/0.0);
       printf("%f
    ",1.0/0.0);
       printf("%f
    ",0.0/0.0);
        return 0;
    }

    实验五

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
       printf("%d
    ",1/0);
       printf("%f
    ",1/0);
    
        return 0;
    }

    无论注释那个,都会报错

    实验六:

    #include<stdio.h>
    int main(){
        //C语言中 除法 问题总结
    
        // 整数 除以 整数
        int a = 13,b = 4;
        printf("整数除以整数 %d
    ",a/b);
        printf("【注意顺序 此处和 下方第二条 是完全一样的】整数除以整数 直接以float输出:  %f
    ",a/b);
        printf("整数除以整数 强制转换为 float:  %f
    ",(float) a/b); //
        printf("整数除以整数 直接以float输出:  %f
    ",a/b);
    
        //double 除以 double
        printf("
    ");
        printf("
    ");
        printf("
    ");
        printf("
    ");
        double x = 13.0,y = 4.0;
        printf("小数除以小数 : %f
    ",x/y);
        printf("【注意顺序 此处和 下方第二条 是完全一样的】小数除以小数 以int输出: %d
    ",x/y);
        printf("小数除以小数 强制转换为 int: %d
    ",(int) x/y);
         printf("小数除以小数 以int输出: %d
    ",x/y);
    
    
        //小数除以整数 / 整数除以小数
        double i = 13.4;
        int j = 3;
        printf("
    
    
    小数除以整数 / 整数除以小数:");
        printf("%f",i/j);
        printf("
    %f",j/i);
        return 0;
    }

    输入输出实验

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d %d",a,b);
        return 0;
    }
    • 1.同一行输入12 2 ,以空格隔开
    • 2.不同行输入12 2 
    • 3.在1、2实验中,在12 和 2 之前加入大量的空格和水平制表符TAB,升值一些空行,重复实验1 2 3

    习题:

    1.输入3个整数,计算平均值,保留三位小数

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int a,b,c;
        scanf("%d %d %d",&a,&b,&c);
        printf("%.3f",(a+b+c)/3.0);
        return 0;
    }

    2.温度,输入华氏摄氏度f,输出对应的摄氏温度c,保留三位,c = 5 (f-32)/9

    1 printf输出float和double都可以用%f,double还可以用%lf。
    2 scanf输入float用%f,double输入用%lf,不能混用。

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        float f;
        scanf("%f",&f);
        printf("%.3f",5 *(f-32)/9.0);
        return 0;
    }

    3.1+..+n

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        int sum = 0,i = 0;
        for(i = 1;i < n+1;i++){
            sum+=i;
        }
        printf("%d",sum);
        return 0;
    }

    4.正弦和余弦

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        printf("%f
    ",sin(n));
        printf("%f",cos(n));
        return 0;
    }

    5.判断闰年

    公历纪年法中,能被 4 整除的大多是闰年,但能被 100整除而不能被 400整除的年份不是闰年,如 1900年是平年,2000 年是闰年

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int n;
         scanf("%d",&n);
        if(n % 4 != 0){
            printf("N");
        }else{
           if(n % 100 == 0 && n%400 != 0){
            printf("N");
           }else{
           printf("Y");
           }
        }
        return 0;
    }
  • 相关阅读:
    Redis为什么要自己实现一个SDS
    Redis中的数据结构
    编程题
    设计模式-代理模式
    设计模式-原型模式
    设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
    Redis基础
    Windows提高_1.4进程通信
    Windows提高_1.3文件操作
    Windows提高_1.2遍历进程、遍历模块
  • 原文地址:https://www.cnblogs.com/expedition/p/10879474.html
Copyright © 2020-2023  润新知