7-2 求最大值及其下标 (20 分)
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
基础作业要求:
请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始)。并将最大值和对应的最小下标数值写入文件。
输入:
请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。
输出:
在不删除原有文件内容的情况下,将最大值和对应的最小下标数值写入文件。
实验代码(基础作业):
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int n,x,y,z;
if((fp=fopen("E:\zwx.txt","a+"))==NULL){
printf("File open error!
");
exit (0);
}
fscanf(fp,"%d",&n);
for(int i=0;i<n;i++){
fscanf(fp,"%d",&x);
if(i==0){
y=x;
z=0;
}
if(x>y){
y=x;
z=i;
}
}
printf("%d %d",y,z);
fprintf(fp,"
%d %d",y,z);
if(fclose (fp)){
printf("Can not close the file!
");
exit (0);
}
return 0;
}
设计思路(基础作业):
(有点瑕疵,不过问题不大(指有几个判定框应该是流程框而不是判定框))
对这次作业的评价(基础作业):
遇到的问题以及解决方法:
1)遇到的问题:
问题1:无法将数据从文本里提取出来使用.
问题2:无法将数据正确输入文本里.
2)解决方法:
方法1:从书上的示例代码找到打开文件还有关闭文件以及使用文本的代码.
方法2:通过翻书寻找方法,发现使用fprintf函数输入就可以输入.
用时:4小时
心得:第一次接触文件有关的程序,对指针和文件读写的函数还不太熟悉,一点点修改把程序完成了,还是不够熟练.
运行结果截图(基础作业):
运行程序前
运行程序后
挑战作业要求:
给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。
实验代码(挑战作业):
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int n,m=0,x,y,a=0,b=0,c=0;
if((fp=fopen("E:\zwx.txt","a+"))==NULL){
printf("File open error!
");
exit (0);
}
fscanf(fp,"%d",&n);
for(int i=0;i<n;i++){
fscanf(fp,"%d",&x);
if(x==0){
a++;
}
if(x>0){
b++;
m=m+x;
}
if(x<0){
if(c==0){
y=x;
}
if(x>y){
y=x;
}
c++;
}
}
if(a!=0&&b==0){
printf("0");
}
if(b!=0){
printf("%d",m);
}
if(a==0&&b==0&&c!=0){
printf("%d",y);
}
if(fclose (fp)){
printf("Can not close the file!
");
exit (0);
}
return 0;
}
设计思路(挑战作业):
对这次作业的评价(挑战作业):
遇到的问题以及解决方法:
1)遇到的问题:
问题1:对只有负数和0的输出不了0
问题2:对有正负数混杂的输出不了
2)解决方法:
方法:全都是后面的条件设置不准确
用时:1.5小时
心得:第二次写这种类型的题,相比第一次做不知道文件的使用方式要好很多所以也就快了(画流程图和截图好麻烦)
运行结果截图(挑战作业):
运行程序前1
运行程序后1
运行程序前2
运行程序后2
运行程序前3
运行程序后3
运行程序前4
运行程序后4