第一次博客园作业
一、思维导图
二、对语法的认识
-
if-else
if(表达式) { 语句1; } else { 语句2; }
当表达式为“真”时执行语句1,否则执行语句2,两个语句总要执行一个,但不会都执行。其中else可省略,else省略时表达式为“假”则什么都不做。
if(表达式1) { 语句1; } else if(表达式2) { 语句2; } else if(表达式n-1) { 语句n-1; } else { 语句n; }
多路分支结构中,表达式1为“真”时执行语句1,并结束整个if语句的执行,否则求解表达式2······直到某个语句执行,结束if语句。
-
switch
switch(表达式) { case 常量表达式 1:语句段 1; break; case 常量表达式 2:语句段 2; break; ··· case 常量表达式 n:语句段 n; break; default: 语句段 n+1;break; }
执行switch语句,先求解表达式,若表达式的值与某个常量表达式相等,则执行相应的语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句段,如果省略default,则什么都不执行,最后执行break语句,跳出switch语句。如果没有break语句,switch语句将继续执行直到break跳出switch语句,或者直到switch语句结束。
-
for
for(表达式1; 表达式2; 表达式3) { 循环体语句; }
for语句中,用两个分号分隔三个表达式,但for的后面没有分号。执行for语句时,先计算表达式1;再判断表达式2,若值为“真”,则执行循环体语句,并接着计算表达式3,然后继续循环;若值为“假”时,结束循环,执行for的下一个语句。
-
while
while(表达式) { 循环体语句; }
执行while语句时,当表达式为“真”,执行循环,直到表达式的值为“假”,结束循环,执行while的下一条语句。
-
do-while
do { 循环体语句; }while(表达式);
do-while语句的循环与for语句和while语句的循环略有不同,for语句和while语句但是先判断再执行循环体语句,而do-while则是无论表达式值如何,至少执行一次循环体。
-
break以及continue
break语句强制循环结束,一旦执行了break语句,循环提前结束不再执行循环体中位于其后的其他语句。break语句应该和if语句配合使用,即条件满足时,才执行break跳出循环。
continue语句的作用是跳过循环体中continue后面的语句,进入下一次循环。continue语句一般也需要和if语句配合使用。
三、PTA分数截图
2.3,2.4作业
第3章作业
4.1作业
四、PTA代码分析
1.
#include<stdio.h>
int main()
{
int choice, i;
double price;
printf("[1] apple\n");
printf("[2] pear\n");
printf("[3] orange\n");
printf("[4] grape\n");
printf("[0] exit\n");
for (i = 1; i <= 5; i++)
{
scanf("%d", &choice);
if (choice == 0)
break;
switch (choice)
{
case 1:price = 3.00; break;
case 2:price = 2.50; break;
case 3:price = 4.10; break;
case 4:price = 10.20; break;
default:price = 0.00; break;
}
printf("price = %.2f\n", price);
}
return 0;
}
(1)代码思路:先将菜单输出,在使用循环输入菜单号,利用switch语句输出相应的结果
(2)错误:将第二个 “scanf”函数放在了for循环外面,导致出错。
(3)学到了:类似查询的程序要在循环里面放一个输入函数,保证数据的读入。
2.
#include<stdio.h>
#include<math.h>
int main()
{
int i,flag;
flag=i=1;
double sum,eps,n;
n=1.0;
scanf("%lf",&eps);
if(eps>=1)
printf("sum = %f\n",n);
else
{
do
{
n=flag*1.0/i;
sum+=n;
i+=3;
flag=-flag;
}while(fabs(n)>eps);
printf("sum = %lf",sum);
}
return 0;
}
(1)代码思路:先判断输入的 eps 范围,因为不知道循环几次不能使用for循环,所以使用do-while循环,循环到最后一项的绝对值不大于给定的eps的精度后跳出循环。因为正负号交错,所以使用flag来变号。
(2)错误及原因:没仔细看题目,没有先判断eps的精度,导致错误,不明白4E-2的意思。
(3)学到了:题目要多看几遍,4E-2是科学计数法代表4*10^-2。
3.
#include<stdio.h>
#include<math.h>
int main()
{
int a, n;
scanf("%d %d", &a, &n);
int i,sum,m;
sum = m = 0;
for (i = 1; i <= n; i++)
{
m = m * 10 + a;
sum += m;
}
printf("s = %d\n", sum);
return 0;
}
(1)代码思路:先设置一个for循环,让n个数相加。要得到下一个数先让上一个数乘10在加a。最后每一个数都加在sum上就可以得出答案。
(2)错误及原因:误以为aa是a*a,不知道a+aa+...+a...a不知道怎么表达,导致错误。
(3)学到了:知道了类似a+aa+...+a...a的算式如何表达。