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

第二次作业

时间:2018-04-08 22:42:52      阅读:388      评论:0      收藏:0      [点我收藏+]

标签:于平   部分   分享   思路   include   下标   bst   not   git   

6-7 删除字符串中数字字符

1.设计思路
第一步:定义一个j=0;建立一个for循环吧数组输入
第二步:判断数组中是否含有0到9的数字,如果有则把相应数放到j里,并且让j++,使其下标向后移一位.
第三步:将数组j里的最后一位定义为结束符.
流程图:
技术分享图片

2.实验代码

void delnum(char *s)
{
int i,j=0;
for(i=0;*(s+i)!=‘\0‘;i++)
{
    if(!(*(s+i)>=‘0‘&&*(s+i)<=‘9‘))
    {
        *(s+j)=*(s+i);  
        j++;
    }
    
}
 *(s+j)=‘\0‘;
}
  1. 错误信息:答案错误.
    错误原因:将j++放在了if语句外.
    改正方法:将j++放在了if内

6-8 统计子串在母串出现的次数

1.设计思路
第一步:定义一个count=0,记录相同的字符串出现的次数,利用for循环遍历,
第二步:判断三次for循环判断substr中的元素是否在str中出现
第三步:如果出现了count就++,否则i++,继续判断是否含有相同字符串
流程图
技术分享图片

2.实验代码

int fun(char *str,char *substr){
        int i,count=0;
        for(i=0;*(str+i)!=‘\0‘;i++)
        {
            if(*(str+i)==*(substr))
            {
                if(*(str+i+1)==*(substr+1))
                {
                    if(*(str+i+2)==*(substr+2))
                    {
                        count++;
                    }
                }
            }
        }
        return count;
    }
  1. 错误信息:答案错误
    错误原因:定义了俩个for循环,结果是否相同的字符串弄混
    改正方法:看完主函数是3个,所以用了三个if

6-9 字符串中除首尾字符外的其余字符按降序排列

1.设计思路
第一步:定义俩个for循环,第一个for循环从处了第一个前往后定义;第二个从倒数第二个后往前定义
第二步:判断数组中后一位是否比前一位大
第三步:如果大则定义一个t,使其交换位置
流程图

2.实验代码

int fun(char *s,int num)
{
    int i,j,k,t;
    for(i=1;i<num-1;i++)
    {
        for(j=num-2;j>i;j--)
        {
            if(*(s+j)>*(s+j-1))
            {
                t=*(s+j);
                *(s+j)=*(s+j-1);
                *(s+j-1)=t;
         }
        }
    }
}
  1. 错误信息:答案错误
    错误原因:忘记了第一位和第二位不换
    改正方法:将for循环第一位改成第二位和倒数第二位

7-1 输出学生成绩

1.设计思路
第一步:先定一个n,使其记录输入几个数组.
第二步:利用for循环,判断每个人的总成绩
第三步:利用for循环,找出最大最小值
第四步:运用公式求平均值,然后输出平均数,最大值,最小值.
流程图

2.实验代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int N;
    double sum=0,max,min,avg,*p;
    int i;
    scanf("%d",&N);
    if((p=(double *)calloc(N,sizeof(double)))==NULL)
    {
        printf("Not able to allocate memory.\n");
        exit(1);
    }
    for(i=0;i<N;i++)
    {
        scanf("%lf",p+i);
        sum=sum+*(p+i);
    }
    max=*p,min=*p;
    for(i=0;i<N;i++)
    {
        if(*(p+i)>max)
        max=*(p+i);
        if(*(p+i)<min)
        min=*(p+i);
    }
    avg=sum*1.0/N;
    printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf\n",avg,max,min);
    free(p);
}

3
错误信息:答案错误
错误原因:if((p=(double *)calloc(N,sizeof(double)))==NULL),当中数据类型未匹配
改正方法:将int改成double

7-1 计算职工工资

1.设计思路
第一步:利用struct将基本成员定义
第二步:输入数组中有几人
第三步:利用for循环输入每个人的工资
第四步:利用公式将实发工资求出并输出
流程图
技术分享图片

