C博客作业01--分支、顺序结构

0.展示PTA总分

1.本章学习总结

1.1学习内容总结

1.首先,我学到了一个程序的必要组成部分:

  • 程序开头的包含文件的编译预处理指令。
  • 主函数main()。
  • 函数的开始‘{’与结束‘}’。
  • 每个语句要以分号‘;’结束。
  • 每个函数最后一条语句是return语句。
  • 函数中的各种符号都应该是英文符,而不是中文符。

2.数据类型:

C语言的3种基本数据类型是整型、字符型和浮点型:

  • 整型 int 取值范围:-2147483648~+2147483648
  • 短整型 short 取值范围:-32768~+32768
  • 长整型 Long 取值范围:-2147483648~+2147483648
  • 字符型 char 取值范围:-128~+127
  • 单精度浮点型 float 取值范围:-/+3.4e38
  • 双精度浮点型 double 取值范围:-/+1.7e308

3.输出语句:

  • 输出语句为printf,但刚开始学习是我总是会忘记最后一个f。
  • printf后要跟一个小括号‘()’,小括号中是两个双引号,输出的内容放在双引号中。
  • 如果要输出变量,则要在双引号中加入%和变量类型对应的英文(整形变量%d,浮点型变量%f,字符型变量%c),而后需要跟上一个‘,’,和所对应的变量。

4.输入语句:

  • 输入语句为scanf.
  • scanf的格式和printf类似,但双引号中必须是跟%加上变量类型所对应的字母(整形变量%d,浮点型变量%lf,字符型变量%c),而后跟上',&',和所对应的变量。

5.判断语句:

  • 判断语句常用的为if else,但也有多分支的if else if。
  • if后跟上(条件),如果没有跟上大括号,则只执行后面的一个语句,并且如果if后不只一个语句,则会提示程序错误,所以在编写时如果if后要执行多个语句则需要用大括号把执行的语句括号起来。
  • else所否定的是上一个离它最近的if,与对应所对应的无关。
  • if里的条件判断:等于:==,不等于!=,大于:>,小于:<,大于等于:>=,小于等于:<=。

6.多分支选择语句:

  • switch case其中switch后要跟上(变量/表达式),后跟上大括号,case后要跟上常量/表达式和':'。
  • switch case后面括号内的“表达式”必须是整数类型。也就是说可以是 int 型变量、char 型变量,也可以直接是整数或字符常量,哪怕是负数都可以。但绝对不可以是实数,float 型变量、double 型变量、小数常量通通不行,全部都是语法错误。
  • 当switch后面括号内“表达式”的值与某个case后面的“常量表达式”的值相等时,就执行此case后面的语句。执行完一个case后面的语句后,流程控制转移到下一个case继续执行。如果你只想执行这一个case语句,不想执行其他case,那么就需要在这个case语句后面加上break,跳出switch语句。
  • 每个 case 后面“常量表达式”的值必须互不相同,否则就会出现互相矛盾的现象,而且这样写造成语法错误。

7.循环语句:

1.for循环:

  • 格式:for(条件1;条件2;条件3)
    {
    语句1;
    语句2;
    .......
    }
  • for是先判断条件,再执行循环。
  • 条件1与条件3有与没有都不影响,但条件2必须要有,否则会提示程序错误。
  • for的执行顺序:条件1到条件2到语句到条件3.

2.while循环:

  • 格式:while(条件)
    {
    语句1;
    语句2;
    .....
    }
  • 与for相同的是,while循环也是先判断条件后执行循环。

3.do while循环:

  • 格式:do
    {
    语句1;
    语句2;
    ....
    }
    while(条件);
  • 值得注意的是while循环后不用分号,而do while循环后要分号。
  • 与其他两个不同的是do while循环是先执行语句再判断条件,也就是说do while循环至少循环一次。

1.2本章的学习体会

1.经过着两周的学习,我发现好问非常重要,对于自己卡住的问题,多问问同学,但也不是直接要代码复制粘贴进去得分,而是多问问同学的想法、思路,做到举一反三,从别人的想法中吸收消化所蕴含的知识。

2.我对我所要学习的,所要面对的有了更深刻的理解。

