Caiwen的博客

一. C++ 编程初探

2024-07-17 11:41:00
培训文件
说明

本文为 沧州市第一中学信息学竞赛夏令营(CZSC2024) 第一次课程的课程大纲

0. 准备工作

  • 什么是C++?信息学竞赛?信息学竞赛基本流程?
  • Dev-C++

1. A+B Problem

  • 你需要编写一个程序,输入两个整数a和b,然后输出这两个整数之和。

  • 基本规则:

    • 缩进

    • 程序的代码在{}里写,其他部分先不需要了解也不需要动

    • 每个语句最后都要加分号

    • 使用英文符号

  • 注释

    • 注释的内容将被忽略,不会被执行
    • 单行注释
    • 多行注释
  • 我需要背吗?

2. 数据类型与变量

  • 变量是什么?

  • 变量定义方法:数据类型 变量名;

  • 什么是数据类型?

  • 常见数据类型:整数,小数,字符,字符串,布尔类型....

  • int 为整数

  • double 为小数

  • 变量名不能数字开头,不能是一些名称(比如int,try)(*)

  • 一口气定义多个变量:数据类型 变量名,变量名,变量名....;

  • 定义变量后才能够使用

  • 不能重复定义变量(*)

  • 变量可以在定义时赋值(变量赋值,数字赋值)

    • =是赋值不是等于
  • 变量的默认值是随机数据(*)

3. 输入输出

  • 什么是输入输出

  • 读法:c in c out

  • 使用方法:cin/cout都放在左边,cin用>>,cout用<<

  • cin输入 cout输出

  • cin和变量一起用

  • 可以输出算式,变量,数字

  • 连续使用<< >>

  • 输出文字:双引号包围

  • 输出换行符:endl

4. 整数与小数运算

  • 加减

  • 乘法 *,除法 /

  • 可以用括号 () ,先算括号里的

  • 取模 %

    • 取余数

    • 有一些用处(*)

由除法引发的一系列讨论

再谈数据类型

  • 字面量的数据类型

  • 赋值时存在的强制数据类型转换

    • double强制转换成int时小数丢失
  • 同种数据类型运算,运算结果的数据类型不变

  • 不同种数据类型运算,低精度强制转换为高精度数据类型,转化为上述情况

  • 手动的强制数据类型转换,既可以作用变量,也可以作用字面量

    • 各种操作

      • int c=a/b

      • double c=a/b

      • a/b

      • 3/2

      • double c=(double)a/b

      • double c=1.0*a/b

      • double c=a/b*1.0

      • 到底怎么办!?大不了写一堆 (double)

    • 灵异事件

      • 计算机在计算无限小数的时候会出现偏差

        cpp
        1
        2
        3
        4
        printf("%.10lf\n",c); printf("%.10lf\n",a+b); printf("%.20lf\n",c); printf("%.20lf\n",a+b);
      • 如何判等?(*)

不要恐慌,oi中关于小数的问题比较少,搞不清楚问题不大

5. 题目选讲

  • 将两个变量进行交换
  • 把一个三位数反转

6. 分支语句

  • 语法 if(条件){}

  • () 里的条件成立,就执行花括号里的代码

条件怎么写?

  • ==:判断是否相等

    • =:赋值

    • ==:判等

  • !=:判断不相等

  • > < >= <= :只能比较数字,不必多说

    • 不能连用
  • &&:与,将两个条件连接,两个条件都满足才可以

  • ||:或,有一个条件满足就可以(*)

    • 上述两个运算符可以连用 a==b && b==c && c==a
    • 套用 (a==b && b==c) || (a>0 && b>0 && c>0)
  • if可以嵌套使用

  • 可附加 else,在 () 里的式子不成立时执行

  • else if,可以接着判断。

    • 可以附加多个 else if
    • 可以再加else
    • 有一个 if 成立了就不再继续判断

7. 题目选讲

  • 上取整

    • 两个新的数学符号
    • a\left \lceil a \right \rceil :将a向上取整,1.2=2\left \lceil 1.2 \right \rceil = 2
    • a\left \lfloor a \right \rfloor :将a向下取整,1.9=1\left \lfloor 1.9 \right \rfloor = 1
  • 将三个数从小到大排序

8. 练习

不要恐慌,一般练习题都比课上讲的题简单

[NOIP2017 普及组] 成绩

题目描述

牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:

总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%\text{总成绩}=\text{作业成绩}\times 20\%+\text{小测成绩}×30\%+\text{期末考试成绩} \times 50\%

牛牛想知道,这门课程自己最终能得到多少分。

输入格式

三个非负整数 A,B,CA,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是 100100 分。

输出格式

一个整数,即牛牛这门课程的总成绩,满分也是 100100 分。

样例 #1

样例输入 #1

Unknown
1
100 100 80

样例输出 #1

Unknown
1
90

**样例 #2 **

样例输入 #2

Unknown
1
60 90 80

样例输出 #2

Unknown
1
79

提示

样例 1 说明

牛牛的作业成绩是 100100 分,小测成绩是 100100 分,期末考试成绩是 8080 分,总成绩是 100×20%+100×30%+80×50%=20+30+40=90100 \times 20\%+100 \times 30\%+80 \times 50\%=20+30+40=90

样例 2 说明

牛牛的作业成绩是 6060 分,小测成绩是 9090 分,期末考试成绩是 8080 分,总成绩是 60×20%+90×30%+80×50%=12+27+40=7960 \times 20\%+90 \times 30\%+80 \times 50\%=12+27+40=79

数据说明

对于 30%30\% 的数据,A=B=0A=B=0

对于另外 30%30\% 的数据,A=B=100A=B=100

对于 100%100\% 的数据,0A,B,C1000≤A,B,C≤100A,B,CA,B,C 都是 1010 的整数倍。

判断是否为两位数

题目描述

判断一个正整数是否是两位数(即大于等于 1010 且小于等于 9999)。

输入格式

一个正整数,不超过 10001000

输出格式

一行。若该正整数是两位数,输出 11,否则输出 00

样例 #1

样例输入 #1

Unknown
1
54

样例输出 #1

Unknown
1
1

判断能否被 3,5,7 整除

题目描述

给定一个整数 xx,判断它能否被 335577 整除,并输出以下信息:

1、能同时被 3,5,73,5,7 整除(直接输出 3 5 7,每个数中间一个空格);

2、只能被其中两个数整除(按从小到大的顺序输出两个数,例如:3 5 或者 3 7 或者 5 7,中间用空格分隔);

3、只能被其中一个数整除(输出这个除数);

4、不能被任何数整除,输出小写字符 n

输入格式

输入一行,包括一个整数 xx

输出格式

输出一行,按照描述要求给出整数被 335577 整除的情况。

样例 #1

样例输入 #1

Unknown
1
105

样例输出 #1

Unknown
1
3 5 7

提示

数据规模与约定

对于全部的测试点,保证 1x2001 \leq x \leq 200