错误在“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';