C语言数组实验报告.docx
- 文档编号:11371254
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:23
- 大小:37.29KB
C语言数组实验报告.docx
《C语言数组实验报告.docx》由会员分享,可在线阅读,更多相关《C语言数组实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
C语言数组实验报告
实验名:
数组
一、实验目的
1、掌握数组定义的规那么。
2、掌握C语言数组的根本用法。
二、实验容
〔一〕)题目1
1、编写程序,测试以下数组的定义方式是否正确
(1)main()
{
intn;
scanf(“%d〞,&n);
inta[n];
……
}
(2)main()
{
constintn=10;
inta[n];
}
(3)#include
#defineM10
main()
{
inta[M];
}
(4)main()
{
inta[2+2*4];
}
(5)#include
#defineM2
#defineN8
main()
{inta[M+N];
}
通过这一实验,可以说明什么问题?
2、输入和输出信息描述及数据类型确定;
〔1〕、输入数据
序号
输入数据描述
数据类型
〔1〕
n,a[n]
int
〔2〕
n
a[n]
constint
int
〔3〕
a[M]或a[10]
int
〔4〕
a[2+2*4]
int
〔5〕
a[M+N]
int
3、程序调试
错误序号
错误信息〔列出出错语句以及出错提示〕
是否解决
解决方法
〔1-1〕
main.c|5|error:
expectedexpressionbefore'%'token|
scanf(“%d〞,&n);
是
将%d两边的符号改为西文字符的引号scanf("%d",&n);
〔1-2〕
main.c|6|warning:
unusedvariable'a'[-Wunused-variable]|
inta[n];
是
将前面的n的输入去掉,把n改为具体数字
(5)
main.c|6|warning:
unusedvariable'a'[-Wunused-variable]|
inta[M+N];
是
加上个scanf(“%d〞,&a[M+N]);
4、相关问题答复
通过这一实验,可以说明什么问题?
1、〔2〕〔3〕〔4〕〔5〕对,〔1〕错,〔1〕中a[n]的数组定义的【】里的常量表达式不能是变量。
2、一维数组定义的时候【】里的常量表达式包括常量和符号常量,但不能是变量。
〔二〕)题目2
1、运行下面的C程序,根据运行结果,可以说明什么?
main()
{intnum[5]={1,2,3,4,5};
intii;
for(i=0;i<5;i++)
printf(“%d〞,num[i]);
}
2、输入和输出信息描述及数据类型确定;
〔1〕、输入数据
序号
输入数据描述
数据类型
1
num[5],i
int
〔2〕输出数据
序号
输出数据描述
数据类型
1
num[i]
int
3、程序源代码〔填写程序调试正确后的代码〕
#include
intmain()
{
intnum[5]={1,2,3,4,5};/*定义num[5]*/
inti;
for(i=0;i<5;i++)/*下标应该是0到4*/printf("%d",num[i]);/*依次输出num[0]至num[4]*/
return0;
}
4、程序调试
错误序号
错误信息〔列出出错语句以及出错提示〕
是否解决
解决方法
1
格式不对
是
2
main.c|5|error:
unknowntypename'inti'|
intii;
是
改为inti;
3
main.c|7|error:
expectedexpressionbefore'%'token|
printf(“%d〞,num[i]);
是
将引号改为西文字符
4
for(i=0;i<5;i++)
是
去掉等号
5、相关问题答复
运行结果:
12345
根据运行结果,可以说明什么?
说明:
数组元素的下标从0开场,比定义的时候会小一个。
〔三〕)题目3
1、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。
现在要你设计一个程序,返回一个
3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。
2、输入和输出信息描述及数据类型确定;
〔1〕、输入数据
序号
输入数据描述
数据类型
1
a[3][5],i.j
int
2
adress
整型指针变量
〔2〕输出数据
序号
输出数据描述
数据类型
1
adress
int
3、程序源代码〔填写程序调试正确后的代码〕
#include
intmain()
{
inta[3][5];
int*adress;//定义并初始化adress
inti,j;
for(i=0;i<3;i++)//每行循环
{
printf("\n");
for(j=0;j<5;j++)//每列循环
{
adress=&a[i][j];//将adress赋值为整型指针变量
printf("%d",adress);
}
}
return0;
}
4、测试与结果分析
〔1〕、测试数据与结果
源文件名
可执行文件名
测试序号
测试用例选取原因
测试输入数据
测试输出结果
是否正确
结果分析
1
无
无
是
无误
〔四〕)题目4
为一个起泡排序程序设计测试用例,并测试之。
1、程序源代码〔填写程序调试正确后的代码〕
#include
intmain()
{
inta[10];//定义一维数组a[10]
inti,j,k;
printf("请输入10个数字:
\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);//依次输入数组的数字
printf("\n");//换行
for(j=0;j<9;j++)//进展9次循环,实现9趟比拟
for(i=0;i<9-j;i++)//在每一趟中进展9-j次比拟
if(a[i]>a[i+1])//相邻两数比拟
{
k=a[i];
a[i]=a[i+1];
a[i+1]=k;//假设后一个比前一个大,那么交换位置
}
printf("排序后的数字为:
\n");
for(i=0;i<=9;i++)
printf("%d",a[i]);//依次输出排序后的数字
printf("\n");
return0;
}
2、输入和输出信息描述及数据类型确定;
〔1〕、输入数据
序号
输入数据描述
数据类型
1
a[10],i,j,k
int
〔2〕输出数据
序号
输出数据描述
数据类型
1
a[i]
int
3、程序调试
错误序号
错误信息〔列出出错语句以及出错提示〕
是否解决
解决方法
1
输出结果间无空格
是
在最后一个printf(“%d〞的d后面加空格
4、测试与结果分析
〔1〕、测试数据与结果
源文件名
可执行文件名
测试序号
测试用例选取原因
测试输入数据
测试输出结果
是否正确
结果分析
1
测试用例
1121314155667788980
11213141567788089
是
无误
〔五〕)题目5
1、1983年,在ACM图林奖颁奖大会上,出色的计算机科学家,UNIX的鼻祖,C语言的创始人
之一,图林大奖得主,KenThompson上台的第一句话是:
“我是一个程序员,在我的1040表上,
我自豪地写上了我的职业。
作为一个程序员,我的工作就是写程序,今天我将向大家提供一
个我曾经写过的最精练的程序。
〞这个程序如下:
chars[]={
‘\t’,
‘0’,
‘\n’,
‘}’,
‘;’,
‘\n’,
‘\n’,
‘/’,
‘*’,
‘\n’,
/*(213linesdeleted)*/
0
};
/*
*Thestringisa
*representationofthebody
*ofthisprogramfrom‘0’
*totheend
*/
main()
{inti;
printf(“char\ts[]={\〞};
for(i=0;s[i];i++)
printf(“\t%d,\n〞,s[i]);
printf(“%s〞,s);
}
请上机运行这个程序,指出它的功能和运行结果。
2、程序源代码〔填写程序调试正确后的代码〕
#include
chars[]={
'\t',
'0',
'\n',
'}',
';',
'\n',
'\n',
'/',
'*',
'\n',
/*(213linesdeleted)*/
0
};
/*
*Thestringisa
*representationofthebody
*ofthisprogramfrom'0'
*totheend
*/
intmain()
{
inti;
printf("char\ts[]={\n");
for(i=0;s[i];i++)
printf("\t%d,\n",s[i]);
printf("%s",s);
return0;
}
3、程序调试
错误序号
错误信息〔列出出错语句以及出错提示〕
是否解决
解决方法
1
所有的引号和逗号格式不对
是
都改为西文字符
2
main.c|22|error:
expected'=',',',';','asm'or'__attribute__'before'{'token|
是
在main前加int
3
main.c|23|warning:
missingterminating"character[enabledbydefault]|
printf("char\ts[]={\"};
是
改为
printf("char\ts[]={\n");
4
格式不完整
是
加上include,return0;
4、相关问题答复
请上机运行这个程序,指出它的功能和运行结果。
答:
功能输出字符串的数值。
5、测试与结果分析
〔1〕、测试数据与结果
源文件名
可执行文件名
测试序号
测试用例选取原因
测试输入数据
测试输出结果
是否正确
结果分析
1
测试用例
是
无误
〔六〕)题目6
1、题目容描述
在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
17241815
23571416
46132022
101219213
11182529
2、程序源代码〔填写程序调试正确后的代码〕
#include
main()
{
inti,j,sum1,sum2;
intfind1=0,find2=0,m=0;//定义变量
inta[5][5];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);//输入5*5个数字
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d",a[i][j]);//输出矩阵
}
printf("\n");
for(sum1=0,i=0;i<=4;i++)//计算对角线元素和
sum1+=a[i][i];
for(sum2=0,i=0,j=4;i<=4;i++,j--)
sum2+=+a[i][j];//计算对角线元素和
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
printf("%d\t",a[i][j]);//打印魔方矩阵
printf("\n");
}
if(sum1!
=sum2)
{
printf("此矩阵不为魔方矩阵\n");//判断对角线和是否相等
m=1;
}
for(i=0;i<=4;i++)
for(j=0;j<=4;j++)
{
a[i][5]+=a[i][j];
a[5][j]+=a[i][j];//判断各行列和是否相等
}
if(m==0)
{
for(i=0;i<=4;i++)
{
if(a[i][5]!
=a[5][i]||a[i][5]!
=sum1)
{
printf("此矩阵不为魔方矩阵\n");
break;
}
}
if(i==5)
printf("此矩阵为魔方矩阵\n");
}
}
3、测试与结果分析
〔1〕、测试数据与结果
源文件名
可执行文件名
测试序号
测试用例选取原因
测试输入数据
测试输出结果
是否正确
结果分析
1
题目
是
无误
〔七)题目7
1、题目容描述
餐饮效劳质量调查打分
在商业和科学研究中,人们经常需要对数据进展分析并将结果以直方图的形式显示出
来。
例如,一个公司的主管可能需要了解一年来公司的营业状况,比拟一下各月份的销售收
入状况,如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图〔直方图〕
的形式表示,那么将会大大增加这些数据的直观性,也便于数据的分析与比照。
下面以顾客
对餐饮效劳打分为例,练习一下这方面的程序。
假设现在有40个学生被邀请来给自助餐厅的
食品和效劳质量打分,分数为从1~10的10个等级(1意味着最低分,10表示最高分),试统计调
查结果,并用‘*’打印出如下形式的统计结果直方图。
GradeCountHistogram
15*****
210**********
37*******
...
2、输入和输出信息描述及数据类型确定;
〔1〕、输入数据
序号
输入数据描述
数据类型
1
score[40],i,j,grade,count[11]
int
〔2〕输出数据
序号
输出数据描述
数据类型
1
grade,count[grade]
char
3、程序源代码〔填写程序调试正确后的代码〕
#include
intmain()
{
intscore[40],i,j,grade;
intcount[11]={0};//定义并初始化数组count【11】
for(i=0;i<40;i++)
{
printf("pleaseinputscore[%d]:
",i+1);
scanf("%d",&score[i]);//输入每个分数
switch(score[i])//统计每个分数的个数
{
case1:
count[1]++;break;//评分为1时,数组中count[1]加一
case2:
count[2]++;break;//评分为2时,数组中count[2]加二
case3:
count[3]++;break;
case4:
count[4]++;break;
case5:
count[5]++;break;
case6:
count[6]++;break;
case7:
count[7]++;break;
case8:
count[8]++;break;
case9:
count[9]++;break;
case10:
count[10]++;break;
default:
printf("Inputerror!
\n");//其余情况
}
}
printf("Grade\tCount\tHistogram\n");//输出表头
for(grade=1;grade<=10;grade++)//统计每个分数的个数
{
printf("%d\t%d\t",grade,count[grade]);//输出分数和每个分数的个数
for(j=0;j printf("%c",'*');//根据评分的个数输出*数 printf("\n"); } return0; } 4、测试与结果分析 〔1〕、测试数据与结果 测试序号 测试用例选取原因 测试输入数据 测试输出结果 是否正确 结果分析 1 测试用例 8个2,9个3,5个4,13个6,3个7,23,76 如以下图 是 无误 2 测试用例 2个1,4个2,3个3,1个4,5个5,6个6,5个7,2个8,6个9,3个10,78,0,22 如以下图 是 无误 〔八)题目8 1、题目容描述 由计算机随机生成一个各位相异的4位数字,由人来猜,每次提示: xAxB A前面的数字表示有几个数字猜对位置也对了 B前面的数字表示有几个数字猜对但位置不对 提示: 用数组a存计算机随机生成的4位数,用数组b存人猜的4位数,对a和b的一样位置的元素进展比拟,得到A前面的数字,对a和b的不同位置的元素进展比拟,得到B前面的数字。 2、输入和输出信息描述及数据类型确定; 〔1〕、输入数据 序号 输入数据描述 数据类型 1 a[4],b[4],m,n,i,j, int 〔2〕输出数据 序号 输出数据描述 数据类型 1 M,n int 3、程序源代码〔填写程序调试正确后的代码〕 #include #include #include intmain() { inti,j,m,n; inta[4],b[4]; m=0; n=0; srand(time(NULL));//产生随机数 if((a[0]! =a[1])&&(a[0]! =a[2])&&(a[0]! =a[3])&&(a[1]! =a[2])&&(a[1]! =a[3])&&(a[2]! =a[3])) { for(i=0;i<4;i++) { a[i]=rand()%10; printf("%d",a[i]);//输出不同的四个个位数 } printf("\n"); while(m! =4)//当m不等于4的时候循环 { printf("请输入你猜测的数字: \n"); for(j=0;j<4;j++) scanf("%d",&b[j]); printf("\n"); for(i=0;i<4;i++) { if(a[i]==b[i]) { m++;//位置和数字都对 } } for(i=0;i<4;i++) { for(j=0;j<4;j++) { if((a[i]==b[j])&&(i! =j))//位置不对但数字对 { n++; } } } printf("%dA%dB\n",m,n); } printf("你答对了! \n");//m=4时输出 } return0; } 3、测试与结果分析 〔1〕、测试数据与结果 源文件名 可执行文件名 测试序号 测试用例选取原因 测试输入数据 测试输出结果 是否正确 结果分析 1 测试用例 是 无误 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。 教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。 教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数组 实验 报告