2018第二次作业

Posted 顾家玮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018第二次作业相关的知识,希望对你有一定的参考价值。

一.PTA

作业1:

1.删除字符串中数字字符

1).设计思路

(1).主要描述题目算法

第一步:定义主函数
第二步:定义数组,用do while语句判断字符是否为数字,不是则s[j]=s[i];j++;循环后将最后一位赋值‘\\0’

(2).流程图

2).实验代码

、
#include<stdio.h>


void delnum(char *s)
{
int i=0,j=0;  
do

{  

    if(!(s[i]>=\'0\'&&s[i]<=\'9\'))
	{  
       s[j]=s[i];
       j++;
	    
              
        
       
    }  
    i++;  
}  
while(s[i]!=\'\\0\');
s[j]=\'\\0\';
}  
、

3).遇到的问题及解决方法

开始出现思路错误,换一种思路后没有遇到问题。

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

1).设计思路

主要描述题目算法

第一步:定义主函数
第二步:定义指针,循环变量i和总数num,当字符不为空字符时,如果字符为\'a\',\'s\',\'d\'的一种,则num++,统计出num的值,最后返回num

2).实验代码

、
#include<stdio.h>

int fun(char *str,char *substr)
{
int i=0,num=0;

while(*(str+i)!=\'\\0\')
{
    if(*(str+i)==\'a\'&&*(str+i+1)==\'s\'&&*(str+i+2)==\'d\')
	{
        num++;
    }
    i++;
}
return num;

} 

3).遇到的问题及解决方法

本题没有问题。

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

1).设计思路

主要描述题目算法

第一步:定义主函数
第二步:定义指针,循环变量i,j,置换字符temp,用for循环判断两个字符数值大小,将数值大的字符置换至前面,再用一个for循环排除首末位,输出字符串。

2).实验代码

、
#include <stdio.h>


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

3).遇到的问题及解决方法

在第二个for循环去掉首末位时出现几次错误,尝试几次后错误排除。

4.输出学生成绩

1).设计思路

主要描述题目算法

第一步:定义变量,输入学生人数
第二步:for循环判断成绩的大小,得出最大最小值和总和
第三步:输出最高成绩,最低成绩,平均成绩

2).实验代码

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

作业2:

5.计算职工工资

1).设计思路

(1).主要描述题目算法

第一步:定义结构体,数组,变量
第二步:输入人数,引用结构体
第三步:用for循环输入数据,输出结果

(2).流程图

2).实验代码

、
#include<stdio.h>
struct work
{
char name[10];
float jiben;
float fudong;
float zhichu;
float sum;
};
int main()
{
int n,i;
scanf("%d",&n);
struct work a[n];
for(i=0;i<n;i++)
{
	scanf("%s %f %f %f",&a[i].name,&a[i].jiben,&a[i].fudong,&a[i].zhichu);
	a[i].sum=(a[i].jiben+a[i].fudong)-a[i].zhichu;
	printf("%s %.2f\\n",a[i].name,a[i].sum);
}


}
、

3).遇到的问题及解决方法

本题没有问题。

6.计算平均成绩

1).设计思路

主要描述题目算法

第一步:定义结构体,数组,变量
第二步:输入人数,引用结构体
第三步:for循环输入数据,计算平均成绩并输出,另一个for循环比较成绩与平均数成绩的大小,如果成绩小于平均成绩则输出姓名学号

2).实验代码

、
#include<stdio.h>
struct student
{
char xuehao[6];
char name[10];


int grade;
};
int main()
{
int n,i,sum=0;
float average;
scanf("%d",&n);
struct student a[n];
for(i=0;i<n;i++)
{
	scanf("%s %s %d",a[i].xuehao,a[i].name,&a[i].grade);
	sum=sum+a[i].grade;
	average=1.0*(sum/n);
}
    
	printf("%.2f\\n",average);
	for(i=0;i<n;i++)
	{
	if(a[i].grade<average)
	{
		printf("%s %s\\n",a[i].name,a[i].xuehao);
		}
	}
}
、

3).遇到的问题及解决方法

开始将学号的字符串定义为5位导致无法结束字符串,修改位数后输出正常。

作业3:

7.按等级统计学生成绩

1).设计思路

(1).主要描述题目算法

第一步:观察主函数定义
第二步:定义循环变量,不及格人数,for循环判断是否不及格,不及格则num++,另一个for循环判断分数等级

(2).流程图

2).实验代码

、
#include <stdio.h>
#define MAXN 10


int set_grade( struct student *p, int n )
{
int j=0,num=0;
for(j=0;j<n;j++)
{
if(p[j].score<60)
{
    num++;
}
}
for(j=0;j<n;j++)
{
if((p[j].score)>=85&&(p[j].score)<=100)
{
    (p[j].grade)=\'A\';
}else if((p[j].score)>=70&&(p[j].score)<=84)
{
    (p[j].grade)=\'B\';
}else if((p[j].score)>=60&&(p[j].score)<=69)
{
    (p[j].grade)=\'C\';
}else if((p[j].score)>=0&&(p[j].score)<=59)
{
    (p[j].grade)=\'D\';
}
}
return num;
 } 

3).遇到的问题及解决方法

本题没有问题。

8.结构体数组按总分排序

1).设计思路

主要描述题目算法
第一步:观察主函数定义
第二步:第一个函数for循环求出分数总和,第二个函数for循环比较两人分数总和,分数高的置换到前面。

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=0;
struct student t;
for(i=0;i<n;i++)
{
    for(j=i+1;j<n;j++)
    {
        if(p[i].sum<p[j].sum)
        {
            t=p[i];
			p[i]=p[j];
			p[j]=t;
        }
    }
}

}
、

3).遇到的问题及解决方法

第二个函数的for循环j的初始值最初出现错误,修改后正确。

二.学习总结

1.这两周学习了指针及结构,主要学习了结构数组,结构指针等知识,在结构指针方面须加强。

2.git地址:https://coding.net/u/q807443119/p/zuoye/git/tree/master/?public=true

3.点评

郭钊毅 http://www.cnblogs.com/nothingistrue/p/8747979.html
班庆泽 http://www.cnblogs.com/wsbqz/p/8746704.html
丰大为 http://www.cnblogs.com/DavidPark/p/8664273.html

4.学习进度

以上是关于2018第二次作业的主要内容,如果未能解决你的问题,请参考以下文章

2018第二次作业

软件工程(2018)第二次个人作业

软件工程(2018)第二次团队作业

OO第二次博客作业(2018春)

软件工程(2018)第二次个人作业

软件工程(2018)第二次团队作业