2-1删除字符串中数字字符

1.设计思路

(1)主要描述题目算法

第一步:遍历指针s所指的s数组。

第二步:如果 * (s+i)在0至9之间的话,则跳过此 * (s+i)。

第三步:如果* (s+i)不在0至9之间的话,使得 * (s+j) = * (s+i),j++。

第四步:千万不要忘记最后 * (s+j) = '\0。

(2)流程图

2.实验代码

void delnum(char *s)
{
int i=0,j=0;
for(i=0;*(s+i) != '\0';i++)
{
if(*(s+i)>='0'&&*(s+i)<='9') {
continue;
} else {
*(s+j) = *(s+i);
j++;
}
}
*(s+j) = '\0';
}

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

2-2统计子串在母串出现的次数

1.设计思路

(1)主要描述题目算法

第一步:遍历数组,如果 * (str+i) 与 * (str+i+1) , * (str+i+2)连续符合要求的话,则出现的次数加1。

第二步:如果不符合其中一项要求的话,则i++,如果都符合的话,则i = i+3。

第三步:返回k的值。

(2)流程图

2.实验代码

/*int fun(char *str,char *substr)
{
int i=0,k=0;
while(*(str+i) != '\0') {
if(*(str+i) == 'a'&& *(str+i+1) == 's') {
if(*(str+i+2)== 'd') {
k++;
i = i+3;
} else {
i++;
}
}else {
i++;
}
}
return(k);*/
int fun(char *str,char *substr)
{
int i=0,k=0,m=0;
char *p = substr;
for(i=0;*(str+i) != '\0';i++) {
for(m = 0;*(str+i+m) == *(p+m);m++) {
if(*(p+m+1)=='\0') {
k++;
}
}
}
return k;
}

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

错误点1:在 第一个else里写continue,导致i一直为3,最后没有输出结果。

解决方法:在进行单步调试后,发现自己的症结点,将其改成i++。

2-3字符串中除首尾字符外的其余字符按降序排列

1.设计思路

(1)主要描述题目算法

第一步:调用函数中指针型s用来接收主函数的字符型数组s,num=7。

第二步:使用冒泡法,用ASCII的值来比较输入字符的大小,但注意i的值,因其首尾不需要比较。

(2)流程图

2.实验代码

int fun(char *s,int num)
{
char tmp;
int i=0,j;
for(i=1;i<6;i++) {
for(j=1;j<6-i;j++) {
if(*(s+j) < *(s+j+1)) {
tmp = *(s+j);
*(s+j) =*(s+j+1);
*(s+j+1) = tmp;
}
}
}
return 0;
}

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

错误点1:使i=0,j=0,导致最后结果错误。

解决方法:再调试后重新阅读了一遍题目,自己的粗心和惯性思维造成的。

pta提交列表:

2-4输出学生成绩

1.设计思路

(1)主要描述题目算法

第一步:对N进行整型定义,指针型p指向double类型,max,avg,min一样指向double类型。

第二步:对p的数据进行动态分配内存的操作,若不进行分配则指针型p为空指针,调试时则会报错。

第三步:使用for循环,用指针型p接受输入的数据,得到sum的值。

第四步:再使用for循环,使max = *p,min= *p,即为p[0],与其他数据进行比较,最后输出结果。

(2)流程图

2.实验代码

#include<stdio.h>
int main ()
{
int N;
double *p,max,avg,min;
scanf("%d",&N);
if((p=(double*)calloc(N,sizeof(double)))==NULL){
exit(1);
}
int i=0;
double sum=0;
for(i=0;i<N;i++) {
scanf("%lf",p+i);
sum = sum + *(p+i);
}
max = *p;
min = *p;
for(i=0;i<N;i++) {
if(max<*(p+i)) {
max = *(p+i);
}
if(min>*(p+i)){
min = *(p+i);
}
}
avg = sum/N;
printf("average = %.2f\n",avg);
printf("max = %.2f\n",max);
printf("min = %.2f\n",min);
return 0;
}

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

错误点1:指针p指向为int类型,导致最后输出打的只能是整数;在动态分配内存中,指针型p指向double类型,因此(p=(double)calloc(N,sizeof(double)))==NULL而不为(p=(int)calloc(N,sizeof(int)))。

解决方法:疑惑以后,突然灵光一现,部分错误的话代表我的代码没有语法错误,随意输入数之后,发现即便avg答案是小数最后也输出为整数,然后发现自己的问题并改正。

pta提交列表:

2-5计算职工工资

1.设计思路

(1)主要描述题目算法

第一步:使用结构体类型进行结构体变量的引用。

第二步:使用for循环,输入s1[i].name,s1[i].ji,&s1[i].fu,s1[i].spare对用i的值,且需要注意字符串的话,输入时不用加 “&”。

第三步:最后再遍历数组,输出要输出的值。

