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