c语言 经典常用 习题.docx

上传人:b****6 文档编号:6795244 上传时间:2023-01-10 格式:DOCX 页数:6 大小:24.90KB
下载 相关 举报
c语言 经典常用 习题.docx_第1页
第1页 / 共6页
c语言 经典常用 习题.docx_第2页
第2页 / 共6页
c语言 经典常用 习题.docx_第3页
第3页 / 共6页
c语言 经典常用 习题.docx_第4页
第4页 / 共6页
c语言 经典常用 习题.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

c语言 经典常用 习题.docx

《c语言 经典常用 习题.docx》由会员分享,可在线阅读,更多相关《c语言 经典常用 习题.docx(6页珍藏版)》请在冰豆网上搜索。

c语言 经典常用 习题.docx

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.输入一行字符,将所有的小写字母转换成大写字母,大写字母转换成小写字母,其余字符不变

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1