c语言-经典常用-习题_第1页
c语言-经典常用-习题_第2页
c语言-经典常用-习题_第3页
c语言-经典常用-习题_第4页
c语言-经典常用-习题_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1.输入一个字符串,将其按给定的长度n格式化并输出,若n=0,则输出原字符串输入输入一个字符串输出格式化并输出样例输入asdfasdf3样例输出asdfasdf提示#include#includeint main()int n,m,i,j;char a10000;gets(a);scanf(%d,&m);n=strlen(a);if(m=0)puts(a);elsefor(i = 0; i n; i += m)if(ai = 0)return 0;for(j = 0; j m; + j)if(ai + j = 0)printf(n);return 0;printf(%c, ai + j);printf(n);return 0;2.题目描述输入一个长度不超过 100 的字符串,删除串中的重复字符。输入输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。输出删除重复字符后的字符串。例如:abced。样例输入saas样例输出sa提示#include int main() char a100; int i,j,m; scanf(%s,a); for(i=0;ai!=0;i+) for(j=i+1;aj!=0;j+) if(ai=aj) for(m=j;am!=0;m+) am=am+1; j-; puts(a); return 0; 3.请编写C程序,输入5个不同的且为字符格式的学生编号,将其先由大到小排序,再将最大的学生编号和最小的学生编号互换位置,然后输出此时5位学生的编号。输入输入5位学生的编号(只含数字字符、英文字母或空格)。输出输出按题意要求排序后的5位学生的编号。样例输入good1tiger100horse2011mouse 02221century样例输出21centurymouse 022horse2011good1tiger100提示用gets()函数输入字符串。#includeint main()char *temp,*p5; char str550; int i,j,c; for(i=0;i5;i+)gets(stri);pi = stri;for(i=0;i=i+1;j-)if(*pj)(*pj-1)temp = pj;pj = pj-1;pj-1 = temp;printf(%sn,p4);for(i=1;i4;i+)printf(%sn,pi);printf(%sn,p0); 4.编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找,如果有多个相同长度单词,则只输出第一个最短单词。假设单词之间用空格分隔(一个或多个空格),findshort(s1,s2)函数完成s1串是最短单词的查找,找到的最短单词存储于s2中。输入一行字符串输出最短单词样例输入Happy new year样例输出new# include # include int main() int i,l; int min = 0, p, q; char str10000; gets(str); for(i = 0; stri != 0; i +) if(stri != ) q = i; l = 1; while(str+ i != & stri != 0) + l; if(min = 0 | min l) min = l; p = q; - i; for(i = p; stri != & stri != 0; + i) printf(%c, stri); printf(n); return 0; 5.输出任意的一个字符串内(字符串内可以包含空格)的所有整数。输出时两整数间有四个空格。输入输入一串字符输出输出所有的整数样例输入a00asd123e24样例输出0 123 24 #includeint main() int i; char a100; gets(a); for(i=0;ai;i+) if(ai0&ai=0&ai=0&ai+1=9) continue; else printf(0 ); else continue; printf(n); return 0;6.输入一字符串,对其按给定的条件进行排序,并输出。排序条件为:将字符串从中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。如果字符串长度为奇数,则最中间的字符不参与处理。例如,输入dcbahgfe,则输出hgfeabcd;若输入432198765,则输出876591234。输入输入一个字符串。输出输出按题中条件排序后的字符串。样例输入432198765样例输出876591234# include # include # include int main() char *p,*q,ch; p = new char100; gets(p); int i,j; int n=strlen(p); q = new charn; if(n%2=0) for(i=0;in/2-1;i+) for(j=i+1;jpj) ch=pi; pi = pj; pj=ch; for(i=0;in/2;i+) ch = pi; pi = pi+n/2; pi+n/2 = ch; else for(i=0;in/2-1;i+) for(j=i+1;jpj) ch=pi; pi = pj; pj=ch; for(i=0;in/2;i+) ch = pi; pi = pi+n/2+1; pi+n/2+1 = ch; printf(%sn,p); return 0; 7.激动人心的时刻到了!我们开发的记账软件即将在欧美地区发布,但我希望能把本土化工作做得更好。所谓的本土化可不仅仅是把软件界面语言翻译成英语,还要根据当地的习俗来调整软件的使用方法。比如我国在书写数字时,习惯根据“万位”用逗号将数字分隔,10001000 写成 1000,1000;而欧美国家使用“千位”来分隔,10001000 会写成 10,001,000。现在,请你帮我写一个程序:将那些按“万位”来分隔的数字转换成按“千位”来分隔,让欧美的用户使用更加方便。输入输入有多行,每一行包含一个以万位分隔的数字。输出对应每组输入,输出以千位分隔的数字。样例输入12,3456,78901000,1000样例输出1,234,567,89010,001,000# include # include int main() int i,a,b,j; char P100; char q100; while (scanf(%s,P)=1) a= strlen(P); b = 0; j = 0; for( i = a-1; i = 0; i-) if(Pi != ,) qj+ = Pi; b += 1; if(b = 3) qj+ = ,; b = 0; if(j%4=0)j-=1; for(i = j-1; i = 0; i-) printf(%c,qi); printf(n); 8.绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。编写一个程序,求出所有mn(m11,n1000)之间的绝对素数。程序要求实现两个自定义函数,prime(n)用于判断一个整数n是否是素数,是则返回1,否则返回0;inv(n)用于对整数n进行逆序,函数返回逆序后的整数。主函数通过调用上述两个自定义函数实现绝对素数的判断和输出。输入m n输出mn之间的绝对素数,每个输出整数占5位,每行输出10个样例输入11 1000样例输出 11 13 17 31 37 71 73 79 97 101 107 113 131 149 151 157 167 179 181 191 199 311 313 337 347 353 359 373 383 389 701 709 727 733 739 743 751 757 761 769 787 797 907 919 929 937 941 953 967 971 983 991提示#includeint prime(int x) int i; for(i=2;i0) i=0; t=x%10; x=x/10; p=p*10+t; return p;int main() int num,n,m,i=0; scanf(%d%d,&m,&n); for(num=m;num=n;num+) if(prime(num)&(prime(inv(num) i+; if(i%10=0) printf(%5dn,num); else printf(%5d,num); putchar (n);9.某大奖赛有n(1n40)个选手参赛,m (2m20)个评委为依次参赛的选手评判打分:最高10分,最低0分。统分规则为:每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分,最后平均为该选手的最后得分。根据n个选手的最后得分从高到低排出名次表,以便确定获奖名单。输入输入选手的数目n(1n40),评委的数目m (2m20),以及评委对每位选手的打分。输出选手的排名及最终的得分值(小数点后保留两位)。样例输入3,55.6 7.8 9.4 5.8 8.87.8 6.7 8.3 6.9 5.56.7 9.2 8.8 8.3 9.0样例输出第1名:3号选手,得分8.70第2名:1号选手,得分7.47第3名:2号选手,得分7.13提示1.在输入样例中,第一行的3,5表示3个选手,5个评委。2.在输入样例中,第二行为5个评委对第1位选手的分别打分;第三行为5个评委对第2位选手的分别打分;第四行为5个评委对第3位选手的分别打分.3.在输出样例中出现的标点符号均在英文状态下输入的。#includeint main() int n,m,i,j,k,t,x; int c40; float a20,b40; float max,min,y,sum; scanf (%d,%d,&n,&m); for(k=0;kn;k+) sum=0; max=-1.0; min=11.0; for(i=0;im;i+) scanf(%f,&ai); for(i=0;imax)max=ai; if(aimin)min=ai; for(i=0;im;i+) sum=sum+ai; sum=(sum-max-min)*1.0/(m-2); bk=sum; ck=k+1; for(k=0;kn-1;k+) t=k; for(j=k;jn;j+) if(btbj)t=j; y=bk;bk=bt;bt=y; x=ck;ck=ct;ct=x; for(i=0;in;i+) printf(第%d名:%d号选手,得分%.2fn,(i+1),ci,bi); return 0; 输入一个正整数m(1m6)和m阶方阵A中的元素,如果A是上三角矩阵,则输出“YES”,否则输出“NO”(上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线)。输入31 2 30 1 20 0 1输出YES样例输入41 2 3 40 1 1 30 0 1 21 0 0 1样例输出NO#includeint main()int i,j,a77,n,p;scanf(%d,&n);for(i=0;in;i+)for(j=0;jn;j+)scanf(%d,&aij);p=1;for(i=0;in;i+)for(j=0;jj&aij!=0)p=0;if(p=0) printf(NOn);else printf(YESn);return 0;编写函数num(int m,int k,int xx)将大于正整数m且紧靠m的k个素数存入数组xx中,并在main函数中将这个数组中的元素输出。输入输入正整数m和k。输出输出数组中的所有元素。样例输入30 6样例输出313741434753#includeint num(int m,int k,int xx)int i,j,n;for(i=0;ik;)m+;for(j=2;jm;j+)n=m%j;if(n=0) break;if(n!=0)xxi=m;i+;return 0;int main()int m,n,xx1000;scanf(%d %d,&m,&n);num(m,n,xx);for(m=0;mn;m+)printf(%dn,xxm);return 0;计算字符串中子串出现的次数输入输入以空格相隔的两个字符串(字符数不大于20个),敲回车输出统计第一个字符串中第二个字符串出现的次数样例输入Goodoo o样例输出4#include #include using namespace std;int main()char str1255,str2255,*p1,*p2, *temp;int sum=0;cinstr1;cinstr2;p1=str1;p2=str2;while (*p1!=0) temp = p1;if(*temp=*p2)while(*temp=*p2)&(*p2!=0)&(*temp!=0)temp+;p2+;p1+;if(*p2=0) sum=sum+1;p2=str2;coutsum;return 0; 任给出平面上n个点的坐标,试求覆盖这n个点的圆的最小半径。 解题思路:只要分别求出所有3点组合覆盖的最小圆,取其中半径最大者即为所求。 那么确定覆盖3点的最小圆的步骤可以如下: (1) 若3点组成直角或钝角三角形,或3点共线,此时,最小圆的半径为三边中最长边的一半。 (2) 否则,3点组成锐角三角形,最小圆为3点的外接圆。 (3) 外接圆半径计算方法: (a) 若3点构成一个三角形(即3点不共线),并设3点的坐标为 (x1,y1),(x2,y2),(x3,y3),求出两点(x1,y1)和(x2,y2)之间的距离L1=sqrt(x1-x2)2+(y1-y2)2), 同样求出(x1,y1)和(x3,y3)之间的距离L2,以及(x2,y2)和(x3,y3)之间的距离L3。 (b) 求出三角形半周长L=(L1+L2+L3)/2以及面积S=sqrt(L*(L-L1)*(L-L2)*(L-L3)。 (c) 根据公式4SR=L1*L2*L3,求外接圆半径R=L1*L2*L3/(4*S)。输入输入平面点的个数n以及n个点的坐标。输出输出覆盖这n个点的最小半径(小数点后保留4位)。样例输入44.2,5.678.3,3.835.4,15.929.88,42.56样例输出以上4个点的覆盖圆的最小半径为37.1463#include #include int main() double x10000,y10000,R10000;double r,l,L1,L2,L3,C,S;int n,i,j,a,b,c,t=0,bao;scanf(%d,&n);for(i=0;i=3)for(a=0;an-2;a+)for(b=a+1;bn-1;b+)for(t,c=b+1;cL2)l=L1;L1=L2;L2=l;if(L2L3)l=L2;L2=L3;L3=l;if(L1L2)l=L1;L1=L2;L2=l;if(L3*L3=L2*L2+L1*L1)Rt=L3/2;bao=n;n=(n-1)*(n-2)*n/6;for(j=0;jn-1;j+)for(i=0;in-1-j;j+)if(RiRi+1)r=Ri;Ri=Ri+1;Ri+1=r;printf(以上%d个点的覆盖圆的最小半径为%.4lfn,bao,R0);return 0; 编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。输入一个字符串,长度不超过80个字符。输出删掉非英文字母后的字符串。样例输入abc123+xyz.5样例输出abcxyz#includeint main()int i;char a1000;gets(a);for(i=0;ai;i+)if(ai=a&ai=A&ai=Z)printf(%c,ai);return 0;编制函数del_char函数原型为 void del_char(char *,char),函数的功能是删除a指向的字符串中值为ch的字符,例如从字符串AscADef中删除A后,字符串为scDef。输入需要删除的字符ch需要处理的字符串输出处理后的字符串样例输入AAscADef样例输出scDef#includeint main()int i,j=0;char a100,b100,n;scanf(%c,&n);getchar();scanf(%s,a);for(i=0;ai!=0;i+)if(ai!=n)bj=ai;j+;bj=0;puts(b);return 0;有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。输入输入数据的个数n n个整数 移动的位置m输出移动后的n个数样例输入101 2 3 4 5 6 7 8 9 102样例输出9 10 1 2 3 4 5 6 7 8#includeint main()int a1000,i,n,m,x,y,b1000;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);scanf(%d,&m);for(i=n-m;in;i+)bi-n+m=ai;for(i=0;in-m;i+)bi+m=ai;for(i=0;in;i+)ai=bi;for(i=0;in;i+)printf(%d ,ai);return 0;编制函数,其功能是在float类型一维数组中查找最大值、最小值,并将它们返回到调用程序。* 输出保留两位小数输入nn个浮点数输出最大值 最小值样例输入101.02.03.04.05.06.07.08.09.010.0样例输出10.00 1.00#includeint main()float a100,max,min;int i,n;scanf(%d,&n);for(i=0;in;i+)scanf(%f,&ai);max=a0;min=a0;for(i=1;in;i+)if(maxai) min=ai;printf(%.2f %.2f,max,min);编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。输入一个字符串,长度不超过80个字符。输出删掉非英文字母后的字符串。样例输入abc123+xyz.5样例输出abcxyz#includeint main()int i;char a1000;gets(a);for(i=0;ai;i+)if(ai=a&ai=A&ai=Z)printf(%c,ai);return 0;如果a的因子和等于b,b的因子和等于a,且ab,则称a,b为亲密数对。 比如220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110284。 284的所有真约数和为: 1+2+4+71+142=220。 你的任务就编写一个程序,判断给定的两个数是否是亲和数 输入输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0A,B99999。输出对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。样例输入2220 284100 200样例输出YESNO#includeint main()int i,j,n,a,b,s1000,sum1,sum2;scanf(%d,&n); while(n-)scanf(%d%d,&a,&b);j=0;sum1=0;for(i=1;ia;i+)if(a%i=0)sj+=i;for(i=0;ij;i+)sum1=sum1+si;j=0;sum2=0;for(i=1;ib;i+)if(b%i=0)sj+=i;for(i=0;ij;i+)sum2=sum2+si;if(sum1=b&sum2=a)printf(YESn);else printf(NOn); return 0;已知元素从小到大排列的两个数组x和y,请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离。输入第一行为两个整数m, n(1m, n1000),分别代表数组f, g的长度。 第二行有m个元素,为数组f。 第三行有n个元素,为数组g。输出数组的最短距离样例输入5 51 2 3 4 56 7 8 9 10样例输出1#includeint main()int min,m,n,f1000,g1000,s1000,k,i,j;scanf(%d %dn,&m,&n);for(i=0;im;i+)scanf(%d,&fi);for(i=0;in;i+)scanf(%d,&gi);min=f0-g0;if(min0) min=-min;for(j=0;jm;j+)for(i=0;i=0&mink) min=k;if(k-k) min=-k;printf(%d,min);return 0;1、求1+2+3+.+100。(循环)答案#include void main() int i,sum=0; for(i=1;i=100;i+) sum=sum+i; printf(%d,sum); 2、 求1*2*3*.*10。(循环)答案void main() int i=0,j=1; for (i=2;i=10;i+) j*=i; printf(%d,j); return 0; 3、 输入三个数字,输出他们的最大值。(if)答案#includevoid main() int a,b,c,d; scanf(%d,%d,%d,&a,&b,&c); d=max(a,b,c); printf(max=%d,d); getch();/*暂停看运行结果*/ int max(int x,int y,int z)int u; if(x=y&x=z) u=x; else if(y=x&y=z) u=y; else u=z; return(u); 4.用起泡法对十个数据排序(数组实现)答案#includemain ( ) int i,j,t; static int a10=5,7,4,2,3,6,1,0,9,8; for(j=0;j9;j+) for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t ; for(i=0;i10;i+) printf(%2d,ai); 5、输入十个数字,逆序输出。(数组实现)答案#includemain()int a10,i=0;for(i=0;i=0;i-)printf(%f,ai);6输入两个数,交换他们的值并输出。(元素交换)答案#includeint main () int m,n,temp; scanf(%d%d,&m,&n); if (mn) temp=m; m=n; n=temp; printf(%d,m); return 0;7.输出9*9乘法表。(双层循环)答案#include void main()int i=1;for(i; i=9; i+) int j=1; for(j;j=i;j+) printf(%d*%d=%d , i, j, i*j); printf(n);8.输入一行字符,将所有的小写字母转换成大写字母,大写字母转换成小写字母,其余字符不变。输出转变后的这行字符。答案#include stdio.hvoid main() char an; int i; scanf(%s,a); printf(大写为:); for(i=0;i=n;i+) if(ai=a) ai=ai-32; printf(%c,ai); printf(n小写为:); for(i=0;i=65&c=97&c=48&c=100&x1000) a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;if(x=(pow(a,3)+pow(b,3)+pow(c,3) printf(%5d,x);x+;6.7main()int m,i,j,s;for(m=6;m10000;m+)s=1;for(i=2;im;i+)if(m%i=0) s=s+i;if(m-s=0)printf(%5d its fastors are 1 ,m);for(j=2;jm;j+) if(m%j=0)printf(%d ,j);printf(n);或main()int m,i,j,s;for(m=6;m1000;m+)s=m-1;for(i=2;im;i+)if(m%i=0) s=s-i;if(s=0)printf(%5d its fastors are 1 ,m);for(j=2;jm;j+) if(m%j=0)printf(%d ,j);printf(n);6.8main()int i=1,n;double t,x=1,y=2,s,sum=0;scanf(%ld,&n);while(i=n) s=y/x;sum=sum+s;t=y;y=y+x;x=t;i+;printf(%fn,sum);11,P128 例6.10(译码)#includevoid main()char c;while(c=getchar()!=n)c=c+4;if(cZ+4|cz)c=c-26;printf(%c,c);printf(n);12,

温馨提示

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

评论

0/150

提交评论