第一次博客作业

一.制作思维导图

二.写出自己对以下语法的认识

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, &times);
	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'之间不能直接用||连接要分别加圆括号,不然容易产生错误。

posted @ 2019-10-15 17:32  王明け  阅读(191)  评论(0编辑  收藏  举报