第五周作业

2019春第五周作业

这个作业属于哪个课程? C语言程序设计Ⅱ
这个作业的要求在哪? https://edu.cnblogs.com/campus/zswxy/MS/homework/2829
我在这个课程的目标是 能使用字符串进行程序设计
这个作业在哪个具体方面帮我实现目标 新的知识点,新的算法
参考文献 《C语言程序设计》,

第四周预习题

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

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

   

输入格式:

    输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5
1.实验代码

#include<stdio.h>

#include<string.h>
int main()
{
        int i,len,num;
  char zf[1000];
 
  gets(zf);
  len =strlen(zf);
 
  if (zf[0]==' ')
  num=0;
  else
  num=1;
 
  for(i=0;i<len-1;i++)
  {
    if(zf[i]==' '&&zf[i+1] !=' ')
    num++;
  }
  printf("%d",num);
  return 0;
}

2.设计思路:

具体思路:题目要求统计一行文本的单词个数,即输出文本中所出现的空格数,而单词数就是空格数=1。

3.遇到的问题及解决方法

此题老师再上课时当作例题讲解过,所以基本也没什么问题,也不明白" ' "这样连接的算一个单词,然后就是对字符型的输入,处理等方面还比较生疏,不知道怎样应用。

4.运行结果截图

第五周预习题

 1.预习内容

指针变量的含义:指针是用来存放内存地址的变量,使用指针可间接访问内存和操纵地址。

如何对指针变量进行赋值?

假设有定义:int i, *p;则p=&i;需注意的是:指针变量被赋的值是地址。

2.作业截图


2.1 此题考察的是指针定义的正确写法,此题翻阅书上的知识可得正确答案。

2.2 此题考查的是指针的定义,指针是用来存放地址的。

2.3 在此题中,int m, n = 5, *p = &m就是定义 p为指向 int 类型变量 m的指针,若需满足要求m=n,则可以句定义 p 为指向 int 类型变量 n的指针,所以选B。

2.4 这是指针变量的定义,指针是用来存放内存地址的变量。

2.5 p=&a;使指针变量p指向a,此时p=10,所以后面的a=p+b=10+1=11。

2019春第五周作业——基础(计算机)

7-1 英文单词排序 (25 分)

 

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

输入格式:

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

输出格式:

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

输入样例:

blue
red
yellow
green
purple
#

输出样例:

red blue green yellow purple 
实验代码:

    

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(void)
    {
        FILE * fp;
        int i,m,j,k,d;
        char a[21][11];
        int b[21],c[21];
        if((fp=fopen("C:\gonghan.txt","a+"))==NULL){
            printf("File open error! ");
            exit(0);
        }
        for(i=j=0;;i++){
            j=0;
            for(;;j++){
            fscanf(fp,"%c",&a[i][j]);
            if(a[i][j]==' '){
                break;
                }
            }
            b[i]=j;
            c[i]=i;
            if(a[i][j-1]=='#'){
                break;
            }
        }
        k=i;
        for(i=0;i<k-1;i++){
            m=i;
            for(j=i+1;j<k;j++){
                if(b[m]>b[j]){
                    m=j;
                }
            }
            j=b[m];
           d=c[m];
           c[m]=c[i];
           c[i]=d;
           b[m]=b[i];
           b[i]=j;
       }
       for(i=j=0;k>0;k--,i++){
           for(j=0;j<b[i];j++){
               fprintf(fp,"%c",a[c[i]][j]);
               printf("%c",a[c[i]][j]);
           }
           fprintf(fp," ");
           printf(" ");
       }
       if(fclose(fp)){
           printf("Can not close the file! ");
           exit (0);
       }
       return 0;
   }


 

2.设计思路:


题目要求把单词按长度从小到大排序后输出,所以我选择的是利用上周所学的选择排序法来解决此题。先把单词存入数组中,注意在输入时,
输入回车键即代表结束这一行的输入,数组b[i]代表这一行单词中字母个数,c[i]代表这一行中的单词个数。当输入#时结束。然后用选择排序法将所有单词按字母个数进行排序输出。

实验过程中遇到的问题和解决方法:

此题是靠编程伙伴黄诺诚完成的,在过程中我的代码出现了很多错误,有些代码用int 定义是不行的,需要用char定义,数组的赋值运用strcpy进行字符串的赋值(复制),我自己的理解,我在代码中进行下标的位置互换,导致错误。然后和黄诺诚讨论后,用了他的代码。

运行结果截图:

 学习进度条:

学习感悟:作业之前的准备真的十分重要,临阵磨枪真的不好使,太烧脑了,所以以后要多在草稿纸上多写写,多画画。还有就是看题太重要了,你必须要看懂题目的意思,题目到底是在要求我们干什么,不然也很容易进入误区。

结对编程感悟:编程伙伴又改了,不知道怎么说,这次的伙伴是自行组织的,所以以后的效果会比之前要好的多吧。


原文地址:https://www.cnblogs.com/Jay-h/p/10620986.html