北航大一上c语言第四五六七八次作业_第1页
北航大一上c语言第四五六七八次作业_第2页
北航大一上c语言第四五六七八次作业_第3页
北航大一上c语言第四五六七八次作业_第4页
北航大一上c语言第四五六七八次作业_第5页
已阅读5页,还剩14页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——北航大一上c语言第四五六七八次作业删数问题1.输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的N和S,寻觅一种方案使得剩下的数字组成的新数S’最小。输入有两行:1.第一行是大整数S。其中S最长可达240位。2.其次行是整数N。S、N均以非0数字开头。输出有一行,是在S中删除N位后所得的最小数字S’。17854341310021002样例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等类似的状况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。(教材P63:Exercise3-3)注意:1.待扩展字符串中有可能包含空格,例如:a-dx-z应扩展成:abcdxyz。所以读入待扩展字符串时,应能够读入包含空格的字符串。2.只要缩记符号-之后的字符比之前的字符的ASCII码值大,就要将它们之间的所有字符扩展出来,例如:Z-a之间的字符也要扩展出来;3.特别状况:a-b-c将被扩展为:abc。a-a将被扩展为:a-a。从键盘输入包含扩展符的字符串输出扩展后的字符串a-c-u-Babcdefghijklmnopqrstu-B扩展输入a-c-u为:abcdefghijklmnopqrstu,而B比u值小,所以无法扩展,直接输出。结果完全正确得20分,每个测试点4分,提交程序文件expand.c。字母频率统计3.编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表示终止。在屏幕上依次输出表示每个小写字母出现次数的柱状图(以“*〞字符表示柱状图,空白处用空格字符表示,某个小写字母出现多少次,就显示多少“*〞字符;柱状图的高度以出现最多的字母次数为准),在最终一行依次输出26个小写字母。ThecomputingworldhasundergonearevolutionsincethepublicationofTheCProgrammingLanguagein1978.在输入的英文短文中,小写字母a出现了6次,所以其上输出了6个字符\。出现次数最多的是字母n,所以柱状图的高度为9个字符。字母j没有出现,所以其上都为空格字符。该题要求输出柱状图表示的字母出现次数,共有5个测试点。上传C语言文件名为bar.c。矩阵运算4.对于多个N阶矩阵,依次进行加、减运算。从标准输入读取输入。第一行只有一个整数N(1≤N≤10),代表矩阵的阶数。接下来是一个矩阵,是N行,每行有N个整数(可能是正、负整数),是矩阵的所有元素。然后一行只含一个字符“+〞或“-〞,代表加、减操作。然后用同样的方式输入另一个矩阵。后续依旧是运算符和矩阵。直至运算符为“#〞时中止计算,将结果输出。向标准输出打印矩阵的操作结果。输出N行,每行对应矩阵在该行上的所有元素,每一行末均输出一个回车符。每个元素占5个字符宽度(包括负号),向右对齐,不足部分补以空格。31-2728-5369+357-1263710-1-2728-5369#(下图中〞-〞代表空格)####3####5####7###-1####2####6####3####7###10此题不准使用数学库函数。运行时限1秒,完全正确20分,每个测试点4分。提交程序文件名为matrix.c。文件拷贝25.写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out,其中在所拷贝的文件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它字符不变。源文件名和目标文件名分别为fcopy.in和fcopy.out,程序将从当前目录下读取fcopy.in文件。将fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。假使文件fcopy.in中内容如下:Alcatelprovidesend-to-endsolutions.输出文件fcopy.out中内容为:Alcatelprovidesend-to-endsolutions.将文件fcopy.in拷贝到fcopy.out,同时做适当的转换。其中在所拷贝的文件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它字符不变,完全符合要求得20分,每个测试点4分。提交程序名为copy.c。括号匹配6.假设一个输入字符串中包含圆括号、方括号和花括号三种类型的括号,以及其它一些任意字符。编写程序,判别串中的括号是否正确匹配,即:1.各种左、右括号的个数要一致;2.不能先出现右括号;3.其它规则暂不考虑,例如:(ad[ce)ef]认为是正确的。从当前目录下correct.in文件中读入一行字符串。字符串最大长度80,不含空格。输出到当前目录下correct.out文件中。输出只有一个单词,假使括号匹配则输出“True〞到文件中,否则输出“False〞。在输出末尾要有一个回车符。设输入文件内容如下:rhe+[35(fjej)w-wr3f[efe{feofds}]输出文件内容为:False输入字符串为rhe+[35(fjej)w-wr3f[efe{feofds}],在式中“[〞与“]〞的个数不一致,不符合嵌套规则,故输出为“False〞。结果正确得20分,每个测试点4分,提交程序名为c0802.c。凸多边形面积1.给出平面上一组顶点的坐标,计算出它们所围成的凸多边形的面积。从标准输入读取顶点坐标。格式为:第一行是点的个数N(3≤N≤15),后面紧接着N行,每行两个数字(由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不一致,且按顺时针次序给出。输入数据确保该多边形是一个凸多边形。向标准输出打印一个浮点数,是该多边形的面积。该浮点数保存两位小数。4333010125.00输入数据表示了如下图的四边形。其面积为5.00。提醒:求三角形面积可用海伦公式,求平方根可用头文件中定义的sqrt函数。结果完全正确得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.521015的二进制就是101结果完全正确得20分,每个测试点4分。提交程序名为:itob.c求两组整数的异或集3.从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集“异或〞)。

