实验 8 二维数组与字符数.docx

上传人:b****5 文档编号:7421577 上传时间:2023-01-23 格式:DOCX 页数:14 大小:411.97KB
下载 相关 举报
实验 8 二维数组与字符数.docx_第1页
第1页 / 共14页
实验 8 二维数组与字符数.docx_第2页
第2页 / 共14页
实验 8 二维数组与字符数.docx_第3页
第3页 / 共14页
实验 8 二维数组与字符数.docx_第4页
第4页 / 共14页
实验 8 二维数组与字符数.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验 8 二维数组与字符数.docx

《实验 8 二维数组与字符数.docx》由会员分享,可在线阅读,更多相关《实验 8 二维数组与字符数.docx(14页珍藏版)》请在冰豆网上搜索。

实验 8 二维数组与字符数.docx

实验8二维数组与字符数

实验8二维数组与字符数组

1.实验目的

(1)掌握二维数组的基本概念,如何定义二维数组,如何初始化二维数组;

(2)掌握二维数组的基本操作:

引用数组元素、行(列)求和,行(列)最

大最小值,整个数组的输入输出等;

(3)掌握与二维数组有关的算法,如找最大最小值(或位置)、矩阵转置等;

(4)掌握字符串与字符数组的基本应用方法;

(5)掌握字符串有关的算法,如字符转换、查询、统计和进制转换等。

2.实验环境

(1)每人微机一台(WindowsXP操作系统+OFFICE2000软件)

(2)VISUALC++6.0编程软件

3.实验内容

【实验题1】程序填空,输入一个4×4矩阵,求出主对角线上的元素之和

sum1、副对角线上的元素之和sum2,并输出结果。

【算法分析】:

每一行只有一个主对角线元素a[i][i](特征:

i==j),也仅有一个副对角线元素a[i][ni1](特征:

i+j==n1,即j=n1i)

#include

voidmain()

{

inti,j,sum1=0,sum2=0,a[4][4];

printf("Inputa4*4matrix:

\n");

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

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

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

for(i=0;i<4;i++){

sum1+=a[i][i];

sum2+=a[i][3-i];

}

printf("sum1=%d,sum2=%d\n",sum1,sum2);

}

【实验题2】程序填空,打印杨辉三角形前10行:

1

11

121

1331

14641

15101051

……………………

【算法分析】:

分析一个10行的杨辉三角,需要一个10×10的二维矩阵a,则:

1)杨辉三角为下三角矩阵,只需要求出第i行(i=0,1,2,…,9)前

i+1个元素,即a[i][j]!

=0(j=0…i).

2)每行的第0列元素均为1,即a[i][0]=1;

3)每行的主对角线元素也均为1,即a[i][i]=1;

4)从第2行开始,每行夹在第0列元素与主对角线元素之间的元素

a[i][j](i=2,3,…,9,j=1,..,i1

)等于其左上方元素a[i1][

j1]

与正上方元素

a[i1][

j]之和,即a[i][j]=a[i1][

j1]+

a[i1][

j];

5)输出该矩阵的下三角,即得出杨辉三角的前10行。

l问:

如果删除Line12,程序运行结果有何不同?

#include

voidmain()

{

inti,j;

inta[10][10];

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

a[i][0]=a[i][i]=1;

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

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i<10;i++){

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

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

printf("\n");

}

}

如果删除Line12,程序运行结果有何不同?

无法成三角形

【实验题3】程序填空,输入一个以回车结束的字符串(有效长度少于80),

将其中的小写字母统一更换成对应的大写字母。

【算法分析】:

1、输入字符串,并存储在字符数组中,’\n’表示回车;

2、遍历字符串的每个元素,如果是小写字母(’a’97~’z’122),则更换成大写字母;

3、输出更新后的字符串。

运行程序,输入:

Tom&Jacks10

输出结果:

#include

voidmain()

