第2次作业

6-7 删除字符串中数字字符
1 设计思路
(1)主要描述题目算法
第一步:定义相应数组的指针。
第二步:在循环中判断非数字字符,保留原数组的非数字字符。
第三步:循环结束后添加字符串结束符。
(2)流程图
第2次作业_第1张图片
第2次作业_第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次作业_第3张图片
第2次作业_第4张图片
2.实验代码

#include
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次作业_第5张图片
第2次作业_第6张图片
2.实验代码

#include 
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次作业_第7张图片
2.实验代码

#include 
#include 
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次作业_第8张图片
2.实验代码

#include 
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次作业_第9张图片
2.实验代码

#include 
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次作业_第10张图片
第2次作业_第11张图片
2.实验代码

#include 
#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次作业_第12张图片
第2次作业_第13张图片
第2次作业_第14张图片
2.实验代码

#include 
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
第2次作业_第15张图片
第2次作业_第16张图片
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

第2次作业_第17张图片

你可能感兴趣的:(第2次作业)