C语言上学期整理(第6章)

第6章 利用数组批量处理数据

6.1怎样定义和引用一维数组

一维数组的定义
定义方式: 数据类型 数组名[常量表达式];
一维数组元素的引用
数组必须先定义,后使用
只能逐个引用数组元素,不能一次引用整个数组。
数组元素表示形式: 数组名[下标]
其中:下标可以是常量或整型表达式
例6.1

#include <stdio.h> 
void main()
{ int i,a[10];
   for(i=0;i<=9;i++)
      a[i]=i;
   for(i=9;i>=0;i- -)
       printf(%d”,a[i]);
}
运行结果:
  9 8 7 6 5 4 3 2 1 0

一维数组的初始化
int a[5]={1,2,3,4,5};
等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;
例6.2 用数组来处理求Fibonacci数列问题

#include <stdio.h> 
int main()
{  
     int i;
     int f[20]={1,1};
    for(i=2;i<20;i++)
       f[i]=f[i-2]+f[i-1];
    for(i=0;i<20;i++)
    {  
    if(i%5==0)  printf("\n");
         printf("%12d",f[i]);
    }
    return 0;
}
运行结果: 
    1           1             2             3            5 
    8          13            21            34           55 
  89          144           233           377          610 
987          1597          2584          4181         6765

例6.3:用冒泡排序法将10个整数按照从小到大的顺序排序

#include <stdio.h> 
void main()
{ int a[10],i,j,t;
  printf("Input 10 numbers:\n");
  for(i=0;i<10;i++)
     scanf("%d",&a[i]);
  printf("\n");
  for(j=0;j<9;j++)
     for(i=0;i<9-j;i++)
        if(a[i]>a[i+1])
       {t=a[i]; a[i]=a[i+1]; a[i+1]=t;}
  printf("The sorted numbers:\n");
  for(i=0;i<10;i++)
     printf("%d ",a[i]);
}

例:用选择排序法将10个整数按照从小到大的顺序排序

#include <stdio.h>
int main( )
{   
    int  a[11], i, j, k, x;
    printf ("Input 10 numbers: \n");
    for (i = 1; i < 11; i++)
       scanf ("%d", &a[i]);
    printf ("\n");
    for (i = 1; i < 10; i++)
    { 
       k = i;
       for (j = i+1; j <= 10; j++)
            if (a[j] < a[k])  k = j;
      if (i != k)
      {  x = a[i]; a[i] = a[k]; a[k] = x; }
    }
    printf("The sorted numbers:\n");
    for (i = 1; i < 11; i++)
	printf ("%d ", a[i]);
    return 0;
}

6.2怎样定义和引用二维数组

二维数组的引用
形式: 数组名[下标][下标]
下标是整型或字符型的常量,变量或表达式。(定义时不能使用变量)

如: a[1][2] a[i][j]
数组元素可出现在表达式中,如: a[1][2]=a[2][2]/2
使用数组元素时,应注意不要超出其定义的范围;
如: int a[2][3]; a[2][3]=5;

例6.4 将二维数组行列元素互换,存到另一个数组中

#include <stdio.h> 
void main()
{ int a[2][3]={{1,2,3},{4,5,6}};
   int b[3][2],i,j;
   printf("array a:\n");
   for(i=0;i<=1;i++)
    { for(j=0;j<=2;j++)
        { printf("%5d",a[i][j]);
           b[j][i]=a[i][j];}
        printf("\n");
    }
   printf("array b:\n");
   for(i=0;i<=2;i++)
    { for(j=0;j<=1;j++)
         printf("%5d",b[i][j]);
       printf("\n");}
}    

例6.5 求二维数组中最大元素值及其行列号

#include <stdio.h> 
void main()
{ int a[3][4]={{1,2,3,4},
         {9,8,7,6},{-10,10,-5,2}};
   int i,j,row=0,colum=0,max;
   max=a[0][0];
   for(i=0;i<=2;i++)
      for(j=0;j<=3;j++)
         if(a[i][j]>max)
          { max=a[i][j];
	 row=i;
	 colum=j;
          }
   printf("max=%d,row=%d,
  colum=%d\n",max,row,colum);
}

6.3字符数组

字符数组:存放字符数据的数组。
一维字符数组:存放一个字符串(每个数组元素存放一个字符)
二维字符数组:存放多个字符串(行数是字符串的个数)
字符数组的定义
形式:
char 数组名[常量表达式]
char 数组名[常量表达式][常量表达式]
例6.6 输出一个字符串

#include <stdio.h> 
void main()
{ char c[10]={'I',' ','a','m',' ','a',' ','b','o','y'};
   int i;
   for(i=0;i<10;i++)
      printf("%c",c[i]);
   printf("\n");
}

例6.7 输出一个钻石图形

#include <stdio.h> 
void main()
{ char diamond[ ][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},
                                       {' ','*',' ','*'},{' ',' ','*'}};
   int i,j;
   for(i=0;i<5;i++)
      {for(j=0;j<5;j++)
           printf("%c",diamond[i][j]);
        printf("\n");
       }
}
运行结果:
    *
 *    *