{

inti;

chars[80];

i=0;

while((s[i]=getchar())!

='\n')i++;

s[i]='\0';

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

if(s[i]>='a'&&s[i]<='z')s[i]-=32;

for(i=0;s[i]!

='\0';i++)

printf("%c",s[i]);

printf("\n");

}

【实验题4】程序填空,输入一个以回车结束的字符串(有效长度少于80),

将该字符串中的字符重新排列,使原先第0个字符出现在最后一位,原先第1

个字符出现在倒数第2位,……,原先最后1个字符出现在第0位,例如:

字符

串”abcdef”经重排后变成”fedcba”。

【算法分析】:

该问题类似于方阵转置,即把特定位置的数组元素进行交换。

题中的字符串存放在一维字符型数组s中,需要解决以下问题:

1)计算字符串s的有效长度len

2)将字符串s的前半部分(0~len/21)与字符串的后半部分对调,即交换对称元素,与s[i]对称的元素是s[len1i],

如下图所示:

012345

abcdef\0…

#include

voidmain()

{

inti,len=0;

chars[80],temp;

printf("Inputastring(<80):

\n");

gets(s);

for(i=0;s[i]!

='\0';i++)

len++;

for(i=0;i<=len/2-1;i++){

temp=s[i];

s[i]=s[len-1-i];

s[len-1-i]=temp;

}

for(i=0;s[i]!

='\0';i++)

putchar(s[i]);

printf("\n");

}

【实验题5】将一个整数字符串转换为整数输出。

(注:

整数字符串和整数是

不同的,比如"123"是一个整数字符串,每个元素都是一个数字,但不能进行数

值运算,而123是一个整数,可以进行数值运算。

两者外观形态相似,本质不同)

【算法分析】利用与字符’0’的ASCII之差进行计算。

#include

voidmain()

{

charstr[10];

doublet=0;

inti;

printf("请输入一个数字字符串(<=10位)");

gets(str);

for(i=0;str[i]!

='\0';i++)

t=t*10+(str[i]-'0');

printf("result=%.0f",t);

printf("\n谢谢,按回车键结束");

}

【实验题6】程序填空,编写一个字符串复制程序,它的功能是把一个字符串

的所有内容复制给另一个字符串,并输出复制后的字符串。

#include

voidmain()

{

chars1[80],s2[80];

inti;

printf("请输入字符串s1(<=80字符)\n");

gets(s1);

for(i=0;s1[i]!

='\0';i++)//判断s1的结束标志

s2[i]=s1[i];

s2[i]='\0';

printf("s2=%s\n",s2);

printf("谢谢,按回车键结束");

}

【实验题7】程序填空,编写一个求字符串长度的程序,它的功能求出一个字

符串中有效字符的个数。

#include

voidmain()

{

chars[80];

inti;

intlen=0;

printf("请输入一个字符串:

");

gets(s);

for(i=0;s[i]!

='\0';i++)

;

len=i;

printf("字符串有效长度=%d",len);

printf("\n谢谢,按回车键结束");

}

【实验题8】程序填空,编写一个字符串连接程序,它的功能是把两个不知道

长度的字符串s1、s2的内容连接成为一个字符串,并保存在字符串s1中。

(提

示:

要定义足够长的字符串s1)

#include

voidmain()

{

chars1[80],s2[80];

inti,j;

printf("请输入字符串s1:

");

gets(s1);

printf("请输入字符串s2:

");

gets(s2);

for(i=0;s1[i]!

='\0';i++);

for(j=0;s2[j]!

='\0';j++)

s1[i+j]=s2[j];

s1[i+j]='\0';

printf("连接后的s1=%s",s1);

printf("\n谢谢,按回车键结束");

}

******以下题目为选做题******

【实验题9】程序填空,判断一个字符串是否为回文,如果是输出“yes”,否

则输出“no”。

所谓回文是指正读和反读相同的字符串,比如“12321”

#include

voidmain()

{

chars[80];

inti;

intlen=0;

printf("请输入一个字符串:

");

gets(s);

//求出字符串的长度

for(i=0;s[i]!

='\0';i++)

len++;

len=len-1;

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

if(s[i]!

=s[len-i])//比较

break;//跳出循环

if(i>len/2)//判断

printf("yes");

else

printf("no");

printf("\n谢谢,按回车键结束");

}

【实验题10】有一篇文章,共有3行文字,每行有80个字符,统计这篇文章

中各个英文字母的个数。

(提示:

可以定义一个长度为26的整型数组num,分别记录26个英文字母的个数,比如读入的字母为'a',则num[0]++,读入的字母为'b',则num[1]++,......)

#include

voidmain()

{

charstr[3][80],c;

intcnt[26],i,j;

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

cnt[i]=0;

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

{

printf("请输入第%d行字符:

",i+1);

gets(str[i]);

}

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

for(j=0;str[i][j]!

='\0';j++)

{

c=str[i][j];

if(c>='a'&&c<='z')

cnt[c-'a']++;

elseif(c>='A'&&c<='Z')

cnt[c-'A']++;

}

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

printf("%c:

%d\t",'A'+i,cnt[i]);

printf("\n谢谢,按回车键结束");

}

【实验题11】该程序功能:

输入1个字符串,按字母出现次序输出其中所出现

过的大写英文字母。

如运行时输入字符串"FONTNAMEandFILENAME",应输

出"FONTAMEIL"。

该文件中“/*****N*****/”的下一行中有错误,请改正!

#include

voidmain()

{

charx[80],y[26];inti,j,ny=0;gets(x);

for(i=0;x[i]!

='\0';i++)

if(x[i]>='A'&&x[i]<='Z')

{

for(j=0;j

/*****1*****/

if(y[j]==x[i])break;

if(j==ny){y[ny]=x[i];ny++;}

}

/*****2*****/

for(i=0;i

printf("%c",y[i]);

printf("\n");

}

【实验题12】程序填空,二-十进制转换:

输入一个8位二进制字符串b(由字符’1’和’0’组成),输出对应的十进制整数。

例如,输入二进制字符串10010001,

输出十进制整数145

【算法分析】:

1、由于二进制字符串b的长度固定为8,因此定义字符数组charb[8]即

可,每个元素对应一个二进制位;

2、循环1:

输入二进制字符,输入的每一个字符先暂存在字符变量ch

中,检查ch是否是’0’或’1’,是则存入数组b,并令数组下标i增1,不是

则跳过该字符。

3、循环2:

二-十进制转换:

从前往后,带权累加数组b各元素对应的数

值b[i]‘0’:

d=d×2+b[i]‘0’

#include

voidmain()

{

inti,d;

charch,b[8];

printf("Intput8-bitbinary:

");

i=0;

while(i<8){

ch=getchar();

if(ch=='0'||ch=='1'){b[i]=ch;i++;}

}

d=0;

for(i=0;i<8;i++)d=d*2+b[i]-'0';

printf("digit=%d\n",d);

}

l思考:

如果改为输入一个4位长度的十六进制字符串,如”2f3a”,要输出对应的十进制整数,上面的程序需要如何修改?

#include

voidmain()

{

inti,d;

charch,b[4];

printf("Intput4-bitbinary:

");

i=0;

while(i<4){

ch=getchar();

if(ch>='1'&&ch<='9'||ch>='a'&&ch<='f'||ch>='A'&&ch<='F')

{b[i]=ch;i++;}

}

d=0;

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

{if(b[i]>='1'&&b[i]<='9')d=d*16+(b[i]-'0');

if(b[i]>='a'&&b[i]<='f')d=d*16+(b[i]-'a'+10);

if(b[i]>='A'&&b[i]<='F')d=d*16+(b[i]-'A'+10);}

printf("digit=%d\n",d);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1