ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CSP-J 初赛(以满分为目标):第四课《看懂计算机到底在算什么!——C++变量、表达式和运算符 》

CSP-J 初赛(以满分为目标):第四课《看懂计算机到底在算什么!——C++变量、表达式和运算符 》 第四课 C变量、表达式和运算符——CSP-J程序阅读的第一关看懂计算机到底在算什么这一课非常重要。因为 CSP-J 初赛里题目并不是让同学们“写程序”而是给同学们一段程序然后问最后输出什么需要掌握计算机到底按照什么顺序执行变量里面现在装的到底是什么所以这一课我们的目标不是背语法而是建立一个最重要的能力看到 C 代码 → 能在脑子里模拟计算机的执行过程。一、这一课到底要学什么本课分成8个知识模块什么是变量什么是变量的值和地址C基本数据类型常量算术运算符关系运算符逻辑运算符赋值、自增、自减和运算优先级最后再进行CSP-J程序阅读专项训练二、第一关变量到底是什么先给孩子讲一个故事。假设老师给每个同学一个盒子。盒子上写着名字小明的盒子 小红的盒子 小刚的盒子盒子里面可以放东西。比如小明的盒子 → 10 小红的盒子 → 20C里的变量就非常像这样的“盒子”。1. 定义一个变量int a;这句话是什么意思可以这样理解请计算机准备一个名字叫 a 的整数盒子。此时a ┌───────┐ │ ??? │ └───────┘注意int是什么int是一种数据类型。意思是这个盒子准备拿来存整数。a是什么a是变量名。所以int a;可以理解成建立一个名叫a的整数变量。三、给变量装东西int a; a 10;现在a ┌───────┐ │ 10 │ └───────┘这里a 10;不是数学里面的a 等于 10而应该理解成把 10 放进 a 这个盒子里。这是C初学者必须建立的概念。四、C里的到底是什么这是 CSP-J 程序阅读的重点之一。看到a 10;一定不要读成a 等于 10应该读成把右边计算出来的结果放到左边。所以a 10;是10 ↓ ┌─────────────┐ │ a │ │ 10 │ └─────────────┘五、最重要的一个例子看int a 10; a 20;第一次a → 10第二次a → 20所以最后a 20六、变量最大的特点它可以改变例如int x 5; x 8; x 20;变量x经历了5 → 8 → 20因此变量不是“永远不变的数字”而是一个可以不断改变内容的盒子。七、程序阅读最重要的工具变量状态表以后遇到这种题int a 3; int b 5; a a b; b a b;不要直接在脑子里面乱算。我们画表。步骤ab开始35aab85bab813最后a 8 b 13这就是以后 CSP-J 程序阅读最重要的武器之一变量状态表八、为什么aa1没有问题初学者第一次看到a a 1;经常会说“老师这不可能啊a怎么会等于a1”因为孩子把它当成数学等式了。其实 C 是先计算右边再把结果放进左边。假设a 5;执行a a 1;先算右边a 1 5 1 6然后a ← 6所以5 → 6九、一个非常重要的思维以后看到a a 10;要自动翻译成a增加10。看到a a - 10;翻译成a减少10。看到a a * 2;翻译成a变成原来的2倍。看到a a / 2;翻译成a除以2。十、C最常见的数据类型初赛程序阅读中首先要认识这些。1.int整数。int age 10;例如-100 0 1 20 10002.long long用于存更大的整数。long long x 10000000000LL;初赛中看到long long首先知道它也是整数只是能表示更大的范围。3.double小数。double x 3.14;例如3.14 0.5 -2.754.char单个字符。char c A;注意A是字符。而A是字符串。这一点以后会专门讲。5.bool只有两个值true false也就是真 假十一、变量类型一定要记住同学们记成类型用来装什么int整数long long大整数double小数char一个字符bool真/假十二、运算符是什么运算符可以理解成告诉计算机“怎么计算”的符号。例如 - * / %就是最基本的算术运算符。十三、加法int a 3; int b 5; int c a b;执行a 3 b 5 c 3 5 8所以c 8十四、减法-int a 10; int b 3; int c a - b;结果c 7十五、乘法*注意C里乘法不是×。而是*例如int a 6; int b 7; int c a * b;结果42十六、除法/这是 CSP-J 非常重要的考点。看int a 7; int b 2; cout a / b;有的同学会说3.5错因为a b都是int。所以7 / 2进行的是整数除法。结果3小数部分被舍去。十七、整数除法是初赛高频考核点例如cout 10 / 3;输出3cout 20 / 6;输出3cout 100 / 9;输出11所以两个整数相除结果仍然是整数除法。十八、余数%%是取模 / 求余数例如7 % 3因为7 3 × 2 1所以7 % 3 1再看几个10 % 3 1 10 % 2 0 15 % 4 3 20 % 6 2十九、为什么%特别重要因为 CSP-J 初赛题目非常喜欢考核%。例如int n 12345; cout n % 10;答案5因为12345 ÷ 10 余数5所以%10可以得到一个整数的个位数字。再看n / 10对于整数n可以去掉个位。例如12345 / 10 123于是n % 10和n / 10就成为以后处理数字非常重要的工具。二十、一个经典程序拆数字int n 12345; while(n 0) { cout n % 10; n n / 10; }孩子可以手算nn%10n/101234551234123441231233121221110输出54321这就是一个经常考察的程序阅读题。二十一、关系运算符接下来进入第二大类运算符 !它们的作用是比较两个东西的大小或者是否相等。二十二、大于5 3结果true因为5比3大二十三、小于5 3结果false二十四、大于等于5 5结果true因为“等于”也算。二十五、小于等于5 5也是true二十六、最容易错的看a b这是判断 a 和 b 是否相等。而a b是把 b 的值放进 a。这两个一定不能混。写法含义赋值判断相等这是 CSP-J 初赛的经典陷阱。二十七、!a ! b意思a 不等于 b。例如5 ! 3结果true而5 ! 5结果false二十八、逻辑运算符三个最重要 || !可以把它们记成 并且 || 或者 ! 不是二十九、并且例如age 6 age 12意思年龄大于等于6并且年龄小于等于12。两个条件必须同时成立。真值表ABAB假假假假真假真假假真真真所以全真才真。三十、||或者例如x 0 || y 0意思x等于0或者y等于0。只要一个成立就可以。ABA||B假假假假真真真假真真真真记忆||一个真就真。三十一、!逻辑非!true结果false!false结果true就是把真假翻转。三十二、把三个放到一起例如int x 8; cout (x 5 x 10);判断8 5 → true 8 10 → true所以true true结果true三十三、C中bool输出的一个注意点例如bool a true; cout a;默认情况下通常输出1而bool a false; cout a;输出0所以程序阅读中如果看到cout (5 3);一般会输出1而不是单词true。三十四、自增这是程序阅读题的重点。a;意思a增加1。例如int a 5; a;最后a 6三十五、自减--a--;意思a减少1。例如int a 5; a--;结果a 4三十六、区分a和a这两个看起来很像a和a但在表达式中有区别。a叫后置自增意思先使用旧值再加1。例如int a 5; int b a;执行b 5 a 6a叫前置自增意思先加1再使用新值。例如int a 5; int b a;执行a 6 b 6三十七、用“取票”来理解假设a5。ba就像先把“5号票”给 b然后 a 变成6。所以b5 a6ba则像先把号码加到6再把6给 b。所以a6 b6三十八、这是初赛必须会的例如int a 3; int b a; cout a b;执行a3 ba ↓ b3 a4所以4 3再看int a 3; int b a; cout a b;结果4 4三十九、赋值运算符除了还有 - * / %例如a 5;等价于a a 5;a - 5;等价于a a - 5;a * 5;等价于a a * 5;a / 5;等价于a a / 5;a % 5;等价于a a % 5;四十、运算符优先级例如int x 2 3 * 4;到底是多少不是(23)*4 20而是2 (3*4) 14因为乘除优先于加减。四十一、建议孩子记住的基本优先级先记这几个就够了() ↓ -- ↓ * / % ↓ - ↓ ↓ ! ↓ ↓ || ↓ - * /可以简单记成括号 → 自增 → 乘除模 → 加减 → 比较 → 逻辑 → 赋值四十二、为什么一定要学括号因为a b * c和(a b) * c可能完全不同。所以考试中如果不确定自己加括号例如a b c * d;可以在草稿纸上写成a b (c * d);马上清楚。四十三、综合例题1变量 运算符看程序int a 5; int b 3; a a b; b a - b; cout a b;我们建立状态表执行ab初始53aab83ba-b85所以8 5这个程序实际上完成了不借助第三个变量交换两个数。四十四、综合例题2整数除法 余数int a 17; cout a / 5 ; cout a % 5;因为17 5×3 2所以3 2四十五、综合例题3优先级int a 3; int b 4; int c 5; int x a b * c;先b*c 20再a20 23所以x 23四十六、综合例题4逻辑运算int x 7; bool a x 5; bool b x 10; bool c a b;计算a true b true c true所以c true四十七、综合例题5程序阅读现在来一道真正的 CSP-J 风格小题。int a 2; int b 3; int c 4; a; b a * 2; c b a; a c % 5; cout a b c;不要急着算。建立表格。操作abc初始234a334ba*2364cba369ac%5469答案4 6 9四十八、程序阅读的黄金法则从今天开始给孩子建立这五条规则规则1不要凭感觉看程序一定要一步一步执行。规则2遇到变量就记录例如int a,b,c;马上在草稿纸上a b c规则3看到赋值先算右边例如a b c * 2;先算bc*2再把结果放到a规则4看到%一定停一下问自己这里是在求余数吗规则5看到问自己这是前置还是后置四十九、这一课容易错的10个地方易错点正确理解赋值判断相等aa1a增加1/整数相除时取整数部分%求余数a先使用再加1a先加1再使用并且||或!否五十、CSP-J初赛必须掌握的“运算符地图”最后建议同学们把下面这张表掌握。C运算符 │ ├── 算术 │ ├── │ ├── - │ ├── * │ ├── / │ └── % │ ├── 关系 │ ├── │ ├── │ ├── │ ├── │ ├── │ └── ! │ ├── 逻辑 │ ├── │ ├── || │ └── ! │ ├── 自增自减 │ ├── │ └── -- │ └── 赋值 ├── ├── ├── - ├── * ├── / └── %五十一、课后练习第一组——基础计算题1int a 10; int b 3; cout a / b ; cout a % b;输出什么题2int a 5; a a 3; a a * 2; a a - 4;最后a是多少题3int a 5; int b a; cout a b;输出什么题4int a 5; int b a; cout a b;输出什么题5int x 3 4 * 5;x是多少五十二、第二组——程序阅读题6int a 7; int b 4; a a b; b a - b; a a - b; cout a b;输出什么题7int n 123; int a n % 10; n n / 10; int b n % 10; cout a b;输出什么题8int a 2; int b 5; bool x a b; bool y a b; bool z x !y; cout z;输出什么五十三、第三组——CSP-J综合题9int a 3; int b 4; int c 5; a b; c a; b c % 3; cout a b c;要求不要直接心算必须画变量状态表。题10int n 2026; int a n % 10; n / 10; int b n % 10; n / 10; int c n % 10; cout a b c;问程序输出什么五十四、这一课要达到的目标这一课最重要的是培养三个能力第一能力认识变量看到int x 10;脑子里马上出现x → 10第二能力理解表达式看到x a b * 2;能够自动翻译成先算 b×2 再加 a 最后放进 x第三能力模拟程序看到a; b a * 2; c b % 3;能够在纸上画a b c 开始 5 2 0 a 6 2 0 ba*2 6 12 0 cb%3 6 12 0这三个能力建立起来之后下一课“条件、循环与程序模拟”就会顺畅很多。
返回列表