程序修改题(1-10)

错误在“found”附近,一般会在其下面一行,部分会有红色波浪线标出,可以利用提示解题

第一题

题目

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

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

#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();
}

解析

b[k]=*p; 

b[k++]=' ';

第二题

题目

给定程序MODI1. C中,函数fun的功能是:将形参dt0指向的具有*n0个数据的数组中,所

有不等于形参x的数据,重新存留在原数组中,并通过形参n0返回这些数据的个数。

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

#include <stdio.h> 
#pragma warning (disable:4996)
void fun(int *dt0,int *n0,int x)
{
	int i,j;
/**********************found***********************/
	i=1;j=1;
  do
  { 
/**********************found***********************/
	  if(dt0[i]=x)
	  {
		  dt0[j]=dt0[i];
		  j++;
	  }
	  i++;
  }
  while(i<*n0);
/**********************found***********************/
return j;
}
main()
{ 
	int d[10]={2,5,6,7,2,4,5,2,2,6},n=10,i;
	fun(d,&n,2);
	for(i=0;i<n;i++)
		printf("%d ",d[i]);
	printf("\n");
} 

解析

i=0;j=0;

if(dt0[i]!=x)

*n0=j;

第三题

题目

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

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

例如: 153=1*1*1+5*5*5+3*3*3

#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-1 ;
}
main()
{
   int  n[100],k,i;
   k=fun(n);
   for(i=0;i<k;i++)printf("%d ", n[i]);
   printf("\n");
}

解析

a = i / 100;

if(cube(a)+cube(b)+cube(c) == i)

return  k ;

第四题

题目

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

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

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

#include <stdio.h> 
#pragma warning (disable:4996)
void fun(long n,int *c0,int *c1)
{  int k;
/**********************found***********************/
  *c0=*c1=1;
  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);
}

解析

*c0=*c1=0;

k= n%10;

n=n/10;

第五题

题目

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

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

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

#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)		 
			{
			case 1: printf("%c",'*'); break;
/**********************found***********************/
			case -1: printf("%c",'#');
			case 0: printf("%c",'?');
			}
		}
/**********************found***********************/
	}while(ch =='\n');
	printf("%c",'\n');
}
void main( )					  
{
	a();
}

解析

switch(sort)

case -1: printf("%c",'#');break;

while(ch !='\n');

第六题

题目

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

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

#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 )
    {  *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();
}

解析

q=p+i;

while(  q>p )

第七题

题目

定程序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

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

/**************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] ) ;
        printf ( "\n" ) ;
   }
  getchar();
}

解析

void fun(int (*a)[M], int m)

 a[j][k] =(k+1) * (j+1) ;

第八题

题目

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

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

#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();
}

解析

while ( i < j )

if ( *a )

第九题

题目

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

例如:当输入100时,

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

100=18+19+20+21+22

#include   <stdio.h>
void fun( int  n )
{  int  j, b, c, m, flag=0;
   for (b=1; b<=n/2; b++) { 
/**********found**********/
      n = m;
      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();
}

解析

m = n;

c++;

if ( m==0)

第十题

题目

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

#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();
}

解析

s[j++]=s[i];

s[j]='\0';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值