zoukankan      html  css  js  c++  java
  • 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.可以督促学习
    缺点:经验不足

  • 相关阅读:
    mongodb 逻辑操作符
    mongodb 操作符
    js 对象拷贝的三种方法,深拷贝函数。
    html语义化
    移动端meta
    onmouseOver、onmouseOut 和 onmouseEnter、onmouseLeave的区别
    javascript阻止事件冒泡和浏览器的默认行为
    js中return的用法
    Ubuntu联网设置
    视窗宽高offset、client、scroll
  • 原文地址:https://www.cnblogs.com/H-Alice/p/10584213.html
Copyright © 2011-2022 走看看