《实验五》

一、验证性内容

1.1

 

在替换部分代码后,代码及运行结果如下:

 

 解释:将第七行中的数组类型修改为字符型数组后,对应的输出行的元素类型均需要修改为%c而不再是%d。

   并且&a[i]和a+i扔代表a[i]的地址,所以第十八行仍可以通过指针间接访问。

 

2.2

 

 1.3

 

1.4

 

 在替换第12行的代码之后,代码仍然正确编译,结果仍正确,所以可以替换,因为对于数组而言,a[0],&a[0],a[0][0],&a[0][0]在赋值给指针变量时,都代表着着这个数组的地址也就是a[0][0]的地址,所以可以替换。

 

 

1.5

补足代码后,补足的代码分别为:

 

 

 

 

 

 

 

2.1.2

改错后,代码为:

#include <stdio.h>
#include <stdlib.h>
#define N 10
int fun(int *a,int m)
{
int low = 0, high = N-1, mid;
while(low<high)
{
mid = (low+high)/2;
if(m < *(a+mid))
high = mid-1;
else if(m > *(a+mid))
low = mid+1;
else
return(mid);
}
return(-1);
}

int main()
{
int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
printf("a数组中的数据如下:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\nEnter m: \n");
scanf("%d",&m);
k = fun(a,m);
if (k>=0)
printf("m=%d,index=%d\n",m,k);
else
printf("Not be found!\n");

system("pause");
return 0;
}

 

《选择排序》

代码如下:

#include<stdio.h>
#include <stdlib.h>
const int N=7;
int main()
{
int a[N],i,j,min,p,t;
printf("请输入7个整数,我将排序:");
for(i=0;i<=6;i++)
scanf("%d",&a[i]);

printf("\n排序前的顺序为:");
for(i=0;i<=6;i++)
printf("%d",a[i]);

for(j=0;j<=5;j++)
{
for(i=j,min=a[i];i<=6;i++)
{
if(min>a[i])
{
min=a[i];
p=i;
}
}
t=a[j];
a[j]=a[p];
a[p]=t;
}
printf("排序后,结果为:");
for(i=0;i<=6;i++)
printf("%d ",a[i]);
return 0;
}

 

《字典排序法》

// 练习:使用选择法对字符串按字典序排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void selectSort(char str[][20], int n ); // 函数声明,形参str是二维数组名
int main() {
char name[][20] = {"John", "Alex", "Joseph", "Taylor", "George"};
int i;

printf("输出初始名单:\n");
for(i=0; i<5; i++)
printf("%s\n", name[i]);

selectSort(name, 5); // 调用选择法对name数组中的字符串排序

printf("按字典序输出名单:\n");
for(i=0; i<5; i++)
printf("%s\n", name[i]);

system("pause");
return 0;
}

// 函数定义
// 函数功能描述:使用选择法对二维数组str中的n个字符串按字典序排序
void selectSort(char str[][20], int n) {
int i,j,k;
char temp[20];
for(i=0;i<n;i++)
{
for(k=i,j=i+1;j<n;j++)
if(strcmp(str[k],str[j])>0)
k=j;
if(k!=i)
{
strcpy(temp,str[i]);
strcpy(str[i],str[k]);
strcpy(str[k],temp);
}
}
return;
}

 

《删除*号》

/*
假定输入的字符串中只包含字母和*号。
编写函数,实现:
除了字符串前导的*号之外,将串中其他*号全部删除。

在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******
删除后,字符串中的内容则应当是****ABCDEFG
*/

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void fun(char *a) {
/*****ERROR********/
int i=0;
char *p = a;
/****ERROR***/
while(*p && *p == '*') {
a[i] = *p;
i++;
p++;
}
while(*p) {
/******ERROR*******/
if(*p != '*') {
a[i] = *p;
i++;
}
p++;
}
/******ERROR*******/
a[i] = *p;

}

int main() {
char s[81];
printf("Enter a string :\n");
gets(s);
/***ERROR******/
fun(s);
printf("The string after deleted:\n");
puts(s);

system("pause");
return 0;
}