(2)流程图

2.实验代码

#include <stdio.h>
struct money {
char name[10];
float ji;
float fu;
float spare;
} s1[1000];
int main ()
{
int N,i;
scanf("%d",&N);
float shing[N];
for(i=0;i<N;i++) {
scanf("%s %f %f %f",s1[i].name,&s1[i].ji,&s1[i].fu,&s1[i].spare);
shing[i] = s1[i].ji+s1[i].fu-s1[i].spare;
}
for(i=0;i<N;i++) {
printf("%s %.2f\n",s1[i].name,shing[i]);
}
return 0;
}

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



错误点1:在将s1[1000]改成s1[100]后,会出现段错误。

解决方法:,因一开始定义为1000,所以并没有错误,但在看过姚舜禹同学的问题后,自己换成较小值会出现相同的错误。

在自己写代码时并没有遇到什么大的问题,但本题在看到姚舜禹同学在小组中提到的问题及我班两位同学的回复后,觉得自己的代码虽然提交正确了,但觉得自己的代码还是存在着很大的不足:最好是不要用是s1[1000]这种方式,极有可能因为数组的溢出而造成段错误,比如若我将1000改成100答案则是错误的,可以直接在输入n后写上struct money s1[n]就可以正常使用,可以看书自己以后需要向同学学习的地方还有很多,也觉得这种有错误时可以在小组里讨论也是十分好的。

2-6计算平均成绩

1.设计思路

(1)主要描述题目算法

第一步:使用结构体类型进行结构体变量的引用,且根据题意后面应为s1[10]。

第二步:输入N的值,遍历数组,输入s1[i].number,s1[i].name,s1[i].score并将它们储存起来,计算出sum的值。

第三步:在for循环中,判断s1[i].score与avg的大小,最后按要求输出元素。

(2)流程图

2.实验代码

#include <stdio.h>
struct score {
char number[6];
char name[10];
int score;
} s1[10];
int main ()
{ int N,i,sum=0;
float avg;
scanf("%d",&N);
for(i=0;i<N;i++) {
scanf("%s %s %d",s1[i].number,s1[i].name,&s1[i].score);
sum = sum + s1[i].score;
}
avg = sum/N;
printf("%.2f\n",avg);
for(i=0;i<N;i++) {
if(s1[i].score<avg) {
printf("%s %s\n",s1[i].name,s1[i].number);
}
}
return 0;
}

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



错误点1:输出时将s1[i].number的%s写成%d。

解决方法:在单步调试后知道错误的代码行,重新观察后找出问题所在。

pta提交列表:

2-7按等级统计学生成绩

1.设计思路

(1)主要描述题目算法

第一步:首先需要定义一个整型变量,为最后函数的返回值,使他在分数小于60的情况下++。

第二步:想到使用for循环,遍历完整个p指针,根据不同的分数情况对p指针里不同元素定义不同的等级。

第三步:最后返回主函数。

2.实验代码

int set_grade( struct student *p, int n )
{
int k = 0,i=0;
for(i=0;i<n;i++) {
if((p+i)->score >= 85) {
(p+i)->grade = 'A';
} else if((p+i)->score>=70 && (p+i)->score < 85) {
(p+i)->grade = 'B';
} else if((p+i)->score>=60 && (p+i)->score < 70) {
(p+i)->grade = 'C';
} else {
(p+i)->grade = 'D';
k++;
}
}
return k;
}

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

因本题思路较简单,并无问题。

2-8结构体数组按总分排序

1.设计思路

(1)主要描述题目算法

第一步:调用calc(struct student *p,int n),sort(struct student *p,int n) 分别接收calc(stu,5),sort(stu,5)的值。

第二步:因其calc函数目的为求出每名学生的总分,所以要用到for循环语句一个一个循环后算出其中每个元素的总值。

第三步:sort函数的目的是为了让每名学生的总分从高到低对这组数据进行排序,想到用选择排序法或者是冒泡排序法,进行调换后。最后返回主函数。

(2)流程图

2.实验代码

void calc(struct student *p,int n) {
int i=0,j=0;
for(i=0;i<5;i++) {
(p+i)->sum = (p+i)->score[0] +(p+i)->score[1]+(p+i)->score[2];
}
}
void sort(struct student *p,int n) {
int a=0,b=0;
struct student tmp;
for(a=0;a<4;a++) {
for(b=0;b<4-a;b++) {
if((p+b)->sum <(p+b+1)->sum) {
tmp = p[b];
p[b] = p[b+1];
p[b+1] = tmp;
}
}
}
}

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



遇到的问题1:将p[b+1].sum与p[b].sum的大小值进行后直接进行交换,导致最后输出的

结果其它的不变,只是sum值发生了改变。

解决方法:在将dev c++上的输出结果和要求的输出结果对比后,发现了自己错误的地方,并改正。



