zoukankan      html  css  js  c++  java
  • c语言博客作业03--循环结构

    0.展示PTA总分


    1.本章学习总结

    1.1学习内容总结

    循环语句

    for语句:

    for( 表达式1; 表达式2; 表达式3 )
    {
    // 需要执行的语句;
    }
    其执行过程是:表达式 1 首先执行且只执行一次;然后执行表达式 2,通常都是一个用于判定条件的表达式,如果表达式 2 条件成立,就执行(需要执行的语句);然后再执行表达式 3;再判断表达式 2,执行(需要执行的语句);再执行表达式 3.....一直到表达式 2 不成立时,跳出循环继续执行循环后面的语句。

    while语句:

    while (表达式)
    {
    语句;
    }

    当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句;然后再判断表达式是否为真……就这样一直循环下去,直到表达式为假,跳出循环。这个就是 while 的执行顺序。

    do while语句:

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

    注意,while 后面的分号千万不能省略。

    do…while 和 while 的执行过程非常相似,唯一的区别是:“do…while 是先执行一次循环体,然后再判别表达式”。当表达式为“真”时,返回重新执行循环体,如此反复,直到表达式为“假”为止,此时循环结束。

    break:用于循环语句和switch语句。其作用是跳出整个循环,提前结束。

    continue:用于循环语句。作用是跳出本次循环,执行下一次循环。

    判断素数的方法

    include<stdio.h>

    include<math.h>

    void main()
    {
    int m,i,k;
    printf("请输入一个整数:");
    scanf("%d",&m);
    k=(int)sqrt(m);
    for(i=2;i<=k;i++)
    if(m%i==0)
    break;
    if(i>k)
    printf("%d 是素数。 ",m);
    else
    printf("%d 不是素数。 ",m);
    }

    其他

    -找错时合理运用printf()
    -嵌套循环:多个for或while语句的配合使用,要注意控制循环的次数,防止死循环。
    -写伪代码

    1.2学习体会

    1.内容难度逐渐提高,并且作业量越来越大了
    2.做pta是有的代码需要借鉴才可以写出来
    3.代码量大概800多行

    2.PTA实验作业

    2.1求幂级数展开部分的和

    2.1.1伪代码

    定义分母为amass,定义总和为sum,定义每一项为single
    while(最后一项的绝对值大于等于0.00001)
    {
    amass=1;每次循环将amass重新还原为1
    for (i = 1; i <= k; i++)
    {
    amass = amass * i;
    }
    single = pow(x, k) / amass;
    sum = sum + single;
    k++;
    }
    输出sum的值

    2.1.2代码截图

    2.1.3造测试数据

    输入 输出 说明
    1.2 3.3201 普通数据
    2.1 8.1662 普通数据
    0 1.0000 输入为0
    5 148.4132 输入为5
    3.8 44.7012 普通数据

    2.1.4pta提交列表及说明


    1.编译错误:每次循环之前没有将amass(分母)初始化为1
    2.部分正确:将sum = sum + single放在了for之前,导致结果少加了最后一项
    3.全部正确

    2.2梅森数

    2.2.1伪代码

    定义整数n,定义结果数result
    if(n==1)如果n=1,则没有满足条件的梅森数
    printf("None");输出None

    for (j = 1;j <= n;j++)
    {
    	result = pow(2, j) - 1;将2的j次方减一的值赋给result
    	for (i = 2;i <= result/2+1;i++)
    	{
    		if (result%i == 0)判断result是否能被1~result/2+1的数整除,如果可以就不是梅森数
    			break;
    		if (i > result / 2)
    		{
    			printf("%d
    ", result);输出满足条件的梅森数,并换行
    		}
    	}
    

    2.2.2代码截图

    2.2.3造测试数据

    输入 输出 说明
    1 None 输入最小值1
    2 3 普通数据
    4 3 7 普通数据
    3 3 7 普通数据

    2.2.4pta提交列表及说明


    1.部分正确:本次语句为i<=result,结果重复输出了多余的数
    2.部分正确:本次将语句改为i<result/2,结果发现n=2时,程序无法正常运行,于是改为了i<=result/2+1
    3.全部正确

    2.3换硬币

    2.3.1伪代码

    定义各个硬币的最大数量分别为max5,max2,定义各个硬币的数量count5,count2,count1,定义换法数量为count
    max5 = x / 5;得出所能换的5分硬币的最大数量
    for (count5 = max5;count5 > 0;count5--)将5分最大数量赋给count5,在大于0的前提下递减
    {
    max2 = (x - 5 * count5) / 2;算出在扣除了5分硬币的金额后,2分硬币所能换的最大数量
    for (count2 = max2;count2 > 0;count2--)将2分最大数量赋给count2,在大于0的基础上递减
    {
    count1 = x - 5 * count5 - 2 * count2;算出相应的1分硬币的数量
    if (count1 > 0)满足1分硬币数量大于0
    {
    printf("fen5:%d, fen2:%d, fen1:%d, total:%d ", count5, count2, count1, count1 + count2 + count5);输出各值
    count++;计算换发个数
    }
    }
    }
    输出换发个数

    2.3.2代码截图

    2.3.3造测试数据

    输入 输出 说明
    5 count=0 当输入小于8的数
    13 (太长以至于无法展示) 普通数据
    8 fen5:1, fen2:1, fen1:1, total:3 count=1 普通数据

    2.3.4pta提交列表及说明


    1.编译错误:从vs复制过来时漏掉了大括号
    2.答案错误:count5与count1输出时写反了
    3.全部正确

    3.代码互评

    同学代码

    我的代码

    1.同学的代码是先将n以内的素数个数求出来,然后以这个个数减去k的值,得出的值可能为负,以应对素数个数不足k个的情况,后面再从大到小输出素数。而我是直接判断,进而输出。
    2.我们的输出方式不同,但本质上并无差别。
    3.看上去我的代码量比较短,但没有高下之分,该同学的想法也比较独特,拓宽了我的思维。

  • 相关阅读:
    ES6新特性:使用export和import实现模块化
    常见Linux/Unix开发辅助命令什锦
    Spark高速上手之交互式分析
    Lua中的元表与元方法
    explicit 构造函数
    【排序】基数排序(计数排序、桶排序)
    拓展训练—心得体会
    poj3411--Paid Roads(bfs+状压)
    点击单选button后的文字就可以选定相应单选button
    hdu 2349 最小生成树
  • 原文地址:https://www.cnblogs.com/xingyufen/p/11707770.html
Copyright © 2011-2022 走看看