一、思维导图。
二、对以下语法的认识。
1. if-else:
用法格式:
if( 判断条件) { 执行的语句 ; } else //if的条件为0时,需要执行这里 { 执行的语句 ; }
else总是与与其最接近的且没有与其他else配对的if搭配,判断条件语句不需要加分号,而执行的语句需要输入分号。判断语句需要用括号括起来,执行语句块最好用用 { }括起来,才严谨。
2. switch:
用法格式:
switch ( )//括号内输入表达式 { case 常量表达式1 : 语句1;break; case 常量表达式2 : 语句2:break; ....... case 常量表达式n: 语句n;break; default: 语句n+1; break;
开关语句(switch)首先计算()内表达式的值,然后在对应case的值,并执行对应case的语句,如果无任何一个case的值与之对应,则执行default后面的语句,然后跳出switch语句。若执行完对应的语句后无break,则将按顺序往下执行其他case里的语句,直到读到break才跳出switch。使用switch语句需要注意的是 switch(表达式)表达式的值必须是整形或者是可以转化成整型的数值类型,例 int、char等,但long和string则不能用于switch语句。switch()后面没有分号,没有分号,没有分号!直接连接 { } 。 case常量表达式后用的是 ‘ :’ 而是不是 ‘ ;’ 。
3.for:
用法格式:
for(初始化 ;条件表达式 ;增量;) { 循环体语句 ; }
for循环步骤,先初始化然后判断条件表达式是否为真,真则执行循环体语句,然后变量执行增量,再判断条件表达式,如果为假则推出for循环,若真则继续执行循环直至条件表达式不成立,结束。for()中条件表达式和增量可以没有,但分号不可少,当没有条件表达式时,需要在循环体语句中增加能跳出循环的语句,否则该for循环变为死循环,就没意思了。
4.while:
用法格式:
while(表达式) { 循环体语句; }
while循环步骤,先进性表达式的判断,结果为真则进入循环体,执行循环体语句,读到break或表达式变为假的时候推出循环体。使用while循环,需要注意的是 while(表达式)后千万不要加 分号( ;)千万不要加 ,千万不要加!while里面定义的变量,在while外面 无法使用。
5.do-while:
用法格式:
do { 循环体 ; }while (表达式);
do-while循环步骤,先进入循环体,执行循环体语句,然后判断表达式真或假,真则再执行循环体语句,直到表达式为假,则推出循环体。do-while和while循环最大区别为,do-while无论如何都会先执行一次循环体,while有可能一次都不执行循环体。
6.break和continue:
用法:均只用于循环语句和开关语句中,break为结束循坏,跳出循环体;而continue则为结束本次循环,进入下一次循环。
三、2.3 2.4 、第三章作业和4.1作业pta截图,以及节选题目分析。
2.3 2.4分数截图:
第三章作业pta分数截图:
第四章作业pta分数截图:
节选题目分析:
1、题目:
答案:
1 #include <stdio.h> 2 3 int main( ) 4 { 5 char op;//定义字符常量用来存放运算符号。 6 int number1, number2, result;//定义三个整型的变量,前两个用来存放需要进行运算的数字,后面一个用来存放运算结果。 7 scanf("%d %c %d", &number1, &op, &number2); 8 switch (op)//判断运算符号 9 { 10 case '+': //加法运算 11 result = number1 + number2; 12 printf("%d", result); 13 break; 14 15 case '-': //减法运算 16 result = number1 - number2; 17 printf("%d", result); 18 break; 19 20 case '*': //乘法运算 21 result = number1 * number2; 22 printf("%d", result); 23 break; 24 25 case '/': //除法运算 26 if (number2 != 0) //保证分母不为零,除法运算式成立 27 { 28 result = number1 / number2; 29 printf("%d", result); 30 } 31 break; 32 33 case '%': //求余预算 34 if (number2 != 0) //保证分母不为零,除法运算式成立 35 { 36 result = number1 % number2; 37 printf("%d", result); 38 } 39 break; 40 41 default: printf("ERROR"); break; //非法字符 42 } 43 return 0; 44 }
这题需要注意的是,在使用switch语句时,不要忘了在每个case运行结束后 给个break,没有break ,就不会跳出switch,导致最后结果的错误。在提交这道题的时候,有个测试点 (非法字符 )一直提示答案错误,想了好久怎么判断非法字符,后来才发现,没有善于利用default。完成此题,我学会了switch语句的用法。(思路在代码注释)
2、题目:
答案:
1 #include <stdio.h> 2 3 int level(int levle); 4 5 int main() { 6 int n, point, levels; //定义三个整型变量分别储存人数、分数、等级 7 int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0; //定义五个变量分别储存A、B、C、D、E等级的总人数 8 scanf("%d ", &n); //输入学生总人数 9 for (int i = 1; i <= n; i++) //进入循环,读取n个学生的成绩并进行各等级人数的计算 10 { 11 scanf("%d", &point); 12 levels = level(point); //调用自主编写的求等级函数 13 switch (levels) //计算各等级人数 14 { 15 case 'A': num1++; break; 16 case 'B': num2++; break; 17 case 'C': num3++; break; 18 case 'D': num4++; break; 19 case 'E': num5++; break; 20 } 21 } 22 printf("%d %d %d %d %d", num1, num2, num3, num4, num5); //按要求格式输出各等级的人数 23 } 24 int level(int point) //自主编写等级函数 25 { 26 char level; //定义字符变量,意在将分数转为等级 27 if (point >= 90) 28 { 29 level = 'A'; 30 } 31 else if (point >= 80 && point < 90) 32 { 33 level = 'B'; 34 } 35 else if (point >= 70 && point < 80) 36 { 37 level = 'C'; 38 } 39 else if (point >= 60 && point < 70) 40 { 41 level = 'D'; 42 } 43 else 44 { 45 level = 'E'; 46 } 47 return level; //返回对应等级 48 }
在做此题时,首先先完成成绩由百分数转换为五分制的子函数编写,然后再将scanf写进main函数的循环里,为读取完所有学生的分数。完成此题,我学会了编写自主函数并正确调用它。(思路在代码注释)
3、题目:
答案:
1 #include <stdio.h> 2 3 int main( ) 4 { 5 int a, n, sum = 0 ; //定义三个整型变量,储存输入的数字a、项数n和计算的和。 6 7 int num; //定义一个整型,将a的值赋予它,便于后面的a的值改变,还能对a初始值取用。 8 9 scanf("%d%d", &a, &n); 10 11 num = a; //赋值 12 13 if (a <= 9 && n <= 9) //应题目对a和n的大小要求,进入执行语句。 14 { 15 for (int i = 1; i <= n; i++) //设置循环,将n个由a组成的特殊数列相加求和。 16 { 17 sum = sum + a; //求和 18 19 a = a * 10 + num; //每一次循环,都将a的值变为n个a组成数 20 } 21 printf("s = %d", sum); //循环外,按要求输出最后的值 22 } 23 return 0; 24 }
此题考点在于对for循环的运用,难点在如何将初始a逐次变为递增的n个a组成的新的数。完成此题,我对for语句有了更进一步的掌握。(思路在编程注释里)