2019年春季学期第五周作业
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2825 |
我在这个课程的目标是 | 复习文件巩固冒泡排序法和字符型函数以及学习用字符串编程 |
这个作业在哪个具体方面帮助我实现目标 | 进一步了解二维数组以及关于字符串的一些函数 |
参考文献 | https://blog.csdn.net/u012110719/article/details/41289907 |
英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
实验代码
pta版:
#include<stdio.h>
int main ()
{
static int before[20];
static int after[20];
char str[20][10];
int i, j;
for(i=0;i<20;i++){
for(j=0;j<10;j++){
if((str[i][j]=getchar())!='\n')
before[i]++;
else
break;
}
if(str[i][j-1]=='#')
break;
}
int min=0, k, l;
for(k=0;k<i;k++){
for(l=0;l<i;l++){
if(before[min]>before[l])
min=l;
}
after[k]=min;
before[min]=100;
}
int q, w;
for(q=0;q<i;q++){
for(w=0;w<10;w++){
if(str[after[q]][w]=='\n')
break;
printf("%c",str[after[q]][w]);
}
printf(" ");
}
return 0;
}
文件版:
#include<stdio.h>
int main ()
{
static int before[20];
static int after[20];
char str[20][10];
FILE*fp;
fp=fopen("F:\\abc.txt","r+");
int i, j;
for(i=0;i<20;i++){
for(j=0;j<10;j++){
fscanf(fp,"%c",&str[i][j]);
if(str[i][j]!='\n')
before[i]++;
else
break;
}
if(str[i][0]==',')
break;
}
int min=0, k, l;
for(k=0;k<i;k++){
for(l=0;l<i;l++){
if(before[min]>before[l])
min=l;
}
after[k]=min;
before[min]=100;
}
fprintf(fp,"\n");
int q, w;
for(q=0;q<i;q++){
fprintf(fp," ");
for(w=0;w<10;w++){
if(str[after[q]][w]=='\n')
break;
fprintf(fp,"%c",str[after[q]][w]);
}
}
return 0;
}
思维导图
运行截图
pta:
文件版:
遇到的问题
改成读取文件版遇到了不能写入和写入乱码的问题;经过一番调试找到问题是在输入/读取时的判断方式不当,应该直接判断str[i][0]','而不是(str[i][j-1]','。
统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
实验代码
#include<stdio.h>
int main ()
{
int i=0, n=0;
char a[1000];
gets(a);
if(a[0]==' ')
n=0;
else
n=1;
while(a[i]!='\0'){
if(a[i]==' '&&a[i+1]!=' '&&a[i+1]!='\0')
n++;
i++;
}
printf("%d",n);
return 0;
}
思维导图
PTA截图
遇到的问题
一开始忽视了开头就有空格的情况,用一个if语句解决。
预习题
学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/3-3/9 | 4小时 | 100行 | 二维数组和文件的读取与写入 | 暂无 |
3/10-3/16 | 4小时 | 100行 | 怎么找和最大的子数组 | 暂无 |
3/17-3/23 | 4小时 | 100行 | 冒泡排序 | 暂无 |
3/24-3/30 | 6小时 | 200行 | 字符串的储存方法,和字符串的运用 | 暂无 |