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的题目看不懂,但是有些题目有一点点思路却无从下笔。
- 发现其实做不做得出题目是一种可以通过熟练提升的一种技能,而编程题目却不是这样,它要的的思路,有了思路才有解题的能力。
- 每周给自己一个笑脸!😄虽然今天团建但是作业也不能马虎啊!!