C语言第三次博客作业---单层循环结构

一、PTA实验作业

题目1.

1.实验代码

    int N,i;//定义N为查询的用户数,i为循环变量
    float height,height1;//定义height为输入身高,height1为其情侣身高
    char sex;//定义sex表示性别
    scanf("%d",&N);
    for(i=1;i<=N;i++){ //循环执行N次
        scanf(" %c%f",&sex,&height);
        switch(sex){
        case 'F':height1 = 1.09*height;//F表示女性
            break;
        case 'M':height1 = height/1.09;//M表示男性
            break;
        }
        printf("%.2f\n",height1);//输出其情侣身高并保留两位小数 
    }

2.设计思路

  • (1)定义变量N为查询的用户数,i为循环变量,height为输入身高,height1为其情侣身高,sex为性别
  • (2)输入数据N
  • (3)i=1
  • (4)输入数据sex,height
  • (5)如果sex=‘F’,执行height1 = 1.09*height
  • (6)如果sex=‘M’,执行height1 = height/1.09
  • (7)i=i+1
  • (8)重复步骤4,5,6,7,直到i>N
  • (9)输出其情侣身高并保留两位小数

3.本题调试过程碰到问题及解决办法

  • (1)问题:
    ①i赋值错误
    ②输入中未考虑上输入符号前还有一个回车

    1231987-20171102005936138-1549511996.png
    1231987-20171102010155873-694949109.png
    1231987-20171102013148779-1155424220.png
    1231987-20171102013156841-1536721165.png

  • (2)解决方法:
    ①经过调试监视变量,发现i不应该赋值为0,应该使i=1;
    ②参考同学的代码,发现输入时应在%c之前加一个空格,存放回车

4.本题PTA提交列表

1231987-20171101193127388-1034037549.png

题目2.

1.实验代码

    int a,n,s,i,item;//定义整型变量a存放正整数,n存放a的个数,s存放累加和,item存放第i项的值 
    s=0;
    item=0;
    scanf("%d%d",&a,&n);//输入a,n 
    for(i=1;i<=n;i++){
        item=a+item*10;//计算第i项的值 
        s=s+item;//累加每一项 
    }
    printf("s = %d",s); 

2.设计思路

  • (1)定义整型变量a存放正整数,n存放a的个数,s存放累加和,item存放第i项的值
  • (2)赋初值s=0,item=0
  • (3)输入a,n
  • (4)i=1
  • (5)item=a+item*10;
    s=s+item;
  • (6)重复步骤5,直到i>n
  • (7)输出s 的值

3.本题调试过程碰到问题及解决办法

  • (1)问题: 本题未遇见问题(以下展示利用调试工具监视变量的截图过程)
    1231987-20171101195813529-1963557933.png

4.本题PTA提交列表

1231987-20171101194156201-1379768767.png

题目3

1.实验代码

    int i,n,number,min;//定义变量n为整数个数,number为输入值,min为最小值 
    scanf("%d",&n);
    scanf("%d",&number);
    min=number;//假设第一个成绩为最小值 
    
    for(i=1;i<=n-1;i++){
        scanf("%d",&number); 
        
        if(min>number)//如果输入的整数比最小值小 
        min=number;//再假设该成绩为最小值 
    }
    printf("min = %d",min);//输出最小值 

2.设计思路

  • (1)定义变量n为整数个数,number为输入值,min为最小值
  • (2)输入数据n,number
  • (3)假设第一个成绩为最小值 ,即min=number
  • (4)i=i+1
  • (5)再次输入成绩number
  • (6)如果min>number,则再假设该成绩为最小值,即赋值min=number
  • (7)重复步骤5,6,直到i>n-1
  • (8)按照“min = 最小值”的格式输出n个整数中的最小值。

3.本题调试过程碰到问题及解决办法

  • (1)问题:
    ①第一次,假设第一个成绩为最小值 ,却没有输入第一个成绩的值,导致错误
    ②第一次输入代码显示“n=1时,最小值为正”这一项错误,于是添加了一个if语句,发现依旧是错的
    ③未考虑到先输入过一个值,因此循环中的i应该是满足i<=n-1

    1231987-20171102133157654-724142244.jpg
    1231987-20171102133202763-468663133.jpg

  • (2)解决方法:
    ①经过检测变量,第一次赋值min=33是错的,因此发现是因为没有先输入一个number赋值给min,于是在赋值前加了输入number语句,且把i条件改为i<=n-1

4.本题PTA提交列表

1231987-20171101195139482-465532198.png

题目4