3.我发现了我能够从遇到难题,解决难题中获得成就感,从解决问题中获得快乐,我相信这能使今后的学习不再是被动的,而是主动的。

4.关于我的代码量,如果直接算九月份的共889,除去军训的时间,平均每天55.5625(16天),达到了我暑假对自己顶下的目标。

2.PTA实验作业

2.1实验4-1-9 -while和do-while/if-else 猜数字游戏

2.1.1数据处理

我先定义了一个int变量mynumber表示计算机想到的数,然后定义了一个int变量yournumber表示玩家想的数,接着定义了一个int变量i=1用来计算玩家猜的次数,初始第一次,最后定义了一个int变量n表示计算机限制猜的次数。
yournumber由玩家输入,i在每次猜完后+1。

2.1.2代码截图(由于代码行数过多,我将它复制发到q群里截图上传)

2.1.3本题可扩展功能

猜题次数由玩家决定,但计算机想的数字可以用随机数来替代,用取余后+1使其在(1,100)的范围,这样有了更好的可玩性,可以单人娱乐。

2.1.4PTA提交列表及说明

说明:刚开始每次的提交,我都有部分改动,但总是没有实现超过N次猜对无效和直接退出,然后在国庆的题目中有一题一模一样的题目,近两周的学习后,我重新审阅了之后,终于实现了那两个要求。
我在循环中的i与n的判断中加入了break语句,退出循环,并且加入了对yournumber的判断。

2.2实验4-2-2-for 求e的近似值

2.2.1数据处理

我int定义了两个变量i和n,用来循环的次数,用double定义了三个变量x=1,s=1,resule=1,y。
其中x在第一个循环中用来盛放除数的阶乘,在第二个循环重新赋值为1.
y在循环中用来盛放每一项。
由于题目要求是1+1/1!,所以result我刚开始定义为1,有助于循环,最后输出result。

2.2.2代码截图

2.2.3本题可拓展功能

同时改变每一项的正负能计算1/1!-1/2!+1/3!-......等更多的数学题。

2.2.4PTA提交列表及说明


说明:刚开始我result定义为0导致没有符合题目的答案,后认真审阅题目和不断测试将之改正。

2.3实验4-1-5-while和do-while 韩信点兵

2.3.1数据处理

我定义了四个变量a=1,b=5,c=4,d=10,分别代表四次点兵所剩余的士兵数。
而后我用for循环将a与b的值和所对应的报数规则找出两者相同的最小的数,c与d用同样的办法找出,然后找出这时a与c的值用a每次加30(a、b报数的公倍数),c每次加77(c、d报数的公倍数)找出两者相同的最小数,则为题目要求的数

2.3.2代码截图(由于代码行数过多,我将它复制发到q群里截图上传)

2.3.3本题可扩展功能

学到函数时可以自己写一个函数,计算出最小的相同的值,这样就可以使代码更简洁。

2.3.4PTA提交列表及说明


说明:由于数学问题,刚开始几次有点想当然地写,导致计算的结果错误,经过反复思考,发现找公因数的方法能够做出。

3.阅读代码

题目来源:ACM题库
问答题 8 /5667
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入描述
第一行是测试数据
输出描述
对输入的每组数据M和N,用一行输出相应的K。
输入例子
1
7 3
输出例子
8
参考答案

#include<stdio.h>
 
int fun(int m,int n)  //m个苹果放在n个盘子中共有几种方法
{
    if(m==0||n==1)  //因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,
        return 1;    //则可能出现m-n=0的情况从而不能得到正确解   
    if(n>m)
        return fun(m,m);
    else
        return fun(m,n-1)+fun(m-n,n);
}
 
int main()
{
    int T,m,n;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&m,&n);
        printf("%d\n",fun(m,n));
    }
}

  • 他定义了一个自己的函数来计算m个苹果放在n个盘子中共有几种方法。
  • 考虑到了多种情况:如没有苹果或者只有一个盘子。
  • 由于自己定义了函数,使得他的代码看上去很简洁。
posted @ 2019-10-07 16:28  叶璃O  阅读(341)  评论(0编辑  收藏  举报