一、思维导图
二、语法认识
(1)if-else
1.结构
if (条件)
语句一;
else
语句二;
2.使用方法:求解表达式,如果条件为真,则输出语句一,为假则输出语句二
3.问题:含有多个if-else语句时,有时判断else属于哪个if错误
4.解决:听老师讲解和自己重新看分析结构
(2)switch
1.结构
switch (表达式){
case 常量表达式1:语句段1; break;
case 常量表达式2:语句段2;break;
...
case 常量表达式n:语句段n; break;
default: 语句段n+1;break;
}
2.使用方法:求解表达式,若表达式与某一常量表达式的值相等,测执行该表达式相应的语句段,若与任何一个都不相等,则执行的default后的语句段,最后执行break跳出switch
3.问题:暂无
4.解决:暂无
(3)for
1.结构
for(表达式1;表达式2;表达式3)
循环体语句
2.使用方法:先计算表达式1,再判断表达式2,若值为真,则先执行循环体语句,再计算表达式3,若值为假,则结束循环
3.问题:表达式2 3的顺序有时会弄混,执行i++时i是这个循环的值还是上个循环的值有时会弄混
4.解决:在草稿纸上画出程序框图
(4)while
1.结构
while(表达式)
循环体语句;
2.使用方法:当表达式的值为真,循环执行,直到表达式值为假,循环终止并执行while的下一条语句
3.问题:没有注意循环体只能是一条语句
4.解决:改成单条语句
(5)do-while
1.结构
do{
循环体语句
} while (表达式);
2.使用方法:第一次进入循环,首先执行循环体语句,然后再检查循环控制条件,即计算表达式,若值为真,继续循环,直到值为假,执行下一条语句
3.问题:判断是否继续执行时的条件有误
4.解决:多练
(6)break语句和continue语句
1.结构
switch (表达式){
case 常量表达式1:语句段1; break;
case 常量表达式2:语句段2;break;
...
case 常量表达式n:语句段n; break;
default: 语句段n+1;break;
}
for(表达式1;表达式2;表达式3)
{
语句1;
continue;
语句2;
}
2.使用方法:break 当循环结构出现多个循环条件时,可以由循环语句中的表达式和break语句共同控制
continue 跳过循环体中continue后面的语句继续下一次循环
3.问题:暂无
4.解决:暂无
三、pta分数截图
2.3,2.4作业
第3章作业
4.1作业
四、pta代码分析
2.3,2.4作业
7-2 求奇数分之一序列前N项和 (15 分)
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
23
输出样例:
sum = 2.549541
#include
int main()
{
int n,i,zi=1,mu=1;
double sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum+=zi*1.0/mu;
mu+=2;
}
printf("sum = %lf\n",sum);
}
思路:输入字符后用1.0比得到分数,再进行累加
错误原因:最后答案格式有瑕疵,注意题目中要求的精确度
收获:注意答案中给定的精确度,不要忘记乘1.0,注意每一项之间的规律
第3章作业
7-10 统计学生成绩 (15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
#include
int main()
{
int N;
int i,x;
int a=0,b=0,c=0,d=0,e=0;
while(scanf("%d",&N)!=EOF){
for(i=0;i=90){
a++;
}else if(x>=80){
b++;
}else if(x>=70){
c++;
}else if(x>=60){
d++;
}else{
e++;,
}
}
printf("%d %d %d %d %d\n",a,b,c,d,e);
}
return 0;
}
思路:输入字符后,通过多个if-else循环,分出不同分数段,输出等级
错误:5个等级,最后要有5个结果
收获:注意所有结果的输出
4.1作业
7-8 猜数字游戏 (15 分)
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例:
58 4
70
50
56
58
60
-2
输出样例:
Too big
Too small
Too small
Good Guess!
#include
#include
int main(void) {
int num, times;
scanf("%d %d", &num, ×);
int i = 0, guess;
while (i < times) {
scanf("%d", &guess);
if (guess < 0) {
printf("Game Over\n");
break;
}
if (guess > num) {
printf("Too big\n");
}
if (guess < num) {
printf("Too small\n");
}
if (guess == num) {
if (i == 0) {
printf("Bingo!\n");
} else if (i < 3) {
printf("Lucky You!\n");
}
if (i >= 3) {
printf("Good Guess!\n");
}
break;
}
i++;
}
if (i >= times) {
printf("Game Over\n");
}
return EXIT_SUCCESS;
}
思路:多次运用if-else语句比较guess和num的大小输出结果
错误原因:混淆if-else的不同组合
收获:注意else与最近的if是一组