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())!='
')
				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]=='
')
				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]!='
')
				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,"
");
	int q, w;
	for(q=0;q<i;q++){	
		fprintf(fp," ");
		for(w=0;w<10;w++){
			if(str[after[q]][w]=='
')
				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]!=''){
		if(a[i]==' '&&a[i+1]!=' '&&a[i+1]!='')
			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行 字符串的储存方法,和字符串的运用 暂无
原文地址:https://www.cnblogs.com/aomiaox/p/10623019.html