博客作业1

只谈情不闲聊 提交于 2019-12-01 10:31:27

一、思维导图

二、语法认识

1、if-else

基本形式:

if(表达式)
{
    语句a;
}else{
    语句b;
}

使用方法 :

通过对表达式的判断,从而形成对算法的分支。可嵌套运用。

使用过程中遇到的问题:

语句与执行条件不对应。

解决方法:

程序缩进,一个一个找。

使用注意点:

·多执行语句时,需加上中括号。

·多分支时,也需加上中括号。

·程序缩进,使程序简洁,方便查看。

2、switch

基本形式:

switch(表达式){
   case 常量表达式1:语句a;break;
   case 常量表达式2:语句b;break;
   ...
   case 常量表达式n:语句n;break;
   default:语句n+1;break;
}

使用方法:

1.与if-else相似,判断相应的条件,选择运行相应的结果;

2.可选择从哪种条件开始,输出哪几种情况。

使用过程中遇到的问题:

1.case后为赋值表达式;

2.运用于选择问题时,语句后没加break。

解决方法与注意点:

·知道了常量表达式和表达式的值一般是整型或字符型。

·记住了用switch解决选择问题时,需加break语句。

3.for

基本形式:

for(表达式a;表达式b;表达式c;)
{
    循环体语句;
}

使用方法:

在给定的条件下,从某个地方开始让系统重复做某些动作,到某个地方停止。

使用过程中遇到的问题:

表达式b与表达式c的用法记混。

解决方法与注意点:

·表达式1为指定循环起点,表达式2为给出的循环条件,表达式3为重复的次数。

4.while

基本形式:

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

使用方法:

通过对表达式的判断,进行对特定语句的重复。

使用过程中遇到的问题:

对循环体执行次数的不清楚导致运算错误。

解决方法与注意点:

·当while语句循环到最后一个符合条件时,程序执行完循环体语句后,再回到上面进行判断,若不符合条件,就进行while语句后面的语句。

5.do-while

基本形式:

do{
    循环语句;
}while(表达式);

使用方法:

先执行循环语句一次,后在表达式条件下,再进行这些语句的重复。

使用过程中遇到的问题:

不清楚循环语句运行的次数。

解决方法与注意点:

·判断是否执行方式与while语句相似,只是不管符不符合条件,循环体都会执行一次。

6、break以及continue

break:

作用:强制循环结束。

用法:·switch语句中用于语句后面;

·其他循环语句中一般与if语句配合使用。

continue:

作用:跳过循环体中continue后面的语句。

用法:·在循环体中一般与if语句配合使用。

三、pta分数


四、pta题目分析

1、题目: 2.3,2.4作业 :7-3 求简单交错序列前N项和
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。

输入样例:

10

输出样例:
sum = 0.819
原本答案及解题思路:

​
int main()
{
    int i =1,N,n =0;
    double s =0;
    scanf(%d,&N);//输入正整数N
    s = s + 1.0/i;//求第一项的和
    i = i + 3;//定义成交错序列
    n = n + 2;//判断加的次数
    do{
       if(n%2==0){//判断加的次数的奇偶以此来确定加减
       s = s-(1.0/i);
       i = i +3;
       n = n +1;
       }else{
       s = s + (1.0/i);
       i = i + 3;
       n = n + 1;
       }
    }while(n<=N);
    printf("sum = %.3f",s);
}

改正答案:

​
int main()
{
    int i = 1, n = 1, N = 0;
    double sum = 0;
    scanf("%d", &N);
    do {
        if (n % 2 == 0) {
            sum = sum - (1.0 / i);
            i = i + 3;
            n = n + 1;
        }
        else {
            sum = sum + (1.0 / i);
            i = i + 3;
            n = n + 1;
        }
    } while (n <= N );
    printf("sum = %.3f", sum);
​
}

改进方面:

1.将相同句式放进循环体中使程序简洁;

2.int i, n= 1;不代表int i = 1,int n = 1;

感悟:做交错相加减的题目可先定义一个变量sign,设sign = 1;

每次循环sign = -sign;sum = sum + sign*(1.0 / i);

2、题目: 2.3,2.4作业 : 7-2 求奇数分之一序列前N项和
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

23

输出样例:
sum = 2.549541
原本答案及解题思路:

​
int main()
{
    int i = 1,N,n = 0;
    double s = 0 ;
    scanf("%d",&N);//输入正整数N
    do {
    s = s +1.0 / i;
    i = i +2;//使所加值为奇数
    n = n +1;//判断所加的次数
    } while(n <= N);
    printf("sum = %.6f",s);
}

改进答案:

​
int main()
{
    int i = 1,N,n = 0;
    double sum = 0 ;
    scanf("%d",&N);
    do {
    sum = sum +1.0 / i;
    i = i +2;
    n = n +1;
    } while(n <= N-1);
    printf("sum = %.6f",sum);
}

改进方面:

1.将N改为N-1使加的次数减少一次;

感悟:因为在do-while循环语句中,最开始n=0执行了一次,而条件是n<=N,所以语句又循环了N次,所以语句总共循环了N+1次。

3、题目: 2.3,2.4作业 : 7-4 输出华氏-摄氏温度转换表
输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。
输入格式:
在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:
第一行输出:"fahr celsius"

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."。

输入样例1:
32 35
输出样例1:
fahr celsius 32 0.0 34 1.1
输入样例2:
40 30
输出样例2:


原本答案及解题思路:

#include<stdio.h>

int main()
{
  int lower =0;
  int upper =0;
  int read;
  double c =0;
  scanf("%d %d,&lower,&upper");//输入lower,upper的值
  if(lower<=upper&upper<=100){//判断lower<=upper且upper<=100
  read = (lower,upper);//取取值范围在lower,upper之间的数
  c = 5.0 *(read -32)/9;
  printf("fahr celsius\n");
  printf("%d %.f\n",read,c);
  read = read + 2;//增加2华氏度
  c = 5.0 * (read -32)/9;
  printf("%d %6.f",read,c);
  }else{
  printf("Invalid.");
  }
}

改进答案:

#include <stdio.h>

int main()
{
    int lower;
    int upper;
    scanf(" %d", &lower);
    scanf(" %d", &upper);
    
    if (lower>upper ||lower>100 || upper>100)
    {
        printf("Invalid.\n");
        return 0;
    }
    
    printf("fahr celsius\n");
    
    int i ;
    int fahr;
    double celsius;
    
    for (i=lower; i<=upper; i+=2)
    {
        fahr = i;
        celsius = 5.0 * (fahr - 32) / 9;
        printf("%d", fahr);
        printf("%6.1lf\n", celsius); 
    }

    return 0;
}

改进方面:

1.先进行判断,后用循环来增加值。

感悟:1.在编程中和要输"&&";

2.结合样例理解好问题;

3.若反面情况较多可先判断反面。

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