c语言经典常用习题.docx
- 文档编号:16345216
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:84
- 大小:35.78KB
c语言经典常用习题.docx
《c语言经典常用习题.docx》由会员分享,可在线阅读,更多相关《c语言经典常用习题.docx(84页珍藏版)》请在冰点文库上搜索。
c语言经典常用习题
c语言-经典常用-习题
1.输入一个字符串,将其按给定的长度n格式化并输出,若n=0,则输出原字符串
输入
输入一个字符串
输出
格式化并输出
样例输入
asdfasdf
3
样例输出
asd
fas
df
提示
#include
#include
intmain()
{
intn,m,i,j;
chara[10000];
gets(a);
scanf("%d",&m);
n=strlen(a);
if(m==0)
puts(a);
else
{
for(i=0;i { if(a[i]=='\0') return0; for(j=0;j { if(a[i+j]=='\0') { printf("\n"); return0; } printf("%c",a[i+j]); } printf("\n"); } } return0; } 2.题目描述 输入一个长度不超过100的字符串,删除串中的重复字符。 输入 输入要检查的字符串,长度不超过100个字符。 例如: abacaeedabcdcd。 输出 删除重复字符后的字符串。 例如: abced。 样例输入 saas 样例输出 sa 提示 #include intmain() { chara[100]; inti,j,m; scanf("%s",a); 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位学生的编号。 样例输入 good1 tiger100 horse2011 mouse022 21century 样例输出 21century mouse022 horse2011 good1 tiger100 提示 用gets()函数输入字符串。 #include intmain() { char*temp,*p[5]; charstr[5][50]; inti,j,c; for(i=0;i<5;i++) { gets(str[i]); p[i]=str[i]; } for(i=0;i<5;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("%s\n",p[4]); for(i=1;i<4;i++) { printf("%s\n",p[i]); } printf("%s\n",p[0]); } 4.编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找,如果有多个相同长度单词,则只输出第一个最短单词。 假设单词之间用空格分隔(一个或多个空格),findshort(s1,s2)函数完成s1串是最短单词的查找,找到的最短单词存储于s2中。 输入 一行字符串 输出 最短单词 样例输入 Happynewyear 样例输出 new #include #include intmain() { 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("%c",str[i]); printf("\n"); return0; } 5.输出任意的一个字符串内(字符串内可以包含空格)的所有整数。 输出时两整数间有四个空格。 输入 输入一串字符 输出 输出所有的整数 样例输入 a00asd123e24 样例输出 012324 #include intmain() { inti; chara[100]; gets(a); for(i=0;a[i];i++) { if(a[i]>'0'&&a[i]<='9') { printf("%c",a[i]); while(a[++i]>='0'&&a[i]<='9') printf("%c",a[i]); printf(""); } elseif(a[i]=='0') { if(a[i+1]>='0'&&a[i+1]<='9') continue; elseprintf("0"); } elsecontinue; } printf("\n"); return0; } 6.输入一字符串,对其按给定的条件进行排序,并输出。 排序条件为: 将字符串从中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。 如果字符串长度为奇数,则最中间的字符不参与处理。 例如,输入dcbahgfe,则输出hgfeabcd;若输入432198765,则输出876591234。 输入 输入一个字符串。 输出 输出按题中条件排序后的字符串。 样例输入 432198765 样例输出 876591234 #include #include #include intmain() { 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("%s\n",p); return0; } 7.激动人心的时刻到了! 我们开发的记账软件即将在欧美地区发布,但我希望能把本土化工作做得更好。 所谓的本土化可不仅仅是把软件界面语言翻译成英语,还要根据当地的习俗来调整软件的使用方法。 比如我国在书写数字时,习惯根据“万位”用逗号将数字分隔,10001000写成1000,1000;而欧美国家使用“千位”来分隔,10001000会写成10,001,000。 现在,请你帮我写一个程序: 将那些按“万位”来分隔的数字转换成按“千位”来分隔,让欧美的用户使用更加方便。 输入 输入有多行,每一行包含一个以万位分隔的数字。 输出 对应每组输入,输出以千位分隔的数字。 样例输入 12,3456,7890 1000,1000 样例输出 1,234,567,890 10,001,000 #include #include intmain() { inti,a,b,j; charP[100]; charq[100]; while(scanf("%s",P)==1) { 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("%c",q[i]); } printf("\n"); } } 8.绝对素数是指本身是素数,其逆序数也是素数的数。 例如: 10321与12301是绝对素数。 编写一个程序,求出所有m~n(m≥11,n≤1000)之间的绝对素数。 程序要求实现两个自定义函数,prime(n)用于判断一个整数n是否是素数,是则返回1,否则返回0;inv(n)用于对整数n进行逆序,函数返回逆序后的整数。 主函数通过调用上述两个自定义函数实现绝对素数的判断和输出。 输入 mn 输出 m~n之间的绝对素数,每个输出整数占5位,每行输出10个 样例输入 111000 样例输出 111317313771737997101 107113131149151157167179181191 199311313337347353359373383389 701709727733739743751757761769 787797907919929937941953967971 983991 提示 #include intprime(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%10; x=x/10; p=p*10+t; } returnp; } intmain() { intnum,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("%5d\n",num); else printf("%5d",num); } } putchar('\n'); } 9.某大奖赛有n(1 最高10分,最低0分。 统分规则为: 每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分,最后平均为该选手的最后得分。 根据n个选手的最后得分从高到低排出名次表,以便确定获奖名单。 输入 输入选手的数目n(1 输出 选手的排名及最终的得分值(小数点后保留两位)。 样例输入 3,5 5.67.89.45.88.8 7.86.78.36.95.5 6.79.28.88.39.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.在输出样例中出现的标点符号均在英文状态下输入的。 #include intmain() { intn,m,i,j,k,t,x; intc[40]; floata[20],b[40]; floatmax,min,y,sum; scanf("%d,%d",&n,&m); for(k=0;k {sum=0; max=-1.0; min=11.0; {for(i=0;i scanf("%f",&a[i]); for(i=0;i { if(a[i]>max)max=a[i]; if(a[i] } for(i=0;i sum=sum+a[i]; sum=(sum-max-min)*1.0/(m-2);} b[k]=sum; c[k]=k+1;} for(k=0;k {t=k; for(j=k;j if(b[t] 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",(i+1),c[i],b[i]); return0; } 输入一个正整数m(1≤m≤6)和m阶方阵A中的元素,如果A是上三角矩阵,则输出“YES”,否则输出“NO”(上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线)。 输入 3 123 012 001 输出 YES 样例输入 4 1234 0113 0012 1001 样例输出 NO #include intmain() { inti,j,a[7][7],n,p; scanf("%d",&n); for(i=0;i { for(j=0;j scanf("%d",&a[i][j]); } p=1; for(i=0;i for(j=0;j if(i>j&&a[i][j]! =0) p=0; if(p==0)printf("NO\n"); elseprintf("YES\n"); return0; } 编写函数num(intm,intk,intxx[])将大于正整数m且紧靠m的k个素数存入数组xx中,并在main函数中将这个数组中的元素输出。 输入 输入正整数m和k。 输出 输出数组中的所有元素。 样例输入 306 样例输出 31 37 41 43 47 53 #include intnum(intm,intk,intxx[]) { inti,j,n; for(i=0;i { m++; for(j=2;j { n=m%j; if(n==0)break; } if(n! =0) { xx[i]=m; i++; } } return0; } intmain() { intm,n,xx[1000]; scanf("%d%d",&m,&n); num(m,n,xx); for(m=0;m printf("%d\n",xx[m]); return0; } 计算字符串中子串出现的次数 输入 输入以空格相隔的两个字符串(字符数不大于20个),敲回车 输出 统计第一个字符串中第二个字符串出现的次数 样例输入 Goodooo 样例输出 4 #include #include usingnamespacestd; 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< return0; } 任给出平面上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位)。 样例输入 4 4.2,5.6 78.3,3.8 35.4,15.9 29.88,42.56 样例输出 以上4个点的覆盖圆的最小半径为37.1463 #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("%d",&n); for(i=0;i { scanf("%lf,%lf",&x[i],&y[i]); } if(n==2) { r=sqrt((x[0]-x[1])*(x[0]-x[1])+(y[0]-y[1])*(y[0]-y[1]))/2; printf("以上%d个点的覆盖圆的最小半径为%.4lf",n,r); } if(n==1) printf("以上%d个点的覆盖圆的最小半径为0.0000\n",n); if(n==0) printf("以上%d个点的覆盖圆的最小半径为0.0000\n",n); if(n>=3) { for(a=0;a for(b=a+1;b for(t,c=b+1;c { L1=sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])); L2=sqrt((x[a]-x[c])*(x[a]-x[c])+(y[a]-y[c])*(y[a]-y[c])); L3=sqrt((x[b]-x[c])*(x[b]-x[c])+(y[b]-y[c])*(y[b]-y[c])); C=(L1+L2+L3)/2; 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 R[t]=L1*L2*L3/(4*S); if(L3*L3>=L2*L2+L1*L1) R[t]=L3/2; } bao=n; n=(n-1)*(n-2)*n/6; for(j=0;j for(i=0;i { if(R[i] { r=R[i]; R[i]=R[i+1]; R[i+1]=r; } } printf("以上%d个点的覆盖圆的最小半径为%.4lf\n",bao,R[0]); } return0; } 编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 经典 常用 习题