2.实验代码

#include<stdio.h>
struct woker{
    char name[10];
    float jb,fd,zc,sf;
}; 
int main()
{
    struct woker w1;
    int n,i;
    scanf("%d",&n); 
    for(i=0;i<n;i++)
    {
        scanf("%s %f %f %f",w1.name,&w1.jb,&w1.fd,&w1.zc);
        w1.sf=w1.jb+w1.fd-w1.zc;
        printf("%s %.2f\n",w1.name,w1.sf);
    }
}
  1. 错误信息:编译错误
    错误原因:在运用公式时未使用变量名
    改成方法:将基本变量前加上变量名

7-2 计算平均成绩

1.设计思路
第一步:利用struct定义基本变量
第二步:定义输入每个人的变量,并求出每个人的总成绩
第三步:求出平均值并保留俩位小数
第四步:利用for循环判断如果数组中的成绩有小于平均值的则输出个人基本信息
流程图

2.实验代码

#include<stdio.h>
struct students{
    char No[6];
    char name[10];
    int  ach;
}; 
int main()
{
    struct students s[10];
    int N,i,sum=0;
    double ave;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%s %s %d",s[i].No,s[i].name,&s[i].ach);
        sum=sum+s[i].ach;
    }
    ave=sum*1.0/N;
    printf("%.2lf\n",ave);
    for(i=0;i<N;i++)
    {
        if(s[i].ach<ave)
        {
            printf("%s %s\n",s[i].name,s[i].No);
        }
    }
}
  1. 错误信息:部分正确
    错误原因:再求平均值时未乘1.0变成分数
    改正方法:在总和上*1.0

6-1 按等级统计学生成绩

1.设计思路
第一步:定义一个变量q记录未及格人数,
第二步:利用for循环判断是否有小于60的人,如果有则q++
第三步:在for循环中将每个成绩换分为A,B,C,D档.
第四步:在for循环结束return q;
流程图
技术分享图片

2.实验代码

int set_grade( struct student *p, int n ){
    int i,q=0;
    for(i=0;i<n;i++,p++){
        if(p->score<60){
            q++;
        }
        if((p->score>=85)&&(p->score<=100)){
            p->grade =‘A‘;
        }else if((p->score>=70)&&(p->score<=84)){
            p->grade =‘B‘;
        }else if((p->score>=60)&&(p->score<=69)){
            p->grade=‘C‘;
        }else{
            p->grade=‘D‘;
        }
    }
    return q;
} 
  1. 错误信息:编译错误
    错误原因:在for循环里变量增加是未将 p++使数组元素进行到下一个
    改正方法:在变量增加时多加一个p++

6-2 结构体数组按总分排序

1.设计思路
第一步:利用函数求出每个元素的三科成绩的和
第二步:利用struct 定义一个定义t
第三步:利用选择排序判断相邻俩位数的大小,并利用t调换位置
流程图

2.实验代码

void calc(struct student *p,int n)
{
    int i;
    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,j;
    struct student t;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            if(p[j].sum<p[j+1].sum)
            {
                t=p[j];
                p[j]=p[j+1];
                p[j+1]=t;
            }
        }
    }
}
  1. 错误信息:编译错误
    错误原因:在判断大小时用了指针箭头型
    错误方法:将箭头sum型改成.sum型

作业要求

1.作业总结:学习了struct的构造,更能方便达到所用的效果.但在使用->和.的时候运用的不够灵活,有待提高
2.点评:
刘传海: http://www.cnblogs.com/l15846798381/p/8735259.html
白松涛: http://www.cnblogs.com/baisongtao/p/8734432.html
姜健: http://www.cnblogs.com/jj990519/p/8688931.html
3.托管
我的git地址: https://git.coding.net/dalaohu30/20180325.git
技术分享图片
4.表格.

技术分享图片

第二次作业

标签:于平   部分   分享   思路   include   下标   bst   not   git   

原文地址:https://www.cnblogs.com/caobaiqiang/p/8659674.html

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