2019春季第五周作业

问题 回答
这个作业属于那个课程 C语言程序设计
这个作业要求在哪里 第五周作业
我在这个课程的目标是 学会使用字符串
这个作业在哪个具体方面帮助我实现目标 字符串的输入输出
参考文献 C语言程序设计

7-1 统计一行文本的单词个数 (15 分)

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

1)实验代码

#include<stdio.h>
int main(void)
{
	int count,i;
	char str[1000];
	i=0;
	while((str[i]=getchar())!='
'){
		i++;
	}
	str[i]='';
	if(str[0]==' '&&str[i-1]==' '){
		count=-1;
	    for(i=0;str[i]!='';i++){
		    if(str[i]==' '&&str[i+1]!=' '){
			   count++;
		    }
	    }
	    printf("%d",count);
	}
	if(str[0]!=' '&&str[i-1]==' '){
		count=0;
	    for(i=0;str[i]!='';i++){
		    if(str[i]==' '&&str[i+1]!=' '){
			   count++;
		    }
    	}
    	printf("%d",count);
	}
	if(str[0]!=' '&&str[i-1]!=' '){
		count=1;
	    for(i=0;str[i]!='';i++){
		    if(str[i]==' '&&str[i+1]!=' '){
			   count++;
		    }
    	}
    	printf("%d",count);
	}
	if(str[0]==' '&&str[i-1]!=' '){
		count=0;
	    for(i=0;str[i]!='';i++){
		    if(str[i]==' '&&str[i+1]!=' '){
			   count++;
		    }
    	}
    	printf("%d",count);
	}
	return 0;
}

2)流程图

3)本题调试过程碰到的问题及解决办法

问题:不知道要把数组设多大,还有就是思路不完整,考虑的情况不完整,没有考虑空格的位置
解决办法:尝试把数组写大,100,1000,就对了,还有思路是根据那个测试点修改了的

4)运行结果截图

5)评价

就是还是每次考虑的不够全面,总是漏掉一些情况,所以以后还是要注意思考,不要直接就打代码
用时:45分钟

7-1 英文单词排序

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:

输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple

输出样例:

red blue green yellow purple

老师要求

1)通过以自己名字命名的文件输入英文单词
2)英文单词输入的结束标记为你学号最后一位数+37所对应的ASCII字符。(例如:你的学号最后一位为9,则结束标记为9+37=46所对应的ASCII字符“.”
3)在不删除原有内容的情况下,将排序后的单词输出到文件。

1)实验代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
	FILE * fp;
	int n,i,j,min,k,temp,a[20];
	char str[20][10],t[10];
	if((fp=fopen("d:\黄艳菊.txt","r+"))==NULL){
		printf("File open error!
");
		exit(0);
	}
	i=0; 
	for(i=0;i<20;i++){
		fscanf(fp,"%s
",str[i]);
		a[i]=strlen(str[i]);
		if(str[i][0]=='.'){
			break;
		}
	}
	for(k=0;k<i;k++){
	min=k; 
	    for(j=k+1;j<i;j++){
			if(a[j]<a[min]){
				min=j;
			}
		}
		temp=a[min];
		a[min]=a[k];
		a[k]=temp;
		strcpy(t,str[min]);
		strcpy(str[min],str[k]);
		strcpy(str[k],t);
	}
	for(n=0;n<i;n++){
		fprintf(fp,"%s ",str[n]);
		printf("%s ",str[n]);
	}
	if(fclose(fp)){
		printf("Can not close the file!
");
		exit(0);
	}
	return 0;
}

2)流程图

3)本题调试过程碰到的问题及解决办法

问题:忘记注意格式,还有就是对于字符串内的一些函数不知道,一开始不知道在输入的时候怎么跳出循环
解决办法:运行的时候根据结果进行修改,对于一些字符函数我是上网找了#include<string.h>下包含哪些函数的。

4)运行结果截图

5)评价

