chap1 --程序设计入门

提示

  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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容