美文网首页
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