第一次博客园作业

一、思维导图

二、对语法的认识

  1. 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语句。

  2. 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语句结束。

  3. for
    for(表达式1; 表达式2; 表达式3)
    {
        循环体语句;
    }
    

    for语句中,用两个分号分隔三个表达式,但for的后面没有分号。执行for语句时,先计算表达式1;再判断表达式2,若值为“真”,则执行循环体语句,并接着计算表达式3,然后继续循环;若值为“假”时,结束循环,执行for的下一个语句。

  4. while
    while(表达式)
    {
          循环体语句;
    }
    

    执行while语句时,当表达式为“真”,执行循环,直到表达式的值为“假”,结束循环,执行while的下一条语句。

  5. do-while
    do
    {
       循环体语句;
    }while(表达式);
    

    do-while语句的循环与for语句和while语句的循环略有不同,for语句和while语句但是先判断再执行循环体语句,而do-while则是无论表达式值如何,至少执行一次循环体。

  6. 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的算式如何表达。

posted @ 2019-10-15 16:14  awwman  阅读(160)  评论(0编辑  收藏  举报