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=;
for(i=;*(s+i)!='\0';i++){
if(*(s+i)>=''&&*(s+i)<=''){
}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=;
for(i=;*(str+i)!='\0';i++){
if(*(str+i)==*(substr)){
if(*(str+i+)==*(substr+)){
if(*(str+i+)==*(substr+)){
count++;
}
}
}
}
return count;
}

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

修改后的代码如下:

int fun(char *str,char *substr)
{
int i=,j=,k=,count=;
for(i=;str[i]!='\0';i++)
{
for(j=i,k=;str[j]==substr[k];j++,k++)//起始的判断条件为str的第i个元素与substr的第0个元素是否相等
if(substr[k+]=='\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=;i<num-;i++){
k=i;
for(j=i+;j<num-;j++){
if((int)(*(s+k))<(int)(*(s+j))){
k=j;
}
}
if(k!=i){
temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;
}
}
return ;
}

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=,average,max,min;
scanf("%d",&n);
float *p=(float *)malloc(n);
for(i=;i<n;i++){
scanf("%f",(p+i));
sum+=*(p+i);
}
min=*(p+);max=*(p+);
for(i=;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 ;
}

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函数;

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

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

C高级第二次PTA作业的更多相关文章

  1. 第二周c语言PTA作业留

    6-1 计算两数的和与差(10 分) 本题要求实现一个计算输入的两数的和与差的简单函数. 函数接口定义: void sum_diff( float op1, float op2, float psum ...

  2. C高级第二次作业

    PTA作业第一部分 6-7 删除字符串中数字字符(10 分) 删除一个字符串中的所有数字字符. 函数接口定义: void delnum(char *s); 其中 s是用户传入的参数. 函数的功能是删除 ...

  3. C高级第一次PTA作业 要求三

    要求一.要求二 内容链接:http://www.cnblogs.com/X-JY/p/8550457.html 一.PTA作业中的知识点总结 1.6-1 计算两数的和与差(10 分) (1)*在程序中 ...

  4. 2018上C语言程序设计(高级)博客作业样例

    要求一(20分) 完成PTA中题目集名为<usth-C语言高级-第1次作业>中的所有题目. 要求二 PTA作业的总结(20分+30分) 将PTA第1次作业作业中以下2道题的解题思路按照规定 ...

  5. 2018上C语言程序设计(高级)- 第1次作业成绩

    作业地址 https://edu.cnblogs.com/campus/hljkj/CS2017-01/homework/1638 评分准则 第一次作业各项成绩包括三项: 完成PTA所有题目:20分 ...

  6. C高级第三次作业

    C高级第三次作业(1) 6-1 输出月份英文名 1.设计思路 (1)算法: 第一步:定义整型变量n,字符指针s,输入一个数赋给n. 第二步:调用函数getmonth将值赋给s. 第三步:在函数getm ...

  7. 2016福州大学软件工程第二次团队作业——预则立&&他山之石成绩统计

    第二次团队作业--预则立&&他山之石成绩统计结果如下: T:团队成绩 P:个人贡献比 T+P:折算个人成绩,计算公式为T+T/15*团队人数*P 学号 组别 Team P T+P 03 ...

  8. 关于Axure RP软件的介绍——软件工程实践第二次个人作业

    关于Axure RP软件的介绍——软件工程实践第二次个人作业 Axure RP是一个非常专业的快速原型设计的一个工具,客户提出需求,然后根据需求定义和规格.设计功能和界面的专家能够快速创建应用软件或W ...

  9. SDN 第二次上机作业

    SDN第二次上机作业 1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 ...

随机推荐

  1. SQL Server查询优化中的两个选项

    本文中,我们将介绍两个SQL Server中的可用概念,它们是使用SQL Server时值得注意的技术. 1.        OPTIMIZE FOR Unknown SQL Server 2005版 ...

  2. ActiveMQ异步分发消息

    org.apache.activemq.ActiveMQConnection 类中有个参数: protected boolean dispatchAsync=true; 这个参数的含义到底是什么? 使 ...

  3. nc(netcat)扫描开放端口

    探测单个端口是否开放可以用telnet,专业探测端口可以用Nmap,而对于非渗透用途的Linux可以直接用netcat. 1.使用netcat探测端口是否开放 nc -z -v - #z代表不交互要不 ...

  4. 逆袭之旅DAY10.东软实训.

  5. learning ddr pagesize calculate

    example: if DDR is 512MB*16*8 COLBITS = 10,  A0-A9 be used for cloumn address. ORG = 16 ,  each bank ...

  6. 尚学堂java 答案解析 第六章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.C 解析:对void下的函数,可以使用"return;"表示结束之意,但不能&q ...

  7. Ubuntu下如何访问Windows磁盘?

    有些同学的电脑原来是Windows系统的,但为了需要,又下载了一个Ubuntu系统,变成双系统的电脑. 但是,在Ubuntu下,Windows的磁盘是打不开的,用网盘或者U盘又是很不方便,所以ljn教 ...

  8. 使用RxSwift 实现登录页面的条件绑定

    我们在使用MVC建构进行开发时,对登录页面用户名密码等进行的处理一般是这样的,点击登录按钮判断用户框以及密码框输入的合法性,用一堆if真是屎一般!或者用textfield的代理来进行响应其实也是屎一般 ...

  9. (C/C++学习笔记)附页: C/C++各数据类型的相关说明

  10. [leetcode53]最长子数组 Maximum Subarray Kadane's算法

    [题目] Given an integer array nums, find the contiguous subarray (containing at least one number) whic ...