zoukankan      html  css  js  c++  java
  • C-语言第二次作业(大一下)

    要求一、设计过程

                                                          作业(1)

    1.提交列表

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

     2.设计思路(6分)

         (1)主描述题目算法。
             第一步:设出字符char *srt,char*substr;

             第二步:使用for循环语句和if语句,判断是否数字字符;

                       第三步: 循环寻找或结束语句。
         (2)流程图

    主函数调用:

    返回主函数:

     3.实验代码

    void delnum(char *s)
    {
            int i,m=0;
            for(i=0;*(s+i)!='';i++)
            {
                if(*(s+i)>='0'&&*(s+i)<='9')
                {
                }else
                {
                    *(s+m)=*(s+i);
                    m++;
                }
            }
            *(s+m)='';
        }
     

    4.本题调试过程碰到问题及解决办法。

        
           改正方法:并且符号是两个&&。

         

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

         (1)描述题目算法
             第一步:列出char*str,并使用函数char str[81]="asdasas";
             第二步:使用for语句和if语句统计字符出现字数,令str依次srt+i,str+i+1...; 

             第三步:返回函数。

    3.实验代码(2分)   

    int fun(char *str,char *substr){
            int i,count=0;
            for(i=0;*(str+i)!='';i++){
                if(*(str+i)==*(substr)){
                    if(*(str+i+1)==*(substr+1)){
                        if(*(str+i+2)==*(substr+2)){
                            count++;
                        }
                    }
                }
            }
            return count;
        }

     4.本题调试过程碰到问题及解决办法(4分)

        

           改正方法:‘'忘记加\,字符串是以为结束标志,找不到会越界访问。

          .

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

         (1)描述题目算法
             第一步:设出指针,用外循环控制循环数,num-1次;
             第二步:用for循环和if语句判断字符ASCII大小;

             第三步:判断后交换大小。

    3.实验代码

    int fun(char *s,int num){
             int i,j,k,temp;
             for(i=1;i<num-2;i++){
                 k=i;
                 for(j=i+1;j<num-1;j++){
                     if((int)(*(s+k))<(int)(*(s+j))){
                         k=j;
                     }
                 }
                if(k!=i){
                 temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;
                 }
            }
             return 0;
         }

     4.本题调试过程碰到问题及解决办法

         

           改正方法:第一次限制循环未控制在num-1次。

         

    7-1 输出学生成绩

         (1)描述题目算法
             第一步:输入学生人数,动态分配;
             第二步:用for循环相加成绩;

             第三步:令max,min,等于数组第一个元素,比较大小,并用for循环交换。

    3.实验代码   

     #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i,n;
        float sum=0,average,max,min;
        scanf("%d",&n);
        float *p=(float *)malloc(n);
        for(i=0;i<n;i++){
            scanf("%f",(p+i));
            sum+=*(p+i);
        }
        min=*(p+0);max=*(p+0);
        for(i=0;i<n;i++){
            if(min>*(p+i)){
                min=*(p+i);
            }
            if(max<*(p+i)){
                max=*(p+i);
            }
        }
        printf("average = %.2f
    ",sum/n*1);
        printf("max = %.2f
    ",max);
        printf("min = %.2f
    ",min);
        return 0;
    }

    4.本题调试过程碰到问题及解决办法

         

           错误原因:min=*(p);max=*(p);输出后与列子不同。
           改正方法:min=*(P+0);max=*(p+0);表示依次加。


     作业(2) 

    1.提交列表

    .

    2.设计思路(6分)

     7-1 计算职工工资

            (1)描述题目算法。

             第一步:设出变量,使用结构算法;
             第二步:用for循环语句,保证正确输出;

                       第三步:令实际工资=s1.j+s1.f-s1.z,输出。
     

         (2)流程图

         

    3.实验代码   

    #include <stdio.h>
    struct clerk
    {
      float j,f,z;
      char name[10];
    };
    
    int main()
    {
      int i,n;
      float pay;
      scanf("%d",&n);
      struct clerk s1;
      for(i=1;i<=n;i++)
      {
      scanf("%s %f %f %f",s1.name,&s1.j,&s1.f,&s1.z);
      pay=s1.j+s1.f-s1.z;
      printf("%s %.2f
    ",s1.name,pay); 
      }
      return 0;
    }

     4.本题调试过程碰到问题及解决办法。   

             错误原因:第一次使用数组的方法,麻烦且没有成功。
           改正方法:使用简单的for循环,数据结构就很容易编写。

    7-2 计算平均成绩

          (1)描述题目算法。

             第一步:定义结构;

             第二步:计算平均值 ,输出;         

             第三步:用for循环,if语句,判断每人成绩是否小于平均值;若是。则输出,学生和学号。

    3.实验代码 

    #include <stdio.h>
    struct student
    {
      char num[6];
      char name[10];
      int grade;
      double average;
    };
    
    int main()
    {
      int i,N,sum = 0;
      double average;
      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].grade);
      sum = sum + s[i].grade;
      }
      average = (double)(sum/N);
      printf("%.2f
    ",average);
      for(i=0;i<N;i++)
      {
      if(s[i].grade<average)
      {
       printf("%s %s
    ",s[i].name,s[i].num);  
      }
      }  
      
      return 0;
    }   

     4.本题调试过程碰到问题及解决办法。

                              解决方法:' '一直打成'/n',令答案错误。

    作业(3)

    1.提交列表

     2.设计思路(6分)

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

              (1)描述题目算法。

             第一步:列出指针;     

             第二步:用for循环,if语句判断学生成绩是否小于60;

             第三步:count 在每次又小于60的同学,逐渐+1;

             第四步:返回count的值到主函数。

          (2)流程图

    3.实验代码   

    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;
    } 

     4.本题调试过程碰到问题及解决方法。

     

                                        解决方法:要定义n。

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

         (1)描述题目算法。
             第一步:列出指针,结构体;
             第二步:用for循环,一个循环第n个人的成绩总数值,一个计算第n个人的成绩总值;

                      第三步:用冒泡法排序,按总成绩大小排序,交换。

    3.实验代码  

    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,t;
        struct student temp;
        for(i=0;i<n-1;i++){
            t=i;
            for(j=i;j<n;j++){
                if(((p+t)->sum)<((p+j)->sum)){
                    t=j;
                }
            }
            if(t!=i){
                temp=*(p+i);*(p+i)=*(p+t);*(p+t)=temp;
            }
        }
    }

     4.本题调试过程碰到问题及解决办法(4分)

        

           错误原因:if((p+t)->sum)<((p+j)->sum)),少加一个括号。
           改正方法:加上即可。

    要求二、学习总结和进度

    1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?

    在这两周学习了结构和在结构体中使用指针。将结构和两个结构的写法听的很清楚明白并感觉对for循环和if语句又有了更清楚的认识。没有学习明白指针在结构的使用,还是对函数有些苦恼,会尽快弄明白。

    2、GIT:https://git.coding.net/GUANCHENG/101.git

    3、点评3个同学的本周作业。

      张心悦:http://www.cnblogs.com/zxy980612/p/8696690.html

      丰大为:http://www.cnblogs.com/DavidPark/p/8664273.html

      王姝雯:http://www.cnblogs.com/phsudie/p/8661686.html

    4、折线图。

     

  • 相关阅读:
    hadoop 2.5.1 、Hadoop 2.7 Hadoop 2.6
    二 JDK + mysql + yum + rpm
    一 SSH 无密码登陆 & Linux防火墙 & SELinux关闭
    ZooKeeper 配置注意事项 zoo.cfg
    ZooKeeper 特性
    分布式锁
    悲观锁和乐观锁
    windows上配置mysql主从复制
    C# 同步调用、异步调用、异步回调
    C#方法回调
  • 原文地址:https://www.cnblogs.com/gu-an-cheng-wxm/p/8697025.html
Copyright © 2011-2022 走看看