常熟理工学院
《C语言程序设计》实验指导与报告书
______学年 第____ 学期
专 业: ___________________________________________ 学 号: ___________________________________________ 姓 名: ___________________________________________ 实验地点:___________________________________________ 指导教师:___________________________________________
计算机科学与工程学院
2014
1
实验8 数组程序设计(2)
8.1 实验目的
1.掌握字符数组的使用方法。
2.掌握二维数组的定义及初始化方法。
3.掌握用循环语句对二维数组进行处理的方法。
4.熟悉对数组元素进行处理的常规算法(如排序、插入、删除及查找等)。
8.2 示例程序
【实验8.1】输入一个字符串,判断是否是回文串。所谓回文串,是指这个字符串正读和反读是一样的,如“abcba”和“123321”都是回文。
程序代码:
#include
char s[10]; int i,j,n;
printf(\
gets(s); n=strlen(s); for(i=0,j=n-1;i if(s[i]!=s[j]) break; if(i printf(\else printf(\return 0; } /* 判断对应的字符是否相等 */ /* 对应的字符不相等时跳出循环 */ /* 若是从循环体中跳出来的则不是回文 */ /* 输入字符串 */ /* 求出字符串的长度 */ /* 定义一个字符数组 */ 说明: 1.gets()函数一次只能读入一个字符串。 2.使用strlen()函数求出字符串的长度,将字符串的对应字符进行比较,遇到不相等时跳出循环。 3.循环外,若i 互换前 互换后 ?326???279? ????158??程序代码: ?3?21??275? ????698??2 #include void print(int a[][N]) { int i,j; for(i=0; i printf(\printf(\} } int main() { int i,j,t,a[N][N]={3,2,6,-2,7,9,1,5,8}; printf(\print(a); printf(\for(i=0; i { t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } printf(\print(a); return 0; } /* 调用输出函数输出交换后的数组 */ /* 进行行列互换 */ for (j=i+1; j /* 调用输出函数输出交换前的数组 */ /* 输出一行后换行 */ /* 输出二维数组函数 */ 说明: 1.print()函数的作用是输出一个二维数组。 2.将二维数组中的行列元素互换,即a[0][1]与a[1][0]交换,a[0][2]与a[2][0]交换,…可以用循环来实现。 8.3 阅读程序 【实验8.3】以下程序的功能是:在一个递增的字母或数字串(不超过8个)中插入一个字母或数字。 程序代码: #include char string[10]={'\\0'},ch; int i=0,j,len; printf(\gets(string); printf(\ch=getchar(); 3 /* */ while(string[i]!='\\0'&&ch>string[i]) i++; len=strlen(string); if(i<=len-1) /* */ for(j=len-1;j>=i;j--) string[j+1]=string[j]; string[i]=ch; puts(string); return 0; } /* */ printf(\ /* */ 说明: 1.用gets()函数输入一个递增的字母或数字串,用getchar()函数输入一个字母或数字。 2.使用循环在字母或数字串中依次查找要插入的字母或数字所在的位置,找到位置后结束循环。 3.将找到插入位置以后的字符依次后移一个位置,插入字母或数字。 8.4 完善程序 【实验8.4】下面程序的功能是分别求二维数组a[3][4]的各行、各列元素之和。请完善程序。 程序代码: #include int i,j,a[4][5]; printf(\for(i=0; i<3; i++) for(j=0; j<4; j++) scanf(\ printf(\for(i=0; i<3; i++) { for(j=0; j<4; j++) printf(\________; } for(i=0; i<3; i++) a[i][4]=0; for(j=0; j<5; j++) ________; for(i=0; i<3; i++) for(j=0; j<4; j++) { a[i][4]+=a[i][j]; ________; a[3][4]+=a[i][j]; 4 /* 计算各列之和 */ /* 计算各行之和 */ /* 计算全部元素之和 */ /* 存放列之和的元素清0 */ /* 存放行之和的元素清0 */ /* 换行 */ /* 为每个元素赋值 */ } printf(\for(i=0;i<4; i++) { for(j=0; ________; j++) printf(\printf(\} return 0; } 说明: 1.程序采用双循环给数组赋值。 2.求各行与各列元素之和要采用累加的方式,首先对存放和的各元素进行清0。 8.5 改错程序 【实验9.5】输入一个正整数n(1?n?6)和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小)就输出它的下标;否则,输出“No”(设a最多有一个鞍点)。请改正程序中的错误,并调试。 注意:改错时不允许增加及删除语句,只允许修改或移动语句的位置。 【含有错误的程序代码】 #include void saddle_point(int a[N][]) { int flag=0,i,j,max,min; for(i=0;i max=0; for(j=0;j if(a[i][j] max=j; min=0; /* 找第max列中最小值所在下标min */ for(j=0;j if(a[j][max] if(flag==0) else printf(\ } int main() { int i,j,a[N][N]; printf(\ 5 /* 根据flag值输出结果 */ printf(\ flag=1;break;} /*当flag=1,表示找到了鞍点,当flag=0,表示未找到鞍点 */ /* 找第i行中最大值所在下标max */ for(i=0;i for(j=0;j scanf(\ for(i=0;i for(j=0;j printf(\printf(\saddle_point(a); return 0; } /* 调用函数求鞍点 */ /* 输入一个N阶方阵,存储在数组a中 */ 8.6 自己练习 1.编写程序,输入一个以回车符结束的字符串(少于80个字符),将该字符串按逆序输出。 2.编写程序,输入一个以回车符结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数,然后再输出该字符串。 3.编写程序,输入一个正整数n(1?n?6),再输入n阶方阵a,计算该方阵除副对角线、最后一列和最后一行以外的所有元素之和(副对角线为从方阵的右上角至左下角的连线)。 6 搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科c语言实验六 全文阅读和word下载服务。
相关推荐: