2019春季学期第五周作业
A | Q |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | 2019春第五周作业 |
我在这个课程的目标是 | 尽可能多的学习与计算机科学技术相关的知识,为日后的发展打下基础 |
这个作业在那个具体方面帮助我实现目标 | 了解并大致掌握了数组的简单编程及应用,预习了文件和指针的基础知识和简单应用 |
参考文献 | C语言chap7和C语言chap12 |
一、本周完成的作业
题目1.7-1 统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
1).实验代码
#include<stdio.h>
int main()
{
char a[1001];
gets(a);
int c=0;
int i=0;
while(a[i]==' ')
i++;
while(a[i]!='\0')
{
if(a[i]!=' ')
{
c++;
while(a[i]!=' ')
{
if(a[i]=='\0')
break;
i++;
}
}
else
{
while(a[i]==' ' )
i++;
}
}
printf("%d\n",c);
return 0;
}
2) .设计思路
mermaid
flowchat
st=>start: 定义相关变量,利用gets迅速输入数组
op=>operation: 利用while的嵌套来进行单词个数的统计
cond=>condition: a[i]!=" "?
op1=>operation: c++,并且利用while循环至a[i]为空格
op2=>operation: 利用while循环至a[i]为字母
e=>end: 跳出外围while循环输出单词个数
st->op->cond
cond(yes)->op1->e
cond(no)->op2->e
3).本题调试过程碰到问题及解决办法
问题:在嵌套的第二个while语句中没有加入重要的 if(a[i]=='\0') 就直接跳出小循环了,导致错误。
解决方法:在书上网上查找相关类似例题,查找到了我的问题,改正后提交正确。
4).运行结果截图
题目2.7-1 英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。1)通过以自己名字命名的文件输入英文单词,(2)英文单词输入的结束标记为你学号最后一位数+37所对应的ASCII字符。(例如:你的学号最后一位为9,则结束标记为9+37=46所对应的ASCII字符“.”)(3)在不删除原有内容的情况下,将排序后的单词输出到文件。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
.
输出样例:
red blue green yellow purple
1).实验代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
FILE * fp;
if((fp=fopen("d:\\leiweixin.txt","r+"))==NULL){
printf("File open error!\n");
exit(0);
}
char a[21][11] = { '\0' };
char b[11] = { '\0' },c[11];
int i = 0,n;
for(i=0;i<20;i++){
fscanf(fp,"%s\n",a[i]);
if(a[i][0]=='.'){
break;
}
}
a[i][0] = '\0';
int len = i,j = 0;
for (i = 0; i < len; i++) {
for (j = 1; j < len - i; j++) {
if (strlen(a[j - 1]) > strlen(a[j])){
strcpy(b, a[j - 1]);
strcpy(a[j - 1], a[j]);
strcpy(a[j], b);
}
}
}
fprintf(fp,"\n ");
for(n=0;n<i;n++) {
fprintf(fp,"%s ",a[n]);
printf("%s ",a[n]);
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);}
return 0;
}
2) 设计思路
mermaid
flowchat
st=>start: 定义指针头文件,从文本中打开文件
op=>operation: 定义相关变量并且利用一个for循环输入字符串到数组'.'时停止
op1=>operation: 利用一个for循环嵌套和if结构来进行单词长度判断和替换
cond=>condition: if (strlen(a[j - 1]) > strlen(a[j]))?
op2=>operation: 单词替换
op3=>operation: 在文本和程序分别输出文本
e=>end: 关闭文本,结束程序
st->op->op1->cond
cond(yes,right)->op2
cond(no)->op1
op2(right)->op3->e```
3).本题调试过程碰到问题及解决办法
问题:一开始在第一个循环时用for来进行,提交总是不正确,试过很多次,修修改改。
解决方法:看了预习视频和书本的二维数组之后,决定改用while循环来进行,改正后提交正确。
4).运行结果截图
题目3.挑战作业
继续挑战第二周的挑战作业:返回整数数组中最大子数组的和,本周,我们要求二维数组的子数组必须是矩形的。
1).实验代码
题目太难代码错误繁多
2) 设计思路
我有想过将一个二维矩阵转换成一个一维数组,当子矩阵的上下行确定时,把上下行中每一列的数据当作一个单元,确定左右列的过程就是求以列为单元的一维数组的子数组最大和的过程。但是代码却不是那么的好些,想了半天还是无疾而终。后来有想过多重循环来实现,写着写着心态崩了,代码也就没了。
###题目4.第五周预习作业
#### 1).预习的主要内容
选择题目中大多是关于chap8指针的内容,在做题的同时也就多看了下课本相关知识,对于各种知识的定义还是不大熟悉,看了术后了解许多。
#### 2) .完成情况截图
![](https://img2018.cnblogs.com/blog/1585170/201903/1585170-20190329185547821-1616342972.png)
![](https://img2018.cnblogs.com/blog/1585170/201903/1585170-20190329185643288-1358359556.png)
![](https://img2018.cnblogs.com/blog/1585170/201903/1585170-20190329185651872-1197693703.png)
#### 3).预习中存在的疑惑
我对于指针和文件部分还是不大清楚,尽管看了书做了题,但是还是有许多我所不懂得简单的知识点。
###二、学习进度统计和学习感悟
#### 1).学习进度统计
![](https://img2018.cnblogs.com/blog/1585170/201905/1585170-20190530110118468-480522404.png)
####2).学习感悟
**(1)本周你学习哪些内容?有哪些收获?**
本周学习了字符串数组的简单应用,和指针和文件的基础知识和应用。在这次作业中,我学会了利用数组给字符串排序和统计字符个数,和利用文件只是进行文件的读出和写入。
**(2)本周所学内容中你觉得哪些地方是难点?对此你做了哪些措施去客服这些难点?**
第五周的基础作业加强版有点难,挑战作业更加是难的不行。基础作业加强版在观看书本文件类似案例之后,难度也还行,挑战作业是真的难,有点想法思路,但是贫乏的编程能力让我为难。
###三、结对编程的过程及优缺点
**关于结对编程**
本次结对编程地点在寝室,本次结对与熟人搭档,过程还是比较愉快的,结对编程中我们讨论了第五周基础作业中加强版的代码修改问题,双方讨论的气氛还行,对于题目的见解各有不同,这也是我觉得有趣的一点。不过两个人编程还是有点不太习惯。
**结对编程的优缺点**
优点:1.结对编程有益于拓展编程思路;2.结对编程有利于增强与他人合作能力,这种搭档关系可以提升做题的效率;3.结对编程对于双方都是一堂可以学习的实践课。
缺点:这种合作刚开始很不习惯,尤其是如果搭档之间关系不好,容易影响编程,还有如果两个人编程思路差不多,那么结对编程的拓展力也就有限了!