6-7 删除字符串中数字字符

1.设计思路:

(1)算法:

第一步:定义一个字符数组item,输入一个字符串赋给字符数组item。调用函数delnum,

第二步:在函数delnum中定义循环变量i=0,和变量j=0,

第三步:借助for循环表达式二条件为*(s+i)!='\0',如果*(s+i)不是数字就执行*(s+j)=*(s+i),j++,否则什么都不执行,然后i++,

第四步:*(s+j)='\0'

第五步:输出字符串item

(2)流程图:

2.实验代码:

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

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

错误信息1:编译错误

错误原因:在if语句中判断条件中数字字符没加单引号。

改正方法:数字字符要加单引号。

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

1.设计思路:

(1)算法:

第一步:定义字符数组str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd",定义整型数字n的值为函数fun(str,substr)

第二步:在函数fun中定义循环变量i=0,count=0;

第三步:在for循环中判断条件为*(str+i)!='\0',如果*(str+i)==*(substr)成立并且*(str+i+1)==*(substr+1)和*(str+i+2)==*(substr+2)同时成立,count++;否则什么都不执行,i++

第四步:输出n;

(2)流程图:

2.实验代码:

    int fun(char *str,char *substr){int i,count=0;for(i=0;*(str+i)!='\0';i++){if(*(str+i)==*(substr)){if(*(str+i+1)==*(substr+1)){if(*(str+i+2)==*(substr+2)){count++;}}}}return count;}

目前的代码只能解决题目,而不具备通用性,

修改后的代码如下:

