C语言第四次作业.ppt

上传人:wuy****n92 文档编号:70105037 上传时间:2023-01-16 格式:PPT 页数:24 大小:329.97KB
返回 下载 相关 举报
C语言第四次作业.ppt_第1页
第1页 / 共24页
C语言第四次作业.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《C语言第四次作业.ppt》由会员分享,可在线阅读,更多相关《C语言第四次作业.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言作业解析语言作业解析第三弹寄语:本次作业比较变态。涉及到一些初等的算法11级第四次作业-删数问题删数问题1.【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S最小。【输入形式】输入有两行:1.第一行是大整数S。其中S最长可达240位。2.第二行是整数N。S、N均以非0数字开头。【输出形式】输出有一行,是在S中删除N位后所得的最小数字S。【样例输入1】1785434【样例输出1】13【样例输入2】10021【样例输出2】002【样例说明】样例1中输入整数S=1

2、78543,N=4,要求在178543中删除4位,使剩下的数字最小。正确答案为S=13。样例2中输入整数S1002,N1,删完一位后S=002,而不是2,即2之前的0也必须输出。【运行时限】程序一次运行的最长时间限制在15秒内,超出则认为程序错误。【评分标准】该题要求输出一个大整数的各位数字。结果完全正确得20分,每个测试点4分。上传C语言文件名为delete.c。本题解析:这道题主要的障碍存在于两个方面:1.怎么读入2.怎么删。读入的话简单的说就是将一个数以字符串的形式存储下来然后通过字符串处理对数字的每一位进行操作。删除的方式比较精髓。这里介绍一个比较容易懂的方法:每次删除都搜索第一个第i

3、位比第i+1位大的,然后把第i位删掉。重复m次就可以得到最优解了。#include#includeintmain()chars245;inti,j,k;intn,m;scanf(%s,s);scanf(%d,&m);n=strlen(s);/*这里是上面string.h中的函数,就是求s的长度的意思*/for(i=1;i=m;i+)/*总共删m个数*/for(j=0;jsj+1)/*如果这个数比下一个数大那么这个数要删掉*/for(k=j;k=n;k+)/*删除操作*/sk=sk+1;break;/*删除结束退出扫描,继续删除下一个数*/printf(“%s”,s);/*输出*/11级第四次作

4、业-扩展字符扩展字符2.【问题描述】编写一函数expand(s1,s2),用以将字符串s1中的缩记符号在字符串s2中扩展为等价的完整字符,例如将a-d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。(教材P63:Exercise3-3)注意:待扩展字符串中有可能包含空格,例如:a-dx-z应扩展成:abcdxyz。所以读入待扩展字符串时,应能够读入包含空格的字符串。只要缩记符号-之后的字符比之前的字符的ASCII码值大,就要将它们之间的所有

5、字符扩展出来,例如:Z-a之间的字符也要扩展出来;特殊情况:a-b-c将被扩展为:abc。a-a将被扩展为:a-a。【输入形式】从键盘输入包含扩展符的字符串【输出形式】输出扩展后的字符串【输入样例】a-c-u-B【输出样例】abcdefghijklmnopqrstu-B本题解析:这个题目乍一看比较麻烦。其实是这次作业中比较简单的题目之一。因为特殊的字符只有一个,那就是-,只要判断好-这个题目就完成了。这个方法比较朴素,就是用一个flag来表示前一个字符是不是-如果不是-那么就输出这个字符,如果是的话就进行判断,判断这个字符跟-前字符的关系,如果这个字符-前字符,那就输出-在输出这个字符。否则的

6、话就从-前字符到这个字符循环输出即可。#include#includevoidexpands(chars1,chars2);intmain()chars1200,s2200;gets(s1);/*读入*/expands(s1,s2);printf(%s,s2);/*这个程序写的微微有些长,下页还有*/voidexpands(chars1,chars2)intflag;charj;inti,l;intsum=-1;l=strlen(s1);/*确定字符串长度*/flag=0;for(i=0;il;i+)if(s1i=-)flag=1;continue;/*如果这个字符是-那么将flag赋值为1*

7、/if(!flag)/*如果flag为0的话*/sum+;s2sum=s1i;/*直接输出*/elseif(s1i=s1i-2)/*否则如果这个字符比-前的字符小*/sum+=2;s2sum-1=-;s2sum=s1i;/*就先打一个-再打这个字符*/else/*否则的话就应该从前一个字符打印到这个字符*/for(j=s1i-2+1;j=s1i;j+)/*这里注意,前一个字符已经存在于数组中了就不需要再打印了,所以是从s1i-2+1开始而不是s1i-2*/sum+;s2sum=j;flag=0;s2sum+1=0;/*在字符串的最后放一个0表示结束*/寄语:这个题写起来比较繁琐。可能理解起来有

