第2次作业
6-7 删除字符串中数字字符
1 设计思路
(1)主要描述题目算法
第一步:定义相应数组的指针。
第二步:在循环中判断非数字字符,保留原数组的非数字字符。
第三步:循环结束后添加字符串结束符。
(2)流程图
2.实验代码
#include "stdio.h"
void delnum(char *s);
int main ()
{ char item[80];
gets(item);
delnum(item);
printf("%s\n",item);
return 0;
}
void delnum(char *s)
{
char *p = s;
while(*p != '\0')
{
if((*p < '0')||(*p > '9'))
{
*s++ = *p;
}
*p++;
}
*s = '\0';
}
3.本题调试过程碰到问题及解决办法
未遇到问题。
6-8 统计子串在母串出现的次数
1 设计思路
(1)主要描述题目算法
第一步:在循环中判断母串中每个字符后三位是否完全与字串相符。
第二步:在循环中每符合一次字串增加计数器。
第三步:返回计数。
(2)流程图
2.实验代码
#include<stdio.h>
int fun(char *str,char *substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
int n;
n=fun(str,substr);
printf("n=%d\n",n);
return 0;
}
int fun(char *str,char *substr)
{
int a,b,n;
for(a = 0,n = 0;*(str + a) != '\0';a = a + 1)
{
for(b = 0;b < 3;b = b + 1)
{
if(*(str + a + b) != *(substr + b))
{
break;
}
}
if(b >= 3)
{
n = n + 1;
}
}
return n;
}
3.本题调试过程碰到问题及解决办法
未遇到问题。
6-9 字符串中除首尾字符外的其余字符按降序排列
1 设计思路
(1)主要描述题目算法
第一步:在除首尾字符的字符串内进行冒泡排序。
第二步:将字符按ASCII码降序排列。
(2)流程图
2.实验代码
#include <stdio.h>
int fun(char *s,int num);
int main()
{
char s[10];
gets(s);
fun(s,7);
printf("%s",s);
return 0;
}
int fun(char *s,int num)
{
char x;
int a,b;
for(a = 0;a < (num - 3);a = a + 1)
{
for(b = 0;b < (num - 3 - a);b = b + 1)
{
if(*(s + b + 1) < *(s + b + 2))
{
x = *(s + b + 1);
*(s + b + 1) = *(s + b + 2);
*(s + b + 2) = x;
}
}
}
}
3.本题调试过程碰到问题及解决办法
未遇到问题。
7-1 输出学生成绩
1 设计思路
(1)主要描述题目算法
第一步:输入人数申请动态内存。
第二步:在循环内输入成绩,储存总值,最大值,最小值。
第三步:计算平均值,输出对应值。
第四步:释放内存。
(2)流程图
2.实验代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,n,*p;
double ave,max,min;
scanf("%d",&n);
p = (int *)calloc(n,sizeof(int));
for(a = 0,ave = 0;a < n;a = a + 1)
{
scanf("%d",(p + a));
if(a == 0)
{
max = *(p + a);
min = *(p + a);
}
ave = ave + *(p + a);
if(max <= *(p + a))
{
max = *(p + a);
}
if(min >= *(p + a))
{
min = *(p + a);
}
}
ave = ave / n;
printf("average = %.2f\nmax = %.2f\nmin = %.2f",ave,max,min);
free (p);
}
3.本题调试过程碰到问题及解决办法
未遇到问题。
7-1 计算职工工资
1 设计思路
(1)主要描述题目算法
第一步:构造数据类型,输入人数。
第二步:在循环内输入相应数据,计算相应数值。
第三步:输出相应值。
(2)流程图
2.实验代码
#include <stdio.h>
struct staff
{
char name[10];
float basic_salary;
float floating_wage;
float expenditure;
};
int main()
{
struct staff s1;
int n,a;
float real_wages;
scanf("%d",&n);
for(a = 0;a < n;a = a + 1)
{
scanf("%s %f %f %f",s1.name,&s1.basic_salary,&s1.floating_wage,&s1.expenditure);
real_wages = s1.basic_salary + s1.floating_wage - s1.expenditure;
printf("%s %.2f\n",s1.name,real_wages);
}
}
3.本题调试过程碰到问题及解决办法
未遇到问题。
7-2 计算平均成绩
1 设计思路
(1)主要描述题目算法
第一步:构造数据类型数组,输入人数。
第二步:在循环内输入相应值,计算总值。
第三步:计算平均值输出。
第四步:在循环内判断程序输出相应数据。
(2)流程图
2.实验代码
#include <stdio.h>
struct student
{
char student_id[6];
char name[10];
int grade;
};
int main()
{
struct student s[10];
int n,a,sum;
double ave;
scanf("%d",&n);
for(a = 0,sum = 0;a < n;a = a + 1)
{
scanf("%s %s %d",s[a].student_id,s[a].name,&s[a].grade);
sum = sum + s[a].grade;
}
ave = sum / (1.0 * n);
printf("%.2f\n",ave);
for(a = 0;a < n;a = a + 1)
{
if(s[a].grade < ave)
{
printf("%s %s\n",s[a].name,s[a].student_id);
}
}
}
3.本题调试过程碰到问题及解决办法
错误信息1:输出学号时同时输出了姓名。
错误原因:缺少字符串结束符。
改正方法:定义学号时增加范围。
6-1 按等级统计学生成绩
1 设计思路
(1)主要描述题目算法
第一步:在循环内判断学生成绩并判断更改成绩等级。
第二步:在循环内判断不及格人数并计数结束后返回。
(2)流程图
2.实验代码
#include <stdio.h>
#define MAXN 10
struct student{
int num;
char name[20];
int score;
char grade;
};
int set_grade( struct student *p, int n );
int main()
{ struct student stu[MAXN], *ptr;
int n, i, count;
ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n");
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}
int set_grade( struct student *p, int n )
{
int a,num = 0;
for(a = 0;a < n;a = a + 1)
{
if((p[a].score >= 85) && (p[a].score <= 100))
{
(&p[a])->grade = 'A';
}
else if((p[a].score >= 70) && (p[a].score <= 84))
{
(&p[a])->grade = 'B';
}
else if((p[a].score >= 60) && (p[a].score <= 69))
{
(&p[a])->grade = 'C';
}
else if((p[a].score >= 0) && (p[a].score <= 59))
{
(&p[a])->grade = 'D';
num = num + 1;
}
}
return num;
}
3.本题调试过程碰到问题及解决办法
未遇到问题。
6-2 结构体数组按总分排序
1 设计思路
(1)主要描述题目算法
第一步:在循环内计算更改学生总成绩。
第二步:构造一个相同结构。
第三步:冒泡排序判断总成绩进行排序。
(2)流程图
2.实验代码
#include <stdio.h>
struct student
{
int num;
char name[15];
float score[3];
float sum;
};
void calc(struct student *p,int n);
void sort(struct student *p,int n);
int main()
{
struct student stu[5];
int i,j;
float f;
for(i=0;i<5;i++)
{
scanf("%d%s",&stu[i].num,stu[i].name);
for(j=0;j<3;j++)
{
scanf("%f",&f);
stu[i].score[j]=f;
}
}
calc(stu,5);
sort(stu,5);
for(i=0;i<5;i++)
{
printf("%5d%15s",stu[i].num,stu[i].name);
printf(" %.1f %.1f %.1f %.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].sum);
}
return 0;
}
void calc(struct student *p,int n)
{
int a;
float sum = 0;
for(a = 0;a < n;a = a + 1)
{
(&p[a])->sum = p[a].score[0] + p[a].score[1] + p[a].score[2];
}
}
void sort(struct student *p,int n)
{
struct student q;
int a,b;
for(a = 0;a < (n - 1);a = a + 1)
{
for(b = 0;b < (n - a - 1);b = b + 1)
{
if(p[b].sum < p[b + 1].sum)
{
q = p[b];
p[b] = p[b + 1];
p[b + 1] = q;
}
}
}
}
3.本题调试过程碰到问题及解决办法
错误信息1:答案错误。
错误原因:未完全检验多种情况,出现多种排序错误。
改正方法:更改使用冒泡排序。
学习总结和进度
1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?
学习了动态内存分配,结构。
结构数组使用,结构函数使用,指针传递结构体数据。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
1.git地址
https://git.coding.net/z732511533/ZYS.git
3、点评3个同学的本周作业。
http://www.cnblogs.com/xmb1547828350/p/8657376.html
http://www.cnblogs.com/dx2017/p/8666072.html
http://www.cnblogs.com/fengzx/p/8672569.html
4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间。
时间 | 代码行数 | 时间1(min) | 博客字数 | 时间2(min) |
---|---|---|---|---|
3.26 | 97 | 100 | 564 | 20 |
3.27 | 0 | 0 | 355 | 70 |
3.28 | 0 | 0 | 0 | 0 |
3.29 | 60 | 70 | 0 | 0 |
3.30 | 0 | 0 | 0 | 0 |
3.31 | 0 | 0 | 0 | 0 |
4.01 | 0 | 0 | 572 | 57 |
4.02 | 150 | 88 | 426 | 78 |
4.03 | 0 | 0 | 0 | 0 |
4.04 | 0 | 0 | 0 | 0 |
4.05 | 0 | 0 | 0 | 0 |
4.06 | 0 | 0 | 0 | 0 |
4.07 | 0 | 0 | 0 | 0 |
4.08 | 0 | 0 | 129 | 25 |
4.09 | 0 | 0 | 0 | 0 |