这次作业属于哪个课程 | C语言程序设计ll |
---|---|
这个作业要求在哪里 | (https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2825) |
我在这个课程的目标是 | 复习文件巩固冒泡排序法和字符型函数以及学习用字符串编程 |
这个作业在哪个具体方面帮助我实现目标 | 进一步了解二维数组以及关于字符串的一些函数 |
参考文献 | (https://wenda.so.com/q/1371549524065170) (https://wenda.so.com/q/1458200285723342) |
第四周预习作业
7-1 统计一行文本的单词个数 (15 分)
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
1.实验代码
#include<stdio.h>
int main ()
{
int count=0,i=0;
char str[1000];
gets(str); //输入字符
while(str[i]==' ') //跳过开头的空格
i++;
while(str[i]!=' ') //循环到 时结束
{
if(str[i]!=' ')
{
count++;
while(str[i]!=' ') //跳过一个单词的其他字符
{
if(str[i]==' ') //如果循环到 ,跳出循环
break;
i++;
}
}
else
{
while(str[i]==' ')
i++;
}
}
printf("%d
",count);
return 0;
}
2.实验设计思路:
流程图:
先输入字符串 ,为空格时跳过且i+1 ,后一个循环条件为循环到 时结束
如果不为空格则count++,为空格则i++
需注意事项:
3.本题遇到的问题及解决办法:
错误截图:
问题:我开始没有考虑以空格结尾和全空格的情况
解决办法:我换了一种输入字符串的方式 然后添加了 if(str[i]==' ') break; i++
4.运行结果截图:
第五周基础作业
7-1 英文单词排序 (25 分)
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
1.pta实验代码:
#include<stdio.h>
#include<string.h>
int main(void)
{
char input[21][11] = { ' ' }; //定义足够的数组空间
char t[11]={' '};
int i=0,j=0;
while(1) { //循环测试一直为真
scanf("%s",input[i]); //输入英文单词
if (input[i][0]=='#') //以#作为输入结束标志
break;
i++;
}
input[i][0]=' ';
int len=i; //len为输入单词个数
for(i=0;i<len;i++)
{
for(j=1;j<len-i;j++) //strlen为计算字符串长度的库函数名
{
if(strlen(input[j-1])>strlen(input[j])) //直到碰到第一个字符串结束符' '为止,然后返回计数器值
{
strcpy(t, input[j-1]); //把后一个所指由NULL结束的字符串复制到前一个所指的数组中
strcpy(input[j-1],input[j]);
strcpy(input[j],t);
}
}
}
for(i=0;i<len;i++)
printf("%s ",input[i]);
return 0;
}
1.博客园要求输入文件代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
FILE*fp;
char input[21][11] = { ' ' }; //定义足够的数组空间
char t[11]={' '};
int i=0,j=0;
if((fp=fopen("F:\第五周基础作业f505-Yangling.txt","r+"))==NULL)
{
printf("File open error!
");
exit(0);
}
while(1) { //循环测试一直为真
scanf("%s",input[i]); //输入英文单词
fprintf(fp,"%s
",input[i]);
if (input[i][0]=='#') //以#作为输入结束标志
break;
i++;
}
input[i][0]=' ';
int len=i; //len为输入单词个数
for(i=0;i<len;i++)
{
for(j=1;j<len-i;j++) //strlen为计算字符串长度的库函数名
{
if(strlen(input[j-1])>strlen(input[j])) //直到碰到第一个字符串结束符' '为止,然后返回计数器值
{
strcpy(t, input[j-1]); //把后一个所指由NULL结束的字符串复制到前一个所指的数组中
strcpy(input[j-1],input[j]);
strcpy(input[j],t);
}
}
}
for(i=0;i<len;i++){
printf("%s ",input[i]);
fprintf(fp,"%s ",input[i]);
}
if(fclose(fp)){
printf("Can not close the file!
");
exit(0);
}
return 0;
}
2.实验设计思路:
流程图:
设计思路:
先定义足够的数组空间 然后用while语句输入英文单词,
且以#作为输入结束标志
接着用for循环比较字符串长度,直到碰到第一个字符串结束符' '为止
最后按字符串长短输出
3.本题遇到的问题及解决办法:
我在网上查找了strlen以及strcpy函数的用法
注意事项:
可以用二维数组来输入单词数量及长度
4.运行结果截图:
第五周预习题
选择题:
二、学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的题目 |
---|---|---|---|---|
3/4-3/9 | 6小时 | 89 | 新建文件进行读写 | 二位数组子数组的最大值的求和 |
3/10-3/15 | 8小时 | 156 | 二维数组的运用 | 二位数组子数组的最大值的求和 |
3/16-3/22 | 10小时 | 120 | 用二维数组求最大值和鞍点 | 冒泡法排序 |
3/23-3/29 | 6小时 | 56 | 进一步了解一维数组以及字符串的一些简单用法 | 求二维数组的最大子数组是矩形的 |
三、学习感悟
复习文件巩固冒泡排序法和字符型函数以及学习用字符串编程