8、些困难。有能力的同学可以分步调试一下来查看结果。实在不会的话就去中408找我吧11级第四次作业级第四次作业-矩阵运算矩阵运算3.【问题描述】【问题描述】对于多个对于多个N阶矩阵,依次进行加、减运算。阶矩阵,依次进行加、减运算。【输入形式】【输入形式】从标准输入读取输入。第一行只有一个整数从标准输入读取输入。第一行只有一个整数N(1N10),代表矩阵的阶数。),代表矩阵的阶数。接下来是一个矩阵,是接下来是一个矩阵,是N行,每行有行,每行有N个整数(可能是正、负整数),是矩阵的所有个整数(可能是正、负整数),是矩阵的所有元素。元素。然后一行只含一个字符然后一行只含一个字符“+”或或“-”,代表加、

9、减操作。,代表加、减操作。然后用同样的方式输入另一个矩阵。然后用同样的方式输入另一个矩阵。后续仍然是运算符和矩阵。直至运算符为后续仍然是运算符和矩阵。直至运算符为“#”时停止计算,将结果输出。时停止计算,将结果输出。【输出形式】【输出形式】向标准输出打印矩阵的操作结果。输出向标准输出打印矩阵的操作结果。输出N行,每行对应矩阵在该行上的所有元素,行,每行对应矩阵在该行上的所有元素,每一行末均输出一个回车符。每个元素占每一行末均输出一个回车符。每个元素占5个字符宽度(包括负号),向右对齐,个字符宽度(包括负号),向右对齐,不足部分补以空格。不足部分补以空格。【输入样例】【输入样例】31-2728-

10、5369+357-1263710-1-2728-5369#【输出样例】【输出样例】(下图中(下图中”-”代表空格)代表空格)#3#5#7#-1#2#6#3#7#10本题解析:这个题。乍一看吓一跳。其实仔细读题以后发现这个题是比较水的。首先是题目叙述问题:样例输出中(下图中(下图中”-”代表空格)代表空格)应该是打错了其实是#代表空格。然后矩阵加法就是把矩阵中对应的元素相加,减法就是对应的元素相减。比如说答案中第一行第一个数的3就是1+3-1得到的#includeintmain()intn;ints1010;inti,j,k;charch;scanf(%d,&n);for(i=0;in;i+)f

11、or(j=0;jn;j+)scanf(“%d”,&sij);/*读入矩阵*/while(1)ch=getchar();/*这里两次getchar()的原因是读完矩阵中的数后行尾还有一个n,这时再读入读入的才是+-或者#*/ch=getchar();if(ch=#)for(i=0;in;i+)for(j=0;jn;j+)printf(“%5d”,sij);/*%5d,输出5位位数不足的用空格补齐*/printf(n);return0;/*退出*/for(i=0;in;i+)for(j=0;jn;j+)/*这里是进行加减操作*/scanf(%d,&k);if(ch=+)sij+=k;elsesij

12、-=k;由于题目难度增加,可能有些程序不能够在一页以内打完。所以可能看起来稍微费劲,见谅11级第四次作业-魔方阵魔方阵4.【问题描述】输入一个自然数(1N9),要求输出如下的魔方阵,即边长为2*N-1,在中心出现一次,其余位置上的数字从外向中心逐渐增大。N=3时:1111112221123211222111111N=4时:1111111122222112333211234321123332112222211111111【输入形式】从标准输入读取一个整数N。【输出形式】向标准输出打印结果。输出符合要求的方阵,每个数字占一个字符宽度,在每一行末均输出一个回车符。本题解析:这个题有多种做法。其中一种

13、做法是将这个大矩阵看做是n个正方形叠放在一起的,最后看每个位置的重叠次数就可以了。面积重叠的计算方法也可以去看第三次作业的矩阵相交的那个题。基本一样#includeintmain()intn;inti,j,k;ints2020;scanf(%d,&n);for(i=0;i=19;i+)for(j=0;j=19;j+)sij=0;/*数组初始化*/for(i=1;i=n;i+)/*一共n个正方形*/for(j=i;j=2*n-i;j+)/*边坐标从i到2*n-i*/for(k=i;k=2*n-i;k+)sjk+=1;/*进行过面积填充*/for(i=1;i=2*n-1;i+)for(j=1;j=

14、2*n-1;j+)printf(“%d”,sij);/*输出*/printf(n);11级第四次作业级第四次作业-文件拷贝文件拷贝25.【问题描述】【问题描述】写一程序将一个文件写一程序将一个文件fcopy.in拷贝至另一个文件拷贝至另一个文件fcopy.out,其中在所拷贝的其中在所拷贝的文件中文件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它其它字符不变。字符不变。【输入形式】【输入形式】源文件名和目标文件名分别为源文件名和目标文件名分别为fcopy.in和和fcopy.out,程序将从当前目录下,程序将从当前目录下读取

