《C程序设计》课程学习(7)——第7章 数组

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_34573534/article/details/102691985

7.1    概 述

请考虑下面两个问题:

输入100个数并以与输入时相反的顺序输出这100个数。

输入100名学生的成绩,输出高于平均分的那些成绩。

7.2  一维数组

一、一维数组的定义

二、一维数组元素的引用

三、一维数组的初始化

练习

例7.2.1 用数组求Fibonacci数列前40项.

      main( )
      {   int  i;
	      long  int   f[40]={1,1};
	      for(i=2;i<40;i++)
	       f[i]=f[i-2]+f[i-1];
	      for(i=0;i<40;i++)
	      {    if(i%5==0)   printf("\n");
	        printf("%12ld",f[i]);
	      }
      }

例7.2.2  从10个整数中把最小的数找出来,并与最前面的数对调, 指出最小的数原来的下标位置。(最小值唯一)。

上图是动态图,因此截图有偏差,可自己推理就知道具体了。

例7.2.3  用起泡排序法将n个数由小到大排序。

例7.2.4  用选择排序法将n个数由小到大排序。

例7.2.5  用random函数产生n个[0,70]之间的随机整数,并按逆序重放在数组中。(n<50)

例7.2.6  打印方阵

上图也是一个动态图。

例7.2.7 已知数组a中有8个互不相等的元素,数组b中有 5 个互不相等的元素,而数组c中包含那些在a中但不在b中的元素,编程产生数组c。

上图是一个动态图。

     main( )
     { int   i, j, k=0, a[8], b[5], c[8];
        for(i=0;i<=7;i++)   scanf("%d",&a[i]);
        for(i=0;i<=4;i++)   scanf("%d",&b[i]);
        for(i=0;i<=7;i++)
	    {for(j=0;j<=4;j++)
                     if(a[i]= =b[ j]) break;
                 if(j>4) { c[k]=a[i];k++;}
               } 
        for(i=0;i<k;i++)    printf("%5d",c[i]);
        printf("\n");
       }

例7.2.8 输入n个数到数组中(n最多为100),选出所有大于n个数的平均值的那些数。

思路:

1.  int   x[100];

2.  输入n个数据并求这n个数据的累加和。

3.  求n个数据的平均值。

4.  选出所有大于平均值的那些数。 

 main( )
  { int  x[100],sum=0,ave, i, n;
     scanf("%d",&n);
     for(i=0;i<=n-1;i++) 
        { scanf("%d ",&x[i]);
           sum=sum+x[i]; }
     ave=sum/n;
     printf("ave=%d\n",ave);
     printf("geather than ave num:");
     for(i=0;i<=n-1;i++)
          if(x[i]>ave)  printf("%d   ",x[i]);
     printf("\n");   }

7.3  二维数组

二、二维数组的引用

例7.3.1  矩阵转置。把矩阵的行变成相应的列,列变成相应的行。

main( )
{ int  a[5][5], i , j, k;
   for(i=0; i<5; i++)
      for(j=0; j<5; j++)
          scanf("%d",&a[i][j]);
   for(i=0; i<5; i++)
   {  for(j=0; j<5; j++)
          printf("%5d",a[i][j]);
       printf("\n");
   }
  for(i=0; i<5; i++)
       for(j=i; j<5; j++)
       {    k=a[i][j];
             a[i][j]=a[j][i];
             a[j][i]=k;
        }
  printf("\n");
  for(i=0; i<5; i++)
  {  for(j=0; j<5; j++)
             printf("%5d",a[i][j]);
       printf("\n");
   }
}

例7.3.2   随机产生区间[21,100]上12个整数,放入3×4矩阵a中,并求其最大值及位置.

例7.3.3   求3×3矩阵各列和,并放入一个一维数组中。

 main( )
 { int    a[3][3], i, j, x[3];
    for(i=0;i<3;i++)
          for( j=0;j<3;j++)
 	       scanf("%d",&a[i][j]);
    for(i=0;i<3;i++)
   {    x[i]=0;
         for(j=0;j<3;j++)
                x[i]=x[i]+a[j][i];
         printf("%d\n",x[i]);
    } 
 }

例7.3.4   找规律自动填充n×n方阵。(n=7)时如下图所示。

例7.3.5  打印杨辉三角形,输出形式如下所示。

例7.3.6  将5×6矩阵每一行按由大到小排序。

7.4    字符数组

例7.4.1  输出一个字符数组中的字符

例7.4.1:不使用strlen函数求字符串有效长度

例7.4.2  编一程序,将两个字符串连接起来,不使用strcat函数。

例7.4.3:不使用strcpy函数实现字符串复制

例7.4.4  编写程序,比较两个字符串的大小。不用strcmp函数实现其功能。

比较规则:逐个字符进行比较,直到有两个字符不等或有一个字符串结束为止。

例7.4.5 在一个字符串中删除一个指定的字符。

解题方法:在原串中,将不等于待删字符的元素放到原有数组中。

例7.4.6  有三个字符串(长度不超过20),要求找出其中最大者。(p151)

7.4.7输入一行字符,统计其中有多少个单词,单词之间用空格分隔。(p150)

#include "stdio.h"
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 \n",num);
}

猜你喜欢

转载自blog.csdn.net/qq_34573534/article/details/102691985