1.字符串在文档处理、基因序列等方面应用广泛。下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。程序有二个错误,写出错行号、原因、和正确代码。
1 #include <stdio.h>
2 void fun(char *s)
3 {
4 int i, j;
5 for (i=0, j=0; s[i]!='\0'; i++)
6 if (s[i]>='0' && s[i]<='9')
7 s[j] = s[i];
8 s[j] = "\0";
9 }
10 int main()
11 {
12 char item[80];
13 printf("\nEnter a string :");
14 gets(item);
15 printf("\n\nThe string is : %s\n", item);
16 fun(item);
17 printf("\n\nThe string of changing is : %s\n", item);
18 return 0;
19 }
2.排序算法在很多领域得到相当的重视,尤其是在大量数据的处理方面。下列给定程序是使用指针完成冒泡法排序的程序,其中有二个错误,找出其中的错误行和出错原因,写出正确代码。
1 #include <stdio.h>
2 int main()
3 { int a[10]={21,43,55,12,65,87,25,93,30,62};
4 int i,k,pa;
5 for (k=0;k<10;k++)
6 printf("%3d",a[k]);
7 printf("\n\n");
8 for (k=0;k<9;k++)
9 { pa=a;
10 for (i=0;i<10-k-1;i++)
11 { if ( *pa>(pa+1) )
12 { temp=*pa; pa=(pa+1); *(pa+1)=temp;
13 }
14 pa++;
15 }
16 }
17 for (k=0;k<10;k++)
18 printf("%3d",*pa++);
19 printf("\n\n");
20 return 0;
21 }
题目1:
void fun(char *s)
{
int i, j;
for (i=0, j=0; s[i]!='\0'; i++)
if (s[i]>='0' && s[i]<='9')//错误1,修改为 !(s[i]>='0' && s[i]<='9')原来的条件是判断字符是数字字符,加上取反后才是去掉数字字符
s[j] = s[i]; //错误2:修改为s[j++]=s[i],赋值后,下标需要后移一位
s[j] = "\0";
}
题目2:
#include <stdio.h>
int main()
{
int a[10]={21,43,55,12,65,87,25,93,30,62};
int i,k,*pa;
int temp; //在这里添加temp的声明(错误1的修改方法)
for (k=0;k<10;k++)
printf("%3d",a[k]);
printf("\n\n");
for (k=0;k<9;k++)
{
pa=a;
for (i=0;i<10-k-1;i++)
{
if ( *pa>*(pa+1) )
{
temp=*pa; *pa=*(pa+1); *(pa+1)=temp;//错误1,没有对temp的声明,需要在开头添加int temp;
}
pa++;
}
}
pa = a; //错误2:需要把pa重新指向数组的首地址,需要添加这一句
for (k=0;k<10;k++)
printf("%3d",*pa++);
printf("\n\n");
return 0;
}