C语言实验程序、总结 实验五 数组

实验五  数组

一  实验目的

1  掌握一维数组和二维数组的定义、赋值和输入输出的方法;

2  掌握字符数组和字符串函数的使用;

3  掌握与数组有关的算法(特别是排序算法)

二  实验内容

1  程序功能:输入12个整数,按每行3个数输出,最后输出它们的平均值。

#include <stdio.h>

#define N 12

main()

{  int i,a[N],av; 

 for(i=0;i<N;i++) scanf("%d",a[i]);

 for(i=0;i<N;i++)

 {  printf("%d",a[i]);

if(i%3==0) printf("\n");

 }

for(i=0;i<N;i++) av+=a[i];

 printf("av=%f\N",av);

}

上面给出的程序有错误,请改正并运行,记录输出结果。

【提示】请注意输入提示、变量赋初值、循环结束条件、输出格式等问题。

修改正确的程序如下:

#include<stdio.h>

#define N 12

main()

{  int i,a[N],av=0;

for(i=0;i<N;i++) scanf("%d",&a[i]);

for(i=0;i<N;i++)

{  printf("%d",a[i]);

if((i+1)%3==0) printf("\n");

}

for(i=0;i<N;i++) av+=a[i];

printf("av=%d\n",av/N);

}

运行结果如下图:

2  选择排序(升序):最常用的排序方法除了冒泡排序外,还有选择排序。

【算法】n个数的选择排序的算法:

  定义变量输入n及数组a各元素

  n个数排序要进行n-1

以下是一遍排序(i)的方法

  设最小数的下标k=i最小数为a[k]

  从下标j=i+1的元素起,到最后一个元素(j=n-1)a[j]与最小数a[k]比较,确定最小数的下标k

 交换a[i]最小数a[k]

  输出已排序的n个数

请根据上面的算法编写选择排序程序,并编辑运行、记录输入输出数据。

3  编写程序,输出由1~N×N的整数组成的N阶方阵和它的上、下三角阵。例如,N=3时,输出:

1  2  3          1  2  3         1

4  5  6             5  6         4  5

7  8  9                9         7  8  9

N阶方阵         上三角阵        下三角阵

【提示】N阶方阵用二维数组表示,用二重循环输出:外循环控制输出多少行,内循环输出每行中的整数。输出上、下三角阵时注意内循环控制变量的取值。

程序如下:

#include<stdio.h>

main()

{

 int n=3,i,j,a[10][10];

 for(i=0;i<n;i++)

   for(j=0;j<n;j++)

     scanf("%d",&a[i][j]);

 for(i=0;i<n;i++)

 {

   for(j=0;j<n;j++)

     printf("%d ",a[i][j]);

   printf("\n");

 }

 printf("\n");

 for(i=0;i<n;i++)

 {

   for(j=0;j<=i;j++)

     printf("%d ",a[i][j]);

   printf("\n");

 }

 printf("\n");

 for(i=0;i<n;i++)

 {

   for(j=0;j<n;j++)

     if(j<i)printf("  ");

       else printf("%d ",a[i][j]);

   printf("\n");

 }

}

输出结果如下图:

4  按照下面算法编一个程序,将两个字符串连接起来,不能用strcat函数。

⑴  定义整型变量i、j,字符串s1、s2

⑵  输入字符串s1、s2

⑶  当字符串s1尚未结束改变字符串s1的下标使之到s1结束处

⑷  当字符串s2尚未结束将字符串s2逐个字符连接到字符串s1的后面

⑸  为字符串s1添加结束标志

⑹  输出连接后的字符串

程序如下:

#include<stdio.h>

int main()

{

 int i=0,j=0,index=0;

    char str1[50]={0};//存放拼接字符串1

    char str2[50]={0};//存放拼接字符串2

    char str12[100]={0};//存放拼接完的字符串

    printf("请输入拼接的第一个字符串:");

    scanf("%s",&str1);

    printf("\n请输入拼接的第二个字符串:");

    scanf("%s",&str2);

  while(str1[i]!='\0')//获取长度

    {

        i++;

    }

    while(str2[j]!='\0')

    {

        j++;

    }

    for(index=0;index<i-1;index++)//不放字符串结束符

    str12[index]=str1[index];//把s1放入目标数组

    for(index=0;index<j;index++)

    str12[index+i]=str2[index];

    printf("\n拼接后的字%s",str12);

    getchar();

    getchar();

    return 0;

}

三  思考题

编程将一个字符串中的字符按逆序重新存放,例如,

原字符串:      Computer

逆序存放字符串:retupmoC

  程序如下:

