《C语言程序设计》课程实验指导(讲义)实验五 数组和字符串

·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 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 sinclude 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 #include 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]); } }

·33· 实验五数组与字符串 三、编程题 1.用选择法对10个整数按升序排序 #define N 10 main() int i,j.min,temp; static int a[N]={5,4,3,2,1,9,87,6,0: printf("\nThe array is:\n); /输出数组元素*/ for (i=0:ia[l]) 【{temp=a[minl:a[ninl=a[i:a[j]=temp】:/体数据交换*/ printf(“nThe sorted numbers:\n"):/*输出排序结果*/ for(i=0:iN:it+)printf(%5d°,a[i]): printf("\n): 2.有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个 元素的值。如果该数不在数组中,则打印出“无此数”。读懂下面的程序,并填空。 变量说明:top,bott:查找区间两端点的下标: 1oca:查找成功与否的开关变量。 #include〈stdio.h> #define N 15 main() int i,i,number,top,bott,min,loca,a[N],flag: char c printf((产Input5 numbers(a[]>a[i-n:体由大到小制 scanf("%d",&a[o]); /输入第1个数据* 1=1: while (i=a[i-1]) /是否大于前一个数/ else printf("Repeat input number a[i]"): printf("must >=%d\n",a[i-1]):
·33· 实验五 数组与字符串 三、编程题 1.用选择法对 10 个整数按升序排序 #define N 10 main() { int i,j,min,temp; static int a[N]={5,4,3,2,1,9,8,7,6,0}; printf("\nThe array is:\n"); /* 输出数组元素 */ for (i=0;ia[j]) min =j; 【{ temp=a[min]; a[min]=a[j]; a[j]=temp}】; /* 数据交换 */ } printf("\nThe sorted numbers: \n"); /* 输出排序结果 */ for (i=0;i #define N 15 main() { int i, j, number,top,bott,min,loca,a[N],flag; char c; printf("Input 15 numbers(a[i]>a[i-1])\n"); /* 由大到小 */ scanf("%d", &a[0]); /* 输入第 1 个数据 */ i=1; while (i=a[i-1]) /* 是否大于前一个数 */ i++; else { printf("Repeat input number a[i]"); printf("must >= %d\n", a[i-1]); }

·34· C程序设计作业与习题 printf(Input the finded number:"):/体输入需要查找的数/ scanf( &number) loca=0 top=0; bott=N-1: if ((numbera[N-1])) 不在范围内制 while ((loca=0)&(top main( char s[80]; int i,j; gets(s): for(i=j=0:s[i]=0':i+) if(s[i]='c'){s[=s[i]:【j+】:} s[j]=10°: puts(s): 4.编程打印以下图案 家冰*家 米***米 米*来来米
·34· C 程序设计作业与习题 } printf("Input the finded number:"); /* 输入需要查找的数 */ scanf("%d", &number); loca=0; top=0; bott=N-1; if ((numbera[N-1])) loca=-1; /* 不在范围内 */ while ((loca==0) && (top main() { char s[80]; int i,j; gets(s); for (i=j=0; s[i]!=’\0’; i++) if (s[i] !=’c’) {s[j]=s[i]; 【j++ 】; } s[j]=’\0’; puts(s); } 4.编程打印以下图案: ***** ***** ***** *****

·35· 实验五数组与字符串 ***书 参考答案: {static char a[5]-f*','*','*,'*,'*: int i,j,k; char space='': for(i=0:is2) B)if(strcmp(s1,s2) C)if(strcmp(s2.s1)>0) D)if(strcmp(s1,s2)>0) 5.下述对C语言字符数组的描述中错误的是【C】 A)字符数组可以存放字符串
·35· 实验五 数组与字符串 ***** 参考答案: main() { static char a[5]={'*','*', '*','*', '*'}; int i,j,k; char space=' '; for(i=0;is2) B)if(strcmp(s1,s2)) C) if(strcmp(s2,s1)>0) D) if(strcmp(s1,s2)>0) 5. 下述对 C 语言字符数组的描述中错误的是【C 】 A) 字符数组可以存放字符串