遇到的问题2:在修改过第一个问题后,dev c++编译时出现了上述图片中出现的问题。

解决的方法:在翻译错误提示后,尝试性的将原先定义的 int tmp改成了struct student tmp,结构编译成功,然后理解到此时的p[b]为结构类型,要使得tmp可以成为它们之间的交换介质,类型必须要相等,因此tmp的类型必须改成struct student。

关于'->':此符号只能用于指针上,如a.sum不能用a->sum来表示。

pta提交列表:

学习总结和进度

1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?

答:在这两周总的来说自己复习了指针及学习了结构类型,按照每道作业的知识点的话,可分为:

在第一次作业中主要考查的知识点对我来说应该是指针及对输出不同要求字符串的方法,及最后一题的动态分配内存,前面三题自己是一下过的,但最后一题卡了很多次,说明自己对这个点的掌握并不是很熟练。

在第二次作业中觉得主要考查的是对结构类型函数的应用及结构类型函数元素中数组的使用,关于数组的方面自己是看教科书和上网查询后才最终解决的问题,但现在的话觉得自己对这个点掌握的相对熟练。

在第三次作业中对我自身而言,主要考查的则是结构类型数据和子函数的调用的混搭,两道题的算法并不是很难,但值得注意的是如果是结构类型的元素进行交换时,交换介质必须也为相同的类型。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。











git地址:(https://git.coding.net/exo07/disizhouzuoye.git)

3、点评3个同学的本周作业

张金禹:( http://www.cnblogs.com/17-1/p/8687764.html)

高立彬:(http://www.cnblogs.com/gao628526/p/8665187.html)

徐铭博:(http://www.cnblogs.com/xmb1547828350/p/8657376.html)

4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间

C程序第二次作业的更多相关文章

  1. C语言程序第二次作业

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...

  2. Java程序第二次作业

    1.编写“人”类及其测试类.1.1 “人”类: 类名:Person 属性:姓名.性别.年龄.身份证号码 方法:在控制台输出各个信息1.2 测试类 类名:TestPerson 方法:main ...

  3. 耿丹CS16-2班第二次作业汇总

    -- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...

  4. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  5. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  6. 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...

  7. 程序设计第二次作业<1>

    面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...

  8. homework-02,第二次作业——寻找矩阵最大子序列和

    经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...

  9. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

随机推荐

  1. 经典面试问题: Top K 之 ---- 海量数据找出现次数最多或,不重复的。

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  2. Treeview 丢失焦点后依然高亮 SelectedNode

    参考:StackOverFlow.Control.Validating 事件 注意 TreeView 的 HideSelection 要保持为默认值True. private TreeNode pre ...

  3. 什么是PostBack(译)

    什么是PostBack(译) What is a postback? 下面的内容是针对ASP.NET新手的 PostBack什么时候被引发? PostBack由客户端浏览器引发.通常是用户操作(点击按 ...

  4. [Luogu2973][USACO10HOL]赶小猪

    Luogu sol 首先解释一波这道题无重边无自环 设\(f_i\)表示\(i\)点上面的答案. 方程 \[f_u=\sum_{v,(u,v)\in E}(1-\frac PQ)\frac{f_v}{ ...

  5. 网络游戏开发-服务器(01)Asp.Net Core中的websocket,并封装一个简单的中间件

    先拉开MSDN的文档,大致读一遍 (https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets) WebSocket 是一 ...

  6. python数据类型——字典类型

    字典(dictionary) python中唯一的映射类型,采用键值对(key-value)的形式储存数据,python对key进行哈希函数运算,所以key值必须是可哈希的,可哈希表示key必须是不可 ...

  7. jquery pjax 用法总结

    以前我们点击a链接的时候总是会刷新整个页面并跳转到新页面,中间可以很明显的看到短暂的白屏.pjax就很好的解决了这问题. pjax的原理很简单,就是发送一个ajax请求,获取html代码,再把相关代码 ...

  8. 关于 preHandle 重写和添加参数问题,重写HttpServletRequestWrapper和Filter

    由于 preHandle 中HttpServletRequest 只有setAttribute而没有setParameter 也没有 add 方法 所以是没办法直接添加参数的.从网上查了很多资料,基本 ...

  9. UWP 创建动画的极简方式 — LottieUWP

    提到 UWP 中创建动画,第一个想到的大多都是 StoryBoard.因为 UWP 和 WPF 的界面都是基于 XAML 语言的,所以实现 StoryBoard 会非常方便. 来看一个简单的 Stor ...

  10. Win10_x86_x64PE维护光盘——我用过最好用的PE

    先感谢hongxj和fish2006两位大大提供的PE. 先放出所有工具的下载地址: hongxj的PE:https://yunpan.cn/crAw6HS6ar9ck  访问密码 4a4e fish ...