首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上输入其次组整数,以一个空格分隔,行末有回车换行。按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现的整数,以一个空格分隔各个整数)。51432879-6528710187321098742-6第一组整数为51432879-6,其次组整数分别为5287101。将第一组和其次组整数合并(去掉在两组整数中都出现的整数5和1),并从大到小顺序排序后结果为87321098742-6。该题要求输出两组整数的异或集,共有5个测试点,提交程序文件名为xor.c。字符串中字符排序4.编写一个程序,从键盘接收一个字符串,然后依照字符顺序从小到大进行排序,并删除重复的字符。用户在第一行输入一个字符串。程序依照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。badacgegfacbabcdefg用户输入字符串badacgegfacb,程序对其进行按从小到大(ASCII)顺序排序,并删除重复的字符,最终输出为abcdefg结果完全正确得20分,每个测试点4分。提交源程序名为stringsort.c超长正整数的减法5.编写程序实现两个超长正整数(每个最长80位数字)的减法运算。从键盘读入两个整数,要考虑输入高位可能为0的状况(如00083)。1.第一行是超长正整数A;2.其次行是超长正整数B;输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧凑输出。234098134098703578230056-134098703577995958进行两个正整数减法运算,234098-134098703578230056=-134098703577995958。完全正确得20分,每个测试点4分,提交程序文件名为subtract.c。字符串替换(新)6.编写程序将一个指定文件中某一字符串替换为另一个字符串。要求:(1)被替换字符串若有多个,均要被替换;(2)指定的被替换字符串,大小写无关。给定文件名为filein.txt。从控制台输入两行字符串(不含空格,行末尾都有回车换行符),分别表示被替换的字符串和替换字符串。将替换后的结果输出到文件fileout.txt中。从控制台输入两行字符串:inout文件filein.txt的内容为:#includevoidmain(){FILE*IN;if((IN=fopen(\{printf(\’topenin.txt!\return;}fclose(IN);}文件fileout.txt的内容应为:#outcludevoidmaout(){FILE*out;if((out=fopen(\{prouttf(\’topenout.txt!\return;}fclose(out);}输入的被替换字符串为in,替换字符串为out,即将文件filein.txt中的所有in字符串(包括iN、In、IN字符串)全部替换为out字符串,并输出保存到文件fileout.txt中。该题要求得到替换后的文件内容,共有5个测试点。上传C语言文件名为replace.c。最长升序子串(选做,不计分)7.输入一行字符串,该字符串只由小写英文字母a-z组成,且其中的字符可以重复,最长不超过10000个字符。从该字符串中按顺序挑拣出若干字符(不一定相邻)组成一个新串,称为“子串〞。假使子串中每两个相邻的字符或者相等,或者后一个比前一个大,则称为“升序子串〞。编程求出输入字符串的最长升序子串的长度。例如,由输入字符串abdbch可以构成的升序子串有:abd、abch、bbch、abbch等。其中最长的升序子串是abbch,其长度为5。从标准输入读取一行字符串,该串不含空格,以回车符终止。向标准输出打印一个正整数,是字符串中最长的升序子串的长度,在行末要输出一个回车符。abdbch5abdbch中最长子串是abbch,长度是5。结果完全正确得20分,每个测试点4分。上传c语言源程序为up.c。合并字符串1.编写一个函数char*str_bin(char*str1,char*str2),str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最终输出合并后的结果。分行从键盘输入两个有序字符串(不超过100个字符)输出合并后的有序字符串acegbdfhabcdefgh输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh结果完全正确得20分,每个测试点4分,提交程序文件名为combine.c。-删除子串编写一个程序,当在一个字符串中出现子串时就删除它。2.用户在第一行输入一个字符串,用户在其次行输入一个子串。程序在下一行输出删除其中所有子串后的字符串。假使字符串不包含子串则输出原字符串本身。Iamaboy!aImboy!用户首先输入字符串Iamaboy!,然后输出子串a,程序会寻觅字符串中的子串删除它,最终将删除后的结果输出:I#m##boy!#表示空格。结果完全正确得20分,每个测试点4分。提交程序名为:delsubstring.c。小数形式与科学计数法转换(简)3.编写一个程序,将用小数表示的浮点数,转换成科学计数法的形式输出。输入的数据没有符号,小数点前后必有数字,且全为有效数据,即小数点后的末尾数字不为0;小数点前若只有一位数字,可以为0,否则小数点前的最高位数字不为0。提醒:以字符串形式保存相关数据。从控制台输入一小数,最终有回车换行符,所有输入的字符数不会超过100。以科学计数法形式输出数据。输出的数据由以下几部分构成:1.底数部分是一个小数或整数,若为小数,则小数点前后必有数字,而且都为有效数字。即:小数点前只有一位大于0的数字,小数点后的末尾数字不能为0。若为整数,则只有一位数字,不带小数点。2.必有小写字母“e〞。3.指数部分是一个整数,若大于等于0,则不带正号“+〞。若小于0,则需要带负号“-〞,且整数的最高位数字不为0。0.0000000000000022e-158.98456234896517006598.9845623489651700659e0367298599999093453490394859509568659795603.43.672985999990934534903948595095686597956034e41以小数形式输入数据,然后转换成科学计数法形式输出。该题要求以科学计数法形式输出数据,提交程序文件名为notation.c。-旋转魔方阵(文件)4.输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素。N=3时:123894765从标准输入读取一个整数N。将结果输出到文件文件file.out。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。4输出文件file.out内容为:12341213145111615610987此题不准使用数学库函数。结果正确得20分,每个测试点4分,提交程序文件名为magic.c。全排列数的生成输入整数N(112345679108123456710891234567109812345687910123456871091234568971012345689107……输入整数N=10,要求整数1、2、3、……、10的所有全排列。上例显示了输出的前10行。要求每次运行时间限制在20秒之内。超出该时间则认为程序错误。提醒:当N增大时,运行时间将急剧增加。在编程时要注意尽量优化算法,提高运行效率。该题要求输出若干行整数。假使你的程序计算的结果和标准答案完全一致,则该测试点得10分,否则该测试点得分为0。-单词排序(命令行参数)6.编写一个程序,从一个文件中读入单词(即:以空格分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件中。源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为sort,源文件名和目标文件名分别为sort.in和sort.out,则命令行为:sortsort.insort.out。程序将从当前目录下sort.in文件中读入单词。对单词进行排序,删除重复出现的单词,然后将结果输出到文件sort.out中。假使sort.in文件内容如下:rrrsssaaabbbcccddfaaaddsort.out文件内容为:aaabbbcccddddfrrrsss读入文件sort.in,做适当的排序,并删除重复出现的单词,输出到文件sort.out对单词进行排序,删除重复出现的单词,符合此要求得20分,每个测试点4分,提交程序名为sortwords.c。--文件重排近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身1.并不压缩文件。该算法如下:对一个长度为n的字符串S,首先根据它构造n个字符串,其中第i个字符串由将S的前i-1个字符置于末尾得到。然后把这n个字符串依照首字符从小到大排序,假使两个字符串的首字符相等,则依照它们在S中的位置从小到大排序。排序后的字符串的尾字符可以组成一个新的字符串S’,它的长度也是n,并且包含了S中的每一个字符。最终输出S’以及S的首字符在S’中的位置p。输入文件filezip.in包含两行,第1行是一个整数n(1main(){inta,b,sum;scanf(\sum=a+b;printf(\}output.c内容应为:#includemain(){int,,;scanf(\在源文件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文件中读入。依照出现顺序在标准输出上输出关键字出现的位置,每行输出一个关键字的位置。位置的输出格式是:先输出关键字,后面紧跟着冒号:,然后是用整数表示的行数和在该行上的位置,两整数之间用一个逗号,分隔。假使in.c文件中程序为:#includeintmain(){inti,n;inta[100];scanf(\for(i=0;iintmain(){inti,n,sum,mul,if1;intforAndwhile[100];sum=0;mul=1;scanf(\for(i=0;itail.in文件内容为:Alcatelprovidesend-to-endsolutions.Itenablesenterprisestodelivercontenttoanytypeofuser.lcateloperatesin130countries.Alcatelfocusonoptimizingtheirserviceofferingsandrevenuestreams.屏幕将显示:lcateloperatesin130countries.Alcatelfocusonoptimizingtheirserviceofferingsandrevenuestreams.使用tail-2tail.in输出文件tail.in的最终两行。注意:文件末尾行有可能没有回车换行。假使你的程序输出正确得20分,每个测试点4分。提交程序名为tail.c。--统计整数1.输入若干个整数,统计出现次数最多的那个整数。假使出现最多的整数有两个以上,打印最早输入的那个整数。从标准输入读取输入。第一行只有一个数字N(1≤N≤10000),代表整数的个数。以后的N行每行有一个整数。向标准输出打印出现次数最多的那个数字。6110-12003000输入6个整数,其中出现次数最多的是0,共出现两次。此题不准使用数学库函数。运行时限1秒,正确得20分,每个测试点4分,提交程序名为count.c。学生记录2.从键盘中读入最多不超过50个学生的学生信息(包括空格隔开的姓名、学号、年龄信息,以学号从低到高排序)每次键盘读入最多不超过50个学生的学生信息:第一行为学生人数;后面每一行为空格隔开的学生学号、姓名、年龄,其中学号和年龄都是整数。分别以姓名顺序(从低到高)和年龄顺序(从低到高)将学生信息输出,每行输出一位学生的信息,其中学号占3位,姓名(英文)占6位,年龄占3位,均为右对齐。年龄一致时按姓名从低到高排序。两种顺序的输出结果用一行空行相隔。41aaa2245bbb2354ddd20110ccc191aaa2245bbb23110ccc1954ddd20110ccc1954ddd201aaa2245bbb23从键盘输入四个学生记录,分别按姓名和年龄排序并输出。分别以姓名顺序和年龄顺序输出学生信息,完全正确得20分,每个测试点4分,提交程序名为students.c。-电话薄排序编写一个程序,输入N个用户的姓名和电话号码,依照用户姓名的词典顺3.序排列输出用户的姓名和电话号码。用户首先在第一行输入一个正整数,该正整数表示待排序的用户数目,然后在下面多行输入多个用户的信息,每行的输入格式为:姓名电话。以回车终止每个用户的输入。程序输出排序后的结果。每行的输出结果格式也是:姓名电话。姓名和电话字段中间没有空格,要求用户姓名不能超过10个字符,超出10个字符时候只取前10个字符作为姓名。电话号码不能超过10位,超过10位时只按10位处理。输出姓名、电话字段各占12个字符宽,输出格式采用默认对齐方式。另外,用户的数量要求不超过50个。3amethystic1234567amethyst654321wangwei7645434####amethyst######654321##amethystic#####1234567#####wangwei#####7645434程序根据用户姓名的词典顺序排序,最终依照姓名#电话的格式输出。另外,由于规定姓名和电话之间用空格分割,所以输入姓名时请将姓和名一起输入,中间不要有空格。另外输出时候程序将自动补齐12字符宽。程序输出结尾有个回车符。完全正确为20分,每个测试点4分。提交程序文件名为telsort.c--猴子选大王要从n只猴子中选出一位大王。它们决定使用下面的方法:4.n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最终一只为大王。请问最终哪只猴子被选为大王。控制台输入三个整数n,m,q。输出最终选为大王的猴子编号。7434输入整数n=7,m=4,n=3,输出4此题要求输出最终被选为大王的猴子编号,完全正确得20分,每个测试点4分。上传C语言文件名为monkey.c。-多项式相乘5.编写一个程序实现两个一元多项式相乘。首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的系数均为0或正整数,系数和最高幂次不会超过int类型的表示范围。对于多项式anxn+an-1xn-1+…+a1x1+a0x0的输入方法如下:annan-1n-1…a11a00即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。最终一项的指数后没有空格,只有一个回车换行符。依照上述方式再输入其次个多项式。将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔,最终一项的指数后也可以有一个空格。108000026000730051018036000520810603086000508002080800106080000612000216300106020316010666000353205631042300253013020174101080输入的两行分别代表如下表达式:10x80000+2x6000+7x300+5x10+183x6000+5x20+8x10+6相乘结果为:30x86000+50x80020+80x80010+60x80000+6x12000+21x6300+10x6020+31x6010+66x6000+35x320+56x310+42x300+25x30+130x20+174x10+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论