这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 第八周作业要求
我在这个课程的目标是 掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配。
这个作业在哪个具体方面帮助我实现目标 锻炼了我对这些函数的熟练度与理解度
参考文献 C语言程序设计II第八章

6-1 函数实现字符串逆序 (15 分)

本题要求实现一个字符串逆序的简单函数。
函数接口定义:
void f( char *p );
函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:

#include <stdio.h>
#define MAXS 20void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */int main()
{char s[MAXS];ReadString(s);f(s);printf("%s\n", s);return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
Hello World!
输出样例:
!dlroW olleH

实验代码

void f( char *p )
{char *q,zifu;q=p;for(1;*p!='\0';p++){1;}p--;for(1;(p-q)>0;q++,p--){zifu=*p;*p=*q;*q=zifu;}
}

实验思路

具体思路:在自定义函数里定义一个指针q(用来保存字符串数组的首地址),和一个字符变量(用来作为中间变量);用for语句把指针p指向数组最末端,用p- -使指针指向最后一个字符。用二分法调换两个指针指向的字符。

本题做对过程中遇到的问题及解决方法

一次过,后面又改进了一下代码。

正确截图

6-3 字符串的连接 (15 分)

本题要求实现一个函数,将两个字符串连接起来。
函数接口定义:
char str_cat( char s, char *t );
函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。
裁判测试程序样例:

#include <stdio.h>
#include <string.h>#define MAXS 10char *str_cat( char *s, char *t );int main()
{char *p;char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};scanf("%s%s", str1, str2);p = str_cat(str1, str2);printf("%s\n%s\n", p, str1);return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
abc
def
输出样例:
abcdef
abcdef

实验代码

char *str_cat( char *s, char *t )
{for(int i=0;1;i++){if(*s=='\0'){while(*t!='\0'){*s=*t;t++;s++;i++;}return s-i;}s++;}
}

设计思路

具体思路:用for语句使指针s指向第一个字符串数组的最末端,然后用while语句,把指针t指向的字符赋给s指向的字符空间。每赋值一次,s、t指针都向后移动一个单位,直到指针t指向'\0'。

3)本题做对过程碰到问题及解决办法

一次过。

正确截图

3)本题做对过程碰到问题及解决办法

7-1 输出学生成绩 (20 分)

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
输入格式:
输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。
输出格式:
按照以下格式输出:
average = 平均成绩
max = 最高成绩
min = 最低成绩
结果均保留两位小数。
输入样例:
3
85 90 95
输出样例:
average = 90.00
max = 95.00
min = 85.00

实验代码

#include<stdio.h>
#include<stdlib.h>
int main(void)
{int *p,i;double average,sum,n,max,min;sum=0;scanf("%lf",&n);p=(int *)calloc(n,sizeof(int));for(i=0;i<n;i++,p++){scanf("%d",p);}max=min=*(--p);for(i=0;i<n;i++,p--){max=max>*p?max:*p;min=min<*p?min:*p;sum+=*p;}average=sum/n;printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min);free(p);return 0;
}

设计思路

具体思路:采用动态内存分布函数(书上有定义和使用说明及解释),定义变量时要特别要注意需要的时什么变量,因为整型数据和整型数据相除结果还是整型数据。
用for语句把输入的成绩一个一个保存在分配的内存中,把最大值和最小值都赋值为最后输入的那个成绩。
再用for语句一个一个比较成绩大小,用?:(三目运算符)来比较大小并保留最大或最小值,sum计算成绩总和。最后输出平均值和最大最小值。

3)本题做对过程碰到问题及解决办法


遇到的问题:运行时错误。
原因:没有正确·的了解到指针移动到的位置,指针已经指向最后面了。
解决方法:把for循环里的p++改成p- - 。


遇到的问题:格式错误
原因:因为变量类型不同,不能得到正确值,输出格式控制也写错误了
解决的方法:把average 和sum都改成double类型的变量。

正确截图

7-4 字符串排序 (20 分)

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue green white
输出样例:
After sorted:
blue
green
red
white
yellow

实验代码

