第二次作业
1)C高级第一次PTA作业(1)
2)C高级第一次PTA作业(2)
3)C高级第一次PTA作业(3)
6-7 删除字符串中数字字符
//设计思路
1)文字部分
1.确定题意,本题要求为删除指针 s所指的字符串中的所有数字字符;
2.观察主函数,主函数输入输出部具备,无需返回值;
3.使用for循环,检索s函数,当遇到数字时把向前推进一位,把数字元素挤掉
2)调试中的错误
无
//代码部分
void delnum(char *s)
{
int i=0,k=0;
for(;s[i]!='\0';)
{
if(s[i]>='0'&&s[i]<='9')
{
for(k=i;s[k]!=0;k++)
s[k]=s[k+1];
}
else
i++;
}
}
6-8 统计子串在母串出现的次数
//设计思路
1)文字部分
1.确定题意,本题要求为统计一个长度为3的字符串在另一个字符串中出现的次数。
2.观察主函数,主函数输入输出部具备,需要返回值代表出现的次数;
3.在for循环内嵌套一个for查找并使用标记进行计数;
2)调试中的错误
无
//代码部分
int fun(char *str,char *substr)
{
int n=0,i=0,k=0,flag=0;
for(i=0;str[i]!='\0';i++)
{
for(k=0;substr[k]!='\0';k++)
{
if(substr[k]==str[i+k])
flag=1;
else
flag=0;
}
if(flag)
{
n++;
flag=0;
}
}
return n;
}
6-9 字符串中除首尾字符外的其余字符按降序排列
//设计思路
1)文字部分
1.确定题意,本题要求为把输入的字符串s中除首、尾字符外的其余字符按降序排列;
2.观察主函数,主函数输入输出部均具备,且主函数无需返回值;
3.定义一个下标min用于记录最小值,在进行了n次查找后确定最小值确定在倒数第二位;
4.使用冒泡排序法依此将字符按降序排列;
2)流程图
3)调试中的错误
错误:错误的把min的初始值定义为(num-1),导致字符串最后一位也加入排序
解决方法:检查过后发现问题
//代码部分
int fun(char *s,int num)
{
int i,min=(num-2),k;
for(i=1;i<=(num-2);i++)
{
if(s[min]>s[i])
{
k=s[min];s[min]=s[i];s[i]=k;
}
}
if(num>0)
{
num--;
fun(s,num);
}
}
7-1 输出学生成绩
//设计思路
1)文字部分
1.确定题意,本题要求为把输入的字符串求平均值,最大,最小值,要求使用动态分配;
2.由于本题要求使用动态内存分配,所以引用stdlib库;
3.使用malloc给s分配一个长度为n的int型数组;
4.使用for语句可易得输出值max,min,avg;
5.释放s的动态内存;
2)流程图
3)调试中的错误
无
//代码部分
#include<stdio.h>
#include<stdlib.h>
int main()
{
double avg=0,max=0,min=999;
int i=0,*s,n;
scanf("%d",&n);
if((s=(int *)malloc(n*sizeof(int)))==NULL)
exit(1);
for(i=0;i<n;i++)
{
scanf("%d",s+i);
if(s[i]>max)
max=s[i];
if(s[i]<min)
min=s[i];
avg+=s[i];
}
avg/=n;
free(s);
printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,max,min);
}
7-1 计算职工工资
//设计思路
1)文字部分
1.确定题意,本题要求为按输入顺序输出姓名与实际工资;
2.编写结构体,其中包含字符串姓名,单精度浮点型的基本,浮动,支出与实际工资;
3.通过for循环实现输出,值得注意的是输入要求为float型;
4.易得需输出的实际工资;
2)流程图
3)调试中的错误
错误:输入时使用int型的基本,浮动工资,导致答案错误;
解决方法:仔细审题并且在赵寅胜同学的帮助下意识到了问题;
//代码部分
#include<stdio.h>
struct people
{
char name[10];
float jiben,fudong,zhichu;
float m;
};
int main()
{
int i=0,n;
scanf("%d",&n);
struct people s[n];
for(i=0;i<n;i++)
{
scanf("%s %f %f %f",&s[i].name,&s[i].jiben,&s[i].fudong,&s[i].zhichu);
s[i].m=(s[i].jiben+s[i].fudong-s[i].zhichu);
}
for(i=0;i<n;i++)
{
printf("%s %.2f\n",s[i].name,s[i].m);
}
}
7-2 计算平均成绩
//设计思路
1)文字部分
1.确定题意,本题要求为计算给定的N个学生的平均成绩,并顺序输出平均线以下的学生名单;
2.编写结构体,其中包含字符串型的编号和姓名,整型的成绩;
3.可简单采用for执行输入与平均值的计算;
4.利用for可实现历遍以记录输出;
2)调试中的错误
无
//代码部分
#include<stdio.h>
struct student
{
char num[6],name[10];
int s;
};
int main()
{
int i=0,n;
double avg=0;
scanf("%d",&n);
struct student s[n];
for(i=0;i<n;i++)
{
scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].s);
avg+=s[i].s;
}
avg/=n;
printf("%.2lf\n",avg);
for(i=0;i<n;i++)
{
if(s[i].s<avg)
printf("%s %s\n",s[i].name,s[i].num);
}
}
6-1 按等级统计学生成绩
//设计思路
1)文字部分
1.确定题意,本题要求为将输入的p中的score进行分级,并将等级输入到grade中;
2.观察主函数,主函数输入输出部具备,需要返回值表示不及格人数;
3.使用for与if语句易得出判断结果,要注意在0~59分数段要进行返回值的增加;
2)流程图
3)调试中的错误
无
//代码部分
int set_grade( struct student *p, int n )
{
int c=0,i=0;
for(;i<n;i++)
{
if((p+i)->score>=85&&(p+i)->score<=100)
{
(p+i)->grade='A';
}
if((p+i)->score>=70&&(p+i)->score<=84)
{
(p+i)->grade='B';
}
if((p+i)->score>=60&&(p+i)->score<=69)
{
(p+i)->grade='C';
}
if((p+i)->score>=0&&(p+i)->score<=59)
{
(p+i)->grade='D';
c++;
}
}
return c;
}
6-2 结构体数组按总分排序
//设计思路
1)文字部分
1.确定题意,本题要求为给定学生数据,用函数calc求出每名学生的总分,用函数sort按每名学生的总分从高到低对这组数据进行排序
2.观察主函数,主函数输入输出部均具备,且两函数均无需返回值;
3.在函数calc中可用for循环简单得出总分;
4.在函数sort中主要使用冒泡排序法可对数据进行排序;
2)调试中遇到的问题
无
1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?
本阶段感觉上来说是对指针知识的一次深入的复习,并且新学习了结构体的一些知识,几次作业下来我感觉比较重要在新学的内容中比较常用的是结构数组方面的知识,我感觉在地址分配方面的知识还是有些不清晰,对于什么时候适合使用地址分配的方面还是很模糊的
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。请注意git地址应是类似“https://git.coding.net/Dawnfox/wf4_2.git”这样的字符串且是可被访问者直接点击进行访问的链接。
地址:https://git.coding.net/q871057265/lwq.git
3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。
暂无
4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间