#include <stdio.h>
#include <string.h>
int main()
{
 char a[100],temp;
 int i,Len;
 gets(a);
 Len=strlen(a);
 for(i=0;i<=Len/2;i++)
 {
    temp=a[i];
    a[i]=a[Len-1-i];
    a[Len-1-i]=temp;
 }
 puts(a);
 }

实验总结:本次实验主要掌握一维数组和二维数组的定义、赋值和输入输出的方法和字符数组和字符串函数的使用,掌握与数组有关的算法,通过本次实验,加深对数组的了解,同时也能解决在数组中遇到的问题。

 

第二篇:c语言数组方法总结

数组方法总结

1. 输入元素的值:

int i,a [10];

for ( i = 0; i < 9; i ++ );

a[i] = i;

(1) 正序排列: (2)倒序排列:

for ( i = 0; i < 10; i ++) for ( i = 9; i >= 0; i -- ) printf (“%d”, a[i]); printf(“%d”, a[i]);

2. 初始化元素的值:

(1) 在定义时,将数组元素一次放在一对花括号里;

eg: int a[10]={1,2,3,4,5,6,7,8,9,0};

(2) 可以只给一部分元素赋值:

eg: int a[10]={1,3};

(3) 使数组全部元素为0:

eg: int a[10]={0,0,0,0,0,0,0,0,0,0};或者 int a[10]={0};

(4) 在对全部元素赋初值的时候,由于元素数已经确定,因此,可以不指定数组长度。(注:数组长度与提供初值个数不相同时,则长度不可以省略。)

3. 巧妙地将两个元素列在一个循环中输出:(用for循环处理fobonacci数列); eg:int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2];

4. 数列Fobonacci数列核心:

int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2];

5. 换行操作:

for (i=0;i<=20;i++) /*当然也可以在for循环中处理,直接将 {if (i%5= =0) printf(“\n”); if (i%5= =0) printf(“\n”);插入换行*/ Printf(“%12ld”,f[i]);

}

6. 起泡法:

int a[10];

for (j=0;j<9;j++) /*进行n-1趟比较*/

for (i=0;i<9-j;i++) /*在j趟比较中,比较n-1次*/

if(a[i]>a[i+i]) /*由小到大排列,if (a[i]<a[i+1])其它的不变由大到 {t=a[i];a[i]=a[i+1];a[i+1]=t;} 小排列*/

7. 初始化二维数组:

? 分行给二维数组赋初值;

? 将所有的元素都写在一个花括号里;

? 对部分元素赋值:

1) int a[3][3]={{3},{5},{9}}; 只讲0列元素赋值

2) int a[3][3]={{1}, {0,6},{0,0,11}}; 对部分元素赋值,对非0元素少使用方便

3) int a[3][3]={{1}, {5,6}}; 只对几行元素赋值

4) int a[3][3]={{1}, {},{9}}; 对第二行元素赋值

? 对全部元素赋值可以省略一维长度:

? 对部分元素赋初值,在省略一位长度时,应分行赋值:

8. 二维数组的输入输出:

? 输入:直接定义

? 输出:

for (i=0;i<=2;i++)

{for (j=0;j<=1;j++)

printf (“%5d”,b[i][j]);

printf (“\n”);

}

9. 二维数组的行列转换:

b[j][i]=a[i][j];

10. 数组中求最大值并输出行列号:

Eg: int i,row=0,colum=0,max;

int a[3][4]={1,2,3,4,5,6,,7,8,9,10,11,12};

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;}

11. 字符数组的初始化方法:

? 逐个字符初始化:

eg:char c[10]={?I?, ??, ?a?, ?m?, ??, ?h?, ?a?, ?p?, ?p?, ?y?};

1) 在定义字符数组时,不初始化,则数组中的各元素的之不可预料;

2) 如果花括号中提供的初值个数(即字符个数)大于数组的长度,则按语法错误

处理;

3) 如果花括号中提供的初值个数(即字符个数)小于数组的长度,其余元素自动

定为空字符即(?\0?);

? 如果提供的初值个数与数组长度相同,则在定义时可以省略数组长度; ? 也可以定义一个二维数组:

eg: char diamond[5][5]={{ },{ },{ },{ },{ }}; ? 用字符串常量,使字符数组初始化:

eg: char c[ ]={“I am happy”}; 或 char c[ ]= “I am happy”;

12. 字符数组的输出:

一维: 二维:

for (i=0;i<=11;i++) for (i=0;i<=11;i++)

printf (“%c”,c[i]); for (i=0;i<5;i++)

printf(“\n”); printf(“%c”,diamond[i][j]);

13. 字符数组输出最大值:

eg: if (strcmp(string,str[1]>0)

strcpy (string,str[0]>0);

else

strcpy (string,str[1]);

if (strcmp (str[2],string>0)

strcpy (string,str[2]);

printf(“%s”,string);

相关推荐