第五周编程总结

作业属于课程 C语言程序设计
课程目标 希望通过学习,学会运用字符串
作业哪方面帮我实现目标 对字符串的运用有一定了解
参考文献 https://baike.sogou.com/v111984.htm?fromTitle=冒泡排序法

第一题

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

输入格式:
输入给出一行字符。

输出格式:
在一行中输出单词个数。

输入样例:
Let's go to room 209.
输出样例:
5

实验代码

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

设计思路

第一步:编译头文件
第二步:定义变量
第三步:if语句
第四步:for语句
第五步:输出结果

本题调试过程遇到问题及解决方法

问题:想法错误,未注意题目中空格有多个
解决方法:询问同学,自己思考。

流程图

运行截图

完成时间

二十分钟

第二题 第五周预习

预习主要内容

1、指针变量的定义:定义指针变量的一般形式为:类型名 *指针变量名;对指针变量赋值
2、指针的基本运算:取地址运算和间接访问运算。
3、指针变量的初始化

完成结果截图



预习中存在的疑虑

1、指针和地址的概念比较抽象,理解上比较困难。
2、带有间接地址访问符*的变量的操作在不同情况下有完全不同含义,较难记住。

第三题第五周基础题

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

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

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

实验代码

#include<stdio.h>
#include<string.h>
int main()
{
  int i,j,index,num;
  char a[20][10],temp[11];
  num=0;
  while(1)
  
  {
    scanf("%s",&a[num]);   //一行一行的输入字符串;
    if(a[num][0]=='#')
      break;
    num++;   //num计算单词个数;
  }
  for(i=0;i<num-1;i++)   //用选择排序法,对单词排序;
  {
     index=i;
    for(j=i+1;j<num;j++)
    {
      if(strlen(a[j])<strlen(a[index]))
       {
         index=j;
       }
    }
    strcpy(temp,a[index]);   //交换两个单词的位置;
    strcpy(a[index],a[i]);
    strcpy(a[i],temp);
  }
  for(i=0;i<num;i++)
  {
    printf("%s ",a[i]);
  }
  
}

设计思路

第一步:编译头文件
第二步:定义变量
第三步:输入字符串,计算单词个数
第四步:用选择排序法,对单词排序
第五步:交换俩单词之间位置
第六步:输出结果

本题调试过程遇到的问题及解决方法

问题:

解决方法:不断调试,找出错误。

流程图

运行结果截图

博客园对第三题的改动

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    int i,j,index,num;
    char a[21][11],temp[11];
    num=0;
    if((fp=fopen("C:\yjj\yjj.txt","a+"))==NULL)
    {
        printf("File open error!
");
        exit(0);
    }
    while(1)
    {
      fscanf(yp,"%s",&a[num]);   //一行一行的输入字符串;
      if(a[num][0]=='&')
        break;
      num++;   //num计算单词个数;
    }
    fprintf(yp,"
");
    for(i=0;i<num-1;i++)    //用选择排序法,对单词排序;
    {
       index=i;
      for(j=i+1;j<num;j++)
      {
         if(strlen(a[j])<strlen(a[index]))
         {
            index=j;
         }
      }
      strcpy(temp,a[index]);    //交换两个单词的位置;
      strcpy(a[index],a[i]);
      strcpy(a[i],temp);
    }
    for(i=0;i<num;i++)
    {
      fprintf(yp,"%s ",a[i]);
    }
    if(fclose(yp)){
        printf("Can not close the file!
");
        exit(0);
    }
    return 0;
}

设计思路

第一步:编译头文件,定义变量,定义文件指针
第二步:打开文件
第三步:文件处理
第四步:输出结果

本题调试中遇到的问题及解决方法

问题:无

运行结果截图

挑战题

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

1、设计思路

第一步:输入二维数组
第二步:循环进行相邻几行几列相加进行比较大小
第三步:再循环比较大小的同时也不断将最大的几行几列的地址存储在另一个数组中
第四步 :出最大矩形子数组的和
(难,搞不明白,问了百度,大概思路)

二、学习进度条


三、描述结对编程的过程和结对编程的优缺点

合作愉快,互帮互助。

四、学习感悟

好好学习,天天向上。

原文地址:https://www.cnblogs.com/yuhaner/p/10617322.html