实验6 数组一、实验目的1、掌握一维数组和二维数组的定义、赋值和输入输出的方法;2、掌握字符数组和字符串函数的使用;3、掌握与数组有关的算法(特别是排序算法)。
二、实验内容和步骤编程序并上机调试运行。
1、以下给定程序MODI1.C的功能是:求一维数组a中所有元素的平均值, 结果保留两位小数。
例如,当一维数组a中的元素为:10, 4, 2, 7, 3, 12, 5, 34, 5, 9时,程序的输出应为:The aver is: 9.10程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>void main(){ int a[10]={10,4,2,7,3,12,5,34,5,9}, i;/************found************/float aver, s;/************found************/s = a[0];for ( i=1; i<10; i++)s += a[i];aver = s / i;printf("The aver is: %.2f\n", aver);}2、以下给定程序MODI1.C的功能是:求二维数组a中的最小值。
例如,当二维数组a中的元素为:4 2 347 3 125 6 5程序的输出应为:The min is: 2 。
程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>void main(){ int a[3][3]={4,2,34,7,3,12,5,6,5}, i, j, min;clrscr();min = a[0][0];/************found************/for ( i=0; i<3; i++)for ( j=0; j<3; j++)if (min > a[i][j]){/************found************/min = a[i][j];}printf("The min is: %d\n", min);}3、在考生目录下,给定程序FILL1.C的功能是:在第一个循环中给a数组的前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1;在最后一个循环中输出对称折叠以后的a数组的前10个元素。
程序有两个空(1)、(2)需要补充完整。
并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main( ){ int i, a[10];clrscr();for( i=1; i<=10; i++)/**************found************/scanf("%d",&a[i-1]);for(i=0;i<5;i++)/**************found************/a[9-i]=a[i];for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}4、以下给定程序FILL1.C的功能是:输入一个数x,查找x在数组a中最后一次出现的位置。
例如:如果a 数组中的元素为:1, 5, 2, 5, 6, 8, 7, 4, 3, 0,当x=5时,程序的输出结果为:5 is No.3 。
当x=10时,该数不在数组中,程序的输出结果应为:10 not found !。
程序有两个空(1)、(2)需要补充完整。
请将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main( ){ int a[10] = { 1, 5, 2, 5, 6, 8, 7, 4, 3, 0 };int i, k, x, f = 0;scanf("%d", &x);for (i=0; i<10; i++)if (a[i] == x ){ f=1;/************found************/k=i;}/************found************/if (f==1)printf("%d is No. %d\n", x, k);elseprintf(" %d not found !\n", x);}5、有一个已经从小到大排好序的整数数组:a[30]={6,9,12,15,19,23,45,67,89,98},现输入一个整数x ,要求按原来的升序规律将它插入到数组中。
#include<stdio.h>void main(){int a[30]={6,9,12,15,19,23,45,67,89,98},num,i,j,tmp1,tmp2;scanf("%d",&num);for(i=0;i<10;i++){if(num<=a[i]){tmp1=a[i];a[i]=num;for(j=i+1;j<11;j++){tmp2=a[j];a[j]=tmp1;tmp1=tmp2;}break;}else a[10]=num;}for(i=0;i<11;i++){printf("%d",a[i]);printf("\n");}}6、以下程序PROG1.C的功能是:将字符串2连接到字符串1的后面并输出。
例如,当字符串1为"This is a ",字符串2为"c program",则输出:"This is a c program" 。
注意: 部分源程序存在文件PROG1.C中。
请在/*******begin********/ 与/********end*********/ 之间填入你编写的若干语句。
请勿改动其它位置的任何内容。
#include <stdio.h>void main(){ char str1[80]="This Is a ", str2[80]="c Program";/***********begin***********/strcat(str1,str2);/************end************/printf("Result is: %s\n",str1);}7、以下给定程序FILL1.C的功能是:从键盘上输入一个数字组成的字符串(字符串长度小于8),将该字符串转换成一个十进制数。
例如:从键盘上输入字符串2345, 则程序运行的结果应当为:n=2345。
程序有两个空(1)、(2)需要补充完整。
请将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!#include "stdio.h"void main( ){ char s[10]; int i;long int n=0;clrscr();/**************found************/scanf("%s",s);/**************found************/for(i=0; s[i]!=’\0'; i++)n = n*10 + s[i]- '0';printf("n=%ld\n",n);}8、打印出以下的杨辉三角形(要求打印10行)11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1……#include<stdio.h>void main(){int y[11][11],i,j;y[1][1]=y[2][1]=y[2][2]=1;for(i=3;i<=10;i++){y[i][1]=1;y[i][i]=1;}for(i=3;i<=10;i++)for (j=2;j<i;j++)y[i][j]=y[i-1][j-1]+y[i-1][j];for (i=1;i<=10;i++){for (j=1;j<=i;j++){printf("%5d",y[i][j]);}printf("\n");}}9、编程查找一个二维字符数组里为“a”的元素的个数。
假定是3行5列的字符数组。
#include<stdio.h>#include<string.h>void main(){char a[3][5]={"abcef","daryd","agdys"};int i,j,k;k=0;for(i=0;i<3;i++)for(j=0;j<5;j++)if(a[i][j]=='a')k++;printf("%d\n",k);}。