15、读取fcopy.in文件。文件。【输出形式】【输出形式】将将fcopy.in文件内容拷贝至当前目录下的文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文文件中。在所拷贝的文件中件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。【输入样例】【输入样例】假如文件假如文件fcopy.in中内容如下:中内容如下:Alcatelprovidesend-to-endsolutions.【输出

16、样例】【输出样例】输出文件输出文件fcopy.out中内容为:中内容为:Alcatelprovidesend-to-endsolutions.【样例说明】【样例说明】将文件将文件fcopy.in拷贝到拷贝到fcopy.out,同时做适当的转换。,同时做适当的转换。【评分标准】【评分标准】其中在所拷贝的文件中其中在所拷贝的文件中,多个连续空白符(包括空格符、制表符)只拷贝一多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它字符不变,完全符合要求得个空格符,其它字符不变,完全符合要求得20分,每个测试点分,每个测试点4分。提交程分。提交程序名为序名为copy.c。本题解析:这里涉及到文件输

17、入输出。惭愧的是某个人上课没好好听文件。就用了一种比较方便的方法,先介绍一下,使用与否看各位喜好了不需要指针!scanf不用改成fscanf!#includeIntmain()freopen(“test.in”,”r”,stdin);/*打开输入文件*/freopen(“test.out”,”w”,stdout);/*打开输出文件*/exit(0);/*关文件*/本题解析:这次是真的解析。这个题目比较好思考。就是一个字符一个字符的读入。如果这个字符是空格或者t的话就看它的上一个字符是不是空格或者t如果是的话就不输出,否则输出一个空格。如果这个字符不是空格或者t那么就直接将这个字符输出就可以了。

18、#include#includeintmain()freopen(fcopy.in,r,stdin);freopen(fcopy.out,w,stdout);chars,s1;inti;s=getchar();while(s!=EOF)/*没有读完的时候继续读*/if(s=)|(s=t)if(s1!=)&(s1!=t)printf();elseprintf(%c,s);s1=s;s=getchar();exit(0);11级第四次作业级第四次作业-括号匹配括号匹配6.【问题描述】【问题描述】假设一个输入字符串中包含圆括号、方括号和花括号三种类型的括号,假设一个输入字符串中包含圆括号、方括号和花

19、括号三种类型的括号,以及其它一些任意字符。编写程序,判别串中的括号是否正确匹配,即:以及其它一些任意字符。编写程序,判别串中的括号是否正确匹配,即:1.各种左、右括号的个数要一致;各种左、右括号的个数要一致;2.不能先出现右括号;不能先出现右括号;3.其它规则暂不考虑,例如:其它规则暂不考虑,例如:(adce)ef认认为是正确的。为是正确的。【输入形式】【输入形式】从当前目录下从当前目录下correct.in文件中读入一行字符串。字符串最大长度文件中读入一行字符串。字符串最大长度80,不含空格。不含空格。【输出形式】【输出形式】输出到当前目录下输出到当前目录下correct.out文件中。输出

20、只有一个单词,如果括号匹文件中。输出只有一个单词,如果括号匹配则输出配则输出“True”到文件中,否则输出到文件中,否则输出“False”。在输出末尾要有一个。在输出末尾要有一个回车符。回车符。本题解析:这个题目由于是一个不完全的匹配也就是说()是合法的那么只需要三个变量来分别计算圆括号方括号和花括号。遇到左括号的时候那么对应的变量值加一,遇到右括号的时候对应的变量值减一,如果出现了某个变量值为-1的时候也就是说没有出现左括号就出现右括号的时候表示不匹配。或者到了最后三个变量值中有一个不为0也就是说左右括号数量不相等的时候也表示不匹配,否则就是匹配的#include#includeintmai

21、n()freopen(correct.in,r,stdin);freopen(correct.out,w,stdout);inta=0,b=0,c=0;/*a,b,c分别表示圆括号方括号花括号*/chars200;inti,flag=1;gets(s);/*将文字读入*/for(i=0;istrlen(s);i+)switch(si)case(:a+=1;break;case:b+=1;break;case:c+=1;break;case):a-=1;break;case:b-=1;break;case:c-=1;break;if(a0)|(b0)|(c0)/*如果a,b,c中有一个小于零则退出*/flag=0;break;if(a=0)&(b=0)&(c=0)&(flag)/*如果a,b,c都为0而且没有中间出现有a,b,c小于零的情况*/printf(“Truen”);/*那么他就是匹配的*/elseprintf(Falsen);exit(0);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