·36· C程序设计作业与习恩 B)字符数组的字符串可以整体输入、输出 C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 不可以用关系运算符对字符数组中的字符串进行比 (二)填空题 1.编写一个程序,将字符数组s2中的全部字符拷贝到字符数组sl中,不用strcpy函数。 拷贝时,10也要拷贝过去。10后面的字符不拷贝。 #include "stdio.h" int i,len; printf("\nplease input string:"); scanf("%s”,from): 【len=strlen(from】 /体得到字符串长度*/ for(i 0:i x[i]】)min=x[i]: } aver=【(aver-mir-max)/6】: printf(Average【%f】n",aver 3.程序读入20个整数,统计并输出非负数个数以及非负数的和。 #include "stdio.h" main()
·36· C 程序设计作业与习题 B) 字符数组的字符串可以整体输入、输出 C) 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D) 不可以用关系运算符对字符数组中的字符串进行比 (二)填空题 1. 编写一个程序,将字符数组 s2 中的全部字符拷贝到字符数组 s1 中,不用 strcpy 函数。 拷贝时,‘\0’也要拷贝过去。‘\0’后面的字符不拷贝。 #include "stdio.h" main() { char from[80],to[80]; int i, len; printf("\nplease input string:"); scanf("%s",from); 【len=strlen(from)】; /* 得到字符串长度 */ for (i=0;i x[i]】) min=x[i]; } aver= 【(aver-min-max)/6】; printf("Average 【%f 】\n",aver); } 3.程序读入 20 个整数,统计并输出非负数个数以及非负数的和。 #include "stdio.h" main()

·37· 实验五数组与字符串 {int i,a[20],s,count: s=count-0; for(i=0:i<20:i+) (scanf("xd",&a[i]) if (alil<o) 【continue】: s+=a[i]: count; printf("s=%d count=%d\n",s,count):
·37· 实验五 数组与字符串 {int i,a[20],s,count; s=count=0; for (i=0;i<20; i++) {scanf("%d", &a[i]); if (a[i]<0) 【 continue 】; s+=a[i]; count++; } printf("s=%d count=%d\n",s,count); }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C语言程序设计》课程实验指导(讲义)实验六 函数与变量.doc
- 《C语言程序设计》课程实验指导(讲义)实验七 定义编译预处理.doc
- 《C语言程序设计》课程实验指导(讲义)实验四 循环结构和转移语句.doc
- 《C语言程序设计》课程实验指导(讲义)实验二 顺序结构与输入输出方法.doc
- 《C语言程序设计》课程实验指导(讲义)实验三 各种分支结构.doc
- 《C语言程序设计》课程授课教案(讲义)文件概念.doc
- 《C语言程序设计》课程授课教案(讲义)指针应用.doc
- 《C语言程序设计》课程授课教案(讲义)结构体与共用体.doc
- 《C语言程序设计》课程授课教案(讲义)枚举与位操作.doc
- 《C语言程序设计》课程授课教案(讲义)编译预处理.doc
- 《C语言程序设计》课程授课教案(讲义)数组与字符串.doc
- 《C语言程序设计》课程授课教案(讲义)函数与变量.doc
- 《C语言程序设计》课程授课教案(讲义)程序设计算法流程控制.doc
- 《C语言程序设计》课程授课教案(讲义)C语言程序的基本形式.doc
- 《C语言程序设计》课程教学大纲(公共基础必修课、选修课).doc
- 《过程流体机械》课程教学课件(PPT讲稿)第五章 离心机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第三章 离心式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第二章 往复式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第四章 泵.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第一章 绪论.ppt
- 《C语言程序设计》课程实验指导(讲义)实验十 指针与数组.doc
- 《C语言程序设计》课程实验指导(讲义)实验八 指针及其运算.doc
- 《C语言程序设计》课程实验指导(讲义)实验九 指针与字符串.doc
- 《C语言程序设计》课程实验指导(讲义)实验一 C语言程序设计准备.doc
- 《C语言程序设计》课程教学资源(作业习题)判断题样题(无答案).doc
- 《C语言程序设计》课程教学资源(作业习题)选择填空题(无答案).doc
- 《C语言程序设计》课程教学资源(作业习题)习题集(末页含答案).ppt
- 《C语言程序设计》课程教学资源(作业习题)选择题样题(无答案).doc
- 《C语言程序设计》课程教学课件(PPT讲稿)第一章 C语言概述.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第二章 程序的灵魂——算法.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第四章 最简单的c程序设计——顺序程序设计.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第三章 数据描述.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第六章 循环控制.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第七章 数组.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第五章 选择结构程序设计.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第九章 预处理命令.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第八章 函数.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第十章 指针.ppt
- 《力学》课程教学资源(作业习题)静力学测验(无答案).pdf
- 《力学》课程教学资源(作业习题)运动学模拟试题(无答案).pdf