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 | 数组 | 对文件不熟悉 |