xiyuyan 发表于 2011-9-28 23:29:44

一个C语言题目的解答

从下一行开始到结尾即是程序代码,包含全部信息,唯有习语言编译工具支持这种文章风格的C程序,采用习语言最新版本编译运行:

第七题程序,原题描述:
文件data.in中保存有m (m < 2000) 个数据行,每行最多包含25个由空格分隔的正整数。
给出整数k(k <26),计算文件中第k列所有数据的最大值、最小值和平均值。
最大值和最小值以整数格式输出,平均值保持两位小数。若某行的列数小于k,则认为该行第k列的值为0
〖#包含 “习语言系统.接口”

字符串类型输入文件名 = “data.in”;
#定义最大行   2000
#定义最大列   25
#定义行最大字节数   2048
#定义缺省进制   10
整数类型 主函数(整数类型 参数个数, 字符串类型 参数[] )
{   
整数类型输入数据[最大行][最大列], 行,行数, 列, 数字, 最大值=-1, 最小值=-1;
字符类型    输入行[行最大字节数], *指针;
文件类型 * 输入文件;
小数类型    总和 = 0;

   输出字符串并换行("第七题程序处理开始,使用中文c-习语言编译工具编译");
【先都初始化为 0】
步进循环( 行 = 0; 行 小于 最大行; 行 加加 )
{
步进循环( 列 = 0; 列 小于 最大列; 列 加加 )
   输入数据[行][列] = 0;
}
输入文件 = 文件打开( 输入文件名, “读”);
如果( 输入文件等于 空指针 )
{
格式输出( “无法打开文件%串%行”,输入文件名);
返回 1;
}
行=-1, 列=0;
重复{
如果( 文件读字符串( 输入文件, 输入行, 行最大字节数 ) )
{
   如果( 行 小于 最大行-1 )行 ++, 列 = 0;
   否则 跳出;
   
   指针 = 输入行;
   当( 字符串长度(指针) 大于 0 )
   {
    数字 = 字符串转整数( 指针, 缺省进制 , & 指针 );
    格式输出(“行 %整 :数字=%整%行”,行, 数字 );   【调试用,可屏蔽】
    如果( 列 小于 最大列 ) 输入数据[行][列++] = 数字;
    当(*指针 并且 !是半角数字( *指针) )指针 ++;
   }
}
}直到( 文件结束(输入文件) );
文件关闭( 输入文件 );
行数 = 行+1;

格式输出(“行数 %整 :数字=%整%行”,行数,输入数据[行] );【调试用,可屏蔽】

重复{
格式输出( “请输入列:”);
格式输入( “%(整数)”, 取地址 列);
如果(列 小于 1或 列 大于 最大列 )
   格式输出( “输入错误,必须大于0 小于 %整 %行”, 最大列+1 );
}直到( 列 大于 0 并且列 小于等于 最大列 );
列 -= 1;

步进循环( 行 = 0; 行 小于 行数; 行 加加 )
{
总和 += 输入数据[行][列] ;
格式输出( “总和=%小, 行=%整,数据= %整 %行”, 总和, 行,输入数据[行][列] );【调试用,可屏蔽】
如果( 最大值 小于 0 )   最大值=输入数据[行][列];
或者( 最大值 小于输入数据[行][列] ) 最大值=输入数据[行][列];
   
如果( 最小值 小于 0 )   最小值=输入数据[行][列];
或者(最小值 大于输入数据[行][列] )最小值 =   输入数据[行][列];
}
格式输出( “计算结束,第%整列总和=%小,平均值=%小, 最大值=%整,最小值=%整 %行”,列, 总和, 总和/行数, 最大值, 最小值 );
暂停();
返回 0;
}   〗
data.in 内容:
2 5723 444 92   2 54
33   4   82   11
445   7   9   36   711
34    11133321   66
4   4    555555   

运行结果:
第七题程序处理开始,使用中文c-习语言编译工具编译
行 0 :数字=2
行 0 :数字=5
行 0 :数字=7
行 0 :数字=23
行 0 :数字=444
行 0 :数字=92
行 0 :数字=2
行 0 :数字=54
行 1 :数字=33
行 1 :数字=4
行 1 :数字=82
行 1 :数字=11
行 2 :数字=44
行 2 :数字=5
行 2 :数字=7
行 2 :数字=9
行 2 :数字=36
行 2 :数字=711
行 3 :数字=3
行 3 :数字=4
行 3 :数字=111
行 3 :数字=333
行 3 :数字=21
行 3 :数字=66
行 4 :数字=4
行 4 :数字=4
行 4 :数字=555
行 4 :数字=55
行 4 :数字=5
行数 5 :数字=4
请输入列:3
总和=7.000000, 行=0,数据= 7
总和=89.000000, 行=1,数据= 82
总和=96.000000, 行=2,数据= 7
总和=207.000000, 行=3,数据= 111
总和=762.000000, 行=4,数据= 555
计算结束,2列总和=762.000000,平均值=152.400000, 最大值=555,最小值=7
按任意键继续
页: [1]
查看完整版本: 一个C语言题目的解答