第2次作业

6-7 删除字符串中数字字符
1 设计思路
(1)主要描述题目算法
第一步:定义相应数组的指针。
第二步:在循环中判断非数字字符,保留原数组的非数字字符。
第三步:循环结束后添加字符串结束符。
(2)流程图
1237794-20180327195152393-1259471226.png
1237794-20180327195158053-1274413039.png
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)流程图
1237794-20180327195211088-1230961504.png
1237794-20180327195217719-769996799.png
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)流程图
1237794-20180327195230868-2034005292.png
1237794-20180327195235248-106164029.png
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)流程图
1237794-20180327195246249-1795769018.png
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)流程图
1237794-20180401142758396-1546519157.png
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)流程图
1237794-20180401142807677-1574674199.png
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)流程图
1237794-20180402185632948-1860988944.png
1237794-20180402185639627-745460944.png
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)流程图
1237794-20180402194213603-764095969.png
1237794-20180402194219553-1426189680.png
1237794-20180402194225003-1328123128.png
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
1237794-20180408193718960-86539691.jpg
1237794-20180408193859234-66237412.jpg
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.269710056420
3.270035570
3.280000
3.29607000
3.300000
3.310000
4.010057257
4.021508842678
4.030000
4.040000
4.050000
4.060000
4.070000
4.080012925
4.090000

1237794-20180408193606641-1701014797.png

转载于:https://www.cnblogs.com/2017023960ZYS/p/8653086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值