#include<stdio.h>
void strcpy(char *p,char *q);
int main(void)
{static char ch[5][100],ch1[100];int i=0,y=0,x,a;while(ch[i][y-1]!='\n'){scanf("%c",&ch[i][y]);y++;if(ch[i][y-1]==' '){i++;y=0;}}ch[i][y-1]=' ';for(x=0;x<=i;x++){for(y=x+1;y<=i;y++){if(ch[x][0]>ch[y][0]){strcpy(ch1,ch[x]);strcpy(ch[x],ch[y]);strcpy(ch[y],ch1);}}}printf("After sorted:\n");for(x=0;x<=i;x++){for(y=0;1;y++){if(ch[x][y]==' '){break;}printf("%c",ch[x][y]);}printf("\n");}
}
void strcpy(char *p,char *q)
{while(*q!='\0'){*p=*q;p++;q++;}*p='\0';
} 

第二个思路:用二维指针做

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
# define max 5
int main(void)
{char *ch[max],a[10],*p;for(int i=0;i<5;i++){scanf("%s",a);int x=strlen(a);ch[i]=(char *)calloc(x,sizeof(char));strcpy(ch[i],a);printf("%s\n",ch[i]);}for(int i=0;i<5;i++){for(int y=i;y<5;y++){if(*ch[i]>*ch[y]){p=ch[i];ch[i]=ch[y];ch[y]=p;}    } printf("%s\t",ch[i]);}
}

实验思路

具体思路:用for语句单个输入字符,遇到空格就存入下一行,遇到回车就结束输入并跳出循环。
用两个for语句来比较第一列每个字母的ASCLL码大小,内层for循环每循环一次就得到一个在比较中是最小ASCLL码的字符。然后把这一行字符用strcpy函数整个复制到比较开始的那一行。外层for循环再从下一行开始比较。全部比较完后,二维数组里就存入了已经排好序的字符串了。
最后用for循环一行一行的输出。
自定义函数strcpy非常简单,用while语句来判断被复制的字符串指针是否指到最后位置,如果没有就把指向的字符赋值给前一个字符串数组,最后把前一个字符串数组加上字符串结束标志‘\0'。

3)本题做对过程碰到问题及解决办法


遇到的问题:格式错误。
原因:最后输入的单词后有一个空格。
解决方法:在输出的时候判断,为空格则跳出循环。输出下一行。


遇到的问题:答案错误,
原因:忘了打After sorted:
解决方法:加上忘了打After sorted:。

正确·截图

(预习题)7-3 计算平均成绩 (15 分)

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
输入样例:
5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60
输出样例:
80.00
zhang 00001
chen 21987

实验代码

#include<stdio.h>
struct student{int num;char name[20];int results;
};
int main(void)
{int i,N;double sum=0,average;scanf("%d",&N);struct student students[N],*p;p=students;for(i=0;i<N;i++,p++){scanf("%d %s %d",&p->num,p->name,&p->results);sum+=p->results;}p=p-i;average=sum/N;printf("%.2f\n",average);for(i=0;i<N;i++,p++){if(p->results<average)printf("%s %0*d\n",p->name,5,p->num);}
} 

设计思路

具体思路:定义一个结构名为student的结构体,成员包括学生学号,姓名,成绩三部分。,
在主函数里定义一个结构数组students[N],并定义一个指针指向结构数组首地址。用for语句一行一行的输入学生信息,计算成绩总和。输入完成后,计算出平均值,输出平均值。指针重新指向结构体数组首地址。
用for语句逐个比较学生成绩,小于平均值的则输出学号及姓名。

3)本题做对过程碰到问题及解决办法

一次过,我已经做过几次类似的题了,对结构体也有一定的了解。

正确截图

预习中的疑惑

现在没有什么疑惑了,刚开始预习的时候疑惑挺多的,后来通过看书,做题,还有百度都解决了。

对自己作业的评价

现在还是追求速度吧,代码质量还不是最好,很多地方其实都能继续再改进的。努力努力。

学习进度条

这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第八周 八个小时 170多行 学到了结构体的基本用法和性质 结构体里能用static吗?

学习感悟

