美文网首页
chap1 --程序设计入门

chap1 --程序设计入门

作者: 月涩风潇 | 来源:发表于2018-09-03 20:54 被阅读0次

    提示

    1. 整数值用%d输出,实数用%f输出。
    2. 整数/整数=整数, 浮点数/浮点数=浮点数
    3. scanf中的占位符和变量的数据类型应一一对应,且每个变量前需加"&"符号。
    4. 在算法竞赛中,输入前不需要打印提示信息。输入完毕后应立即终止程序,不要等待用户按键,因为输入输出过程都是自动的,没有人工干预。
    5. 在算法竞赛中不要使用头文件conio.h,包括getch(), clrscr()等函数
    6. 在算法竞赛中,每行输出均应以回车符结束,包括最后一行。除非特别说明,每行的行首不应有空格,但行末通常可以有多余空格。另外,输出的每两个数或者字符串之间应以单个空格隔开。
    7. 尽量用const关键字声明常数。
    8. 赋值是个动作,先计算右边的值,在赋给左边的值,覆盖它原来的值。
    9. printf的格式字符串中可以包含其他可打印字符,打印时原样输出。
    10. 算法竞赛的题目应当是严密的,各种情况下的输出均应有严格规定。如果在比赛发现题目有漏洞,应向相关人员询问,尽量不要自己随意假定。
    11. 赋值a = b之后,变量a原来的值被覆盖,而b的值不变。
    12. 可以通过手工模拟的方法理解程序的执行方式,重点在于记录每条语句的执行之后的每个变量的值。
    13. 交换两个变量的三变量法适用范围更广,推荐使用。
    14. 算法竞赛是在比谁能更好地解决问题,而不是在比谁写的程序看上去更高级。
    15. if语句的基本格式为:if(条件) 语句1; else 语句2;
    16. if语句的条件是一个逻辑表达式,它的值可能为真,也可能为假。单个整数值也可以表示真假,其中0为假,其他值为真。
    17. C语言中的逻辑运算符都是短路运算符。一旦能够确定整个表达式的值,就不再继续计算。
    18. 算法竞赛的目标是编程对任意输入均得到正确的结果,而不仅是样例数据。
    19. 如果有多个并列,情况不交叉的条件需要一一处理,可以用else if语句。
    20. 适当在程序中编写注释不仅能让其他用户更快的搞懂你的程序,还能帮你自己理清思路。
    21. 可以用花括号把若干个语句组合成一个整体。这些语句仍然按照顺序执行。

    算术表达式

    程序1-1 计算并输出1+2的值

    #include <stdio.h>
    int main()
    {
        printf("%d\n", 1+2);
        return 0;
    }
    
    程序1-1

    实验1

    #include <stdio.h>
    int main()
    {
        printf("%d\n", 3-4);
        return 0;
    }
    
    实验1

    实验2

    #include <stdio.h>
    int main()
    {
        printf("%d\n", 5*6);
        return 0;
    }
    
    实验2

    实验3

    #include <stdio.h>
    int main()
    {
        printf("%d\n", 8/4);
        return 0;
    }
    
    实验3

    实验4

    #include <stdio.h>
    int main()
    {
        printf("%d\n", 8/5);
        return 0;
    }
    
    实验4

    程序1-2 计算并输出8/5的值,保留小数点后一位

    #include <stdio.h>
    int main()
    {
        printf("%.1f\n", 8.0/5.0);
        // printf("%.1f\n", 8/5);
        return 0;
    }
    
    程序1-2

    实验5

    #include <stdio.h>
    int main()
    {
        printf("%.1f\n", 8.0/5.0);
        printf("%.2f\n", 8.0/5.0);
        printf("%f\n", 8.0/5.0);
        return 0;
    }
    

    默认为六位小数,小数点后的数字表示小数位数。


    实验5

    实验6

    #include <stdio.h>
    int main()
    {
        printf("%.1f\n", 8/5);
        return 0;
    }
    

    warning: format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]|


    实验6

    实验7

    #include <stdio.h>
    int main()
    {
        printf("%d\n", 8.0/5.0);
        return 0;
    }
    

    warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]|


    实验7

    程序1-3 复杂的表达式计算

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        printf("%.8f\n",1+2*sqrt(3)/(5-0.1));
        return 0;
    }
    

    变量及其输入

    程序1-4 a+b问题

    #include <stdio.h>
    int main()
    {
        int a, b;
        scanf("%d%d", &a, &b);
        printf("%d\n", a+b);
        return 0;
    }
    
    程序1-4

    程序1-5 圆柱体的表面积
    要求输入底面半径r和高h,输出圆柱体的表面积,保留三位小数

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        const double PI = acos(-1.0);
        double r, h, s1, s2, s;
        scanf("%lf%lf", &r, &h);
        s1 = PI*r*r;
        s2 = 2*PI*r*h;
        s = s1*2.0 + s2;
        printf("Area = %.3f\n", s);
        return 0;
    }
    
    程序1-5

    顺序结构程序设计

    程序1-6 三位数反转(1)

    #include <stdio.h>
    int main()
    {
        int n;
        scanf("%d", &n);
        printf("%d%d%d\n", n%10, n/10%10, n/100);
    
        return 0;
    }
    
    程序1-6

    问题:如果个位是0,Ex:520,反转后如何输出?

    程序1-7 三位数反转(2)

    #include <stdio.h>
    int main()
    {
        int n, m;
        scanf("%d", &n);
        m = (n%10)*100 + (n/10%10)*10 + (n/100);
    
        //输出三位整数,不足位的用0补全
        printf("%03d\n", m);
    
        return 0;
    }
    
    程序1-7

    程序1-8 交换变量(1)

    #include <stdio.h>
    int main()
    {
        int a, b, t;
        scanf("%d%d", &a, &b);
        t = a;
        a = b;
        b = t;
        printf("%d %d\n", a, b);
    
        return 0;
    }
    
    程序1-8

    程序1-9 变量交换(2)

    #include <stdio.h>
    int main()
    {
        int a, b;
        scanf("%d%d", &a, &b);
    
        a = a+b;
        b = a-b;
        a = a-b;
    
        printf("%d %d\n", a, b);
    
        return 0;
    }
    
    程序1-9

    程序1-10 变量交换(3)

    #include <stdio.h>
    int main()
    {
        int a, b;
        scanf("%d%d", &a, &b);
    
        printf("%d %d\n", b, a);
    
        return 0;
    }
    
    程序1-10

    并没有实际改变a,b的值。

    分支结构程序设计

    程序1-11 鸡兔同笼
    分析:联立a+b=n, 2a+4b=m, 解得a=(4n-m)/2,b=n-a,
    a,b均为整数且非负
    可通过if(m%2 == 1 || a<0 || b<0)限定

    #include <stdio.h>
    int main()
    {
        // a--鸡的数量 b--兔的数量
        // m-- 头  n-- 脚
        int a, b, n, m;
        scanf("%d%d", &n, &m);
    
        a = (4*n-m)/2;
        b = n-a;
    
        if(m%2 == 1 || a<0 || b<0){
            printf("No answer!");
        }else{
            printf("%d %d\n", a, b);
        }
    
        return 0;
    }
    
    程序1-11
    程序1-11

    程序1-14 三整数排序(1)

    #include <stdio.h>
    int main()
    {
        int a, b, c, t;
        scanf("%d%d%d", &a, &b, &c);
        if(a>b) {t = a; a = b; b = t;}  //确保a<=b
        if(a>c) {t = a; a = c; c = t;}  //确保a<=c
        if(b>c) {t = b; b = c; c = t;}  //确保b<=c
    
        // 以上运算结束后有a<=b<=c
        printf("%d %d %d\n", a, b, c);
    
        return 0;
    }
    
    程序1-14

    注解与习题

    数据类型实验

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        // 32位整型的范围是-2^31~2^31-1
        printf("%d\n", 11111*11111);
        // 溢出
        // warning: integer overflow in expression [-Woverflow]|
        printf("%d\n", 111111*111111);
        printf("%d\n", 111111111*111111111);
    
        // 换成浮点数
        printf("%f\n", 11111.0*11111);
        printf("%f\n", 111111.0*111111.0);
        printf("%f\n", 111111111.0*111111111);
    
        //warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]|
        printf("%d\n", sqrt(-10));
        printf("%f\n", sqrt(-10));
    
        // warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]|
        printf("%d\n", 1.0/0.0);
        // 不会报错
        printf("%f\n", 1.0/0.0);
        // printf("");
    
        // warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]
        printf("%d\n", 0.0/0.0);
        // 不会报错
        printf("%f\n", 0.0/0.0);
    
        // warning: division by zero [-Wdiv-by-zero]
        printf("%d\n", 1/0);
        return 0;
    }
    
    数据类型实验

    输入格式实验

    #include <stdio.h>
    int main()
    {
        int a, b;
        scanf("%d %d", &a, &b);
        printf("%d %d\n", a, b);
    
        return 0;
    }
    
    • 在同一行中输入12和2,并以空格分隔,达到预期效果
    实验B1
    • 在不同的两行输入12, 2


      实验B2
    • 在实验B1和实验B2中在B1和B2的前面和后面加入大量的空格和制表符


      实验B3
    • 把2换成字符s

    相关资料
    printf 格式化输出符号详细说明

    习题1-1
    输入三个整数,输出它们的平均值,保留三位小数

    #include <stdio.h>
    int main()
    {
        int a;
        int b;
        int c;
        scanf("%d%d%d", &a, &b, &c);
    
        double average = (a+b+c)/3.0;
        printf("%.3f\n", average);
    
        return 0;
    }
    
    习题1-1

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

    #include <stdio.h>
    int main()
    {
        double f = 0.0;
        scanf("%lf", &f);
    
        double c = 5*(f-32)/9;
        printf("%.3f\n", c);
    
        return 0;
    }
    

    习题1-3 连续和
    输入正整数n,输出1+2+3+...+n的值
    分析:直接套用等差数列公式

    #include <stdio.h>
    int main()
    {
        int n = 0;
        scanf("%d", &n);
        printf("%d\n", n*(n+1)/2);
        return 0;
    }
    

    习题1-4 正弦和余弦

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        // 定义pi的值
        const double PI = acos(-1.0);
    
        int n = 0;
        scanf("%d", &n);
    
        // 数学函数使用弧度
        printf("%.3f\n%.3f\n", sin(n/180.0*PI), cos(n/180.0*PI));
        return 0;
    }
    
    习题1-4

    习题1-5 打折

    #include <stdio.h>
    int main()
    {
        // 单件衣服价格
        const int PRICE = 95;
        // 购买衣服的件数
        int n = 0;
        scanf("%d", &n);
    
        double sum = (double)(PRICE * n);
    
        if(sum>300)
        {
            sum *= 0.85;
        }
        printf("%.2f\n", sum);
    
        return 0;
    }
    

    习题1-6 三角形
    输入三角形三条边的长度值(正整数)判断是否能成为直角三角形
    yes -- no
    not a triangle

    #include <stdio.h>
    int main()
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
    
        // 可以构成三角形的条件
        if(a+b>c && a+c>b && b+c>a){
    
            // 判断直角三角形
            if(a*a + b*b == c*c || a*a+ c*c == b*b || b*b+c*c == a*a){
                printf("yes\n");
            }
            else{
                printf("no\n");
            }
        }
        else{
            printf("Not a triangle\n");
        }
        return 0;
    }
    

    习题1-7 年份
    四年一闰,百年不闰,四百年再闰
    if((n%4 == 0 && n%100 != 0) || n %400 == 0)

    #include <stdio.h>
    int main()
    {
        int year;
        scanf("%d", &year);
    
        if((year%4==0 && year%100!=0) || year%400==0){
            printf("yes\n");
        }
        else{
            printf("no\n");
        }
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:chap1 --程序设计入门

          本文链接:https://www.haomeiwen.com/subject/semiwftx.html