c语言 经典常用 习题.docx
《c语言 经典常用 习题.docx》由会员分享,可在线阅读,更多相关《c语言 经典常用 习题.docx(6页珍藏版)》请在冰豆网上搜索。
c语言经典常用习题
c语言经典常用习题
1.输入一个字符串,将其按给定的长度n格式化并输出,若n=0,则输出原字符串输入 输入一个字符串输出 格式化并输出 样例输入asdfasdf3 样例输出asdfasdf提示 #include#includeintmain(){intn,m,i,j;chara[10000];gets(a);scanf(\n=strlen(a);if(m==0)puts(a);else{for(i=0;i printf(\}}return0;} 2.题目描述 输入一个长度不超过100的字符串,删除串中的重复字符。
输入 输入要检查的字符串,长度不超过100个字符。
例如:
abacaeedabcdcd。
输出 删除重复字符后的字符串。
例如:
abced。
样例输入saas 样例输出sa提示 #include intmain() { chara[100]; inti,j,m; scanf(\ for(i=0;a[i]!
=0;i++) for(j=i+1;a[j]!
=0;j++) if(a[i]==a[j]) { for(m=j;a[m]!
=0;m++) { a[m]=a[m+1]; } j--; } puts(a); return0; } 3.请编写C程序,输入5个不同的且为字符格式的学生编号,将其先大到小排序,再将最大的学生编号和最小的学生编号互换位置,然后输出此时5位学生的编号。
输入 输入5位学生的编号(只含数字字符、英文字母或空格)。
输出 输出按题意要求排序后的5位学生的编号。
样例输入good1tiger100horse2011mouse02221century 样例输出21centurymouse022horse2011good1tiger100提示 用gets()函数输入字符串。
#include intmain(){char*temp,*p[5]; charstr[5][50]; inti,j,c; for(i=0;i gets(str[i]);p[i]=str[i];} for(i=0;i for(j=4;j>=i+1;j--){ if((*p[j])>(*p[j-1])){ temp=p[j];p[j]=p[j-1];p[j-1]=temp;}}} printf(\for(i=1;i printf(\} printf(\ } 4.编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找,如果有多个相同长度单词,则只输出第一个最短单词。
假设单词之间用空格分隔,findshort(s1,s2)函数完成s1串是最短单词的查找,找到的最短单词存储于s2中。
输入 一行字符串输出最短单词 样例输入 Happynewyear样例输出 new #include#includeintmain(){ inti,l; intmin=0,p,q; charstr[10000]; gets(str); for(i=0;str[i]!
=‘\\0’;i++) { if(str[i]!
=‘‘) { q=i; l=1; while(str[++i]!
=‘‘&&str[i]!
=‘\\0’) ++l; if(min==0||min>l) { min=l; p=q; } --i; } } for(i=p;str[i]!
=‘‘&&str[i]!
=‘\\0’;++i) printf(\ printf(\ return0;} 5.输出任意的一个字符串内的所有整数。
输出时两整数间有四个空格。
输入 输入一串字符输出 输出所有的整数 样例输入a00asd123e24
样例输出 0 123 24 #includeintmain(){ inti; chara[100]; gets(a); for(i=0;a[i];i++) { if(a[i]>‘0’&&a[i] printf(\ while(a[++i]>=‘0’&&a[i] elseif(a[i]==‘0’) { if(a[i+1]>=‘0’&&a[i+1] elseprintf(\\ } elsecontinue; } printf(\ return0;} 6.输入一字符串,对其按给定的条件进行排序,并输出。
排序条件为:
将字符串从中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。
如果字符串长度为奇数,则最中间的字符不参与处理。
例如,输入dcbahgfe,则输出hgfeabcd;若输入432198765,则输出876591234。
输入 输入一个字符串。
输出 输出按题中条件排序后的字符串。
样例输入432198765 样例输出876591234 #include#include#includeintmain(){ char*p,*q,ch; p=newchar[100]; gets(p); inti,j; intn=strlen(p); q=newchar[n]; if(n%2==0) { for(i=0;i for(j=i+1;j if(p[i]>p[j]) { ch=p[i]; p[i]=p[j]; p[j]=ch; } } } for(i=0;i ch=p[i]; p[i]=p[i+n/2]; p[i+n/2]=ch; } } else { for(i=0;i for(j=i+1;j if(p[i]>p[j]) { ch=p[i]; p[i]=p[j]; p[j]=ch; } } } for(i=0;i ch=p[i]; p[i]=p[i+n/2+1]; p[i+n/2+1]=ch; } } printf(\ return0;} 7.激动人心的时刻到了!
我们开发的记账软件即将在欧美地区发布,但我希望能把本土化工作做得更好。
所谓的本土化可不仅仅是把软件界面语言翻译成英语,还要根据当地的习俗来调整软件的使用方法。
比如我国在书写数字时,习惯根据“万位”用逗号将数字分隔,10001000写成1000,1000;而欧美国家使用“千位”来分隔,10001000会写成10,001,000。
现在,请你帮我写一个程序:
将那些按“万位”来分隔的数字转换成按“千位”来分隔,让欧美的用户使用更加方便。
输入 输入有多行,每一行包含一个以万位分隔的数字。
输出 对应每组输入,输出以千位分隔的数字。
样例输入12,3456,78901000,1000 样例输出1,234,567,89010,001,000 #include#include intmain(){ inti,a,b,j; charP[100]; charq[100]; while(scanf(\ { a=strlen(P); b=0; j=0; for(i=a-1;i>=0;i--) { if(P[i]!
=‘,’) { q[j++]=P[i]; b+=1; if(b==3) { q[j++]=‘,’; b=0; } } } if(j%4==0)j-=1; for(i=j-1;i>=0;i--) { printf(\ } printf(\}} 8.绝对素数是指本身是素数,其逆序数也是素数的数。
例如:
10321与12301是绝对素数。
编写一个程序,求出所有m~n之间的绝对素数。
程序要求实现两个自定义函数,prime(n)用于判断一个整数n是否是素数,是则返回1,否则返回0;inv(n)用于对整数n进行逆序,函数返回逆序后的整数。
主函数通过调用上述两个自定义函数实现绝对 素数的判断和输出。
输入mn输出 m~n之间的绝对素数,每个输出整数占5位,每行输出10个 样例输入111000样例输出 11131731107113131149199311313337701709727733787797907919983991提示 #includeintprime(intx){inti; for(i=2;i if(x%i==0) return0;} return1;} intinv(intx){ inti,t,p=0; while(x>0) { i=0; t=x_; x=x/10; p=p*10+t; } returnp;} intmain() 3771151157347353739743929937737916717935937375175794195397101181191383389761769967971
{ intnum,n,m,i=0; scanf(\for(num=m;num if((prime(num))&&(prime(inv(num)))){ i++; if(i_==0) printf(\else printf(\}} putchar(‘\\n’);} 9.某大奖赛有n(1 输入选手的数目n(1 选手的排名及最终的得分值。
样例输入3,5 样例输出 第1名:
3号选手,得分第2名:
1号选手,得分第3名:
2号选手,得分提示 1.在输入样例中,第一行的\表示3个选手,5个评委。
2.在输入样例中,第二行为5个评委对第1位选手的分别打分;第三行为5个评委对第2位选手的分别打分;第四行为5个评委对第3位选手的分别打分. 3.在输出样例中出现的标点符号均在英文状态下输入的。
#includeintmain(){ intn,m,i,j,k,t,x; intc[40]; floata[20],b[40]; floatmax,min,y,sum; scanf(\for(k=0;k if(a[i]>max)max=a[i]; if(a[i] for(i=0;i sum=(sum-max-min)*/(m-2);} b[k]=sum; c[k]=k+1;} for(k=0;k for(j=k;j y=b[k];b[k]=b[t];b[t]=y; x=c[k];c[k]=c[t];c[t]=x;} for(i=0;i printf(\第%d名:
%d号选手,得分%.2f\\n\ return0;} 输入一个正整数m和m阶方阵A中的元素,如果A是上三角矩阵,则输出“YES”,否则输出“NO”。
输入3123012001输出YES 样例输入4 1234011300121001 样例输出NO #includeintmain(){inti,j,a[7][7],n,p;scanf(\ for(i=0;ij&&a[i][j]!
=0) p=0; if(p==0)printf(\ elseprintf(\return0;} 编写函数num(intm,intk,intxx)将大于正整数m且紧靠m的k个素数存入数组xx中,并在main函数中将这个数组中的元素输出。
输入 输入正整数m和k。
输出 输出数组中的所有元素。
样例输入306 样例输出31374143 4753 #include intnum(intm,intk,intxx){inti,j,n;for(i=0;i intmain(){intm,n,xx[1000];scanf(\num(m,n,xx);for(m=0;m 计算字符串中子串出现的次数输入 输入以空格相隔的两个字符串,敲回车
输出 统计第一个字符串中第二个字符串出现的次数 样例输入 Goodooo 样例输出4 #include#includeusingnamespacestd;intmain(){charstr1[255],str2[255],*p1,*p2,*temp;intsum=0;cin>>str1;cin>>str2;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;}cout 任给出平面上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)_+(y1-y2)_),同样求出(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位)。
样例输入4 ,,,, 样例输出 以上4个点的覆盖圆的最小半径为 #include #include intmain(){doublex[10000],y[10000],R[10000];doubler,l,L1,L2,L3,C,S;intn,i,j,a,b,c,t=0,bao;scanf(\for(i=0;i=3){for(a=0;a S=sqrt(C*(C-L1)*(C-L2)*(C-L3));if(L1>L2){l=L1;L1=L2;L2=l;}if(L2>L3){l=L2;L2=L3;L3=l;}if(L1>L2){l=L1;L1=L2;L2=l;}if(L3*L3=L2*L2+L1*L1)R[t]=L3/2;} bao=n; n=(n-1)*(n-2)*n/6;for(j=0;j } printf(\以上%d个点的覆盖圆的最小半径为%.4lf\\n\ return0; } 编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入 一个字符串,长度不超过80个字符。
输出 删掉非英文字母后的字符串。
样例输入 abc123+ 样例输出 abcxyz #includeintmain(){inti;chara[1000];gets(a);for(i=0;a[i];i++){if(a[i]>=‘a’&&a[i]=‘A’&&a[i] 编制函数del_char 函数原型为voiddel_char(char*,char),函数的功能是删除a指向的字符串中值为ch的字符,
例如从字符串\中删除’A’后,字符串为\。
输入 需要删除的字符ch 需要处理的字符串输出 处理后的字符串 样例输入A AscADef 样例输出 scDef #includeintmain(){inti,j=0;chara[100],b[100],n;scanf(\getchar();scanf(\for(i=0;a[i]!
=‘\\0’;i++){if(a[i]!
=n){ b[j]=a[i]; j++;}}b[j]=‘\\0’; puts(b);return0;} 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。
写一函数:
实现以上功能,在主函数中输入n个数和输出调整后的n个数。
输入 输入数据的个数nn个整数移动的位置m输出 移动后的n个数 样例输入10 123456789102 样例输出 91012345678 #includeintmain(){inta[1000],i,n,m,x,y,b[1000];scanf(\for(i=0;i }for(i=0;i 编制函数,其功能是在float类型一维数组中查找最大值、最小值,并将它们返回到调用程序。
*输出保留两位小数输入n n个浮点数输出 最大值最小值 样例输入10 样例输出 #includeintmain(){floata[100],max,min;inti,n;scanf(\for(i=0;i 编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入 一个字符串,长度不超过80个字符。
输出 删掉非英文字母后的字符串。
样例输入 abc123+ 样例输出 abcxyz #includeintmain(){inti;chara[1000];gets(a);for(i=0;a[i];i++){if(a[i]>=‘a’&&a[i]=‘A’&&a[i] 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲密数对。
比如220的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284。
284的所有真约数和为:
1+2+4+71+142=220。
你的任务就编写一个程序,判断给定的两个数是否是亲和数输入 输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B;其中0≤A,B≤99999。
输出 对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。
样例输入2 220284100200 样例输出YESNO #include
intmain(){inti,j,n,a,b,s[1000],sum1,sum2;scanf(\ while(n--){ scanf(\j=0;sum1=0;for(i=1;i 已知元素从小到大排列的两个数组x和y,请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离。
输入 第一行为两个整数m,n(1≤m,n≤1000),分别代表数组f,g的长度。
第二行有m个元素,为数组f。
第三行有n个元素,为数组g。
输出 数组的最短距离 样例输入 55 12345678910 样例输出1 #includeintmain(){intmin,m,n,f[1000],g[1000],s[1000],k,i,j;scanf(\for(i=0;i=0&&min>k)min=k; if(k-k)min=-k;}}printf(\return0;} 1、求1+2+3+?
?
?
.+100。
答案 #includevoidmain(){ inti,sum=0; for(i=1;i printf(\} 2、求1*2*3*?
?
?
.*10。
答案 voidmain(){ inti=0,j=1; for(i=2;i printf(\return0;} 3、输入三个数字,输出他们的最大值。
答案 #includevoidmain(){inta,b,c,d; scanf(\d=max(a,b,c); printf(\ getch();/*暂停看运行结果*/} intmax(intx,inty,intz){intu; if(x>=y&&x>=z)u=x; elseif(y>=x&&y>=z)u=y;elseu=z; return(u); 4.用起泡法对十个数据排序答案 #includemain(){inti,j,t; staticinta[10]={5,7,4,2,3,6,1,0,9,8}; for(j=0;j {for(i=0;i {if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t; } } } for(i=0;i 5、输入十个数字,逆序输出。
答案 #includemain() {inta[10],i=0;for(i=0;i=0;i--)printf(\} 6输入两个数,交换他们的值并输出。
(元素交换)答案 #includeintmain(){ intm,n,temp; scanf(\if(m temp=m;m=n;n=temp;} printf(\ return0;} 7.输出9*9乘法表。
(双层循环)答案 #includevoidmain(){ inti=1; for(i;i intj=1; for(j;j printf(\} printf(\}} 8.输入一行字符,将所有的小写字母转换成大写字母,大写字母转换成小写字母,其余字符不变