通过这两周的学习,指针已经完全会了,算是比较熟练了吧。书上的内容比较少,很多东西还是要靠问,问老师问百度问同学都行,解决了、弄懂了问题就好。结构体非常方便,能很好的包含具有某一特性或某一类别的很多数据类型, 学到了就是赚到,努力学习,加油!

结对编程

过程:
强强联手,天下我有。

心得:好处:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。

(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
自我感觉好处:能使两个人沟通起来,得到1+1>2的效果。
但是!!!那也得使强强联手才行呀,所以,有个时候真还不如自己一个人编写程序,还能冷静思考。
我的优点:基础知识记得不错,能持之以恒的坚持写代码,会耐心教队友不会的知识。
我的缺点:太过自信。
队友优点:愿意学,虽然效果不大。英语好,表现不错。
队友缺点:啥也不知道。

挑战作业

上几周的挑战作业,有同学已经有些思路了,有思路的同学请及时记录下自己的思考或程序并发表,也请没有完成的同学不要放弃思考,继续加油!
本周,我们来做一做关于字符串的挑战题:
九宫格键盘对应英语单词
九宫格键盘一般可以用于输入字母。如用2可以输入A、B、C,用3可以输入D、E、F等。如图所示:
IMG_8397(1).JPG

对于号码5869872,可以依次输出其代表的所有字母组合。如:JTMWTPA、JTMWTPB……
1.您是否可以根据这样的对应关系设计一个程序,尽可能快地从这些字母组合中找到一个有意义的单词来表述一个电话好吗呢?如:可以用单词“computer”来描述号码26678837.
2.对于一个电话号码,是否可以用一个单词来代表呢?怎样才是最快的方法呢?显然,肯定不是所有的电话号码都能够对应到单词上去。但是根据问题1的解答,思路相对比较清晰。

实验代码

#include<stdlib.h>
#include<string.h>
int main(void)
{static char jp[10][5]={"\0","\0","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};static char NE[20],num[20];int i=0,c=0,a=0,b=0,x=0;FILE *fp;if((fp=fopen("D:\\ldx.txt","r"))==NULL){printf("File open error!\n");exit(0); }scanf("%s",num);y=strlen(num);while(!feof(fp)){fscanf(fp,"%s", NE);printf("%s",NE);i=strlen(NE);printf("%d\n",i);if(i!=y){strcpy(NE,"\0");continue;}for(a=0;a<i;a++){while(1){if(NE[a]==jp[c][b]){printf("%d",c);if(c==(num[a]-'0')){x++;}c=0;break;}b++;if(jp[c][b-1]=='\0'){c++;b=0;}}}if(x==i){printf("%s",NE);break; }x=0;strcpy(NE,"\0");}if(x!=i){printf("NO FOUND");}if(fclose(fp)){printf("Can not close the file!\n");exit(0);}
}

这是原始代码,方便查看各类数据。

实验思路

具体思路:用static定义一个二维数组,赋初始值,行对应数字1-9,每一行对应键盘上的英文字母。再定义两个一维字符数组,num[20]用来保存键盘输入的数字,NE[20]用来保存从文件里读取的字符串。
feof函数是判断指针是否运行到文件末尾的一个函数。从文件中读取字符串,并记录字符串的长度。

while(1){if(NE[a]==jp[c][b]){printf("%d",c);c=0;break;}b++;if(jp[c][b-1]=='\0'){c++;b=0;}}

这个代码判断读取的字符对应的数字。
一个一个字符来判断:如果NE[a]能在jp[10][5]里找到对应的字符,则判断对应的数字是否和输入的数字相等。如果相等,则x++;如果不相等,读取下一个字符进行判断,并将x归零,字符串NE[20]也全存入空字符。
如果读取的字符对应的数字和输入的数字一 一对应,且字符长度一样,则输出找到的这个英文单词。
如果文件里的字符串全部搜索完成,且x!=i,就是没有符合的英语单词,则输出"NO FOUND"。
关闭文件。

3)本题做对过程碰到问题及解决办法

遇到的问题:其实没遇到啥大问题,毕竟有思路,但是!!!!!微小问题更为致命!!!!

就这么一个简单的问题,变量类型不同,比较不了,导致不能输出正确英文单词,错了起码一个半小时。冥思苦想一个半小时,中间改了各种地方,各个地方加了输出方便我查看程序运行哪里错误,突然灵光一闪,存入的数字是字符常量‘8’,不是数字8.
解决方法:用(num[a]-'0')把数字字符常量转化为数字。

正确截图

把不符合的也全输出了,直到输出正确的英语单词,或者没找到。

转载于:https://www.cnblogs.com/xqldc/p/10723960.html

2019春第八周作业相关推荐

  1. 2019春第六周作业

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 2019春第六周作业 我在这个课程的目标是 掌握指针变量的基本运算:理解指针作为函数参数的作用:掌握如何使用指针实现函数调用返回多个值. ...

  2. 2019春第十周作业

    第十周作业 本周作业头 这个作业属于哪个教程 C语言程序设计Ⅱ 这个作业要求在哪里 (https://edu.cnblogs.com/campus/zswxy/software-engineering ...

  3. 2019春第七周作业

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 要求我们掌握指针,可以更好的运用它 我在这个课程的目标是  学懂C语言,会编程一些简单的小应用 这个作业在那个具体方面帮助我实现目标  这 ...

  4. 2019春第六周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 对指针的使用更加得心应手 参考文献与网址 C语 ...

  5. 2019春第五周作业

    这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪里 (https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018 ...

  6. 2019夏第八周学习编辑总结

    这个作业属于哪个课程 C语言程序设计二 这个作业要求在哪里 2019春季学期第八周作业 我的课程目标 掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配. 这个作业在哪个具体方面帮助我实 ...

  7. 2017-2018-2 1723《程序设计与数据结构》第八周作业 实验二 第一周结对编程 总结...

    作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  8. 20189200余超 2018-2019-2 移动平台应用开发实践第八周作业

    20189200余超 2018-2019-2 移动平台应用开发实践第八周作业 ListView 1.自定义BaseAdapter,然后绑定ListView的最简单例子 先看看我们要实现的效果图: 一个 ...

  9. 网络攻防实践 第八周作业

    MarkdownPad Document 第八周作业 第一部分 #教材学习 1.1Linux操作系统概述 ubuntu.debian.fedora.centos.rhel.opensuse和stack ...

最新文章

  1. 简单介绍互联网领域选择与营销方法
  2. 外贸网络推广浅析怎么能更有效地提升网站的收录?
  3. html5的新增的标签和废除的标签
  4. solrcloud replica collection core shard slice 概念讲解
  5. 列表排序应用FLIP动画(vue)
  6. 会议邀请 | 10月25日北京,首期D2iQ云原生主题论坛正式启动
  7. mysql 按月和年累加_广西柳州市市场监管局公布市2020年11月(第一批)电梯按需维保试点名单...
  8. jupyter notebook运行的快捷键_AI Studio-Notebook基础使用教程(一)
  9. Feign 超时设置
  10. 原生html使用element组件,使用element-ui的table组件时,渲染为html格式
  11. Pytorch——保存训练好的模型参数
  12. 基于springboot的考研学习平台
  13. Android MTK GPIO 控制驱动
  14. ajax简易写法,AJAX的简洁写法
  15. 网站交互式公安备案详细流程
  16. SPSS读取数据出现中文字符显示乱码的解决方案
  17. 数据库新用户登录报错user test lacks create session privilege logon denied
  18. 《国富论》阅读笔记03
  19. C语言ALG什么文件,alg.exe进程是什么
  20. Centos 7 内网安装 DzzOffice

热门文章

  1. MySQL主键和外键使用及说明
  2. java 虚拟机类加载 及内存结构
  3. Swift-EasingAnimation
  4. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
  5. NET在后置代码中输入JS提示语句(背景不会变白)
  6. 如何在Linux上部署Jenkins
  7. java文本区水平对齐方式,如何将文本居中在水平StackLayout中?
  8. (33)FPGA原语设计(BUFGCE)
  9. (13)Verilog HDL变量:memory型
  10. 如何测量代码运行时间