·28 C程序设计作业与习愿 实验五 数组和字符串 实验目的 掌握数组及数组元素的概念、数组的定义、数组元素的赋值和引用:正确使用数值 数组和字符数组,并掌握与数组有关的常用算法 令要点提示 1.数组是相关变量的有序集合,其中所有的变量具有相同的数据类型。 2.一维数组定义格式为: 类型说明符数组名[size] 3. 组的下标: 数组的下标从0开始,到size-1为止。 4.多维数组定义格式为: 类型说明符数组名[sizel][size2].[sizen]. 5.字符串 字符串一般使用一维字符数组处理,实际上就是以空字符结尾的字符数组。 字符串常量是由一对双引号括起米的字符集合。 实验内容 1. 一维数组的定义、赋值和引用 与数组有关的算法。 二维数组的定义 赋值和引用 4.字符数组的定义和使用 5.常用字符串处理函数的使用 实验步骤 读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入) 1.建立一个一维数组,用来存放5名学生的成绩,输入成绩,并计算平均分。 #define N 5 main( int 【aN】:/*数组定义语句*/ int i,sum=0: float aver; printf("\nInput 5 numbers:")
·28· C 程序设计作业与习题 实验五 数组和字符串 实验目的 掌握数组及数组元素的概念、数组的定义、数组元素的赋值和引用;正确使用数值 数组和字符数组,并掌握与数组有关的常用算法。 要点提示 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:");
·29· 实验五数组与字符串 for (i=0;i<5;i++){ scanf(%d“,【&a】):/朱输入数组元素/ sum=sum+a[i] } aver=【sum/N】: /体计算平均分*/ printf("\nThe average score is:%f",aver): 程序运行结果: Input 5 numbers:8080 9090 90 The average score is:【&6】 2.设数组a包括10个元素,下面程序的功能是求出a中各相邻两个元素的和,并将这些 和存放在数组b中,按每行3个元素的形式输出。 例:b[1]=a[1]+a[ol,b[9]=a[9+a[8 main( {inta[1o],b[10],i: printf("\nInput 10 numbers:"): for (i=0:i<10;i++) /数组输入制 scanf("d &a[i]) for (i=1:i<10:it+) b[i]=【ai+ai-l】: /常计算b数组中的元素*/ for(i=1:i10:i+) printf("%3d",b[i]) if(【i9%3】=0) printf(n"):/每行打印3个数据*/ 程序运行结果: Input 10 numbers:12 34 5 6 7 89 10 【357】 【9113】 【151719】 3.将一个数组中的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1, 4,5,6,8。提示:a[0]和a[n-1]交换,a[1]和a[m-1-交换 #define N 5 main() {inta[N={8,6,5,4,1,i,tep: printf("\nThe original array is:"); for (i=0:i<N;i++)
·29· 实验五 数组与字符串 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. 设数组 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 numbers:1 2 3 4 5 6 7 8 9 10 【3 5 7 】 【9 11 13】 【15 17 19】 3. 将一个数组中的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1, 4,5,6,8。提示: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++)
·30· C程序设计作业与习愿 printf("%4d",a[i]): for (i=0;i<N/2;i++) temp=a[i] 【a[]=aN-il】 【aN-il]=temp】: printf("\nThe new array is:"); for (i=0:i<N:i+) printf() 程序运行结果 The original array is:【86541】 The new array is: 【14568】 4.求一个3X3矩阵主对角线元素之和。提示求a[0][0]+a[1][1]+a[2][2], main() {int【a33】:/体数组定义语句*/ int i.i.sum=0 printf(nPlease input data:n); for (i=0:i<3:i++) scanf(“%dd%d“,【&a0l,&a,&a2】):/体输入一行数组元素*/ for(i=0:i<3:i+) printf(\ndd%d“,a[i][o],a[i][],a[i][2]):/体输出一行数据元素*/ for (i-0:i:) sum三【sum+a[】: /计算对角线元素之和,提示i=* printf("\nThe data is %d",sum); 程序运行结果如下: Please input data 123454 431276 541012 The data is【36】 5。将两个字符串连接起来,不要用strcat函数。 main ( char s1[80],s2[40]: int i=0,i=0:
·30· C 程序设计作业与习题 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;
·31· 实验五数组与字符串 printf("\nInput the first string:"): gets(s1). printf("nInput the second string:): gets(s2) while (sl[i]!='\0') 【i++:】: hi1e(s2[]='\0) s1iH【2+1 /拼接字符到s1/ s1[i]=0' printf("\nNew string:%s”,【sl】): 程序运行结果: Input the first string:China Input the second string:Beijing New string:【China Beijing】 6。下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出 该字符在数组中第一次出现的位置(下标值):否则输出-1。 #include〈string.h main() (char c='a',t[50]:/体字符数组定义语句*/ int n.k.i: printf("\nInput a string:"); gets(t): n=【strlen(t)】 /体用函数得到该字符串的长度*/ for(k=0:k<n:k++) if (t[k]==c)(j=k:break:} else i=-1: printf(n Position is:%d,【j】): /输出查询结果*/ 程序运行结果如下: Input a string:12345abcde Position is:【5】 再次运行程序: Input a string:12345 Position is:【-l】
·31· 实验五 数组与字符串 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 string:China 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 】
·32· C程序设计作业与习愿 作业与练习 一、选择题 1.若有说明:inta[10]:则对数组元素的正确引用是【A 】 A)a[10]: B)a[3.51C)a(5)D)a[10-10] 2.若有说明语句:int[3][4]:则对a数组元素的正确引用是【C】 A)a[2[4 B)a[1,3J C)a[1+1][o] D)a(2)1) 3.判断字符串a和b是否相等,应当使用【D】 A)if (a==b) B)if (a=b) C)if (strcpy(a,b))D)if (stremp(a,b)) 二、填空题 1.若有说明:inta[[3=1,2,3,4,5,6,7:则a数组第一维的大小是【3】 2.下面程序的运行结果是【LBLMNP】 include <stdio.h> sinclude <string.h> main( {char a[80]=”AB”,b[80]="NP”: int i=0: strcat (a.b) while (a[i++]!=\0)b[i]=a[i]: puts(b): 3.下面程序的运行结果是【11235813213455】 mainO int i,f[Io] f[0=1:f1=1: for(i=2:i<10:i+) f[i]=f[i-2]+f[i-1]: for(i=0:i<10:i++) if (i=0)printf("\n") printf(3d",f[i])
·32· C 程序设计作业与习题 作业与练习 一、选择题 1.若有说明:int a[10];则对数组元素的正确引用是【A 】 A) a[10]; B)a[3.5] C)a(5) D)a[10-10] 2. 若有说明语句:int [3][4];则对 a 数组元素的正确引用是【C 】 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 3. 判断字符串 a 和 b 是否相等,应当使用【D 】 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]); } }