怎么交c语言课堂作业,C语言第四次作业课堂

《C语言第四次作业课堂》由会员分享,可在线阅读,更多相关《C语言第四次作业课堂(24页珍藏版)》请在人人文库网上搜索。

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

2、,1,样例输出,2,002,样例说明】样例,1,中输入整数,S=178543,N=4,要求在,178543,中删除,4,位,使剩下的数字最小。正确答案为,S = 13,样例,2,中输入整数,S,1002,N,1,删完一位后,S = 002,而不是,2,即,2,之前的,0,也必须输出,运行时限】程序一次运行的最长时间限制在,15,秒内,超出则认为程,序错误,评分标准】该题要求输出一个大整数的各位数字。结果完全正确得,20,分,每个测试点,4,分。上传,C,语言文件名为,delete.c,3,本题解析,这道题主要的障碍存在于两个方面,1,怎么读入,2,怎么删,读入的话简单的说就是将一个数以字,符串。

3、的形式存储下来然后通过字符串处理,对数字的每一位进行操作,删除的方式比较精髓。这里介绍一,个比较容易懂的方法:每次删除都搜索第,一个第,i,位比第,i+1,位大的,然后把第,i,位删,掉。重复,m,次就可以得到最优解了,4,include,include,int main(,char s245,int i,j,k,int n,m,scanf(%s,s,scanf(%d,n=strlen(s);,这里是上面,string.h,中的函数,就是求,s,的长度的意思,for (i=1;i=m;i+),总共删,m,个数,for (j=0;j=n-1;j+),从头到尾扫描,if (sjsj+1),如果这个。

4、数比下一个数大那么这个数要删掉,for (k=j;k=n;k+),删除操作,sk=sk+1,break;,删除结束退出扫描,继续删除下一个数,printf(“%s”,s);,输出,5,11,级第四次作业,扩展字符,2,问题描述,编写一函数,expand(s1,s2,用以将字符串,s1,中的缩记符号在字,符串,s2,中扩展为等价的完整字符,例如将,a-d,扩展为,abcd,该函,数可以处理大小写字母和数字,并可以处理,a-b-c,a-z0-9,与,a,z,等类似的情况。在,main,函数中测试该函数:从键盘输入包含缩,记符号的字符串,然后调用该函数进行扩展,输出扩展结果,教材,P63,Exerc。

5、ise 3-3,注意,待扩展字符串中有可能包含空格,例如,a-d x-z,应扩展成,abcd,xyz,所以读入待扩展字符串时,应能够读入包含空格的字符串,只要缩记符号,之后的字符比之前的字符的,ASCII,码值大,就要将它,们之间的所有字符扩展出来,例如,Z-a,之间的字符也要扩展出,来,特殊情况,a-b-c,将被扩展为,abc,a-a,将被扩展为,a-a,输入形式,从键盘输入包含扩展符的字符串,输出形式,输出扩展后的字符串,输入样例,a-c-u-B,输出样例,abcdefghijklmnopqrstu-B,6,本题解析,这个题目乍一看比较麻烦。其实是这次作,业中比较简单的题目之一。因为特殊的。

6、字符只有,一个,那就是,只要判断好,这个题目就完,成了,这个方法比较朴素,就是用一个,flag,来表示,前一个字符是不是,如果不是,那么就输出这,个字符,如果是的话就进行判断,判断这个字符,跟,前字符的关系,如果这个字符,前字符,那就输出,在输出这个字符。否则的话就从,前字符到这个字符循环输出即可,7,include,include,void expands(char s1,char s2,int main(,char s1200,s2200,gets(s1);,读入,expands(s1,s2,printf(%s,s2,这个程序写的微微有些长,下页还有,8,void expands(char。

7、 s1,char s2,int flag,char j,int i,l,int sum=-1,l=strlen(s1);,确定字符串长度,flag=0,for (i=0;il;i,if (s1i,flag=1;continue;,如果这个字符是,那么将,flag,赋值为,1*,if (!flag),如果,flag,为,0,的话,sum+;s2sum=s1i;,直接输出,else if (s1i=s1i-2),否则如果这个字符比,前的字符小,sum+=2;s2sum,1,s2sum=s1i;,就先打一个,再打这个字符,else,否则的话就应该从前一个字符打印到这个字符,for (j=s1i-2+。

8、1;j=s1i;j+),这里注意,前一个字符已经存在于数组中,了就不需要再打印了,所以是从,s1i-2+1,开始而不是,s1i-2*,sum+;s2sum=j,flag=0,s2sum+1,0;,在字符串的最后放一个,0,表示结束,9,寄语:这个题写起来比较繁琐。可,能理解起来有些困难。有能力的同,学可以分步调试一下来查看结果,实在不会的话就去中,408,找我吧,10,11,级第四次作业,矩阵运算,3,问题描述,对于多个,N,阶矩阵,依次进行加、减运算,输入形式,从标准输入读取输入。第一行只有一个整数,N,1N10,,代表矩阵的阶数,接下来是一个矩阵,是,N,行,每行有,N,个整数(可能是正、。

9、负整数),是矩阵的所有,元素,然后一行只含一个字符,或,代表加、减操作,然后用同样的方式输入另一个矩阵,后续仍然是运算符和矩阵。直至运算符为,时停止计算,将结果输出,输出形式,向标准输出打印矩阵的操作结果。输出,N,行,每行对应矩阵在该行上的所有元素,每一行末均输出一个回车符。每个元素占,5,个字符宽度(包括负号),向右对齐,不,足部分补以空格,11,输入样例,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,12,本题解析,这个题。乍一看吓一跳。其实仔细。

10、读题,以后发现这个题是比较水的,首先是题目叙述问题:样例输出中,下图中,代,表空格,应该是打错了,其实是,代表空格,然后矩阵加法就是把矩阵中对应的元素相加,减法就是对应的元素相减。比如说答案中第一行,第一个数的,3,就是,1+3-1,得到的,13,include,int main(,int n,int s1010,int i,j,k,char ch,scanf(%d,for (i=0;in;i,for (j=0;jn;j,scanf(“%d,读入矩阵,while (1,ch=getchar();,这里两次,getchar(,的原因是读完矩阵中的,数后行尾还有一个,n,这时再,读入读入的才是,或。

11、者,*,ch=getchar(,if (ch=,for (i=0;in;i,for (j=0;jn;j,printf(“”,sij,输出,5,位位数不足,的用空格补齐,printf(,return 0;,退出,for (i=0;in;i,for (j=0;jn;j,这里是进行加减操作,scanf(%d,if (ch=+) sij+=k,else sij-=k,14,由于题目难度增加,可能有些程序,不能够在一页以内打完。所以可能,看起来稍微费劲,见谅,15,11,级第四次作业,魔方阵,4,问题描述】输入一个自然数,1N9,要求输出如下的魔方阵,即边长为,2*N-1,在中心出现一次,其余位,置上的。

12、数字从外向中心逐渐增大,N=3,时,11111,12221,12321,12221,11111,N=4,时,1111111,1222221,1233321,1234321,1233321,1222221,1111111,输入形式】从标准输入读取一个整数,N,输出形式】向标准输出打印结果。输出符合要求的方阵,每个数字占,一个字符宽度,在每一行末均输出一个回车符,16,本题解析,这个题有多种做法。其中一种做法是将这个,大矩阵看做是,n,个正方形叠放在一起的,最后看每,个位置的重叠次数就可以了,面积重叠的计算方法也可以去看第三次作,业的矩阵相交的那个题。基本一样,17,include,int mai。

13、n(,int n,int i,j,k,int s2020,scanf(%d,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=2*n-1;j,printf(“%d”,sij);,输出,printf(,18,11,级第四次作业,文件拷贝,25,问题描述,写一程序将一个文件,fcopy.in,拷贝至另一个。

14、文件,fcopy.out,其中在所拷贝的,文件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它,字符不变,输入形式,源文件名和目标文件名分别为,fcopy.in,和,fcopy.out,程序将从当前目录下读,取,fcopy.in,文件,输出形式,将,fcopy.in,文件内容拷贝至当前目录下的,fcopy.out,文件中。在所拷贝的文件,中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白,符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变,输入样例,假如文件,fcopy.in,中内容如下,Alcatel,provides,end-to-end solut。

15、ions,输出样例,输出文件,fcopy.out,中内容为,Alcatel provides end-to-end solutions,样例说明,将文件,fcopy.in,拷贝到,fcopy.out,同时做适当的转换,评分标准,其中在所拷贝的文件中,多个连续空白符(包括空格符、制表符)只拷贝一,个空格符,其它字符不变,完全符合要求得,20,分,每个测试点,4,分。提交程,序名为,copy.c,19,本题解析,这里涉及到文件输入输出。惭愧的是,某个人上课没好好听文件,就用了一种比较方便的方法,先介绍一下,使用与否看各位喜好了,不需要指针,scanf,不用改成,fscanf,include,Int。

16、 main(,freopen(“test.in”,”r”,stdin);,打开输入文件,freopen(“test.out”,”w”,stdout);,打开输出文件,exit(0);,关文件,20,本题解析,这次是真的解析。这个题目比较好思考。就,是一个字符一个字符的读入。如果这个字符是空,格或者,t,的话就看它的上一个字符是不是空格或,者,t,如果是的话就不输出,否则输出一个空格,如果这个字符不是空格或者,t,那么就直接将这个,字符输出就可以了,21,include,include,int main(,freopen(copy.in, ,stdin,freopen(copy.out,w,st。

17、dout,char s,s1,int i,s=getchar(,while (s!=EOF),没有读完的时候继续读,if (s= )|(s=t,if (s1!= ),将文字读入,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(“True,n”,那么他就是匹配的,else printf(Falsen,exit(0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值