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. 【POJ2387】Til the Cows Come Home (最短路)

    题面 Bessie is out in the field and wants to get back to the barn to get as much sleep as possible bef ...

  2. Frogger POJ - 2253

    题意 给你n个点,1为起点,2为终点,要求所有1到2所有路径中每条路径上最大值的最小值. 思路 不想打最短路 跑一边最小生成树,再扫一遍1到2的路径,取最大值即可 注意g++要用%f输出!!! 常数巨 ...

  3. java.lang.OutOfMemoryError: PermGen space有效解决方法

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  4. .NET微服务 容器化.NET应用架构指南(支持.NET Core2)

    介绍 企业通过使用容器,日益实现成本节约.解决部署问题并改进 DevOps 和生产操作. 通过创建 Azure 容器服务.Azure Service Fabric 等产品,同时与 Docker.Mes ...

  5. 如何直接在github上预览html网页效果

    http://justcoding.iteye.com/blog/2321552 2.vue 配合vue-resource调用接口,获取数据   https://www.cnblogs.com/fei ...

  6. 百度定位一直出现4.9E -324的问题解决方法

    问题:华为mate10一直在申请百度定位的时候出现此问题并且定位权限和定位服务都打开的情况也是返回这个参数 明显没有定位成功,其他手机暂时没有出现(只要打开定位权限就会立即定位成功) 解决:在定位之前 ...

  7. elfinder源码浏览-Volume文件系统操作类(1)

    今天看了一个文件管理的java后台源码,elfinder 发现这个东东比我写的代码效率告到不知道哪去了,苦思冥想后还是抽点时间看看吧.. 它实现了我们电脑上的所以关于文件操作的动作,并生成了api开放 ...

  8. C语言引用另一个源文件中定义的数组

    C语言中是可以引用另外一个源文件的全局数组的,但是不能引用局部数组. 引用方式举例如下: 设a.c文件有有数据定义 int  array1[10]; 现有b.c文件中想访问a.c中的array1数组 ...

  9. GeoJSON JS判断某一点是否在某一区域范围之内

    GeoJSON JS判断某一点是否在某一区域范围之内 算法: function isInPolygon(checkPoint, polygonPoints) { var counter = 0; va ...

  10. conda下载速度慢——添加源

    清华提供的anaconda镜像,使用以后真的很快!尤其在学校龟速的网络环境里提速非常明显. https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ TU ...