C语言I作业10

第4章 循环结构 4.5 综合介绍循环结构的程序设计,涉及到多个典型算法。要求学生能够根据实际情况,选择合适的算法、合理的循环结构,熟练的编写程序。

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10098
我在这个课程的目标是 综合理解循环结构的程序设计,学习典型算法。
这个作业在那个具体方面帮助我实现目标 选择合适的算法、合理的循环结构,熟练的编写程序
参考文献 C语言程序设计,百度,cncd

1.pta实验作业

1.1 题目名1

1.1.1数据处理
数据表达:整型定义(int)x,i,j,n,p。
数据处理:

开始
输入 整数n
整型定义 x,i,j,n,p←
for i←2 to n   i←i+1
    x←2^i-1
    for j←2 to √x   j←j+1
        if  x除以j的余数==0 跳出循环
    if  j>√x   then
        输出x的值
        p=1
end for
if p==0 then
输出None
结束

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
0 None 没有梅森数
-1 None n小于0
5 3,7,31 有梅森数

1.1.4 PTA提交列表及说明

  • 虽然一次性答案正确,但是开始不明白梅森数是什么,代码中的j<=sqrt(x);if(x%j==0) break;比较难想。

1.2 题目名1

1.2.1数据处理
数据表达:整型定义(int)i,j,k,x,m 定义字符(char)ch
数据处理:

开始
整型定义(int) x,i,j,k;字符(char)ch
输入ch,x
for i←0 to x/2+1   i←i+1
    for j←1 to x/2+1-i  j←j+1
        输出 ' '(空白)
    end for
    输出ch
    if i不等于0 then
       for k←0 to 2*i-1  k←k+1
           输出 ' '(空白)
       end for
       输出ch
    end if
ch←ch+1
输出换行
end for
ch←ch-2
for i←(x+1)/2-1 to 0 i←i-1
    for j←0 to (x+1)/2-i j←j+1
        输出 ' '(空白)
    end for
    输出ch
    if i不等于1 then
        for k=0 to 2*i-3  k←k+1
            输出 ' '(空白)
    输出ch
    end if
    ch←ch-1
    输出换行
结束

1.2.2实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
B3
|   可以打印出空心三角形     |

| 7B | 7 | 字符输入错误 |

1.2.4 PTA提交列表及说明

  • 多出错误,和部分错误都是同一个问题,打印下半部分没有找到输入的值与行数的关系,经过百度解决问题。

2.代码互评
同学代码

#include <stdio.h>
int main()
{
    int i,j,k,x,m;
    char ch;
    scanf("%c %d",&ch,&x);
    m=(x+1)/2;
    for(i=1;i<=m;i++)
    {
        for(k=0;k<m-i;k++)
        {
            printf(" ");
        }
        printf("%c",ch);
		if(i==1)
        {
            ch++;
			printf("\n");
            continue;
        }
        for(j=0;j<2*i-3;j++)
        {
            printf(" ");
        }
		printf("%c",ch++);
        printf("\n");
    }
    ch=ch-2;
	for(i=m-1;i>0;i--)
    {
        for(k=0;k<m-i;k++)
        {
            printf(" ");
        }
        printf("%c",ch);
        if(i==1)
        {
			printf("\n");
            continue;
        }
        for(j=0;j<2*i-3;j++)
        {
            printf(" ");
        }
		printf("%c",ch);
		ch=ch-1;
        printf("\n");
    }
    return 0;
}

我的代码

#include <stdio.h>
int main()
{
	int x,i,j,k,e;
	char ch;
	scanf("%c %d",&ch,&x);
	for(i=0;i<x/2+1;i++)
	{
		for(j=1;j<x/2+1-i;j++)
		{
			printf(" ");
		}
	    printf("%c",ch);
	    if(i!=0)
	    {
	    	for(k=0;k<2*i-1;k++)
	    	{
			  printf(" ");
			} 
		 printf("%c",ch);
		}
	ch=ch+1;
	printf("\n");
	}
    ch=ch-2;
	for(i=(x+1)/2-1;i>0;i--)
    {
    	for(j=0;j<(x+1)/2-i;j++)
    	{
    		printf(" ");
		}
	    printf("%c",ch);
        if(i!=1)
        {
        	for(k=0;k<2*i-3;k++)
        	{
        		printf(" ");
			}
		printf("%c",ch);
		}
	    ch=ch-1;
		printf("\n");
	}
 }
  • 代码较长,其实我认为这两份代码没有优异之分,只是在理解上的思路不同罢了。
  • 该代码想比较,同学的代码比较难理解一点,而我的代码稍微好理解一点。
  • 代码打印出空心字符是最难的,而最重要的是找到多层循环之间的关系,比如外循环控制的是行数,内循环则是打印出空心,字符,前排的空白。

3.学习总结
思维导图

3.1 学习进度条

这周所花的时间 代码行 学到的知识点简介
一周 4个小时 50行 简单的打印字句
二周 5个小时 85行 提问的智慧
三周 12小时 132行 if-else语句的使用,基本数字的定义,分段函数的计算
四周 6个小时 97行 for循环语句的使用
五周 6个小时 190行 简单函数的定义和调用,while语句,break终止语句
六周 6个小时 260行 镶嵌型的for,if-else语句,逻辑运算,字节符的函数表达,switch语句的使用
七周 6个小时 300行 简单的数组储存问题,冒泡排序
八周 6个小时 310行 简单的结构体
九周 4个小时 300行 break、continue的使用
十周 6个小时 230行 综合for循环的运用
  • 该解决的问题
  • [完成] 冒泡排序

3.2 累积代码行和博客字数

3.3 学习内容总结和感悟
3.3.1 学习内容总结
多数有范围,知道循环次数的for循环,大多用于循环的镶嵌。

3.3.2 学习体会

  • 周四区了程序大赛,虽然发现ACM的题目看不懂,但是有些题目有一点点思路却无从下笔。
  • 发现其实做不做得出题目是一种可以通过熟练提升的一种技能,而编程题目却不是这样,它要的的思路,有了思路才有解题的能力。
  • 每周给自己一个笑脸!😄虽然今天团建但是作业也不能马虎啊!!
posted @ 2019-11-29 20:05  kame呦呦  阅读(212)  评论(3编辑  收藏  举报