计算机二级C语言的注意事项及相应真题-1-程序修改

注意事项:

错误一般设置在/found/的下面那句里

其他的和程序填空差不多

1.将字符串a中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格

给定程序modi1.c中,函数fun的功能是:将字符串a中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格。

例如,在调用fun函数之前给字符串a输入:ABCDEFGHIJK,调用函数之后,字符串b中的内容则为: ABC DEF GHI JK

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

modi1.c:

#include <stdio.h>
#pragma warning (disable:4996)
void  fun(char  *p, char  *b)
{  int   i, k=0;
   while(*p)//遍历字符串a
   {  i=1;//每次循环开始i为1
      while( i<=3 && *p ) {//复制三个字符后跳出循环,
/**********found**********/
          b[k]=p;
          k++; p++; i++;
      }
      if(*p)//字符不为空时进入if分支
     {
/**********found**********/
         b[k++]=" ";
      }
    }
    b[k]='\0';//字符串末尾赋空,因为在main函数里用puts输出的,puts输出字符串遇空才停
}
main()
{  char  a[80],b[80];
   printf("Enter a string:      ");  gets(a);
   printf("The original string: ");  puts(a);
   fun(a,b);
   printf("\nThe string after insert space:   ");  puts(b); printf("\n\n");
   getchar();
}

解题思路:
错误一般设置在/**********found**********/的下面那句里

所以有两个错误,

   b[k]=p;//p是指针,单纯的p是指向的字符的地址,这样的话赋给b[k]的是地址,这显然不对,想要传过去的是字符,就要加一个解引符*,
         //正确写法应该是b[k]=*p;
         b[k++]=" ";//这个记住就行,字符串用""双引,字符用''单,空格是一个字符应该用''

答案:

#include <stdio.h>
#pragma warning (disable:4996)
void  fun(char  *p, char  *b)
{  int   i, k=0;
   while(*p)
   {  i=1;
      while( i<=3 && *p ) {
/**********found**********/
          b[k]=*p;
          k++; p++; i++;
      }
      if(*p)
     {
/**********found**********/
         b[k++]=' ';
      }
    }
    b[k]='\0';
}
main()
{  char  a[80],b[80];
   printf("Enter a string:      ");  gets(a);
   printf("The original string: ");  puts(a);
   fun(a,b);
   printf("\nThe string after insert space:   ");  puts(b); printf("\n\n");
   getchar();
}

测试:

Enter a string:      ABCDEFGHIJK
The original string: ABCDEFGHIJK

The string after insert space:   ABC DEF GHI JK

2.创建带头结点的单向链表,并为各结点数据域赋0到m-1的值

给定程序modi1.c中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

modi1.c:

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{  NODE  *h=NULL, *p, *s;
   int  i;
/**********found***********/
   p=(NODE )malloc(sizeof(NODE));//用p开辟节点空间
   h=p;//开辟的节点赋给头节点
   p->next=NULL;//p的指针域为空
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));//开辟节点空间
      s->data=rand()%m;      s->next=p->next;//s的数据域由随机数得出,把p的下一节点地址赋给s的下一节点地址
      p->next=s;             p=p->next;//把节点s设为p的下一节点,p指向下一节点
   }
/**********found***********/
   return  p;//返回头节点
}
outlink(NODE  *h)
{  NODE  *p;
   p=h->next;//p指向头节点的下一个节点
   printf("\n\nTHE  LIST :\n\n  HEAD ");
   while(p)
   {  printf("->%d ",p->data);
      p=p->next;//p指向下一个节点
   }
   printf("\n");
}
main()
{  NODE  *head;
   head=Creatlink(8,22);//创建链表,这里传的两个数你看到在Creatlink函数中的rand随机数函数应该就懂了,前一个数n是要创建的节点数,后一个数m是随机数的范围
   outlink(head);//输出链表
  getchar();
}

