实验五 数组和字符串
实验目的
掌握数组及数组元素的概念、数组的定义、数组元素的赋值和引用;正确使用数值数组和字符数组,并掌握与数组有关的常用算法。
要点提示
1. 数组是相关变量的有序集合,其中所有的变量具有相同的数据类型。
2. 一维数组定义格式为:
类型说明符    数组名[size]       
3. 数组的下标:
数组的下标从0开始,到size-1为止。
4. 多维数组定义格式为:
类型说明符    数组名[size1][size2]…[sizen]
5. 字符串
字符串一般使用一维字符数组处理,实际上就是以空字符结尾的字符数组。
字符串常量是由一对双引号括起来的字符集合。
实验内容
1. 一维数组的定义、赋值和引用
2. 与数组有关的算法。
3. 二维数组的定义,赋值和引用
4. 字符数组的定义和使用
5. 常用字符串处理函数的使用
实验步骤
读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入)
1. 建立一个一维数组,用来存放5名学生的成绩,输入成绩,并计算平均分。
#define N  5
main()
{
  int      a[N]    ;  /* 数组定义语句 */
  int  i,sum=0;
  float aver;
  printf("\nInput 5 numbers:");
  for (i=0; i<5; i++) {
    scanf("%d", &a[i]);  /* 输入数组元素 */
    sum=sum+a[i];   
  }
  aver=sum/N;            /* 计算平均分 */
  printf("\nThe average score is:%f", aver);
}
程序运行结果:
Input 5 numbers: 80  80  90  90  90
The average score is:     86
2. 设数组请输入长度为5的字符串是什么a 包括10个元素,下面程序的功能是求出a中各相邻两个元素的和,并将这些和存放在数组 b中,按每行3个元素的形式输出。
例: b[1]=a[1]+a[0],…b[9]=a[9]+a[8]
main()
{int a[10],b[10],i;
printf("\nInput 10 numbers:  ");
for (i=0; i<10;i++)                    /* 数组输入 */
  scanf("%d", &a[i]);
for (i=1; i<10; i++)
  b[i]=a[i]+a[i-1];                        /* 计算b数组中的元素 */
for (i=1; i<10; i++)
{  printf("%3d",b[i]);
    if (i%3==0)  printf("\n");      /* 每行打印3个数据 */
  }
}
程序运行结果:
Input 10 numbers1 2 3 4 5 6 7 8 9 10
3  5  7
9    11  13
15  17    19
3.    将一个数组中的值按逆序重新存放,例如,原来顺序为:86541。要求改为:14568。提示:a[0]a[n-1]交换, a[1]a[n-1-1]交换….
#define N  5
main()
{ int a[N]={8,6,5,4,1}, i, temp;
  printf("\nThe original array is:");
  for (i=0; i<N; i++)
    printf("%4d", a[i]);
  for (i=0; i<N/2; i++)
  {  temp=a[i];
    a[i]=a[N-i-1];
    a[N-i-1]=temp;
  }
  printf("\nThe new array is:");
  for (i=0; i<N; i++)
    printf("%4d",a[i]);
}
程序运行结果
The original array is:    8  6  5  4  1
The new array is:    1  4  5  6  8   
4.    求一个3X3矩阵主对角线元素之和。提示求a[0][0]+a[1][1]+a[2][2].
main()
{int a[3][3];    /* 数组定义语句 */
int i,j,sum=0;
printf("\nPlease input data: \n");
for (i=0;i<3;i++)
  scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]】);  /* 输入一行数组元素 */
for (i=0;i<3;i++)
  printf("\n%d %d %d ",a[i][0],a[i][1],a[i][2]); /* 输出一行数据元素 */
for (i=0;i<3;i++)
  sum = sum+a[i][i];          /* 计算对角线元素之和,提示i=i*/
printf("\nThe data is :%d",sum);
}
程序运行结果如下:
Please input  data:
12  34  54
43  12  76
54  10  12
The  data  is    36   
5.    将两个字符串连接起来,不要用strcat函数。
main()
{
  char s1[80],s2[40];
  int i=0,j=0;
  printf("\nInput the first string:");
  gets(s1); 
  printf("\nInput the second string:");
  gets(s2); 
  while (s1[i] !='\0')
    i++;;
  while (s2[j] !='\0')
    s1[i++]=    s2[j++];          /* 拼接字符到s1  */
  s1[i] ='\0';         
  printf("\nNew string: %s", s1);
}
程序运行结果:
Input the first stringChina
Input the second string:Beijing
New string: China Beijing
6.    下面程序的功能是在一个字符数组中查一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1
#include <string.h>
main()
{ char c='a',t[50];  /* 字符数组定义语句 */
  int n,k,j;
  printf("\nInput a string:");
  gets(t);
  n=strlen(t);      /* 用函数得到该字符串的长度 */
  for(k=0;k<n;k++)
    if (t[k]==c) {j=k; break;}
    else j=-1;
  printf("\n Position is:%d",j);      /* 输出查询结果 */
}
程序运行结果如下:
Input a string:12345abcde
Position is : 5
再次运行程序:
Input a string:12345
Position is : -1
作业与练习
一、选择题
1. 若有说明:int  a[10];则对数组元素的正确引用是【
A) a[10];        B)a[3.5]        C)a(5)    D)a[10-10]
2. 若有说明语句:int [3][4];则对a数组元素的正确引用是【
Aa[2][4]    Ba[1,3]    Ca[1+1][0]        Da(2)(1)
3. 判断字符串ab是否相等,应当使用【
    A) if (a==b)            B)if (a=b)       
C)if (strcpy(a,b))    D)if (strcmp(a,b))
二、填空题
1.若有说明:int a[][3]={1,2,3,4,5,6,7}; a数组第一维的大小是【3
2. 下面程序的运行结果是    LBLMNP
    # include <stdio.h>
    #include  <string.h>
main()
{char a[80]=”AB”, b[80]=”LMNP”;
int i=0;
strcat(a,b);
while (a[i++]!=’\0’)  b[i]=a[i];
puts(b);
  }
3. 下面程序的运行结果是【1 1 2 3 5 8 13 21 34 55
    main()
{ int i, f[10];
  f[0]=1;  f[1]=1;
  for (i=2; i<10; i++)
    f[i]=f[i-2]+f[i-1];
  for (i=0; i<10; i++)
    { if (i%4==0)  printf(“\n”);
      printf(“%3d”, f[i]);
    }
}
三、编程题
1.用选择法对10个整数按升序排序
#define N 10
main()
{ int  i,j,min,temp;
  static int a[N]={5,4,3,2,1,9,8,7,6,0};
      printf("\nThe array is:\n");  /* 输出数组元素 */
  for (i=0;i<N;i++)
    printf("%5d",a[i]);   
  for (i=0;i<N-1;i++)              /* 排序操作 */
  {  min = 0        】;   
      for (j=i+1; j<N; j++)
            if  (a[min]>a[j])  min =j;
      { temp=a[min]; a[min]=a[j]; a[j]=temp};    /* 数据交换 */
  }
  printf("\nThe sorted numbers: \n");  /* 输出排序结果 */
  for (i=0;i<N;i++)  printf("%5d",a[i]);       

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。