1.实验代码

    int mynumber,yournumber,count,N,i;//定义变量mynumber存放随机数,yournumber存放猜测的数,count存放猜测数次,N存放猜测的最大次数 
    count=0;//给count赋初值为0 
    scanf("%d%d",&mynumber,&N);//输入随机数和猜测的最大次数 
    for(i=1;i<=N;i++){
        scanf("%d",&yournumber);//输入猜测的数 
        count++; //累加猜测次数 
        if(yournumber<0){//如果猜测的数小于0 
            printf("Game Over\n");
            return 0;
        }
        else {//如果猜测的数大等于0时 
        if(yournumber==mynumber){
            if(count==1)//如果猜测次数为1次 
                printf("Bingo!");
            if(count>1&&count<=3)//如果猜测次数小于3 
                printf("Lucky You!");
            if(count>3&&count<=N)//如果猜测次数大于3小等于N 
                printf("Good Guess!");break;
            
            }
        if(yournumber>mynumber){ 
            printf("Too big\n");
        }
        if(yournumber<mynumber){
            printf("Too small\n");
        }
        } 
    } 
    if(yournumber!=mynumber) 
        printf("Game Over");

2.设计思路

  • (1)定义变量mynumber存放随机数,yournumber存放猜测的数,count存放猜测数次,N存放猜测的最大次数
  • (2)给count赋初值为0
  • (3)输入mynumber,N
  • (4)i=1
  • (5)重复步骤6~16,直到i>N
  • (6)输入yournumber
  • (7)count++累加猜测次数
  • (8)如果yournumber<0,直接退出,输出Game Over
  • (9)如果yournumber>mynumber,输出Too big
  • (10)如果yournumber<mynumber,输出Too small
  • (11)如果yournumber==mynumber时
  • (12)如果count==1,输出Bingo!
  • (13)如果count>1&&count<=3,输出Lucky You!
  • (14)如果count>3&&count<=N,输出Good Guess!
  • (15)如果yournumber!=mynumber&&count>N,输出Game Over
  • (16)i=i+1

3.本题调试过程碰到问题及解决办法

  • (1)问题:
    ①判断count时写成count=1,最后输出结果为Bingo!
    ②题目未看清,count为4时也应该输出Good Guess!
    ③测评时系统提示“直接退出”一项错误,调式时发现输出两组Game Over。

    1231987-20171102131414185-657627306.jpg
    1231987-20171102131422951-1795105191.jpg
    1231987-20171102131430638-1980079679.jpg

  • (2)解决方法:
    ①count=1改成count==1
    ②重新审题,把count>1&&count<3改为count>1&&count<=3
    ③经同学提示,for循环语句中使用break只能做到退出该循环,不能满足题意,应该把break改成return 0才能满足题意直接退出程序。

4.本题PTA提交列表

1231987-20171102004743591-1224889725.png

二、截图本周题目集的PTA最后排名。

PTA提交列表

1231987-20171102171115998-1331605055.png
1231987-20171102171126826-2047352621.png

PTA排名

1231987-20171102152911685-1684912206.png

三、本周学习总结

1.你学会了什么?

  • 三种循环语句(for,while,do-while)
    ①循环次数已知时,使用for语句
    ②循环条件未知,且循环条件在进入循环时明确,使用while语句
    ③循环条件未知,且循环条件需要在循环体中明确,使用do-while语句(直到型循环)
  • while语句和do-while语句中,如果循环条件一开始就满足,两者结果一样;如果一开始不一样,do-while先执行一次
  • for循环中一旦执行break语句,循环提前结束,不再执行循环体中位于其后的其他语句
  • break结束循环,continue跳过后面语句继续循环,continue只能用于循环
  • 求阶乘的函数为fact( ),例如:i的阶乘调用fact(i)
  • 在做PTA作业时每一题都用到调试工具,多次使用对如何调试找出错误更熟悉

2.本周的内容,你还不会什么?

  • 对新的知识点了解不够透彻,用起来磕磕碰碰。对于while语句和do-while语句用法不熟,PTA中用到的都是for循环,且for循环也用的不到位,导致本次PTA作业做起来很吃力。
  • 循环结构的算法不太会写
  • 对于较复杂的题目会不确定哪些为需要循环的部分,导致程序写不下去
  • 嵌套循环不会使用

3.分支结构上机考试总结。

(1)哪些地方错了,为什么?
  • 分段函数:绝对值调用的函数记错,耽误时间
  • 12-24小时制:题目较复杂,没有先写算法,每次都会漏掉一两个条件没有考虑
  • 计算油费:在用到字符型变量时,纠结要不要用到getchar()和putchar()
(2)后续要怎么找程序错误?
  • 使用调试工具监测变量找错误
  • 在编程过程中加上注释,使程序更直观,容易找出错误点
(3)对自己成绩满意么?不满意的话要怎么改进?
  • 不满意。把做过的题目抽时间再复习一遍重新打一遍代码,每周翻看前几周的博客,寻找以前犯过的错误,以防再次犯错,并再次复习巩固博客中的小结与问题。做题目时使用调试工具监测变量寻找错误点,减少耽误在找问题上的时间。

转载于:https://www.cnblogs.com/smtwula/p/7768149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值