第二次作业

1.作业要求1

注:在最近的两次PTA之中逐渐开始利用devcpp来先行测试,在复制之后经常出现字母复制不全导致的编译错误。

在此鸣谢王文博同学的指导与帮助

作业要求二

题目1 删除字符串中数字字符

1. 设计思路

(1). 算法

第一步:定义数字等于要修改的字符数组s

第二步:修改s,把非数字元素赋给s

(2).流程图

(3).代码

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

 

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

无。

 

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

1.设计思路

(1).算法

第一步:定义fun函数,定义变量i。

第二步:运用for循环与if进行判断,

第三步:若字符相等则数字num加一,最后返回num。

(2).代码

 

int fun(char *str,char *substr)
{
int i=0;
int j=0;
int k=0;
int num=0;
for(i=0;str[i]!='\0';i++)
{ 
for(j=i,k=0;substr[k]==str[j];k++,j++) 
{ 
if(substr[k+1]=='\0') 
{ 
num++; 
} 
}
}
return num; 
}

 

 

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

在开始考虑时过于片面,未考虑全部情况。

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

1. 设计思路

(1).算法

首尾字符排除,剩余按照从大到小的顺序排列(冒泡排序法)

(2).流程图

(3).代码

int fun(char *s,int num)
{
int i,j,k;
for(i=1;i<num-1;i++)
{
for(j=num-2;j>i;j--)
{
if(*(s+j)>*(s+j-1))
{
char t;
t=*(s+j),*(s+j)=*(s+j-1),*(s+j-1)=t;
}
}
}
}

 

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

无(先行由同学一起整理循环思路)

题目4 输出学生成绩

1. 设计思路

(1).算法

计算平均值,求出最大值和最小值,

输出数据。

(2).代码

#include <stdio.h>
int main()
{
int N,grade,k,i=1;
float average,max,min,sum=0.0;
float maxy(float x,float y);
float miny(float x,float y);
scanf("%d",&N);
for(k=0;k<N;k++)
{
scanf("%d",&grade);
sum=sum+grade;
if (i==1)
{ max=grade;
min=grade;
i--;
}
max=maxy(max,grade);
min=miny(min,grade);
}
average=sum/N;
printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min);
return 0;
}
float maxy(float x,float y)
{
float z;
if(x>y)
z=x;
else
z=y;
return(z);
}
float miny(float x,float y)
{
float z;
if(x<y)
z=x;
else
z=y;
return(z);
}

 

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

题目5 计算职工工资

1. 设计思路

(1). 算法

创建message结构,输入数据

计算工资并输出

(2).流程图

(3).代码

struct message 
{
char name[10];
float jibengz;
float fudonggz; 
float zhichu;
float sum;
};
int main()
{
int n;
scanf("%d",&n);
struct message m1;
while(n--)
{
scanf("%s%f%f%f",m1.name,&m1.jibengz,&m1.fudonggz,&m1.zhichu);
m1.sum=m1.jibengz+m1.fudonggz-m1.zhichu;
printf("%s %.2f\n",m1.name,m1.sum);
}
}

 

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

(1).开始时未能及时发现定义int的错误,在其他题中也是习惯性地定义int,常常不能改正

(2).在当堂课学习时循环部分未能及时掌握,在开始的几次中折了几次跟头。

题目6 计算平均成绩

1. 设计思路

(1).算法

创建student结构,输入,计算平均成绩后输出

逐一对比,任意学生成绩在平均成绩下,则输出其信息

(2).代码

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

 

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

错误原因:无

题目7 按等级统计学生成绩

1. 设计思路

(1). 算法

判断学生成绩的等级,并赋给变量

若为D,count++,最后返回count

(2).流程图

(3).代码

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

 

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

else关系运用熟练度不够

题目8 结构体数组按总分排序

1. 设计思路

(1). 算法

计算学生的总成绩,并用按总成绩降序排列学生(冒泡排序法)

(2).代码

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

 

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

作业要求三

1. 知识的总结

复习指针,学习结构(元素及数组)。自主复习while,if ,else等语句的使用

表格(空【懒了。。。。。。】)

2. 代码管理

未能及时完成

3. 点评

邓吃鱼(邓欣茹):http://www.cnblogs.com/dxfish/p/8747579.html

段策                     :http://www.cnblogs.com/duance/p/8747911.html

张piuipiu(张琪):http://www.cnblogs.com/zhang03/p/8735481.html

 

 

posted @ 2018-04-08 23:19  手残少年  阅读(248)  评论(1编辑  收藏  举报