北航大一上c语言第四五六七八次作业
路边鼓掌的人-北美灰狼
删数问题
1.
【问题描述】输入一个高精度的大正整数S(S最长可达24
0位),去掉其中任意N位数字后剩下
的数字按原次序组成一个新的正整数S’。编程对给定的N和S,
寻找一种方案使得剩下的数字组成
的新数S’最小。
【输入形式】输入有两行:
1.第一行是大整数S。其中S最长可达240位。
2.第二行是整数N。S、N均以非0数字开头。
【输出形式】输出有一行,是在S中删除N位后所得的最小数字S’。
【样例输入1】
178543
4
【样例输出1】13
【样例输入2】
1002
1
【样例输出2】002
【样例说明】样例1中输入整数S=
178543,N=4,要求在178543中删除4位,使剩下的数字最小。
正确答案为S’ =
13。样例2中输入整数S=1002,N=1,删完一位后S’ =
002,而不是2,即2之
前的0也必须输出。
【运行时限】程序一次运行的最长时间限制在15秒内,超出则认为程序错误。
【算法提示】
将整数看作字符串形式读入;删数时,从前往后寻找第一个比后一个数字大的数字,
然后删除之,按照这
种方法删除N个数字即得最小数字。
【评分标准】该题要求输出一个大整数的各位数字。结
果完全正确得20分,每个测试点4分。上传
C语言文件名为delete.c。
扩展字符
2.
【问题描述】
编写一函数expand(s1,s2),用以将字符串s1中
的缩记符号在字符串s2中扩展为等价的完整字符,
例如将a-
d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类<
br>似的情况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。
(教材 P63:Exercise 3-3)
注意:
1. 待扩展字符串中有可能包含空格,例如:a-d x-z应扩展成:abcd
xyz。所以读入待扩展字
符串时,应能够读入包含空格的字符串。
2. 只要缩记符号-之
后的字符比之前的字符的ASCII码值大,就要将它们之间的所有字符扩展
出来,例如:Z-a之间的
字符也要扩展出来;
3. 特殊情况:a-b-c将被扩展为:abc。a-a将被扩展为:a-a。
【输入形式】
从键盘输入包含扩展符的字符串
【输出形式】
输出扩展后的字符串
【输入样例】
a-c-u-B
【输出样例】
abcdefghijklmnopqrstu-B
【样例说明】
扩展输入a-
c-u为:abcdefghijklmnopqrstu,而B比u值小,所以无法扩展,直接输出。
【评分标准】
结果完全正确得20分,每个测试点4分,提交程序文件expand.c。
字母频率统计
3.
【问题描述】
编写程序从标准输入中读入一段英文,
统计其中小写字母出现次数,并以柱状图的形式显示其出现
次数。
【输入形式】
在
标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表
示结束。
【输出形式】
在屏幕上依次输出表示每个小写字母出现次数的柱状图(以“*”字
符表示柱状图,空白处用空格字符
表示,某个小写字母出现多少次,就显示多少“*”字符;柱状图的高
度以出现最多的字母次数为准),
在最后一行依次输出26个小写字母。
【样例输入】
The computing world has undergone a
revolution since the publication of
The C
Programming Language in 1978.
【样例输出】
【样例说明】
在输入的英文短文中,小写字母a出现了6次,所以其上输出了6个字符。出现
次数最多的是字
母n,所以柱状图的高度为9个字符。字母j没有出现,所以其上都为空格字符。
【评分标准】
该题要求输出柱状图表示的字母出现次数,共有5个测试点。上传C语言文件名为bar.c。
矩阵运算
4.
【问题描述】
对于多个N阶矩阵,依次进行加、减运算。
【输入形式】
从标准输入读取输入。第一行只有一个整数N(1≤N≤10),代表矩阵的阶数。
接下来是一个矩阵,是N行,每行有N个整数(可能是正、负整数),是矩阵的所有元素。
然后一行只含一个字符“+”或“-”,代表加、减操作。
然后用同样的方式输入另一个矩阵。
后续仍然是运算符和矩阵。直至运算符为“#”时停止计算,将结果输出。
【输出形式】
向标准输出打印矩阵的操作结果。输出N行,每行对应矩阵在该行上的所有元素
,每一行末均输出
一个回车符。每个元素占5个字符宽度(包括负号),向右对齐,不足部分补以空格。
【输入样例】
3
1 -2 7
2 8 -5
3 6 9
+
3 5 7
-1 2 6
3 7 10
-
1
-2 7
2 8 -5
3 6 9
#
【输出样例】
(下图中”-”代表空格)
####3####5####7
###-1####2####6
####3####7###10
【评分标准】
本题不准使用数学库函数。运行时限1秒,完全正确20分,每个测试点4分。提交程序文件名为
matrix.c。
文件拷贝2
5.
【问题描述】
写一程序将一个文件拷贝至另一个文件, 其中在所拷贝的文件中,
多个连续空白符
(包括空格符、制表符)只拷贝一个空格符,其它字符不变。
【输入形式】
源文件名和目标文件名分别为和,程序将从当前目录下读取文件。
【输出形式】
将文件内容拷贝至当前目录下的文件中。在所拷贝的文件中, 多个连续空白符(包
括空格符、
制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空
格符,其它字符不
变。
【输入样例】
假如文件中内容如下:
Alcatel
provides end-to-end solutions.
【输出样例】
输出文件中内容为:
Alcatel provides end-to-end
solutions.
【样例说明】
将文件拷贝到,同时做适当的转换。
【评分标准】
其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个
空格符,其它字符不变,
完全符合要求得20分,每个测试点4分。提交程序名为copy.c。
括号匹配
6.
【问题描述】
假设一个输入字符串中包含圆括号、方括号
和花括号三种类型的括号,以及其它一些任意字符。编
写程序,判别串中的括号是否正确匹配,即:
1. 各种左、右括号的个数要一致;
2. 不能先出现右括号;
3.其它规则暂不考虑,例如:( ad [ ce ) ef ] 认为是正确的。
【输入形式】
从当前目录下文件中读入一行字符串。字符串最大长度80,不含空格。
【输出形式】
输出到当前目录下文件中。输出只有一个单词,如果括号匹配则输
出“True”到文件中,否
则输出“False”。在输出末尾要有一个回车符。
【输入样例】
设输入文件内容如下:
rhe+[35(fjej)w-wr3f[efe{feofds}]
【输出样例】
输出文件内容为:
False
【样例说明】
输入字符串为rhe+[35(fjej)w-wr3f[efe{feof
ds}],在式中“[”与“]”的个数不一致,不符合嵌套规则,故输
出为“False”。
【评分标准】
结果正确得20分,每个测试点4分,提交程序名为c0802.c。
凸多边形面积
1.
【问题描述】给出平面上一组顶点的坐标,计算出它们所围成的凸多边形的面积。
p>
【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数N(3≤N≤15),后
面紧接着N
行,每行两个数字(由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)
。所有点的坐标
互不相同,且按顺时针次序给出。
输入数据确保该多边形是一个凸多边形。
【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮点数保留两位小数。
【输入样例】 4
3 3
3 0
1 0
1 2
【输出样例】
5.00
【样例说明】输入数据表示了如图所示的四边形。其面积为5.00。
提示:求三角形面积可用海伦公式,求平方根可用
【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:points.c。
整数的N进制字符串表示
2.
【问题描述】编写函数itob(n,s,b),用于把整数n转换成以b为基的字符串并存储到s中.
编写程序,
使用函数itob(n,s,b)将输入的整数n,转换成字符串s,将s输出.转换后的字
符串从最高的非零位开始
输出。如果n为负数,则输出的字符串的第一个字符为’-’。b为大于1小于
37的任意自然数值。当
b=2时,输出字符只可能是’0’和’1’;当b=16时,输出字符串中可
能含有字符为’0’-’9’,’a’-’f’(字母以
小写输出)。b还可以是其它数值。比如输入n
=33,b=17,则输出33的17进制值为。
【输入形式】控制台输入整数n和b,其中n可以为负数。n和b以空格分隔.
【输出形式】控制台输出转化后的字符串s.
【样例输入】5 2
【样例输出】101
【样例说明】5的二进制就是101
【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:itob.c
求两组整数的异或集
3.
【问题描述】
从标准输入中输入两组整数(每
行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在
两组整数中都出现的整数,并按
从大到小顺序排序输出(即两组整数集“异或”)。
【输入形式】
首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上输入第二组整数,以一个空格
分隔
,行末有回车换行。
【输出形式】
按从大到小顺序排序输出合并后的整数集(去
掉在两组整数中都出现的整数,以一个空格分隔各个
整数)。
【样例输入】
5 1 4 32 8 7 9 -6
5
2 87 10 1
【样例输出】
87 32 10
9 8 7 4 2 -6
【样例说明】
第一组整数为5
1 4 32 8 7 9 -6,第二组整数分别为5 2 87
10 1。将第一组和第
二组整数合并(去掉在两组整数中都出现的整数5和1),并从大到小顺序
排序后结果为
87 32 10 9 8 7 4 2 -6。
【评分标准】该题要求输出两组整数的异或集,共有5个测试点,提交程序文件名为xor.c。
字符串中字符排序
4.
【问题描述】编写一个程序,从键盘接收一个字符串,然后
按照字符顺序从小到大进行排序,并删
除重复的字符。
【输入形式】用户在第一行输入一个字符串。
【输出形式】程序按照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。
【样例输入】badacgegfacb
【样例输出】abcdefg
【样例说明
】用户输入字符串badacgegfacb,程序对其进行按从小到大(ASCII)顺序排序,并删除重复的字符,最后输出为abcdefg
【评分标准】结果完全正确得20分,每个测试点4分。提交源程序名为stringsort.c
超长正整数的减法
5.
【问题描述】
编写程序实现两个超长正整数(每个最长80位数字)的减法运算。
【输入形式】
从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
1. 第一行是超长正整数A;
2. 第二行是超长正整数B;
【输出形式】
输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位
数字。要求:若结果
为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出
。
【输入样例】
234098
134056
【输出样例】
-134958
【样例说明】
进行两个正整数减法运算, 234098 -134056 = -134958。
【评分标准】
完全正确得20分,每个测试点4分,提交程序文件名为subtract.c。
字符串替换(新)
6.
【问题描述】
编写程序将一个指定文件中某一字
符串替换为另一个字符串。要求:(1)被替换字符串若有多个,
均要被替换;(2)指定的被替换字符
串,大小写无关。
【输入形式】
给定文件名为。从控制台输入两行字符串(不含空格,行末
尾都有回车换行符),分别表示
被替换的字符串和替换字符串。
【输出形式】
将替换后的结果输出到文件中。
【样例输入】
从控制台输入两行字符串:
in
out
文件的内容为:
#include
void main()
{
FILE * IN;
if((IN=fopen(
{
printf(’t open
!
return;
}
fclose(IN);
}
【样例输出】
文件的内容应为:
#outclude
void maout()
{
FILE * out;
if((out=fopen(
{
prouttf(’t open !
return;
}
fclose(out);
}
【样例说明】 输入的被替换字符串为in,替换字符串为out,即将文件中的所有in字符串(包括iN、In、
IN字符串)全部替换为out字符串,并输出保存到文件中。
【评分标准】
该题要求得到替换后的文件内容,共有5个测试点。上传C语言文件名为replace.c。
最长升序子串(选做,不计分)
7.
【问题描述】输入一行字符串,该字符串只由小写英文字母a-
z组成,且其中的字符可以重复,最长
不超过10000个字符。
从该字符串中按顺序挑选出
若干字符(不一定相邻)组成一个新串,称为“子串”。如果子串中每两个
相邻的字符或者相等,或者后
一个比前一个大,则称为“升序子串”。编程求出输入字符串的最长升序
子串的长度。
例如,
由输入字符串abdbch可以构成的升序子串有:abd、abch、bbch、abbch等。其中最长的升
序子串是abbch,其长度为5。
【输入形式】从标准输入读取一行字符串,该串不含空格,以回车符结束。
【输出形式】向标
准输出打印一个正整数,是字符串中最长的升序子串的长度,在行末要输出一个
回车符。
【输入样例】abdbch
【输出样例】5
【样例说明】abdbch中最长子串是abbch,长度是5。
【评分标准】结果完全正确得20分,每个测试点4分。上传c语言源程序为up.c。
合并字符串【问题描述】
1.
编写一个函数char *
str_bin(char* str1, char* str2), str1、str2是两个有序字符串
(其中字符按ASCII
码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串
仍是有序的,允许字符重复。
在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函
数,最后输出合并后的结果。
【输入形式】
分行从键盘输入两个有序字符串(不超过100个字符)
【输出形式】
输出合并后的有序字符串
【输入样例】
aceg
bdfh
【输出样例】
abcdefgh
【样例说明】
输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh
【评分标准】
结果完全正确得20分,每个测试点4分,提交程序文件名为combine.c。
-删除子串【问题描述】编写一个程序,当在一个字符串中出现子串时就删除它。
2.
【输入形式】用户在第一行输入一个字符串,用户在第二行输入一个子串。
【
输出形式】程序在下一行输出删除其中所有子串后的字符串。如果字符串不包含子串则输出原字
符串本身
。
【样例输入】
I am a boy!
a
【样例输出】
I m boy!
【样例说明】用户首先输入字符串I am a
boy!,然后输出子串a,程序会寻找字符串中的子串删除它,
最后
将删除后的结果输出:I#m##boy! #表示空格。
【评分标准】结果完全正确得20分,
每个测试点4分。提交程序名为:delsubstring.c。
小数形式与科学计数法转换(简)【问题描述】
3.
编写一个程序,将用小数表示
的浮点数,转换成科学计数法的形式输出。输入的数据没有符号,小
数点前后必有数字,且全为有效数据
,即小数点后的末尾数字不为0;小数点前若只有一位数字,可
以为0,否则小数点前的最高位数字不为
0。
提示:以字符串形式保存相关数据。
【输入形式】
从控制台输入一小数,最后有回车换行符,所有输入的字符数不会超过100。
【输出形式】
以科学计数法形式输出数据。输出的数据由以下几部分构成:
1.底数部分是一个小数或整数
,若为小数,则小数点前后必有数字,而且都为有效数字。即:小数点
前只有一位大于0的数字,小数点
后的末尾数字不能为0。若为整数,则只有一位数字,不带小数点。
2.必有小写字母“e”。 3.指数部分是一个整数,若大于等于0,则不带正号“+”。若小于0,则需要带负号“-”,且整数的最
高
位数字不为0。
【输入样例1】
0.002
【输出样例1】
2e-15
【输入样例2】
8.9845623489651700659
【输出样例2】
8.9845623489651700659e0
【输入样例3】
367298599999859503.4
【输出样例3】
3.672985999998595034e41
【样例说明】
以小数形式输入数据,然后转换成科学计数法形式输出。
【评分标准】
该题要求以科学计数法形式输出数据,提交程序文件名为notation.c。
-旋转魔方阵(文件)【问题描述】
4.
输入一个自然数N(2≤
N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在
左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2
3
8 9 4
7 6 5
【输入形式】
从标准输入读取一个整数N。
【输出形式】
将结果输出
到文件文件。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每
一行末均输出一个回车符
。
【输入样例】
4
【输出样例】输出文件内容为:
1 2 3 4
12 13 14
5
11 16 15 6
10 9
8 7
【评分标准】
本题不准使用数学库函数。结果正确得20分,每个测试点4分,提交程序文件名为magic.c。
全排列数的生成【问题描述】输入整数N( 1 <= N <= 10
),生成从1~N所有整数的全排列。
5.
【输入形式】输入整数N。
【输出
形式】输出有N!行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行
上的全排
列不重复。输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将
每行上的
输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。
【样例输入1】1
【样例输出1】1
【样例说明1】输入整数N=1,其全排列只有一种。
【样例输入2】3
【样例输出2】
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
【样例说明2】输入整数N=3,要求整数1、2、3的所有全排列, 共有N!=6行。且先输出1开
头的
所有排列数,再输出2开头的所有排列数,最后输出3开头的所有排列数。在以1开头的所有全排<
br>列中同样遵循此原则。
【样例输入3】10
【样例输出3】
1 2 3
4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 10 9
1 2 3
4 5 6 7 9 8 10
1 2 3 4 5 6 7 9 10 8
1 2 3 4 5 6 7 10 8 9
1 2 3 4 5 6 7 10 9 8
1 2 3 4 5 6 8 7 9 10
1 2 3 4 5 6 8 7 10 9
1 2 3 4 5 6 8 9 7 10
1 2 3 4 5 6 8 9 10 7
……………………
【样例说明3】输入整数N=10,要求整数1、2、3、……、10的所
有全排列。上例显示了输出的前
10行。
【运行时限】要求每次运行时间限制在20秒之内。
超出该时间则认为程序错误。提示:当N增大时,
运行时间将急剧增加。在编程时要注意尽量优化算法,
提高运行效率。
【评分标准】该题要求输出若干行整数。如果你的程序计算的结果和标准答案完全一致
,则该测试
点得10分,否则该测试点得分为0。
-单词排序(命令行参数)【问题描述】
6.
编写一个程序,从一个文件中读入单词(即:以空格分隔的字符串),并对单词进行排序
,删除重复
出现的单词,然后将结果输出到另一个文件中。
【输入形式】
源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为sort,
源文件名和目标文件名分别为和,则命令行为:sort 。
程序将从当前目录下文件中读入单词。
【输出形式】
对单词进行排序,删除重复出现的单词,然后将结果输出到文件中。
【输入样例】
假如文件内容如下:
rrr sss aaa bbb ccc ddf
aaa dd
【输出样例】
文件内容为:
aaabbb ccc dd
ddf rrrsss
【样例说明】
读入文件,做适当的排序,并删除重复出现的单词,输出到文件
【评分标准】
对单
词进行排序,删除重复出现的单词,符合此要求得20分,每个测试点4分,提交程序名为
sortwo
rds.c。
--文件重排【问题描述】近几年有人提出了这样一种算法,它虽然只是单纯地对文件进
行重排,本身
1.
并不压缩文件。
该算法如下:对一个长度为n的字符串S,首先
根据它构造n个字符串,其中第i个字符串由将S
的前i-1个字符置于末尾得到。然后把这n个字符串
按照首字符从小到大排序,如果两个字符串的首
字符相等,则按照它们在S中的位置从小到大排序。排序
后的字符串的尾字符可以组成一个新的字
符串S’,它的长度也是n,并且包含了S中的每一个字符。最
后输出S’以及S的首字符在S’中的位
置p。
【输入文件】输入文件包含两行,第1行是一个整数n(1
<=n<=10000),代表S的长度,
第2行是字符串S。
【输出文件】
输出文件包含两行,第1行是S’,第2行是整数p。
【输入样例】
7
example
【输出样例】
xelpame
7
【样例说明】长度为7的字符串example经转换后变为xelpame,examp
le的首字符在新字符串中
的位置是7。
【评分标准】如果你的程序输出正确得20分,每个测试点4分。提交程序名为存file.c。 -字符串统计排序【问题描述】编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其
2.
中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。
【输入形式】用户在第一行输入一个字符串,以回车结束输入。
【输出形式】程序统计字符串
中出现的所有字符,然后按照字符出现频率大小排序输出,频率相同
时,按输入顺序输出。输出形式规定
为每行输出4个字符数据,输出格式为:字符-出现次数。每个
字符-
出现次数输出中间用一个空格分隔,每行末尾没有空格。程序输出结尾有一个回车。
【样例输入】
The job requires an agile mind.
【样例输出】
#-5 e-4 i-3 r-2
a-2 n-2 T-1
h-1
j-1 o-1 b-1 q-1
u-1 s-1 g-1 l-1
m-1 d-1 .-1
#表示空格(在程序请输出空格,而不是字符’#’,这里只是表示而已。)
【样例说明】用户首先输入字符串The job requires an agile mind.
程序统计完毕之后按照每行4个
统计结果输出,字符串中有5个空格,所以输出为#-5,#表示空格。
字符’b’和’T’出现次数同为1,因
为输入时’b’先于’T’输入,所以输出时也先打印’b’的
统计信息。
【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:frequence.c --加密文件【问题描述】有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过
3.
50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词
串feathr,然
后再将字母表中的其它字母以反序追加到feathr的后面:
f
e
a
t
h
r
z
y
x
w
v
u
s
q
p
o
n
m
l
k
j
i
g
d
c
b
加密字母的对应关系如下:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
f
e
a
t
h
r
z
y
x
w
v
u
s
q
p
o
n
m
l
k
j
i
g
d
c
b
其中第一行为原始英文字母,第二行为对
应加密字母。其它字符不进行加密。编写一个程序,用这
种密码加密文件。假定要加密的文件名为及加密
后的文件名为,并假定输入文
件中字母全为小写字母,并且输入密钥也全为小写字母。
【输入形式】从标准输入中输入密钥串,并从文件中读入要加密的内容。
【输出形式】加密后结果输出到文件中。
【样例输入】
feather
和文件中内容,例如被加密的文件中内容为:
c language is
wonderful.
【样例输出】加密后文件中内容为:
aufqzjfzh xl
gpqthmrju.
【样例说明】首先将给定的密钥单词去除重复字母,然后按照上面的加密对应表
对文件
内容进行加密即可得到加密后的文件,其中只对英文字母进行加密对换,并且假设中的
英
文字母全是小写字母。
【评分标准】该题要求对文件进行加密,共有5个测试点。提交程序名为encrypt.c
-程序相似性比较方法(变量)【问题描述】
4.
程序相似性比较方法之一就是将
源程序中无关信息(如变量名、函数名、空白符及注释等)删除后
的代码进行比较。编写程序将当前目录
下C源文件input.c中的变量名、空白字符删除后写到另一个
文件output.c中。
【输入形式】
要处理的C源文件名为input.c,在当前目录下,并假设该文件符合以下条件:
1、程序中只有一个main函数;
2、最多只可能出现一个int类型变量列表(也可能没
有),无其它类型变量说明或定义,并且在程序
其它地方不会再出现int关键字;
3、定义的int类型变量的个数不超过10个,变量名的长度不超过20个字符;
4、源文件中不含注释;
5、程序没有语法错误;
6、字符串常量中不会出现与变量名相同的串;
7、程序中所有标识符均与其它部分有空格分
隔(即可用格式串%s读取),且所有标识符的长度不超
过20个字符。
【输出形式】
将源程序文件input.c处理后的结果写入到当前目录下的文件output.c中,输出要求:
1、所有空白字符(包括空格、制表符和回车符)都要删除;
2、定义的int类型变量都要删除,但不删除定义时用到的分隔符’,’;
3、语句中所有int类型变量名都要删除。
【样例输入】
假如input.c文件内容如下:
#include
main ()
{
int a , b , sum
scanf (
sum = a + b
printf (
}
【样例输出】
output.c内容应为:
#include
【样例说明】
在源文件input.c中,int类型的变量有三个:a,b,sum,将程序中所有空白符(空格、
制表符、回
车符)和变量名a、b、sum删除后,就只剩一行字符串(见output.c中内容)。
提示:
1、可以用fscanf(fp,函数将fp文件中的所有内容以单词
串的形式读出,到达文件结尾时该
函数返回EOF;
2、可以用strcmp函数比较两个字
符串,用strcpy函数拷贝字符串,这两个函数定义在
文件中;
3、可通过查找int定义列表找到要删除的单词,即:int单词后(分号之前)的所有单词(逗号除外)都是要删除的变量名。
【评分标准】
该题要求删除源文件中变量、空白符的内容,共有5个测试点。上传C语言文件名为same.c。
【问题描述】
5.
查找C源程序文件中控制流关键字(while, for,
if)的出现位置。按出现顺序输出其出现的位置(用
行数和在该行上第几个字符表示)。要求字符串常
量中出现的关键字不应计算,同时该C程序满足下
列规定:
1、该程序符合C语言语法要求。
2、双引号只会用在字符串常量中,其它地方不会出现双引号字符。
3、程序中的所有标识符只由字母和数字组成。
4、程序中没有注释语句。
【输入形式】
C源程序从当前目录下的in.c文件中读入。
【输出形式】 按照出现顺序在标准输出上输出关键字出现的位置,每行输出一个关键字的位置。位置的输出格式
是
:先输出关键字,后面紧跟着冒号:,然后是用整数表示的行数和在该行上的位置,两整数之间用
一个逗
号,分隔。
【输入样例1】
假如in.c文件中程序为:
#include
int main()
{
inti , n
int a[100];
scanf (
for ( i=0 i
return 0;
}
【输出样例1】
for:7,2
【样例说明1】
在in.c
程序中有一个for。for关键字位于第七行,前面只有一个制表符,所以输出的位置为7,2。
【输入样例2】
假如in.c文件中程序为:
#include
int main()
{
int
i,n,sum,mul,if1;
intforAndwhile[100];
sum=0;mul=1;
scanf(
for(i=0;i
for(i=0;i
if1=forAndwhile[0];
while (i
if(if1
}
printf(
return
0;
}
【输出样例2】
for:9,2
for:11,2
for:11,38
while:15,2
if:17,3
【样例说明2】
在in.c程序中有三个for、一个while和一个if关键字。其中第
一个for关键字位于第九行,前面只有
一个制表符,所以输出的位置为9,2。注意:字符串常量中出
现的for和while不是关键字,所以不
应输出。同样,在一些变量名中作为子串出现的if、fo
r和while也不是关键字。
【评分标准】
该题要求按照出现顺序输出关键字出现的位置
,共有5个测试点,提交程序文件名为findKeyword.c。
--输出文件的末尾行【问题描述】
6.
命令
tail用来打印文件中最后n行。
命令格式为:tail [-n] filename,其中:
-n :n表示需要打印的行数,省略时n的值为10。
filename :给定文件名。
如,命令tail -20
表示打印文件的最后20行,用C语言实现该程序。(提
示:使用命令行参数)
【输入形式】
tail [-n] filename,其中:-n
:n表示需要打印的行数,省略时n的值为10。
filename :给定文件名。
【输出形式】
打印文件filename的最后n行
【输入样例】
命令:tail -2
文件内容为:
Alcatel
provides end-to-end solutions.
It enables
enterprises to deliver content to any type of
user.
lcatel operates in 130 countries.
Alcatel focus on optimizing their service
offerings and revenue streams.
【输出样例】
屏幕将显示:
lcatel operates in 130 countries.
Alcatel focus on optimizing their service
offerings and revenue streams.
【样例说明】
使用tail -2 输出文件的最后两行。
注意:文件末尾行有可能没有回车换行。
【评分标准】
如果你的程序输出正确得20分,每个测试点4分。提交程序名为tail.c。
--统计整数【问题描述】
1.
输入若干个整数,统计出现次数最多的那个整数。
如果出现最多的整数有两个以上,打印最早输入
的那个整数。
【输入形式】
从标
准输入读取输入。第一行只有一个数字N(1≤N≤10000),代表整数的个数。以后的N行每行有
一个整数。
【输出形式】
向标准输出打印出现次数最多的那个数字。
【输入样例】
6
11
0
-1
20
0
300
【输出样例】
0
【样例说明】
输入6个整数,其中出现次数最多的是0,共出现两次。
【评分标准】
本题不准
使用数学库函数。运行时限1秒,正确得20分,每个测试点4分,提交程序名为count.c。
学生记录【问题描述】
2.
从键盘中读入最多不超过50个学生的学生信息(包括
空格隔开的姓名、学号、年龄信息,以学号从
低到高排序)
【输入形式】
每次键盘读入最多不超过50个学生的学生信息:
第一行为学生人数;
后面每一行为空格隔开的学生学号、姓名、年龄,其中学号和年龄都是整数。
【输出形式】
分别以姓名顺序(从低到高)和年龄顺序(从低到高)将学生信
息输出,每行输出一位学生的信息,
其中学号占3位,姓名(英文)占6位,年龄占3位,均为右对齐。
年龄相同时按姓名从低到高排
序。两种顺序的输出结果用一行空行相隔。
【输入样例】
4
1 aaa 22
45 bbb 23
54 ddd 20
110 ccc 19
【输出样例】
1 aaa 22
45 bbb 23
110 ccc
19
54 ddd 20
110 ccc 19
54 ddd
20
1 aaa 22
45 bbb 23
【样例说明】
从键盘输入四个学生记录,分别按姓名和年龄排序并输出。
【评分标准】
分别以姓名顺序和年龄顺序输出学生信息,完全正确得20分,每个测试点4分
,提交程序名为
students.c。
-电话薄排序【问题描述】编写一个程序,输入N个
用户的姓名和电话号码,按照用户姓名的词典顺
3.
序排列输出用户的姓名和电话号码。 <
br>【输入形式】用户首先在第一行输入一个正整数,该正整数表示待排序的用户数目,然后在下面多
行输入多个用户的信息,每行的输入格式为:姓名电话。以回车结束每个用户的输入。
【输出形式】程
序输出排序后的结果。每行的输出结果格式也是:姓名电话。姓名和电话字段中间
没有空格,要求用户姓
名不能超过10个字符,超出10个字符时候只取前10个字符作为姓名。电
话号码不能超过10位,超
过10位时只按10位处理。输出姓名、电话字段各占12个字符宽,输出
格式采用默认对齐方式。另外
,用户的数量要求不超过50个。
【样例输入】
3
amethystic
1234567
amethyst 654321
wangwei 7645434
【样例输出】
####amethyst######654321
##amethystic#####1234567
#####wangwei#####7645434
【样例说明】程序根据用户姓名的词典
顺序排序,最后按照姓名#电话的格式输出。另外,由于规定
姓名和电话之间用空格分割,所以输入姓名
时请将姓和名一起输入,中间不要有空格。另外输出时
候程序将自动补齐12字符宽。程序输出结尾有个
回车符。
【评分标准】完全正确为20分,每个测试点4分。提交程序文件名为tel
sort.c
--猴子选大王【问题描述】要从n只猴子中选出一位大王。它们决定使用下面的方法:
4.
n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的
猴子退出
竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最后一只为大王。请
问
最后哪只猴子被选为大王。
【输入形式】控制台输入三个整数n,m,q。
【输出形式】输出最后选为大王的猴子编号。
【样例输入】
7 4 3
【样例输出】
4
【样例说明】输入整数n = 7,m = 4,n =
3,输出4
【评分标准】本题要求输出最后被选为大王的猴子编号,完全正确得20分,每个测试点4
分。上传
C语言文件名为monkey.c。
-多项式相乘【问题描述】
5.
编写一个程序实现两个一元多项式相乘。
【输入形式】
首先输入第一个多项式中系
数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的系
数均为0或正整数,系数和最高幂
次不会超过int类型的表示范围。对于多项式anxn +a n-1 x n-1 + …
+
a1x1 + a0x0 的输入方法如下:
an n a n-1 n-1 … a1
1 a0 0
即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为
0的项。最后一项
的指数后没有空格,只有一个回车换行符。
按照上述方式再输入第二个多项式。
【输出形式】
将运算结果输出到屏幕。将系数
不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,
均以一个空格分隔,最后一项的指数后
也可以有一个空格。
【样例输入】
10 80000 2 6000 7 300 5
10 18 0
3 6000 5 20 8 10 6 0
【样例输出】
30
86000 50 80020 80 80010 60 80000 6 12000 21 6300
10 6020 31 6010 66 6000 35 320 56 310
42 300
25 30 130 20 174 10 108 0
【样例说明】
输入的两行分别代表如下表达式:
10x80000 + 2x6000 + 7x300
+ 5x10 + 18
3x6000 + 5x20 + 8x10 + 6
相乘结果为:
30x86000 + 50x80020 + 80x80010 +
60x80000 + 6x12000 + 21x6300 + 10x6020 + 31x6010 +
66x6000 + 35x320 + 56x310 + 42x300 + 25x30 +
130x20 + 174x10 + 108
提示:利用链表存储多项式的系数和指数。
【评分标准】
该题要求输出相乘后多项式中系数不为0的系数和指数,共有5个测试点。上传
C语言文件名为
multi.c。
【问题描述】
6.
对输入的一篇文档,统计出现的所有单词及其所在行号和列号,即生成类似于词典的单词索引。将
其结果以规定格式输出。
【输入形式】
程序从文件读入一篇文档。该文档由若干行组成,每行中包含一系列单词。
行号和列号由1开始计数。该文档中单词总量不确定,每个单词长度最大不超过100个字符。
【输出形式】
将输入文档中所有出现的单词及其所在行号和列号输出到文件中。
输出有若干行,每一行都是文档中出现的一个单词。按如下规格输出:
word:(line1,colm1),(line2,colm2), …
,(lineN,colmN)
其中word是单词,后面紧跟一个冒号,然后是以逗号隔开的出现的
行号和列号
(line1,colm1),(line2,colm2),等等。在该行上各字符紧密输
出,不使用空格分隔。在输出时遵循以下
规定:
1. 只输出所有由英文字母(包括连字符)
构成的单词,数字或包含其它特殊字符的单词不用输出,
而且连字符不能作为单词首字符。先输出大写A
—Z开头的字符,再输出小写a—z开头的字符。
2. 各单词后面的行号和列号从小到大排列。
3. 统计的单词不包括如下四个单词:
a
an
the
and
【样例输入】
Alcatel provides end-to-end
solutions.
It enables enterprises to deliver
content to any type of user.
lcatel operates
in 130 countries.
Alcatel focus on optimizing
their service offerings and revenue streams.
【样例输出】
Alcatel:(1,1),(4,1)
It:(2,1)
any:(2,46)
content:(2,35)
countries:(3,24)
deliver:(2,27)
enables:(2,4)
end-to-end:(1,18)
enterprises:(2,12)
focus:(4,9)
in:(3,17)
lcatel:(3,1)
of:(2,55)
offerings:(4,43)
on:(4,15)
operates:(3,8)
optimizing:(4,18)
provides:(1,9)
revenue:(4,57)
service:(4,35)
solutions:(1,29)
streams:(4,65)
their:(4,29)
to:(2,24),(2,43)
type:(2,50)
user:(2,58)
【评分标准】
该题要求生成所指定文件的单词索引,提交程序名为index.c。