这个作业属于那个课程 | C语言程序设计2 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/2826 |
我在这个课程的目标是 | 在这一个课程中我要学会一维数组和二维数组的应用和对相关问题进行解决 |
这个作业在那个具体方面帮助我实现目标 | 能够对对数据进行排序,还可以对英文单词也可以进行排序还能进行数据之间的转换 |
参考文献 | 这一周编程总结和这一周pta作业 |
7-1 统计一行文本的单词个数 (15 分)
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
1)实验代码:
#include<stdio.h>
#include<string.h>
int main(void)
{
int i,sum,num=0;
char cp[9999];
gets(cp);
sum=strlen(cp);
if(cp[0]!=' ')
num=1;
for(i=0;i<sum-1;i++){
if(cp[i]==' '&&cp[i+1]!=' ')
num++;
}
printf("%d",num);
return 0;
}
2)设计思路:
第一步:引用头文件#include<string.h>,#include<stdio.h>;
第二步:定义数组变量和其它的整形变量;
第三步:输入字符数据并且进行数据统计;
第四步:进行判断,判断空格的前后是否有英文字符,输出结果;
思维导图:
3)调试过程中遇到的问题:
在编程过程中一直不知道怎样去简单统计字符数,还有就是在printf语句里面输入了&符号,结果导致输出答案一直错误,
同时对判断空格时也出现了问题,刚开始提交的时候错误提示说有最小值错误,经过多次的调试之后才想明白;
错误截图:
4)解决方法:
在遇到错误之后,我查找书本知识,和网上查找相关资料,然后再编译器里面去调试,找到了输出答案错误的printf语句的错误
对于空格判断的错误是通过结对编程的队友提醒帮助解决的;如果只有一个或者两个的话用i-1就不行了;
正确截图:
7-1 英文单词排序 (25 分)
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
1)实验代码:
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[20][10],t[20],str1[10];
int i,j,n=0;
while(1)
{
scanf("%s",&str1);
if(str1[0]=='#')
{
break;
}
else
{
strcpy(str[n],str1);
n++;
}
}
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strlen(str[j])>strlen(str[j+1]))
{
strcpy(t,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],t);
}
}
for(i=0;i<n;i++)
{
printf("%s ",str[i]);
}
return 0;
}
2)设计思路:
第一步:同样的引用头文件#include<string.h>,#include<stdio.h>;
第二步:定义数组变量和其它的整形变量,这里要用二维数组;
第三步:进行输入同时进行判断,判断第一个是不是#字符,同时进行字符计数;
第四步:就是进行字符长度的比较,然后进行排序的操作,最后用for语句输出;
3)思维导图:
4)编程过程中遇到的问题:
这一个题目感觉比较难,虽然知道大概的设计思路但是不知道怎样有效的编写代码,但是我去查找资料后,就
稍微借鉴了别人的代码,然后弄懂了之后,再写代码的过程中,把提交'#'打成了0,编译了许久都是一些乱码,
还有就是进行数值之间的转换还是有一点点不是很清楚;
错误截图:
5)解决方法:
不知道思路和怎样写代码我就和结对队友一起编程,一起讨论,然后去网上查找有关的实验代码和设计思路;
理解之后我就去自己独立的编写程序,在这个过程中尽管有许多不知道的地方,但是多次调试之后就懂了大概意思;
至于能够判断的则是提交作业之后发现的;
正确截图:
2.博客总结需要将PTA上代码做以下修改:(1)通过以自己名字命名的文件输入英文单词,(2)英文单词输入的结束标记为你学号最后一位数+37所对应的ASCII字符。(例如:你的学号最后一位为9,则结束标记为9+37=46所对应的ASCII字符“.”)(3)在不删除原有内容的情况下,将排序后的单词输出到文件。
1)实验代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
FILE*fp;
char str[20][10],t[20],str1[10];
int i,j,n=0;
if((fp=fopen("D:\luiyinglan.txt","a+"))==NULL)
{
printf("File open error!
");
exit(0);
}
while(1)
{
fscanf(fp,"%s",&str1);
printf("%s",str1);
printf("
");
if(str1[0]=='#')
{
break;
}
else
{
strcpy(str[n],str1);
n++;
}
}
for(i=0;i<=n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strlen(str[j])>strlen(str[j+1]))
{
strcpy(t,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],t);
}
}
for(i=0;i<n;i++)
{
printf("%s ",str[i]);
fprintf(fp,"%s ",str[i]);
}
if(fclose(fp))
{
printf("Can not close thee file!
");
exit(0);
}
return 0;
}
思维导图:
2)遇到的问题:
这个文件差不多和以前的差不多,就是从文本中读取数据然后输出到编译器里面,然后通过编译器运行之后,
把运行之后的数据又重新打印到文本中去,应用一个新的头文件,定义指针,判断文本的存在和关闭,写代码过程中把
输入的形式弄错了,没有进行换行处理;
错误截图:
解决方法:
发现这个错误很明显是没有换行的经过,加一个换行的操作就可以了;
正确截图:
日期 | 累积的代码行数 | 所花的时间 | 累计博客字数 | 时间 |
---|---|---|---|---|
11/3 12:00~17/3 12:00 | 120行 | 周二到周五每天三小时 | 300字 | 三小时 |
本周心得:
通过这一周的学习和上课,我慢慢的开始知道应该如何画流程图,通过流程图来帮助自己解决思路问题,
同时也解决了代码编写问题,同时对数组也有了一个新的理解,对一维数组二维数组用来排序问题,已经
差不多都明白了;但是还有许多的地方不是很清楚,还要继续努力才行;
这一周和同学也就是结对编程,还是有好处的,能过一起交流思路设计,但是两个人用一台电脑还是不太好,
两个人用自己的电脑,交谈后就各自编写然后交谈彼此的错误,这样子比较好;