第一次博客作业
一.制作思维导图
二.写出自己对以下语法的认识
1.if-else
使用方法:
if(表达式){
语句1;
}
else {
语句2;
}
出现问题:容易混淆if与else的配对关系,在多分支语句中更容易出现。
解决方法:先写完一组if-else的语句再去加入其他分支语句。
注意:if-else语句如果后面不加花括号就只能执行后面第一个语句,一般加入花括号更容易读懂。
2.switch
使用方法:
switch(表达式){
case 常量表达式 1:语句段1;break;
case 常量表达式 2:语句段2;break;
···
case 常量表达式 n:语句段n;break;
default: 语句段n+1;break;
}
switch语句可以与if-else语句相互转换。switch的break可以根据题目的需求进行删减,但要注意删减完会执行下一句表达式。
3.for
使用方法:
for(表达式1;表达式2;表达式3;){
循环体语句;
}
for语句中,用两个分号隔开三个表达式,即使有表达式不需要,也要以“ ;”空语句的形式打出,不然可能会编译错误。
4.while
使用方法:
while(表达式){
循环体语句;
}
不要将表达式中的‘ == ’与‘ = ’搞混,不然容易陷入死循环,使得出的结果与设想的不同。
5.do-while
使用方法:
do{
循环体语句;
}while(表达式);
do-while语句会先执行一次循环体语句在进行表达式判断,一般用于先循环、后判断的情况。但do-while语句也可与while语句和for语句相互转换。
三.pta分数截图
作业2.2,2.3:
第3章作业:
4.1作业:
四.pta代码分析
1.
#include<stdio.h>
int main()
{
int munber, times, guess, guesstimes = 0;
scanf("%d %d", &munber, ×);
for (int i = 0; i <= times; i++) {
scanf("%d", &guess);
guesstimes++;
if ((guesstimes > times) || (guess < 0 && guesstimes <= times)) {
printf("Game Over\n"); break;
}
if (guess > munber) {
printf("Too big\n");
}
else if (guess < munber) {
printf("Too small\n");
}
else {
if (guesstimes == 1) printf("Bingo!\n");
else if (guesstimes <= 3) printf("Lucky You!\n");
else printf("Good Guess!\n");
break;
}
}
return 0;
}
解题思路:
本题要对猜数与被猜数进行比较应采用分支语句列出三种情况,而且可能进行多次比较所以采用循环语句。
还要注意当被猜数小于0和超过猜测的最大次数的情况。
错误原因:
将 ‘==’ 与 ‘=’ 混淆,导致输出的答案全为 "Bingo!"
学会了赋值= 与 ==的区别。
2.
#include<stdio.h>
#include<math.h>
int main()
{
int flag, denominator;
double sum, eps, item;
scanf("%lf", &eps);
flag = 1;
denominator = 1;
sum = 0;
item = 1;
if (eps >= item) sum = 1;
while (fabs(item) > eps) {
item = flag * 1.0 / denominator;
flag = -flag;
denominator = denominator + 3;
sum = sum + item;
}
printf("sum = %f", sum);
return 0;
}
解题思路:
定义一个’flag‘转换项数的正负,在利用循环语句求解。要注意即使一开始eps大于等于1也要加第一项,所以利用do-while语句更加方便。
出现问题:
一开始没有注意eps大于1也要加第一项。
3.
#include<stdio.h>
int main(void)
{
int digit, letter, blank, other;
char ch;
int i;
digit = letter = blank = other = 0;
for(i = 0;i <= 9;i++){
scanf("%c",&ch);
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) letter++;
else if(ch>='0'&&ch<='9') digit++;
else if(ch ==' '||ch =='\n') blank++;
else other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other);
return 0;
}
本题要注意各个表达式之间的关系,例如ch>='a'&&ch<='z'和ch>='A'&&ch<='Z'之间不能直接用||连接要分别加圆括号,不然容易产生错误。