就是还是每次考虑的不够全面,或是总是忘记什么,还是应该先了解字符串在开始做题,不然会有很多疑问的
用时:3个小时

挑战作业:

继续挑战第二周的挑战作业:返回整数数组中最大子数组的和,本周,我们要求二维数组的子数组必须是矩形的。

1)实验代码

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	FILE * fp;
	int max,num[3][6],a[100],b[100];
	int i,j,k,h,l,m,n,sum,s,x;
	char op;
	if((fp=fopen("d:\Alice.txt","r"))==NULL){
		printf("File open error!
");
		exit(0);
	}
	fscanf(fp,"%d",&h);
	fscanf(fp,"%d",&l);
	for(i=0;i<3;i++){
		for(j=0;j<6;j++){
			fscanf(fp,"%d%c",&num[i][j],&op);
			printf("%d%c",num[i][j],op);
		}
	}
	if(fclose(fp)){
		printf("Can not close the file!
");
		exit(0);
	}
	if((fp=fopen("d:\Alice.txt","a"))==NULL){
		printf("File open error!
");
		exit(0);
	}
	m=0;
	for(i=0;i<h;i++){
		for(k=0;k<l;k++){
		    sum=num[i][k];
		    for(j=k+1;j<l;j++){
			    sum=sum+num[i][j];
			    a[m]=sum;
			    m++;
	    	}
    	}
	}
	x=m/h;
	n=0;
	for(i=0;i<m;i++){
		s=a[i];
		for(j=i+x;j<m;j=j+x){
			s=s+a[j];
			b[n]=s;
			n++;
		}
	}
	max=b[0];
	for(i=0;i<n;i++){
		if(max<=b[i]){
			max=b[i];
		}
	}
	fprintf(fp,"%d",max);
	printf("%d",max);
	if(fclose(fp)){
		printf("Can not close the file!
");
		exit(0);
	}
	return 0;
 }

2)流程图

3)本题调试过程中碰到的问题及解决办法

问题:一开始是想把矩阵看成一个长的一维数组,但是不知道怎么来控制转行的问题,就是对于列组合的时候我思路不清晰。
解决办法:换了一个思路一行一行的组合最后再与相对应的列来组合,进行调试的时候发现列有问题,根据调试进行修改。

4)运行结果截图

5)评价

就是我自己每次思考的时候,总是细节把握不住,总是出现一些变量用错的原因等等的,在这上面花大量的时间进行修改,所以我还是应该每个再仔细一点,就是把内容想清楚总是在调试的时候发现不该错的地方
用时:4个小时

预习作业:

1)预习的主要内容

主要是了解了指针,知道怎么定义指针的一般形式,知道了内存单元的内容和内存单元的地址的区别,定义多个指针变量时,每个指针变量前面都必须加*,和指针的基本运算,还有将指针变量初始化

2)完成情况截图(要求有题目和答案)

3)预习中存在的疑惑(至少写出2条)

1)指针的赋值只是有点感觉,但是也不是特别清楚
2)变量与地址之间的关系
3)什么情况下使用指针不是很清楚

学习进度条

周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑大问题
3/25-3/31 20个小时 240行 定义指针变量和一些基本赋值 什么时候用指针

累计代码行数和博客字数

时间 博客字数 代码行数
第一周 0 80
第二周 100 180
第三周 400 330
第四周 600 480
第五周 900 720

学习感悟

1)学习了有关字符串的函数,大致了解了点字符串,还有预习了有关指针的内容,对指针有了初步了解
2)疑惑:对于指针虽然有了一些了解,但是很笼统,在上课时好好听老师讲

结对编程

过程:就是一起思考该怎么做
优点:1.可以更加的清楚思路,就是对程序更加的熟悉和清楚
2.可以更有效的交流
3.相互学习,传递经验
4.可以督促学习
缺点:经验不足

原文地址:https://www.cnblogs.com/H-Alice/p/10584213.html