第五周总结

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())!='
')
	{
		if(ch!=' '&&flag==0)
		{
			count++;
			flag=1;
		}
		else if(ch==' ')
		{
			flag=0;
		}
	}
	printf("%d
",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型)长度,不包括''在内.

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过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!
");
	}
    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,"
");
    for (i=0; i<n; i++) {
        fprintf(fp,"%s ",str [i] );
    }
    if (fclose (fp)) {
		printf ("Can not close the file! 
" );
	}
	
    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、一些简单的与字符数组相关的暂时没接触补充知识,一些函数,用法等。 在作业运用文件指针时,一开始总是出现从文件里输不出来结果,打印不出来,后来发现可能与自己输入时格式未搞好,本来不应该出现的空格出现了,导致打印不出来结果。文件指针还不是很熟练

三、学习感悟

本周作业中,用到了一些还没学到的与本节有关的小知识,个人感觉很有成就。我认为这就说明有时候还是应该多了解类似标准库函数的一些用法,能在编写代码时更简便,简洁,清晰。

结对编程感想

结对编程已将进行两周了,我认为结对编程确实有很大的优点。虽然我并没有带机子过去(哈哈,电脑着实不行),但在整个晚自习中,我也没有空闲一下,总会有同学来主动讨论,包括自己的结对队友,也包括其他同学。也许这样一来自己思考的就不足够了,但既然是结对编程,就是要一起讨论的。感觉,每周能有一个晚自习来讨论,作业就没有那么困难了。

原文地址:https://www.cnblogs.com/songguanhao/p/10605808.html