第一次博客作业

我是研究僧i 提交于 2019-12-01 10:08:28

一.制作思维导图

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!