19大一下期五周

课程: C语言程序设计II
作业要求: 19大一下期五周
课程目标: 能够独立进行简单程序编辑,团队进行较大型程序设计
作业目标: 对数组、文件进一步加深了解
参考文献: C语言程序设计II

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

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

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

PTA上程序

#include<stdio.h>
int main()
{
	static char ch[21][11];
	static int i,j,a[20],b,c,d,e[20];
	for(i=0;i<21;i++)
	{
		for(j=0;j<11;j++)
		{
			ch[i][j]=getchar();
			if(ch[i][j]=='\n')
			{
				ch[i][j]='\0';
				break;
			}
			else if(ch[i][j]=='#')
				break;
		}
		a[i]=j;
		d=i;
		if(ch[i][j]=='#')
		{
			ch[i][j]='\0';
			break;
		}
	}
	for(i=0;i<d;i++)
	{ 
		b=a[i];
		c=i;
		for(j=0;j<d;j++)
		{
			if(b>a[j])
			{
				b=a[j];
				c=j;
			}
		}
		a[c]=12;
		e[i]=c;
	}
	for(i=0;i<d;i++)
	{ 
		printf("%s ",ch[e[i]]);
	} 
 } 

设计思路

并没有使用头文件string.h中的计数strlen函数,而是使用最直接的计数方法每输入一个字符便进行计数,然后在比较

3)本题调试过程碰到问题及解决办法

在最后循环输出时迷糊了,在字符串二维数组不知如何交换,只好采取折中的方法增加一个数组专门进行排序

4).运行结果截图

博客园上

程序

#include<stdio.h>
#include<stdlib.h>
main()
{
	FILE *fp,*q;
	char filename[30],str[30];
	static char ch[21][11],ar;
	static int i,j,a[20],b,c,d,e[20];

	scanf("%s",filename);//输入文件名 
	/* 
	fopen(filename,"w")//建立文件,只写 
	fp=fopen(filename,"w")//将指针指向文件 
	*/
	if((fp=fopen(filename,"w+"))==NULL)//判断文件是否存在 
	{
		printf("cannot openfile");
		
		exit(0);
	}
//输入数据至文件 
	getchar();
	ar=getchar();
	while(ar!='#')
	{
		fputc(ar,fp);
		ar=getchar();
	}
	fputc('#',fp);
	fputc('\n',fp);
 
	fclose(fp);



	fp=fopen(filename,"a+");
	q=fopen(filename,"a+");
//提取文件中数据输入数组 
	for(i=0;i<21;i++)
	{
		for(j=0;j<11;j++)
		{
			ch[i][j]=fgetc(fp);
			if(ch[i][j]=='\n')
			{
				ch[i][j]='\0';
				break;
			}
			else if(ch[i][j]=='#')
				break;
		}
		a[i]=j;
		d=i;
		if(ch[i][j]=='#')
		{
			ch[i][j]='\0';
			break;
		}
	}
//排序 
	for(i=0;i<d;i++)
	{ 
		b=a[i];
		c=i;
		for(j=0;j<d;j++)
		{
			if(b>a[j])
			{
				b=a[j];
				c=j;
			}
		}
		a[c]=12;
		e[i]=c;
	}
	//向文件输入数据	
	for(i=0;i<d;i++)
	{
		fputc(' ',q);
		fputs(ch[e[i]],q);
	} 
	fclose(fp);
}

3)本题调试过程碰到问题及解决办法

在向文件输入字符时,使用了同一个指针,出现无法输入字符,于是我加了两个

4).运行结果截图

2019春第四周作业(预习题)

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

程序

#include<stdio.h>
int main()
{
	char ch;
	int flag=0;
	int count=0;
	while((ch=getchar())!='\n')
	{
		if(ch!=' '&&flag==0)
		{
			count++;
			flag=1;
		}
		else if(ch==' ')
		{
			flag=0;
		}
	}
	printf("%d\n",count);
	
	return 0;
}

设计思路

如果是空格就判断它前一个是不是空格,是那就单词数不变,不是单词加一

3)本题调试过程碰到问题及解决办法

无较容易

4).运行结果截图

预习作业

问题:

1指针的储存形式
2指针的交换模式

挑战作业

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

可以使用穷举法将所有数组全部例举比较

.用时3小时30分钟,30用与写与调试,3小时阅读思考

心得:我们如今所学的可以解决大部分问题,但过于繁琐,有些函数可以轻易代替我们用写下的大段代码

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
3/2-3/8 3天 300 指针、文件、数组 getchar()不知道
3/9-3/13 2天 200 指针 文件
3/13-3/22 3天 300 数组 对代码高效性欠缺
3/23-3/29 4天 400 数组 对文件不熟悉

posted on 2019-03-29 21:30  凯*凯  阅读(197)  评论(2编辑  收藏  举报

导航