2019春季第五周作业
问题 | 回答 |
---|---|
这个作业属于那个课程 | C语言程序设计 |
这个作业要求在哪里 | 第五周作业 |
我在这个课程的目标是 | 学会使用字符串 |
这个作业在哪个具体方面帮助我实现目标 | 字符串的输入输出 |
参考文献 | C语言程序设计 |
7-1 统计一行文本的单词个数 (15 分)
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
1)实验代码
#include<stdio.h>
int main(void)
{
int count,i;
char str[1000];
i=0;
while((str[i]=getchar())!='\n'){
i++;
}
str[i]='\0';
if(str[0]==' '&&str[i-1]==' '){
count=-1;
for(i=0;str[i]!='\0';i++){
if(str[i]==' '&&str[i+1]!=' '){
count++;
}
}
printf("%d",count);
}
if(str[0]!=' '&&str[i-1]==' '){
count=0;
for(i=0;str[i]!='\0';i++){
if(str[i]==' '&&str[i+1]!=' '){
count++;
}
}
printf("%d",count);
}
if(str[0]!=' '&&str[i-1]!=' '){
count=1;
for(i=0;str[i]!='\0';i++){
if(str[i]==' '&&str[i+1]!=' '){
count++;
}
}
printf("%d",count);
}
if(str[0]==' '&&str[i-1]!=' '){
count=0;
for(i=0;str[i]!='\0';i++){
if(str[i]==' '&&str[i+1]!=' '){
count++;
}
}
printf("%d",count);
}
return 0;
}
2)流程图
3)本题调试过程碰到的问题及解决办法
问题:不知道要把数组设多大,还有就是思路不完整,考虑的情况不完整,没有考虑空格的位置
解决办法:尝试把数组写大,100,1000,就对了,还有思路是根据那个测试点修改了的
4)运行结果截图
5)评价
就是还是每次考虑的不够全面,总是漏掉一些情况,所以以后还是要注意思考,不要直接就打代码
用时:45分钟
7-1 英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
输出样例:
red blue green yellow purple
老师要求
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;
int n,i,j,min,k,temp,a[20];
char str[20][10],t[10];
if((fp=fopen("d:\\黄艳菊.txt","r+"))==NULL){
printf("File open error!\n");
exit(0);
}
i=0;
for(i=0;i<20;i++){
fscanf(fp,"%s\n",str[i]);
a[i]=strlen(str[i]);
if(str[i][0]=='.'){
break;
}
}
for(k=0;k<i;k++){
min=k;
for(j=k+1;j<i;j++){
if(a[j]<a[min]){
min=j;
}
}
temp=a[min];
a[min]=a[k];
a[k]=temp;
strcpy(t,str[min]);
strcpy(str[min],str[k]);
strcpy(str[k],t);
}
for(n=0;n<i;n++){
fprintf(fp,"%s ",str[n]);
printf("%s ",str[n]);
}
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
2)流程图
3)本题调试过程碰到的问题及解决办法
问题:忘记注意格式,还有就是对于字符串内的一些函数不知道,一开始不知道在输入的时候怎么跳出循环
解决办法:运行的时候根据结果进行修改,对于一些字符函数我是上网找了#include<string.h>下包含哪些函数的。
4)运行结果截图
5)评价
就是还是每次考虑的不够全面,或是总是忘记什么,还是应该先了解字符串在开始做题,不然会有很多疑问的
用时:3个小时
挑战作业:
继续挑战第二周的挑战作业:返回整数数组中最大子数组的和,本周,我们要求二维数组的子数组必须是矩形的。
1)实验代码
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE * fp;
int max,num[3][6],a[100],b[100];
int i,j,k,h,l,m,n,sum,s,x;
char op;
if((fp=fopen("d:\\Alice.txt","r"))==NULL){
printf("File open error!\n");
exit(0);
}
fscanf(fp,"%d",&h);
fscanf(fp,"%d",&l);
for(i=0;i<3;i++){
for(j=0;j<6;j++){
fscanf(fp,"%d%c",&num[i][j],&op);
printf("%d%c",num[i][j],op);
}
}
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
if((fp=fopen("d:\\Alice.txt","a"))==NULL){
printf("File open error!\n");
exit(0);
}
m=0;
for(i=0;i<h;i++){
for(k=0;k<l;k++){
sum=num[i][k];
for(j=k+1;j<l;j++){
sum=sum+num[i][j];
a[m]=sum;
m++;
}
}
}
x=m/h;
n=0;
for(i=0;i<m;i++){
s=a[i];
for(j=i+x;j<m;j=j+x){
s=s+a[j];
b[n]=s;
n++;
}
}
max=b[0];
for(i=0;i<n;i++){
if(max<=b[i]){
max=b[i];
}
}
fprintf(fp,"%d",max);
printf("%d",max);
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
2)流程图
3)本题调试过程中碰到的问题及解决办法
问题:一开始是想把矩阵看成一个长的一维数组,但是不知道怎么来控制转行的问题,就是对于列组合的时候我思路不清晰。
解决办法:换了一个思路一行一行的组合最后再与相对应的列来组合,进行调试的时候发现列有问题,根据调试进行修改。
4)运行结果截图
5)评价
就是我自己每次思考的时候,总是细节把握不住,总是出现一些变量用错的原因等等的,在这上面花大量的时间进行修改,所以我还是应该每个再仔细一点,就是把内容想清楚总是在调试的时候发现不该错的地方
用时:4个小时
预习作业:
1)预习的主要内容
主要是了解了指针,知道怎么定义指针的一般形式,知道了内存单元的内容和内存单元的地址的区别,定义多个指针变量时,每个指针变量前面都必须加*,和指针的基本运算,还有将指针变量初始化
2)完成情况截图(要求有题目和答案)
3)预习中存在的疑惑(至少写出2条)
1)指针的赋值只是有点感觉,但是也不是特别清楚
2)变量与地址之间的关系
3)什么情况下使用指针不是很清楚
学习进度条
周/日期 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较迷惑大问题 |
---|---|---|---|---|
3/25-3/31 | 20个小时 | 240行 | 定义指针变量和一些基本赋值 | 什么时候用指针 |
累计代码行数和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第一周 | 0 | 80 |
第二周 | 100 | 180 |
第三周 | 400 | 330 |
第四周 | 600 | 480 |
第五周 | 900 | 720 |
学习感悟
1)学习了有关字符串的函数,大致了解了点字符串,还有预习了有关指针的内容,对指针有了初步了解
2)疑惑:对于指针虽然有了一些了解,但是很笼统,在上课时好好听老师讲
结对编程
过程:就是一起思考该怎么做
优点:1.可以更加的清楚思路,就是对程序更加的熟悉和清楚
2.可以更有效的交流
3.相互学习,传递经验
4.可以督促学习
缺点:经验不足