• 第二次作业


    C高级第二次作业(1)
    第一题:
    思路:
    建立for循环,利用if语句对数组中的每个组成进行判断,若是数字则用下一位代替,若不是则过。知道全部替换完成程序结束
    程序:
    void delnum(char *s)
    {
    int i=0,k=0;
    for(;s[i]!='';)
    {
    if(s[i]>='0'&&s[i]<='9')
    {
    for(k=i;s[k]!=0;k++)
    s[k]=s[k+1];
    }
    else
    i++;
    }
    }
    错误:

    第二题:
    思路:
    为了对比两个数组中的字母,需要两个循环变量一个为i一个为k,先使用循环找到第一个相同的字母,然后在利用判断语句使第二个变量k进入程序中,通过i与k的累加使数组可以连续对比,当对比达到三次后将计数变量m加1,并将k重新归0,进行下一次对比。
    程序:
    int fun(char *str,char *substr)
    {
    int i=0,k=0,m=0;
    for(;str[i]!='';i=i+1)
    {
    if(str[i]==substr[k])
    k=k+1;
    if(k==3)
    {
    m=m+1;
    k=0;
    }
    }
    return m;
    }
    错误:

    流程图:

    第三题:
    思路:
    字母的比较实际为ASCII码的比较,直接使用冒泡排序法就可以,因为不比较首位和末位,所一i直接从1开始,到n-2结束就行,相应的j也变为j<num-2
    程序:
    int fun(char *s,int num)
    {
    int i=0,j=0;
    char m;
    for(;j<num-2;j=j+1)
    {
    for(i=1;;i<num-2-ji=i+1)
    {
    if(s[i]<s[i+1])
    {
    m=s[i];
    s[i]=s[i+1];
    s[i+1]=m;
    }
    }
    }
    return 0;
    }
    错误:

    流程图:

    第四题:
    思路:
    利用动态内存分配将所求数输入,通过三个for循环将所求数求出。第一个for循环通过比较将最大max求出,第二个循环同理,第三个循环将和sum求出并用sum/n求出average,程序结束
    程序:
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    double average=0,max=0,min=101,sum=0;
    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);
    }
    for(i=0;i<n;i++)
    {
    if(*(s+i)>max)
    max=*(s+i);
    }
    for(i=0;i<n;i++)
    {
    if(*(s+i)<min)
    min=*(s+i);
    }
    for(i=0;i<n;i++)
    {
    sum=sum+*(s+i);
    }
    average=sum/n;
    free(s);
    printf("average = %.2lf max = %.2lf min = %.2lf",average,max,min);
    }
    错误:

    C高级第二次作业(2)
    第一题:
    思路:
    利用结构体将姓名、基本工资、基本工资和支出输入结构中,将基本工资+基本工资-支出求出收入,利用输出将姓名和收入输出
    程序:
    #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 ",s[i].name,s[i].m);
    }
    }
    流程图:

    错误:

    第二题:
    思路:
    利用结构组输入每个学生的学号,姓名,成绩,利用for循环将每一位学生的平均成绩求出,利用循环和比较找出在平均之下的学生,最后输出平均成绩和这几个学生的姓名与学号
    程序:
    #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 ",avg);
    for(i=0;i<n;i++)
    {
    if(s[i].s<avg)
    printf("%s %s ",s[i].name,s[i].num);
    }
    }
    错误:

    C高级第二次作业(3)
    第一题:
    思路:
    利用调用函数将数据带入子函数中,通过elseif语句四次比较将分数分为abcd四个等级并用等级代替成绩,若等级为d则记录一次n,最后输出n并利用for语句将学号姓名等级输出
    程序:
    int set_grade( struct student *p, int n )
    {
    int count = 0, i;
    for(i = 0;i<n;i++,p++)
    {
    if(p->score<60)
    {
    p->grade = 'D';
    count++;
    }
    else if((p->score<70)&&(p->score>=60))
    {
    p->grade = 'C';
    }
    else if((p->score<85)&&(p->score>=70))
    {
    p->grade = 'B';
    }
    else
    {
    p->grade = 'A';
    }
    }
    return count;
    }
    流程图:



    错误:

    第二题:
    思路:
    通过指着将数据带入调用函数中,利用for循环将每位学生的成绩之和求出,通过冒泡排序法将成绩的顺序排出,返回主函数将重新排列的结构组输出
    程序:
    void calc(struct student *p,int n)
    {
    int i=0;
    for(i=0;i<n;i++)
    {
    (p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2];
    }
    }
    void sort(struct student *p,int n)
    {
    int i=0,min=0;
    struct student k;
    for(i=0;i<n;i++)
    {
    if((p+i)->sum<(p+min)->sum)
    {
    min=i;
    }
    }
    k=*(p+min);
    *(p+min)=*(p+n-1);
    *(p+n-1)=k;
    if(n>1)
    {
    n--;
    sort(p,n);
    }
    }
    错误:

    总结:经过这两个星期的学习,我初步认识了结构组和结构指针,对结构组的使用比较熟练,结构指针还需要多多练习

    git上传:
    https://coding.net/u/jike1liuyu/p/ppp/git/blob/master/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E4%BD%9C%E4%B8%9A/%E7%A8%8B%E5%BA%8F.txt?public=true

    点评:
    刘富垚:http://www.cnblogs.com/lhyyy/p/8711554.html
    史泽文:http://www.cnblogs.com/shilcz/p/8696341.html
    王廷宇:http://www.cnblogs.com/archeralter/p/8746738.html

  • 相关阅读:
    Java并发专题 带返回结果的批量任务执行
    angualejs
    Java并发编程:Callable、Future和FutureTask
    mybatis
    InitialContext和lookup
    git 常用使用命令
    junit spring 测试
    redis windows
    为何PS出的RSS总和大于实际物理内存
    32位机器的LowMemory
  • 原文地址:https://www.cnblogs.com/liuyuly/p/8665788.html
Copyright © 2020-2023  润新知