*       *
 *    *
   *

字符串:用双引号括起的若干字符,如: “china”
可将其存放在一维或两维字符型数组中。
无字符串变量,用字符数组处理字符串
字符串结束标志:‘\0’,(既无动作,又不显示)
字符串的长度:第一个‘\ 0’以前字符的个数
在字符型数组或字符串中遇‘\ 0’,即认为该字符串结束。
系统对字符串常量自动加一个‘\0’作为结束符。
printf(“china”);
china/0
字符串输出函数 puts
格式: puts(字符数组)
功能:向显示器输出一个字符串(输出完,换行)
说明:字符数组必须以‘\0’结束。可以包含转义字符。
输出时‘\0’转换成‘\n’,即输出字符后换行。
字符串输入函数gets
格式:gets (字符数组)
功能:从键盘输入一个以回车结束的字符串放入字符
数组中,并自动加‘\0’。
说明:输入串长度应小于字符数组维数
字符串连接函数strcat
格式:strcat (字符数组1,字符数组2)
功能:把字符数组2连到字符数组1后面
返值:返回字符数组1的首地址
说明:字符数组1必须足够大
连接前,两串均以‘\0’结束;连接后,串1的‘\0’取
字符串拷贝函数strcpy
格式:strcpy(字符数组1,字符串2)
功能:将字符串2,拷贝到字符数组1中去
返值:返回字符数组1的首地址
说明:字符数组1必须足够大,>字符串2
字符数组1必须是数组名形式(str1),
字符串 2可以是字符数组名或字符串常量。
拷贝时‘\0’一同拷贝
不能使用赋值语句为一个字符数组赋值
例7 strcpy与strcat应用举例

#include <stdio.h>
void main()
{  char destination[25];
 char blank[] = " ", c[]= "C++",
         turbo[] = "Turbo";
 strcpy(destination, turbo);
 strcat(destination, blank);
 strcat(destination, c);
printf("%s\n", destination);
}
Turbo  C++

字符串比较函数strcmp
格式:strcmp(字符串1,字符串2)
功能:比较两个字符串
比较规则:对两串从左向右逐个字符比较(ASCII码),
直到遇到不同字符或‘\0’为止。
返回值:返回int型整数。其值是ASCII码的差值
a. 若字符串1< 字符串2, 返回负整数
b. 若字符串1> 字符串2, 返回正整数
c. 若字符串1== 字符串2, 返回零
说明:字符串比较不能用“= =”,必须用strcmp,
虽然编译无错,但结果不对
例:字符比较

#include <stdio.h> 
void main(  ) 
{ int  i,j,k; 
char  a1[  ]=“wuhan”,  a2[  ]=“beijing” ; 
i=strcmp(a1,a2);  
j=strcmp(“china”, “korea”); 
k=strcmp(a2, “beijing” ); 
printf(“i=%d\ nj=%d\ nk=%d\ n”,i,j,k); 
}
运行结果: 
i=21     i=w-b=119-98=21 
j=-8     j=c-k=99-107=-8 
k=0     k=b-b=98-98=0

例6.8 输入一行字符,统计其中的单词个数,单词间空格分开。

#include <stdio.h>
void main()
{char string[81];
  int i,num=0,word=0;
  char c;
  gets(string);
  for(i=0;(c=string[i])!='\0';i++)
     if(c==' ')  word=0;
     else if(word==0)
       {word=1;  num++;}
  printf("There are %d words
                  in the line\n",num);
}

例6.9 有3个字符串,要求找出其中最大者。

#include <stdio.h>
#include <string.h>
void main()
{ char string[20],str[3][20];
   int i;
   for(i=0;i<3;i++)
      gets(str[i]);
   if(strcmp(str[0],str[1])>0)
             strcpy(string,str[0]);
   else  strcpy(string,str[1]);
   if(strcmp(str[2],string)>0)
	strcpy(string,str[2]);
   printf("\nThe largest string 
                is:\n%s\n",string);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值