《實驗五》

一、驗證性內(nèi)容

1.1

 

在替換部分代碼后,代碼及運行結(jié)果如下:

 

 解釋:將第七行中的數(shù)組類型修改為字符型數(shù)組后,對應(yīng)的輸出行的元素類型均需要修改為%c而不再是%d。

   并且&a[i]和a+i扔代表a[i]的地址,所以第十八行仍可以通過指針間接訪問。

 

2.2

 

 1.3

 

1.4

 

 在替換第12行的代碼之后,代碼仍然正確編譯,結(jié)果仍正確,所以可以替換,因為對于數(shù)組而言,a[0],&a[0],a[0][0],&a[0][0]在賦值給指針變量時,都代表著著這個數(shù)組的地址也就是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數(shù)組中的數(shù)據(jù)如下:\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個整數(shù),我將排序:");
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("排序后,結(jié)果為:");
for(i=0;i<=6;i++)
printf("%d ",a[i]);
return 0;
}

 

《字典排序法》

// 練習(xí):使用選擇法對字符串按字典序排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void selectSort(char str[][20], int n ); // 函數(shù)聲明,形參str是二維數(shù)組名
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); // 調(diào)用選擇法對name數(shù)組中的字符串排序

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

system("pause");
return 0;
}

// 函數(shù)定義
// 函數(shù)功能描述:使用選擇法對二維數(shù)組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;
}

 

《刪除*號》

/*
假定輸入的字符串中只包含字母和*號。
編寫函數(shù),實現(xiàn):
除了字符串前導(dǎo)的*號之外,將串中其他*號全部刪除。

在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
例如,若字符串中的內(nèi)容為****A*BC*DEF*G*******
刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是****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;
}