解题思路:
讲一下malloc开辟空间函数:
指针自身 = (指针类型*)malloc(sizeof(指针类型)*数据数量)//直接套公式就行

题目代码中的每次都只开辟了一个元素的空间

可以用malloc开辟数组空间
例:

double * ptd;
ptd = (double * ) malloc (30 * sizeof(double));

等价于

double ptd[n];

现在说下题目中的错误

p=(NODE )malloc(sizeof(NODE));//这里使用malloc明显指针类型使用错误
  //应该是p=p=(NODE *)malloc(sizeof(NODE));

第二处错误:
创建链表后返回的应该是头节点,调用的时候都是从头节点开始的

答案:

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{  NODE  *h=NULL, *p, *s;
   int  i;
/**********found***********/
   p=(NODE *)malloc(sizeof(NODE));
   h=p;
   p->next=NULL;
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));
      s->data=rand()%m;      s->next=p->next;
      p->next=s;             p=p->next;
   }
/**********found***********/
   return  h;
}
outlink(NODE  *h)
{  NODE  *p;
   p=h->next;
   printf("\n\nTHE  LIST :\n\n  HEAD ");
   while(p)
   {  printf("->%d ",p->data);
      p=p->next;
   }
   printf("\n");
}
main()
{  NODE  *head;
   head=Creatlink(8,22);
   outlink(head);
  getchar();
}

测试:



THE  LIST :

  HEAD ->17 ->10 ->17 ->13 ->1 ->15 ->0 ->6 


3.求出所有满足条件的三位数

给定程序MODI1. C中,调用fun函数求出所有满足条件的三位数,存放到形参n所指的组

中,并返回这些数的个数。这些三位数等于它各个位上数字的立方和。

例如: 153=111+555+333

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

MODI1. C:

#include    <stdio.h>
#pragma warning (disable:4996)
int  cube(int  n)  { return n*n*n; }
int  fun( int *n)
{  int  a,b,c,i,k=0; //k是有多少符合的数
   for (i=100; i<1000; i++)  //遍历三位数
   {  
/*****************found*****************/
      a = i % 100;//百位
      b = i / 10 % 10;//十位    
      c = i % 10;//个位         
/*****************found*****************/
      if(cube(a)+cube(b)+cube(c) = i)//判断该数是否等于各个位上数字的立方和
      {  n[k]=i; 	  k++;}//若是,存入数组
   }
 /*****************found*****************/
   return  k-1 ;//返回符合的数有多少个
}
main()
{
   int  n[100],k,i;
   k=fun(n);
   for(i=0;i<k;i++)printf("%d ", n[i]);
   printf("\n");
}

解题思路:
一共有三个错误:

      (1):
      a = i % 100;//%是取余,比如111%100等于11,明显不对,这句应该是要取百位上的个位,是三位数,那只用i/100就行
      (2):
      if(cube(a)+cube(b)+cube(c) = i)//单等是赋值,==才是相等
      (3):
   return  k-1 ;//在main函数看到输出是i<k,数组里k个元素,下标为0到k-1,如果返回的是k-1,那么就会少输出一个元素

答案:

#include    <stdio.h>
#pragma warning (disable:4996)
int  cube(int  n)  { return n*n*n; }
int  fun( int *n)
{  int  a,b,c,i,k=0; 
   for (i=100; i<1000; i++)  
   {  
/*****************found*****************/
      a = i / 100;
      b = i / 10 % 10;    
      c = i % 10;         
/*****************found*****************/
      if(cube(a)+cube(b)+cube(c) == i)
      {  n[k]=i; 	  k++;}
   }
 /*****************found*****************/
   return  k ;
}
main()
{
   int  n[100],k,i;
   k=fun(n);
   for(i=0;i<k;i++)printf("%d ", n[i]);
   printf("\n");
}

测试:

153 370 371 407 


4.对于长整数n中的各个位置上的数值,分别统计出为0和为1的个数

