2019春第五周作业
这个作业属于哪个课程 | C语言程序设计Ⅱ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2824 |
我在这个课程的目标是 | 能完全搞懂字符数组以及其用法,可以靠自己完成一些简单的或一些较复杂的程序编写 |
这个作业在哪个具体方面帮助我实现目标 | 可以更深刻地接触字符串,还学会了字符数组用法,以及一些课外暂时还未接触的函数、用法等. |
参考文献 | C语言程序设计(第3版); |
一、本周完成的作业
题目1.统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
1)、实验代码
#include<stdio.h>
int main()
{
int flag=0;
int count=0;
char ch;
while((ch=getchar())!='\n')
{
if(ch!=' '&&flag==0)
{
count++;
flag=1;
}
else if(ch==' ')
{
flag=0;
}
}
printf("%d\n",count);
return 0;
}
2)、设计思路
3)、本题调试过程碰到的问题及解决方法
无。
4)、运行结果图
题目2. 英文单词排序
在开始这道题前,我先说一下从这道题中学到的之前不知道的相关知识,1.char[20] [20]
:char str[20][20]相当于20个char str[20],只是把20个字符数组放在连续的内存当中,str[0][20],str[1][20]......str[19][20]. 2.#include<string>
:在C++中用 #include <string>
来导入标准库中的字符串类和相关操作,导入后才能使用string类.3.strcpy(str1,str2)
:字符串复制函数,将字符串2复制到字符串1.4.strlen:计算给定字符串的(unsigned int型)长度,不包括'\0'在内.
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
1)、PTA实验代码
#include <stdio.h>
#include <string.h>
int main()
{
int i,j,n=0;
char str [20] [20],t [20],str1 [20];
while(1)
{
scanf ("%s",str1);
if (str1[0]=='#') {
break;
}
else {
strcpy (str[n],str1);
n++;
}
}
for (i=0; i<n-1; i++)
for(j=0;j<n-1-i;j++) {
if (strlen (str [j] ) > strlen (str [j+1] )) {
strcpy (t,str [j] );
strcpy (str [j] ,str [j+1] );
strcpy (str [j+1] ,t);
}
}
for (i=0; i<n; i++) {
printf("%s ",str [i] );
}
return 0;
}
2)、设计思路
3)、本题调试过程碰到的问题及解决方法
如图,在多次尝试之后,终于有部分正确,此时指出问题是“ 最大数量,最长最短单词,逆序”,在这里出错可能是因为忽略了这种情况,然后就考虑当输入的是该种状况时该如何判断?自己的代码中是否可以判断?应该在哪里添加点东西可以包括改种情况?经过检查后,自己看不出应该怎么改,但我觉得问题是出在for循环结构那里。我就看了博客园里其他人的做法,发现跟自己的没什么出入,在for循环那里有不一样。仔细看过一遍后发现确实是自己少了一层。一开始我看了之后发现就算少了那一层也没什么影响吧,至少我认为表达的意思差不多吧。但我在自己的代码基础上加上那一层后,运行成功。虽然运行成功,但原理还是不晓得。我分别调试了一下两种代码,发现之前我的代码可以是可以,只是在一般情况时,若加上二层循环会更全面。
4)、运行结果图
博客园修改后
1)、实验代码
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
int i,j,n=0;
char str [20] [20],t [20],str1 [20];
if ((fp = fopen ("C:\\songguanhao.txt","r+")) == NULL) {
printf ("File open error!\n");
}
while(1)
{
fscanf (fp,"%s",str1);
if (str1[0]=='-') {
break;
}
else {
strcpy (str[n],str1);
n++;
}
}
for (i=0; i<n-1; i++)
for(j=0;j<n-1-i;j++) {
if (strlen (str [j] ) > strlen (str [j+1] )) {
strcpy (t,str [j] );
strcpy (str [j] ,str [j+1] );
strcpy (str [j+1] ,t);
}
}
fprintf(fp,"\n");
for (i=0; i<n; i++) {
fprintf(fp,"%s ",str [i] );
}
if (fclose (fp)) {
printf ("Can not close the file! \n" );
}
return 0;
}
3)、本题调试过程碰到的问题及解决方法
无
4)、运行结果图
题目3.预习题
二、学习进度条
周/日期 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/2-3/8 | 三天六小时 | 50 | 1、定义、运用文件指针;2、如何打开、关闭文件3、如何读出指定文件中的数据;4、如何向指定文件中写入数据; | 字符、字符串有什么区别?二者输入、输出有没有很大不同?什么才算字符串?什么算字符?在文件中二者有没有差别? |
3/9-3/15 | 四天三小时 | 180 | 1、运用二维数组解决问题,矩阵的判断;2、对一组数的所有子数组求和 | 如何在输出时利用数组的性质 |
3/16-3/22 | 三天八小时 | 210 | 1、二维数组加深理解,二维数组与矩阵;2、选择排序法解决问题;3、二分查找法 | 二分查找法这周没练习,只是看看书上例题大致懂了,不知道真正应用时能否掌握。 |
3/23-3/29 | 三天两小时 | 120 | 1、判断回;文2、字符数组的概念及其简单运用;3、一些简单的与字符数组相关的暂时没接触补充知识,一些函数,用法等。 | 在作业运用文件指针时,一开始总是出现从文件里输不出来结果,打印不出来,后来发现可能与自己输入时格式未搞好,本来不应该出现的空格出现了,导致打印不出来结果。文件指针还不是很熟练 |
三、学习感悟
本周作业中,用到了一些还没学到的与本节有关的小知识,个人感觉很有成就。我认为这就说明有时候还是应该多了解类似标准库函数的一些用法,能在编写代码时更简便,简洁,清晰。
结对编程感想
结对编程已将进行两周了,我认为结对编程确实有很大的优点。虽然我并没有带机子过去(哈哈,电脑着实不行),但在整个晚自习中,我也没有空闲一下,总会有同学来主动讨论,包括自己的结对队友,也包括其他同学。也许这样一来自己思考的就不足够了,但既然是结对编程,就是要一起讨论的。感觉,每周能有一个晚自习来讨论,作业就没有那么困难了。