zoukankan      html  css  js  c++  java
  • C语言I博客作业09

    这个作业属于哪个课程 C语言程序设计II
    这个作业要求在哪里 C语言I博客作业09
    我在这个课程的目标是 熟悉代码的编程,设计出一个小程序,能够正常运行并且能够拥有一定用户
    这个作业在哪个地方具体方面帮助我实现目标 熟悉了break、continue的使用 , 熟悉使用循环的嵌套解决问题
    参考文献 C语言课本 百度百科

    1.PTA实验作业

    1.题目名(打印九九口诀表)

    下面是一个完整的下三角九九口诀表:

    1*1=1   
    1*2=2   2*2=4   
    1*3=3   2*3=6   3*3=9   
    1*4=4   2*4=8   3*4=12  4*4=16  
    1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
    1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
    1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
    1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
    1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81 
    

    本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。
    输入格式:
    输入在一行中给出一个正整数N(1≤N≤9)。
    输出格式:
    输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
    输入样例:
    4
    输出样例:

    1*1=1   
    1*2=2   2*2=4   
    1*3=3   2*3=6   3*3=9   
    1*4=4   2*4=8   3*4=12  4*4=16  
    

    1.1.1数据处理

    数据表达:用了整型变量i表示行,j表示列,N表示数字
    数据处理:用到了for循环的嵌套,主要循环体结构是 (i=1;i<=N;i++) (j=1;j<=i;j++),%-4d表示等号右边数字占4位

    伪代码:
    #include<stdio.h> 
    int main() 
    {
        int i, j, N = 1;      //定义三个整型变量
        scanf ("%d",&N);
        for(i=1;i<=N;i++)     //行累加
        {
           for(j=1;j<=i;j++)    //列累加
           {
            printf ("%d*%d=%-4d",j,i,j*i);    //此处注意%-4d表示的是等号右边数字占4位
           }
        printf ("
    ");  //换行
        }  
        return 0;  
     }
    
    

    1.1.2实验截图代码

    1.1.3造测试数据

    输入数据 输出数据 说明
    4 1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 1x4=4 2x4=8 3x4=12 4x4=16 此处用符号x代替了符号*,真实输出时是符号星字符
    1 1x1 此处用符号x代替了符号*,真实输出时是符号星字符
    2 1x1=1 1x2=2 此处用符号x代替了符号*,真实输出时是符号星字符

    1.1.4 PTA提交列表及说明

    说明:关于这道题目,我做了很长时间,一直在做这道题,直到把这道题目做出来。我主要出现的错误就是格式错误,第一次,我发现我的行(i)和列(j)的输出搞反了;更正之后发现,依旧是格式错误,然后我找了大概一个小时没找出来下一个问题在哪里,然后,我询问了大佬,知道了终极错误是printf那里的空格原因,然后我增增减减的尝试了很多地方的空格,还是格式错误,我又尝试了新的方法写,再for里面镶嵌if,但是还是错误,最终,我询问了另外一位大佬,发现她的代码和我的只有一个地方不同,在空格的处理方面,她用的是 (%-4d)来表示四个空格,而我当初是直接在%d的后面打了四个空格,发现这一点后,我上网查询了相关资料,弄懂了此空格的表达方式。

    1.2题目名 (换硬币)

    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
    输入格式:
    输入在一行中给出待换的零钱数额x∈(8,100)。
    输出格式:
    要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
    输入样例:

    13
    

    输出样例:

    fen5:2, fen2:1, fen1:1, total:4
    fen5:1, fen2:3, fen1:2, total:6
    fen5:1, fen2:2, fen1:4, total:7
    fen5:1, fen2:1, fen1:6, total:8
    count = 4
    

    1.2.1数据处理

    数据表达:使用了六个整型变量,其中有不同数额硬币的表示,总钱数的表示,总换法的表示
    数据处理:进行了for循环的嵌套,使用了if语句

    伪代码:
    #include<stdio.h>
    int main()
    {
    	int fen5, fen2, fen1, x, total, count=0;  //定义六个整型变量	
            scanf("%d", &x);
    	for(fen5=x/5; fen5>0; fen5--)   //五分硬币的个数进行循环计数
    	{
    	    for(fen2=x/2; fen2>0; fen2--)   //两分硬币的个数进行循环计数
    	    {
    	        for(fen1=x; fen1>0; fen1--)   //一分硬币的个数进行循环计数
    	        {
    	            if(fen5*5+fen2*2+fen1==x)  //当硬币总钱数等于输入值时输出下列数据
    	            {	
    	                total=fen5+fen2+fen1;   //表示硬币的总个数
    	                printf("fen5:%d, fen2:%d, fen1:%d, total:%d
    ", fen5, fen2, fen1, total);	//按照题目规定形式输出
    	                count++;   //不同硬币的组成方法的换法个数
    	            }
    	        }
    	    } 
    	} 
    	printf("count = %d", count);	//输出个数
    	return 0;
    }
    

    1.2.2实验截图代码

    1.2.3造测试数据

    输入数据 输出数据 说明
    8 fen5:1, fen2:1, fen1:1, total:3 count =1 1个五分的硬币,1个两分的硬币,1个一分的硬币,总共1个硬币,一种换法
    12 fen5:1, fen2:3, fen1:1, total:5 fen5:1, fen2:2, fen1:3, total:6 fen5:1, fen2:1, fen1:5, total:7 count = 3 1个五分的硬币3个两分的硬币1个一分的硬币总共5个硬币,1个五分的硬币2个两分的硬币3个一分的硬币总共6个硬币,1个五分的硬币1个两分的硬币5个一分的硬币总共7个硬币,三种换法

    1.1.4 PTA提交列表及说明

    说明:Q1:运行超时
    A1:循环次数太多,陷入了死循环,代码书写不正确
    Q2:答案错误
    A2:重写代码时写漏了total,多次检查才发现

    1.3题目名 (跟奥巴马一起画方块)

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
    输入格式:
    输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
    输出格式:
    输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
    输入样例:

    10 a
    

    输出样例:

    aaaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaa
    

    1.3.1数据处理

    数据表达:用到了三个整型变量N表示正方形边长,i表示行,j表示列,用到了字符型变量a
    数据处理:用到了for循环的嵌套,用到了if-else语句

    伪代码:
    #include<stdio.h>
    int main ()
    {
    	int N,i,j;                         //定义三个整型变量
    	char a;                            //定义字符型变量a
    	scanf ("%d %c",&N,&a);
    	if (N%2==0)                       //条件语句,当N可以整除2时进行下面的循环
    	for(i=1;i<=N/2;i++)              //执行for循环i表示行
    	{
    		for (j=1;j<=N;j++)      //执行for循环j表示列
    		{
    			printf ("%c",a);   //输出a的相关矩形
    		}
    		printf ("
    ");           //表示换行
    	}
    	else                          //当N不能整除2时执行下列循环
    	for(i=1;i<=(N+1)/2;i++)        //此处要注意是i<=(N+1)/2  余数四舍五入
    	{
    		for (j=1;j<=N;j++)
    		{
    			printf ("%c",a);
    		}
    		printf ("
    ");
    	}
    	return 0;
    }
    
    

    1.3.2实验截图代码

    1.3.3造测试数据

    输入数据 输出数据 说明
    4 a aaaa aaaa 这其实是一个边长为4a宽为2a的矩形
    6 a aaaaaa aaaaaa aaaaaa 这其实是一个边长为6a宽为3a的矩形

    1.3.4PTA提交列表及说明

    说明:Q1:编译错误 输出超时
    A1:把行和列的输出方式弄反了
    Q2:答案错误
    A2:没有处理好有余数和能整除时的表达式

    2代码互评

    1.同学代码截图 (吴佳柳)

    2.自己代码截图

    说明:该同学的代码的关键时判断两数的乘积是否大于等于10,然后再考虑空格的位置;而我的代码是从整体出发,在最后整体输出时直接输出四个空格位置;我的代码更加简洁。

    3.同学代码截图 (吴佳柳)

    4.自己代码截图

    说明:我是分了两种情况进行循环,当能整除和有余数时;而该同学是从整体出发,直接考虑了有无余数时四舍五入的情况,用到了计数,很显然该同学的代码更加简洁更加优秀,该同学的逻辑思维很强,我还需要这位同学多多学习。

    3.学习总结

    3.1学习进度条

    周/日期 这周所花的时间 代码行 学到的知识简介 目前比较迷惑的问题
    4/2019.9.21 7个小时 50 编程“hello word” 初次接触对代码很迷惘,不知道表示的是什么意思
    5/2019.10.2 8个小时 100 安装gcc编译器,将代码建在自己的文件里 如何安装的程序不明白
    7/2019.10.11 10个小时 200 三种表达式,printf流程和scanf流程,if-else语句 scanf流程还是不太明白
    8/2019.10.17 20个小时 350 使用for循环语句数的循环程序设计 for循环语句的结构还是有点困惑
    9/2019.10.25 25个小时 550 使用while语句循环,自定义函数,参数 自定义函数还是·不太明白
    10/2019.11.1 20个小时 700 熟悉多分支结构、字符型数据类型和逻辑运算符 关于字符型的代码还是不太明白
    11/2019.11.7 15个小时 1000 熟悉多分支结构switch语句的使用 对swith语句的使用还有一定的困惑
    12/2019.11.15 14个小时 1200 熟悉使用while和do-while结构解决问题 对while语句的使用还有一定的疑惑
    13/2019.11.21 15个小时 1450 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 对continue的使用不够熟练,还有很大疑惑

    3.2 累积代码行和博客字数

    3.3 学习内容总结和感悟

    3.3.1 学习内容总结

    请用思维导图的形式将到目前为止所学的内容进行整理

    3.3.2学习体会

    1.这周主要学习了break语句和continue语句,但是我对这两个语句还存在一定疑惑,(什么时候使用break语句还是continue语句,还不是很会灵活使用这两个语句)(之前上课听的时候感觉听懂了,但过后感觉迷糊了,现在通过查询资料,我已经弄懂了两者的区别//continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环//)还需要对其多加练习
    2.代码难度越来越大了,学习到的知识点也越来越多了,每写完一个代码,弄懂一个知识点,都会感到很开心,即使熬夜到很晚,感觉自己越来越充实了
    3.要向各位大佬们多多学习,我写作业的速度还需要加快,自己还需要更加努力,加油加油加油,冲冲冲

  • 相关阅读:
    2019年4月18日 查询功能 2
    bzoj3601
    bzoj2693
    bzoj2440
    bzoj3529
    bzoj2820
    BZOJ2813
    BZOJ4515
    AtCoder Grand Contest 001 题解
    BZOJ2757
  • 原文地址:https://www.cnblogs.com/lzy2000----/p/11896926.html
Copyright © 2011-2022 走看看