int fun(char *str,char *substr)
{int i=0,j=0,k=0,count=0;for(i=0;str[i]!='\0';i++){for(j=i,k=0;str[j]==substr[k];j++,k++)//起始的判断条件为str的第i个元素与substr的第0个元素是否相等if(substr[k+1]=='\0'){count++;}}}return count;
}

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

错误信息1:无

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

1.设计思路:

(1)算法:

第一步:定义一个字符数组s[10],

第二步:输入一个字符串赋给s[10],

第三步:调用函数fun,

第四步:在函数fun中对数组元素除了首尾元素外进行选择排序,并从大到小排列,

第五步:输出字符串s,

(2)流程图:

2.实验代码:

     int fun(char *s,int num){int i,j,k,temp;for(i=1;i<num-2;i++){k=i;for(j=i+1;j<num-1;j++){if((int)(*(s+k))<(int)(*(s+j))){k=j;}}if(k!=i){temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;}}return 0;}

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

7-1 输出学生成绩

1.设计思路:

(1).算法

第一步:定义浮点型数sum=0,average,max,min整型数i,n

第二步:对n赋值,

第三步:定义指针变量p为浮点型,借助malloc函数申请连续内存空间,内存为n,

第四步:输入n个数据一次赋值给*(p+i),并求出总分数sum,

第五步:借助for循环找出最大成绩赋给max最小成绩赋给min,

第六步:输出平均数 最高成绩和最低成绩,

(2)流程图:

2.实验代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{int i,n;float sum=0,average,max,min;scanf("%d",&n);float *p=(float *)malloc(n);for(i=0;i<n;i++){scanf("%f",(p+i));sum+=*(p+i);}min=*(p+0);max=*(p+0);for(i=0;i<n;i++){if(min>*(p+i)){min=*(p+i);}if(max<*(p+i)){max=*(p+i);}}printf("average = %.2f\n",sum/n*1.0);printf("max = %.2f\n",max);printf("min = %.2f\n",min);return 0;
}

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

碰到的问题:不会使用malloc函数不知道如何在内存的动态存储区中分配连续内存空间,

解决办法:用手机在百度上搜索在CSDN博客中了解如何使用。

malloc函数:

函数原型为 void *malloc(unsigned int size);

malloc(100);/*开辟100个字节的临时分配域,返回值为其第一个字节的地址*/

例如:int *p=malloc(100)/*开辟100个字节的临时分配域把起始地址赋给整型指针变量p*/

calloc函数:

函数原型为void *calloc(unsigned n,unsigned size);

例如:int *p=calloc(50,4)/*开辟50个字节的临时分配域,每个分配域的大小为4(整型),,把起始位置赋给指针变量p。

C高级第二次PTA作业(2)

7-1 计算职工工资

1.设计思路:

(1)算法:

第一步:定义一个结构体变量,结构体的名为wage,结构体中的成员为定义指针数组name[10],浮点型数字base_pay,floating_wage,expend,net_payroll,

第二步:在主函数中定义整型变量N,i,读入一个数字赋给N。

第三步:声明结构体的变量名,结构体的变量名为数组salary[N];

第四步:i=0,借助一个for循环对结构体变量进行赋值,并且求出结构体变量中的结构体变量salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend

第五步:i=0,借助for循环输出每一位职员的姓名和实发工资及输出salary[i].name,salary[i].net_payroll。

(2)流程图

2.实验代码:

#include <stdio.h>
#include <stdlib.h>
struct wage{char name[10];float base_pay;float floating_wage;float expend; float net_payroll; }; int main() { int N,i; scanf("%d",&N); struct wage salary[N]; for(i=0;i<N;i++){ scanf("%s %f %f %f",salary[i].name,&salary[i].base_pay,&salary[i].floating_wage,&salary[i].expend); salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend*1.0; } for(i=0;i<N;i++){ printf("%s %.2f\n",salary[i].name,salary[i].net_payroll); } return 0; }

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

错误信息1:

错误原因:在循环变量中i的初值为1,条件为i<=N;导致结构体变量数组越界了。

改正方法:i的初值为0,条件为i<N;

7-2 计算平均成绩

1.设计思路:

(1)算法:

第一步:定义一个结构体结构体名称为information,在结构体变量中成员有字符数组num[6]和name[11],整型变量grade。

第二步:在主函数中定义征信变量i和n,浮点型数average=0,整型数sum=0,读入一个数赋给n。

第三步:声明结构体的变量名为数组information massage[n]。

第四步:i=0,借助for循环条件为i<n,对结构体变量名information massage[i]赋值。求出sum=sum+massage[i].grade。

第五步:求出average=um*1.0/n,输出average。

第六步:i=0,借助for循环,判断条件为i<n,输出

(2)流程图:

2.实验代码:

错误的代码:

#include <stdio.h>
#include <stdlib.h>
struct information{char num[5];char name[10];int grade;
};
int main() { int i,N; float average=0; int sum=0; scanf("%d",&N); struct information massage[N]; if(N>0&&N<=10){ for(i=0;i<N;i++){ scanf("%s %s %d",massage[i].num,massage[i].name,&massage[i].grade); sum=sum+massage[i].grade; } average=sum*1.0/N; printf("%.2f\n",average); for(i=0;i<N;i++){ if(average>massage[i].grade){ printf("%s %s\n",massage[i].name,massage[i].num); } } } return 0; }

修改后的正确代码:

#include <stdio.h>
#include <stdlib.h>
struct information{char num[6];char name[11];int grade;
};
int main() { int i,N; float average=0; int sum=0; scanf("%d",&N); struct information massage[N]; if(N>0&&N<=10){ for(i=0;i<N;i++){ scanf("%s %s %d",massage[i].num,massage[i].name,&massage[i].grade); sum=sum+massage[i].grade; } average=sum*1.0/N; printf("%.2f\n",average); for(i=0;i<N;i++){ if(average>massage[i].grade){ printf("%s %s\n",massage[i].name,massage[i].num); } } } return 0; }

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

错误信息1:

错误原因:学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串),所以就定义char num[5];char name[10];忽略了字符串还有结束标志'\0',所以就输出错误

改正方法:将char num[5];char name[10];改成char num[6];char name[11];使字符串包含结束标志'\0'.

C高级PTA作业(3)

6-1 按等级统计学生成绩

1.设计思路:

(1)算法: 第一步:定义结构体类型变量,结构体名为student,结构体中的成员包括整型num,字符数组name[20],整型score,字符型grade。

第二步:定义结构体变量名为stu[10],*ptr。定义整型变量n,i,count。ptr=stu,读入一个书赋给n。

第三步:i=0,借助for循环对stu[i]赋值,条件为i<n。

第四步:调用set_grade函数,将函数的返回值赋给count。

第五步:在set_grade函数中,定义整型变量i,q=0。i=0,借助for循环判断p->score是否<60,成立q++,否则什么都不执行,在for循环中判断p->score属于什么等级,将等级赋给p->grade,返回q的值,

第六步:输出分数小于六十的人的个数,输出每个人的学号、姓名、等级。

(2)流程图:

2实验代码:

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

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

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

1.设计思路:

(1)算法:

第一步:定义结构体变量,结构体名为student,结构体的成员包括整型num,字符数组name[15],浮点型数组score[3],浮点型sum。

第二步:在主函数中定义结构体变量名为stu[5],整型变量i,j,浮点型数字f。

第三步:i=0,借助for循环对结构体变量stu[5]赋值,

第四步:调用calc函数,在calc函数中定义整型=0i,借助for循环求出(p+i)->sum的值,(p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2],

第五步:调用sort函数,在sort函数中定义整型i,j,t,定义结构体变量,变量名为temp,使用选择排序法进行排序按总分从高到低对这组数据进行排序,

第六步:输出所有成员的学号,姓名,各科的分数和总分。

(2)流程图:

2.实验代码:

void calc(struct student *p,int n){int i;for(i=0;i<n;i++){(p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2];}
}
void sort(struct student *p,int n){int i,j,t; struct student temp; for(i=0;i<n-1;i++){ t=i; for(j=i;j<n;j++){ if(((p+t)->sum)<((p+j)->sum)){ t=j; } } if(t!=i){ temp=*(p+i);*(p+i)=*(p+t);*(p+t)=temp; } } }

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

问题1:

错误原因:定义交换的temp为整型,他是不可能和结构体变量交换的

改正方法:定义temp为结构体变量就可以了

问题2:

错误的原因:在交换的时候由于马虎将代码打错了

修改方法:将temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;改成temp=*(p+i);*(p+i)=*(p+t);*(p+t)=temp;

我所评论的人:

辛静瑶:http://www.cnblogs.com/X-JY/p/8652592.html

姜健:http://www.cnblogs.com/jj990519/

袁中:http://www.cnblogs.com/2719610441qqcom/p/8660431.html

李新华:http://www.cnblogs.com/Lixinhua18/p/8671886.html

评论我的人:

陈天胤:

李新华:

申怡苗:

焦瑞君:

王文博:

https://gitee.com/tmjl/c_advanced_second_times_pta_operation/tree/master

知识点:

结构体的标识符 struct;在定义结构体变量时,不要忽略最后的分号

在结构体变量中,在编译时对垒形势不分配空间的,只对其中的变量分配空间。

结构体变量的引用是   “.”运算符(成员运算符),优先级是最高的,对结构体变量的赋值知更一个个赋值,不能整体赋值。

->  是指向运算符,p->n,表示得到p指向的结构体变量中的成员n的值。

结构体变量的变量名可以是数组,指针变量,在结构体中尽量多使用指针,可以减少编译的时间,同时可以加深对指针的使用。

在做题时所使用的知识点:

选择排序法;如何动态分配内存和相关的函数malloc,calloc函数;

结构体的定义与使用,如何对结构体变量赋值;

->指向运算符;.是成员运算符;

转载于:https://www.cnblogs.com/chenxidream/p/8654245.html

C高级第二次PTA作业相关推荐

  1. Java第二次pta大作业总结

    一.前言: 本次博客是主要针对在java学习第二阶段中的PTA作业的总结性博客,第二阶段的作业的难度与第一次阶段相比有所提高,对java的知识点的考察主要集中在正则表达式的运用.类的继承,以及多态等. ...

  2. 第二学期-第一次作业

    1-1. 计算两数的和与差 1.设计思路 第一步:设出被调用函数 op1, op2, *psum,  *pdiff ,利用被调函数计算*psum的值和*pdiff的值: 第二步:代入到主函数就是计算a ...

  3. 第二次阅读作业感想——在混沌的英文中爬取软件工程的哲学 刘宇翔

    第二次阅读作业,第一次一口气读完好几篇英文技术论文.在不断的翻译中匍匐前进,在各种生涩的单词中爬取软件工程的哲学.在这里简单谈一下我对这几篇文章的看理解和看法. <No Silver Bulle ...

  4. Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2

    吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...

  5. Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1

    吴恩达老师深度学习课程第五课(RNN)第二周编程作业1, 包含答案 Operations on word vectors Welcome to your first assignment of thi ...

  6. 华理c语言设计网上作业,华东理工大学第一学年第二学期网上作业参考答案C语言设计1...

    华东理工大学第一学年第二学期网上作业参考答案 考生答题情况 作业名称:2012年春季C语言设计(专)课程网上作业1 出 卷 人:SA 题号:1 题型:单选题(请在以下几个选项中选择唯一正确答案) 本题 ...

  7. 第二次数据库作业--gui

    第二次数据库作业--gui 1 package gui; 2 3 import action.C2SAction; 4 import action.CourseAction; 5 import act ...

  8. 20135202闫佳歆-第二章家庭作业-2.69

    第二章家庭作业 选题:2.69 分值:三分 作业过程: 以下是rotate_right函数的代码: unsigned rotate_right(unsigned x, int n) {int endb ...

  9. matlab第二次上机作业答案,第二次上机作业

    第二次上机作业 目的: 运行课本第四章及课堂上讲过的例子,掌握Matlab的流程控制语句.函数及脚本文件的编程.调试方法. 要求:1.本次作业要求全部写M文件:2题目要求未明确要求写脚本文件还是函数文 ...

  10. 中国石油计算机第二次在线作业,中国石油大学(北京)计算机应用基础第二次在线作业1教程.docx...

    中国石油大学(北京)计算机应用基础第二次在线作业1教程 第一次在线作业 窗体顶端 单选题 (共40道题) 窗体底端 第二阶段在线作业 窗体顶端 单选题 (共30道题) 1.(2.5分) 在Word的编 ...

最新文章

  1. 1051 Pop Sequence(两种双指针思路)
  2. db2 clob转mysql 的_Java中查询db2的clob列的问题
  3. Chapter 3 Phenomenon——24
  4. SSL加密包解析的几个概念梳理
  5. 重装云服务器上的系统后的重新部署项目
  6. python中do的用法,如何使用docplex(python)对优化问题中的约束进行建模?
  7. 吃屎是一种什么样的体验?
  8. 把所有圆圈连接起来的游戏_【实用教案】赶紧收藏!幼儿园秋季户外游戏大全、好玩易操作!...
  9. 为什么Docker,Vagrant和Ansible等工具比以往更热门
  10. bzoj3944 Sum 杜教筛
  11. nagios介绍及Server安装(三)
  12. hd_Lanswitch Web System
  13. hutool实战(带你掌握里面的各种工具)目录
  14. 内存映射机制(mmap)
  15. MPB:青岛大学苏晓泉组-使用Meta-Apo对16S扩增子的微生物组功能信息进行校正
  16. 图中奇度点的数量不可能有奇数个的证明
  17. linux的tar命令的exclude,mac 的tar命令--exclude和linux的tar命令--exclude的区别
  18. 提高睡眠质量的牛皮凉席!
  19. 【bzoj3653】谈笑风生
  20. 二手市场回收基于微信小程序和app两种应用开发uniapp

热门文章

  1. 中国英语学习论坛(3)
  2. [JavaSE] 二维数组详解【静态初始化和动态初始化区别】—Day13
  3. 将IFC模型转换为Revit模型后减肥
  4. c#:判断一个数组元素中否有重复元素
  5. 第五章_卷积神经网络(CNN)
  6. IllegalArgumentException: Mapped Statements collection already contains value
  7. 软件测试周刊(第08期):大过节的
  8. JavaSE笔记 30天学Java打卡 Day03
  9. 本地差分隐私 随机响应_本地化差分隐私:如何面对非可信的世界
  10. 文本分类入门(二)——训练