码迷,mamicode.com
首页 > 其他好文 > 详细

第二次作业

时间:2018-04-09 00:26:29      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:result   include   变量类型   设计   结果   字符   作业   ref   scanf   

第二次作业

提交列表

技术分享图片

第一题

设计思路

1.因为要删除所有数字,那么在输出字符时,当数组内的元素等于数字时,数组输出零
2.用循环,把输出出来的新数组整合,就能得到想要的结果

流程图

技术分享图片

技术分享图片

代码

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

调试

技术分享图片

对或跟且运用不是很熟悉

第二题

设计思路

1.设计个循环控制数组输出
2.当数组连续三次都相等时让num+1,最后输出num,即为出现的次数

代码

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

调试

技术分享图片
改正方法:‘\0‘忘记加,字符串是以\0为结束标志,找不到\0会越界访问。

第三题

设计思路

1.设计两个循环形成循环嵌套,然后控制字符串排序
2.借用冒泡排序法的思路,完成代码

代码

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

调试

技术分享图片

无错误

第四题

设计思路

1.输入学生人数,动态分配,用for循环相加成绩
2.令max,min,等于数组第一个元素,比较大小,并用for循环交换

代码

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

float max_a(float x,float y)
{
 float z;
 if(x>y)
 z=x;
 else
 z=y;
 return(z);
}
float min_a(float x,float y)
{
 float z;
 if(x<y)
 z=x;
 else
 z=y;
 return(z);
}

调试

技术分享图片

原因:缺少函数定义 float p=(float )malloc(n);
方法:通过与同学交流并查询书籍得知

第五题

设计思路

1.定义结构体。
2.用for循环输入n个员工的姓名 基本工资 浮动工资 支出。
3.计算并输出。

流程图

技术分享图片

代码

#include<stdio.h>
struct person{
    char name[100];
    float w;
    float w1;
    float account;
}person1;
int main()
{

    int n,i;
    float pay;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s %f %f %f",&person1.name,&person1.w,&person1.w1,&person1.account);
        pay=person1.w+person1.w1-person1.account;
        printf("%s %.2f\n",person1.name,pay);
    }
    return 0;
}

调试

技术分享图片
问题:在编译器运行时结果跟输出样例一样,但是PTA判断我答案错误。
原因:在我仔细的审过题目后,我发现我漏掉了这一点 把定义的变量类型改为float后答案正确。

第六题

设计思路

1.使用结构体类型进行结构体变量的引用,且根据题意后面应为s1[10]。
2.输入N的值,遍历数组,输入s1[i].number,s1[i].name,s1[i].score并将它们储存起来,计算出sum的值。
3.在for循环中,判断s1[i].score与avg的大小,最后按要求输出元素

流程图

技术分享图片

代码

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

技术分享图片
问题:输出时将s1[i].number的%s写成%d。
解决:在单步调试后知道错误的代码行,重新观察后找出问题所在

第七题

设计思路

1.定义一个结构体,并在其中定义学号num,姓名name,分数score,成绩等级grade。
2.主函数中:引用结构体,并输入学生个数n,用一个for语句进行数据录入,引用函数进行计算,最后进行输出。
3.函数中:用for语句进行遍历,并用if语句进行等级的区分,其中如果在D等级则不及格人数count加一。最后返回count值

代码

#include <stdio.h>
#define MAXN 10
int set_grade( struct student *p, int n )
{
    int j=0,result=0;
    for(j=0;j<n;j++)
    {
        if(p[j].score<60)
        {
            result++;
        }
    }
    for(j=0;j<n;j++)
    {
        if(((p+j)->score)>=85&&((p+j)->score)<=100)
        {
            ((p+j)->grade)=‘A‘;
        }else if(((p+j)->score)>=70&&((p+j)->score)<=84)
        {
            ((p+j)->grade)=‘B‘;
        }else if(((p+j)->score)>=60&&((p+j)->score)<=69)
        {
            ((p+j)->grade)=‘C‘;
        }else if(((p+j)->score)>=0&&((p+j)->score)<=59)
        {
            ((p+j)->grade)=‘D‘;
        }
    }
    return result;
 } 

调试

问题:最开始没有看到返回不及格人数的条件,导致前两个点出现错误

第八题

设计思路

1.先定义函数,引入变量
2.在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可

代码

#include <stdio.h>
void calc(struct student *p,int n)
{
    int k=0;
    for(k=0;k<n;k++)
    {
        (p+k)->sum=(p+k)->score[0]+(p+k)->score[1]+(p+k)->score[2];
    }   
}
void sort(struct student *p,int n)
{
    int k=0,l=0;
    struct student swap;
    for(k=0;k<n;k++)
    {
        for(l=k+1;l<n;l++)
        {
            if(p[k].sum<p[l].sum)
            {
                swap=p[k];p[k]=p[l];p[l]=swap;
            }
        }
    }
    
}

点评

黄国戎
金海宽
金海东

学习总结和进度

1.本周学习的结构,但是运用还不是很纯熟,需要多加练习

学习曲线

技术分享图片

第二次作业

标签:result   include   变量类型   设计   结果   字符   作业   ref   scanf   

原文地址:https://www.cnblogs.com/jinjian155/p/8746877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!