给定程序MODI1. C中,函数fun的功能是:对于长整数n中的各个位置上的数值,分别统计

出为0和为1的个数,并传递回主函数输出。

例如:若n的值为120311,即为0的个数是1;为1的个数是3,则应输出: c0=1, c1=3。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

MODI1. C:

#include <stdio.h> 
#pragma warning (disable:4996)
void fun(long n,int *c0,int *c1)//c0和c1都是以指针的形式传来的,所以在fun函数c0和c1的变化会保留回到main函数
{  int k;
/**********************found***********************/
  *c0=*c1=1;//赋初值,但应该是0
  do
  { 
/**********************found***********************/
	k= n/10;//k是取每一位上数,应该是取余才正确
	if(k==0) (*c0)++;
	if(k==1) (*c1)++;
/**********************found***********************/
	n=n-10;//n应该一位一位的去掉
  }
  while (n);//先循环再判断,不然0就无法判断了
}
main()
{ long n;  int c0,c1;
  printf("input n:");
  scanf("%ld",&n);
  fun(n,&c0,&c1);
  printf("c0=%d,c1=%d\n",c0,c1);
}

解题思路:

有三个错误,这题简单,注释就很清楚了ヾ(•ω•`)o

答案:

#include <stdio.h> 
#pragma warning (disable:4996)
void fun(long n,int *c0,int *c1)
{  int k;
/**********************found***********************/
  *c0=*c1=0;
  do
  { 
/**********************found***********************/
	k= n%10;
	if(k==0) (*c0)++;
	if(k==1) (*c1)++;
/**********************found***********************/
	n=n/10;
  }
  while (n);
}
main()
{ long n;  int c0,c1;
  printf("input n:");
  scanf("%ld",&n);
  fun(n,&c0,&c1);
  printf("c0=%d,c1=%d\n",c0,c1);
}

测试:

input n:120311
c0=1,c1=3

5.是大写字母则输出*,是小写字母输出#,是其他字符则输出问号?

给定程序MODI1.C中,函数int my_ isalpha (char c) 的功能是返回字符的种类:大写字母

返回1,小写字母返回-1,其他字符返回0。

函数void a()调用my_ isalpha(), 根据其返回值决定输出:是大写字母则输出*,是小写字

母输出#,是其他字符则输出问号?。

请改正函数a()中指定部位的错误,使它能得出正确的结果。

注意:不要改动其他函数,不得增行或删行,也不得更改程序的结构。

MODI1.C:

#include <stdio.h>
#pragma warning (disable:4996)
int my_isalpha(char c)  //判断字符种类
{
	if(c>='A'&&c<='Z') return 1;//为大写字母
	else if(c>='a'&&c<='z') return -1;//为小写字母
	else  return 0; //其他字符
}
void a( )					 
{
	char ch;
	int sort;
	printf("本程序判断你从键盘上键入字符的种类,请输入字符(串):\n");
	do
	{
		ch=getchar();
		if(ch!='\n')
		{
			sort= my_isalpha( ch);        
/**********************found***********************/
			switch(-1<=sort && sort<=1)	//switch里的表达式应为数值表达式,根据表达式的结果进行多分支运算,而不是判断表达式
			{
			case 1: printf("%c",'*'); break;
/**********************found***********************/
			case -1: printf("%c",'#');//case语句遇到break才会停止执行,不然会将下面的语句全部执行了
			case 0: printf("%c",'?');
			}
		}
/**********************found***********************/
	}while(ch =='\n');//这里while的意思是当输入字符为换行符时,才进入循环,看里面if分支的意思明显是要输入的字符为换行符时跳出循环
	printf("%c",'\n');
}
void main( )					  
{
	a();
}

解题思路:
改错的解析写在注释里了,说下代码中一眼看过去有些疑惑的地方

在a()中为什么要用do-while而不用while,这里是为了更严谨些,因为字符ch没有赋初值,那么此时ch的值就是随机的,而这个给的随机的值并不是输入的,随机值是换行符就直接跳出了,也就无法收取输入了

答案:

#include <stdio.h>
#pragma warning (disable:4996)
int my_isalpha(char c)  
{
	if(c>='A'&&c<='Z') return 1;
	else if(c>='a'&&c<='z') return -1;
	else  return 0; 
}
void a( )					 
{
	char ch;
	int sort;
	printf("本程序判断你从键盘上键入字符的种类,请输入字符(串):\n");
	do
	{
		ch=getchar();
		if(ch!='\n')
		{
			sort= my_isalpha( ch);        
/**********************found***********************/
			switch(sort)		 
			{
			case 1: printf("%c",'*'); break;
/**********************found***********************/
			case -1: printf("%c",'#');break;
			case 0: printf("%c",'?');
			}
		}
/**********************found***********************/
	}while(ch !='\n');
	printf("%c",'\n');
}
void main( )					  
{
	a();
}

测试:

本程序判断你从键盘上键入字符的种类,请输入字符(串):
Aa#
*#?

6.所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动

给定程序modi1.c中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。

例如,调用fun函数之前给字符串输入:GABCDeFGH,调用后字符中的内容为: eGABCDFGH请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

modi1.c:

#include <stdio.h>
void fun( char *p )
{   char   max,*q;   int   i=0;
    max=p[i];
    q=p;
    while( p[i]!=0 )
    {   if( max<p[i] )
	{  max=p[i];
/**********found**********/
	   q=p+i//语句以分号;结尾
	}
        i++;
    }
/**********found**********/
    wihle(  q>p )//while拼写错误,这个是真醉了,我看半天没看出来
    {  *q=*(q-1);
       q--;
    }
    p[0]=max;
}
main()
{  char   str[80];
   printf("Enter a string:  "); gets(str);
   printf("\nThe original string:      ");  puts(str);
   fun(str);
   printf("\nThe string after moving:  ");  puts(str); printf("\n\n");
   getchar();
}

解题思路:
总共两个错误,都是很基础的,第一个很容易就看出来,第二个麻了,根本没想到那去

答案:

#include <stdio.h>
void fun( char *p )
{   char   max,*q;   int   i=0;
    max=p[i];
    q=p;
    while( p[i]!=0 )
    {   if( max<p[i] )
	{  max=p[i];
/**********found**********/
	   q=p+i;
	}
        i++;
    }
/**********found**********/
    while(  q>p )
    {  *q=*(q-1);
       q--;
    }
    p[0]=max;
}
main()
{  char   str[80];
   printf("Enter a string:  "); gets(str);
   printf("\nThe original string:      ");  puts(str);
   fun(str);
   printf("\nThe string after moving:  ");  puts(str); printf("\n\n");
   getchar();
}

测试:

Enter a string:  GABCDeFGH

The original string:      GABCDeFGH

The string after moving:  eGABCDFGH



7.根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据

给定程序MODI1.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。

例如,若输入2

则输出:

1 2

2 4

若输入4

则输出:

1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

请改正程序函数中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

MODI1.C:

#include <conio.h>
#include <stdio.h>
#define  M 10
int  a[M][M] = {0} ;//这里数组a是定义为全局了

/**************found**************/
void fun(int **a, int m)//双重指针是指向指针的指针,在这里错到没边了
{  int j, k ;
   for (j = 0 ; j < m ; j++ )
        for (k = 0 ; k < m ; k++ )
/**************found**************/
          a[j][k] = k * j ;
}

main ( )
{  int  i, j, n ;

   printf ( " Enter n : " ) ;  scanf ("%d", &n ) ;
   fun ( a, n ) ;
   for ( i = 0 ; i < n ; i++)
   {    for (j = 0 ; j < n ; j++)
          printf ( "%4d", a[i][j] ) ;//%4d靠右对齐,占4个空格
        printf ( "\n" ) ;
   }
  getchar();
}

解题思路:
有两处错误,
第一处:
由于数组a是全局的,所以可以写int a[M][M],也可以写int (*a)[M]
第二处:
仔细看看例子,可以看出输出的矩阵中的元素是下标乘积

答案:

#include <conio.h>
#include <stdio.h>
#define  M 10
int  a[M][M] = {0} ;

/**************found**************/
void fun(int a[M][M], int m)
{  int j, k ;
   for (j = 0 ; j < m ; j++ )
        for (k = 0 ; k < m ; k++ )
/**************found**************/
          a[j][k] = (k+1)*(j+1) ;
}

main ( )
{  int  i, j, n ;

   printf ( " Enter n : " ) ;  scanf ("%d", &n ) ;
   fun ( a, n ) ;
   for ( i = 0 ; i < n ; i++)
   {    for (j = 0 ; j < n ; j++)
          printf ( "%4d", a[i][j] ) ;
        printf ( "\n" ) ;
   }
  getchar();
}

测试:

 Enter n : 4
   1   2   3   4
   2   4   6   8
   3   6   9  12
   4   8  12  16

8.把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中

给定程序modi1.c中,函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。

例如,当a所指字符串中的内容为"abcdefg",b所指字符串中的内容为"1234"时,c所指数组中的内容应该为"a4b3c2d1efg";而当a所指字符串中的内容为"1234", b所指字符串中的内容为"abcdefg"时,c所指数组中的内容应该为"1g2f3e4dcba"。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

modi1.c:

#include <stdio.h>
#include <string.h>

void fun( char  *a, char  *b, char  *c )
{
    int   i , j;
    char   ch;
    i = 0;
    j = strlen(b)-1;//数组有数据的最大下标
    /************found************/
    while ( i > j )//这明显反了,这个while循环是为了让字符串逆序,明显应该j>i
    {
        ch = b[i];
        b[i] = b[j];
        b[j] = ch;
        i++;
        j--;
    }
    while ( *a || *b )//遍历两个字符串,只要有1个指针后续指向字符不是空,就继续循环,
    {
        /************found************/
        If ( *a )//指针a指向字符不是空
        {
            *c = *a;
            c++;
            a++;
        }
        if ( *b )//指针b指向字符不是空
        {
            *c = *b;
            c++;
            b++;
        }
    }
    *c = 0;//指针c最后指向字符赋空
}

main()
{
    char   s1[100],s2[100],t[200];
    printf("\nEnter s1 string : ");
    scanf("%s",s1);
    printf("\nEnter s2 string : ");
    scanf("%s",s2);
    fun( s1, s2, t );
    printf("\nThe result is : %s\n", t );
    getchar();
}

解题思路:
很有意思的字符串交叉合并的思路,可以学习一下(‾◡◝)

答案:

#include <stdio.h>
#include <string.h>

void fun( char  *a, char  *b, char  *c )
{
    int   i , j;
    char   ch;
    i = 0;
    j = strlen(b)-1;
    /************found************/
    while ( i < j )
    {
        ch = b[i];
        b[i] = b[j];
        b[j] = ch;
        i++;
        j--;
    }
    while ( *a || *b )
    {
        /************found************/
        if ( *a )
        {
            *c = *a;
            c++;
            a++;
        }
        if ( *b )
        {
            *c = *b;
            c++;
            b++;
        }
    }
    *c = 0;
}

main()
{
    char   s1[100],s2[100],t[200];
    printf("\nEnter s1 string : ");
    scanf("%s",s1);
    printf("\nEnter s2 string : ");
    scanf("%s",s2);
    fun( s1, s2, t );
    printf("\nThe result is : %s\n", t );
    getchar();
}

测试:

Enter s1 string : 1234

Enter s2 string : abcdefg

The result is : 1g2f3e4dcba

9.判断输入的任何一个正整数n,是否等于某个连续正整数序列之和

给定程字MODI1.C中,函数fun的功能是:判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列。否则输出”不能分解”

例如:当输入100时,

输出: 100=9+10+11+12+13+14+15+16

100=18+19+20+21+22

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

MODI1.C:

#include   <stdio.h>
void fun( int  n )
{  int  j, b, c, m, flag=0;
   for (b=1; b<=n/2; b++) { //b就是连续正整数序列第一个数,循环停止在n/2,应该很好理解,想一下就知道,n/2+(n/2+1)不明显大于n了
/**********found**********/
      n = m;//这是把m赋给n了,明显不对,应当m=n
      c = b;
      while (m !=0 && m>=c) {//寻找是否有连续正整数序列,若有循环结束后,m会等于0
/**********found**********/
        m = m - c;    c++//语句要分号结尾
      }
/**********found**********/
      if ( m!=0)//要m==0才是有连续正整数序列
      {  printf("%d=", n);
         for (j=b; j<c-1; j++)   printf( "%d+", j  );
         printf("%d\n", j);
         flag=1;
      }
   }
   if(flag==0)
     printf("不能分解\n");
}
main()
{  int  n;
   printf("请输入一个整数 :   ");   scanf("%d", &n);
   fun(n);
   getchar();
}

解题思路:
这题的代码的思路很不错,值得借鉴

答案:

#include   <stdio.h>
void fun( int  n )
{  int  j, b, c, m, flag=0;
   for (b=1; b<=n/2; b++) { 
/**********found**********/
      m=n;
      c = b;
      while (m !=0 && m>=c) {
/**********found**********/
        m = m - c;    c++;
      }
/**********found**********/
      if ( m==0)
      {  printf("%d=", n);
         for (j=b; j<c-1; j++)   printf( "%d+", j  );
         printf("%d\n", j);
         flag=1;
      }
   }
   if(flag==0)
     printf("不能分解\n");
}
main()
{  int  n;
   printf("请输入一个整数 :   ");   scanf("%d", &n);
   fun(n);
   getchar();
}

测试:

请输入一个整数 :   100
100=9+10+11+12+13+14+15+16
100=18+19+20+21+22

10.依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串

给定程序modi1.c中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

modi1.c:

#include <stdio.h>
void  fun(char  *s)
{  int  i,j;
   for(i=0,j=0; s[i]!='\0'; i++)
        if(s[i]>='0' && s[i]<='9')//筛出数字字符
/**********found**********/
            s[j]=s[i];//j没有做对往后递增的操作
/**********found**********/
        s[j]="\0";//筛出所有数字字符后赋空,这样后面的字符也就没了,但空字符只是字符,而不是字符串,字符用单引'',字符串用双引""
}
main()
{  char  item[80];
   printf("\nEnter a string  :  ");gets(item);
   printf("\n\nThe  string  is  : \"%s\"\n",item);
   fun(item);
   printf("\n\nThe string of changing is  : \"%s\"\n",item );
  getchar();
}

解题思路:
题外话,筛出数字字符可以一个函数完成
头文件:#include<ctype.h>
int isdigit(char c) //检查字符是否是数字字符

答案:

#include <stdio.h>
void  fun(char  *s)
{  int  i,j;
   for(i=0,j=0; s[i]!='\0'; i++)
        if(s[i]>='0' && s[i]<='9')
/**********found**********/
            s[j++]=s[i];
/**********found**********/
        s[j]='\0';
}
main()
{  char  item[80];
   printf("\nEnter a string  :  ");gets(item);
   printf("\n\nThe  string  is  : \"%s\"\n",item);
   fun(item);
   printf("\n\nThe string of changing is  : \"%s\"\n",item );
  getchar();
}

测试:

Enter a string  :  j2u4h5


The  string  is  : "j2u4h5"


The string of changing is  : "245"

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值