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

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;
}
原文地址:https://www.cnblogs.com/expedition/p/10879474.html