2019年春季第二周 编程总结

题目描述:先在计算机硬盘中建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。

在用C语言编写程序以找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始)。

并将最大值和对应的最小下标数值写入文件。

最后在不删除原有文件内容的情况下,将最大值和对应的最小下标数值写入文件。

1 、程序代码:

复制代码
#include<stdio.h> 
#include<stdlib.h>

int main(void)
{
  FILE *fp;
  int i, a, n=0;      int num[8];      //i是序数,n是下标数,a是最大值。 

  if((fp=fopen("E:\2019年春季学期第二周作业__邓鹏\dengpeng.txt","a+"))==NULL)
  {
     printf("The specified file was not found!
");
     exit(0);     
  }                                    //文件已打开。 
  
  a=num[0];
  for(i=0;i<8;i++) 
  {
    fscanf(fp,"%d",&num[i]);
    printf("%d ",num[i]); 
      
    if(a<num[i])    // 对文件中的数进行大小比较并选出最大值及其所在数值中的下标次序。 
    {
        a=num[i];
        n=i;
    }
  }
  
  fprintf(fp,"

%d %d",a,n);  //两次回车,再将找出的最大值和其所在下标写进所在文件。 
  
   if(fclose(fp) )
   {
    printf("File close error!
");
    exit(0);
   }                                    //文件已关闭。 
   
  printf("
") ;  
  printf("%d %d",a,n);
  return 0;
}
复制代码

2 、文本建立截图,给定一个整数数组。

 

3 、程序运行结果的截图或者效果录像。

 

4 、设计思路(流程图)

 

5 、对自己作业的评价(存在的问题和解决办法、心得、完成作业的时间消耗)

 

  存在的问题:新认识的一些新函数,像fprintf函数语句与fscanf等函数语句的具体定义以及规定还非常模糊,以及新的声明头文件#include<string.h>和includu<stdlib.n>,完全不能清楚知道其概念、定义以其涉及的函数。

  解决办法:通过查找了书籍、博客和网上百度了解一些基本用法与规定。

  心得:学习需勤奋、细心、严谨。程序是写出来的,不是看书看出来的,不能“纸上谈兵”,应多注意实践。

  完成作业的时间消耗:大概有4个小时。

 

 

 

 

挑战作业

一、实验代码:

#include <stdio.h>
#include <stdlib.h>
int main (void) 
{
    int max,m,i,x=0,a[10];      //max为给定数组不全为负时子数组的最大和  
    FILE *dp;            //m为数组的组全为负时子数组的最大和,i和x为条件判断的变量 。 
       
    if((dp=fopen("E:\2019年春季学期第二周作业__邓鹏\给定的数组.txt","a+"))==NULL)
    {
     printf("The specified file was not found!
");
     exit(0);     
    }                          //打开文件。 
     
    for(i=0;i<10;i++)         //读写文件。 
     {
       fscanf(dp,"%d ",&a[i]);
       printf("%d ",a[i]);  
       if(a[i]<0)  x++ ;
     } 

    if(x==i)          //此时为给定整数数组的数全为负的情况。 
    {
        m=a[0];
        for(i=0;i<10;i++)
        {
         if(a[i]>m) 
         m=a[i];
        } 
        printf("
最大和的子数组b[i]:%d",m);
        printf("
最大的子数组的和max=: %d",m);
        
        fprintf(dp,"
最大和的子数组b[i]:%d ",m);       
        fprintf(dp,"
最大的子数组的和:max=%d",m);
    } 
    else                //此时为给定整数数组的数有正有负或全为正。
    {
        printf("
最大和的子数组b[i]:");
        for(i=0;i<10;i++)
        {     
         if(a[i]>=0)
          {
            printf("%d ",a[i]);
            max+=a[i];
          }
       }
       printf("
最大的子数组的和max=: %d",max);
       
       fprintf(dp,"
最大和的子数组b[i]: ");
       for(i=0;i<=10;i++)
       if(a[i]>=0)
       fprintf(dp,"%d ",a[i]);
       fprintf(dp,"
最大的子数组的和:max=%d",max);
    }
    
    if(fclose(dp) )              //关闭文件。 
    {
      printf("File close error!
");
      exit(0);
    } 
    return 0;
} 

二、设计思路

    首先,理解题目,先在自己的pc内存里建立TXT型文件,且文件内容设定为给定由10个整数组成的数组;开始编写程序,先定义三个变量和一个以10为上限的数组,定义一个文件指针,用指针找到个人电脑中指定的文件并进行读写;先使用for循环对给定的数组完整读写完;

    再由比较判断出给定数组正负的情况。使用for循环对数据进行处理:题目要求是“找到一个具有最大和的子数组”,即在给定的这个数组中选取一定的数重新组合成一个新数组即为子数组,且要使其内数相加为最大即最大和。故该子数组有三种可能的情况。

    【1】当那给定的数组全为负时,要使子数组的和有最大值,此时该数组中的最大值就是构成子数组的元素,还是唯一的元素,故最大和的值也为“给定数组的最大值”

    【2】当给定的数组中的整数有正有负或【3】全为正整数时,此时子数组的元素构成“特点”是应全为不小于零的数,即大于、等于零的数;再通过for循环计算出该最大和的值 和 子数组元素的成员。

     再是将得到的数据分别按情况写入原文件中,最后关闭文件,终止程序。

 

三、文本建立截图,整数数组(包含正负数)。

给定数组不全为负时:

给定数组的数全为负时 :

四、程序运行结果的截图或者效果录像。

给定数组不全为负时:

给定数组的数全为负时 :

 

原文地址:https://www.cnblogs.com/youlanghua/p/10496574.html