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())!='\n'){
        i++;
    }
    str[i]='\0';
    if(str[0]==' '&&str[i-1]==' '){
        count=-1;
        for(i=0;str[i]!='\0';i++){
            if(str[i]==' '&&str[i+1]!=' '){
               count++;
            }
        }
        printf("%d",count);
    }
    if(str[0]!=' '&&str[i-1]==' '){
        count=0;
        for(i=0;str[i]!='\0';i++){
            if(str[i]==' '&&str[i+1]!=' '){
               count++;
            }
        }
        printf("%d",count);
    }
    if(str[0]!=' '&&str[i-1]!=' '){
        count=1;
        for(i=0;str[i]!='\0';i++){
            if(str[i]==' '&&str[i+1]!=' '){
               count++;
            }
        }
        printf("%d",count);
    }
    if(str[0]==' '&&str[i-1]!=' '){
        count=0;
        for(i=0;str[i]!='\0';i++){
            if(str[i]==' '&&str[i+1]!=' '){
               count++;
            }
        }
        printf("%d",count);
    }
    return 0;
}

2)流程图

1581309-20190323154630920-1350419948.png

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

1581309-20190323155155604-1156676961.png

1581309-20190323155214105-358106726.png

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

4)运行结果截图

1581309-20190323155627745-1864558099.png

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!\n");
        exit(0);
    }
    i=0; 
    for(i=0;i<20;i++){
        fscanf(fp,"%s\n",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!\n");
        exit(0);
    }
    return 0;
}

2)流程图

1581309-20190328145846964-970106783.png

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

1581309-20190328152007615-1048833712.png

1581309-20190328152610290-1455319034.png

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

4)运行结果截图

1581309-20190328152550835-1300053043.png

1581309-20190328152042525-1557451906.png

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!\n");
        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!\n");
        exit(0);
    }
    if((fp=fopen("d:\\Alice.txt","a"))==NULL){
        printf("File open error!\n");
        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!\n");
        exit(0);
    }
    return 0;
 }

2)流程图

1581309-20190328163416011-160035272.png

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

1581309-20190328164304925-1137083356.png

1581309-20190328164322570-1332875486.png

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

4)运行结果截图

1581309-20190328164948745-1931132778.png

5)评价

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

预习作业:

1)预习的主要内容

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

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

1581309-20190328172431385-2003984730.png

1581309-20190328172452180-1443949436.png

1581309-20190328172527006-175223410.png

1581309-20190328172552912-1009359908.png

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

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

学习进度条

周/日期这周所花的时间代码行数学到的知识点简介目前比较迷惑大问题
3/25-3/3120个小时240行定义指针变量和一些基本赋值什么时候用指针
累计代码行数和博客字数
时间博客字数代码行数
第一周080
第二周100180
第三周400330
第四周600480
第五周900720

1581309-20190522224225954-1641059133.png

学习感悟

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

结对编程

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

转载于:https://www.cnblogs.com/H-Alice/p/10584213.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值