C语言数组实验报告

发布时间:2020-10-30   来源:文档文库   
字号:
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. 实验名: 数组
一、 实验目的
1、掌握数组定义的规则。
2、掌握C语言数组的基本用法。
二、实验内容
题目 1
1、编写程序,测试下列数组的定义方式是否正确 (1 main( { int n; scanf(“%d”,&n; int a[n]; ……
} (2 main( { const int n=10; int a[n]; } (3 #include #define M 10 main( { int a[M]; } (4 main( { int a[2+2*4]; } (5 #include #define M 2 #define N 8 main( { int a[M+N]; } 通过这一实验,可以说明什么问题? 2、输入和输出信息描述及数据类型确定; 、输入数据 序号 输入数据描述
数据类型
1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. 1 2 3 4 5
n,a[n] n
a[n] a[M]a[10] a[2+2*4] a[M+N] int cons tint int int int int 解决方法
%d两边的符号改为西文字符的引号scanf("%d",&n; 将前面的n的输入去掉,把n改为具体数字
3、程序调试 错误序错误信息(列出出错语句以及出是否 错提示) 解决 1-1 main.c|5|error: expected
expression before '%' token| scanf(“%d”,&n; 1-2
main.c|6|warning: unused
variable 'a' [-Wunused-variable]| int a[n]; (5 main.c|6|warning: unused variable 'a' [-Wunused-variable]| int a[M+N]; 4、相关问题回答
通过这一实验,可以说明什么问题?
加上个scanf(“%d,&a[M+N]; 1、(2)(3)(4)(5)对,(1)错,(1)中a[n]的数组定义的【】里的常量表达式不能是变量。 2、一维数组定义的时候【】里的常量表达式包括常量和符号常量,但不能是变量。 题目 2 1、运行下面的C程序,根据运行结果,可以说明什么? main( { int num[5]={1,2,3,4,5}; inti i; for(i=0;i<5;i++ printf(“%d”,num[i];
} 2、输入和输出信息描述及数据类型确定; 、输入数据
序号 输入数据描述
1
num[5],i 2输出数据
序号 输出数据描述
数据类型 int 数据类型
int 1 num[i] 3、程序源代码(填写程序调试正确后的代码) #include int main( { int num[5]={1,2,3,4,5}; /*定义num[5]*/ int i; for(i=0;i<5;i++ /*下标应该是04*/ printf("%d",num[i]; /*依次输出num[0]num[4]*/ return 0; } 4、程序调试 错误错误信息(列出出错语句以及出错是否解决 解决方法 序号 提示)
1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. 1 2 格式不对
main.c|5|error: unknown type name 'inti'| inti i; main.c|7|error: expected expression before '%' token| printf(“%d”,num[i];
for(i=0;i<5;i++

改为 int i; 3 将引号改为西文字符
4 去掉等号
5、相关问题回答 运行结果:12345 根据运行结果,可以说明什么? 说明:数组元素的下标从0开始,比定义的时候会小一个。
题目 3
1、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个 3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。 2、输入和输出信息描述及数据类型确定; 、输入数据
序号 输入数据描述 1 a[3][5],i.j 2 adress 数据类型
int 整型指针变量
2输出数据
序号 输出数据描述 数据类型 1 adress int 3、程序源代码(填写程序调试正确后的代码) #include int main( { int a[3][5]; int *adress; //定义并初始化adress int i,j; for(i=0;i<3;i++ //每行循环 { printf("\n"; for(j=0;j<5;j++ //每列循环 { adress=&a[i][j]; //adress赋值为整型指针变量 printf("%d ",adress; } } return 0; } 4、测试与结果分析 、测试数据与结果 源文可执行文件测试测试用例选取原测试输入测试输出结果 件名 序号 数据
1 题目 4
为一个起泡排序程序设计测试用例,并测试之。 1、程序源代码(填写程序调试正确后的代码) #include int main( { 是否正确
结果分析 无误
1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. int a[10]; //定义一维数组a[10] int i,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"; return 0; } 2、输入和输出信息描述及数据类型确定; 、输入数据
序号 输入数据描述
1
a[10],i,j,k 2输出数据
序号 输出数据描述 1 a[i] 3、程序调试 错误错误信息(列出出错语句以及出错序号 提示) 1 输出结果间无空格 4、测试与结果分析 、测试数据与结果 源文可执行文件件名
是否解决
数据类型 int 数据类型
int 解决方法
在最后一个printf(%d”的d后面加空格
测试序号
1 测试用例选取原 测试用例
测试输入数据
测试输出结果
是否正确
结果分析


1 12 13 14 1 12 13 14 15 67 15 56 67 78 80 89 78 89 80 无误
题目 5
11983,ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX 的鼻祖,C 语言的创始人 之一,图林大奖得主,Ken Thompson 上台的第一句话是:“我是一个程序员,在我的1040表上, 我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一 个我曾经写过的最精练的程序。”这个程序如下: char s []={ \t’, 0’, \n’, }’, ;’, \n’,
1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. \n’, /’, *’, \n’,
/* (213 lines deleted*/ 0 }
/*
* The string is a * representation of the body * of this program from ‘0’ * to the end */ main( { int i; printf(“char \ts[]={\” };
for (i=0;s[i];i++ printf(“\t%d,\n”,s[i]; printf(“%s”,s;
} 请上机运行这个程序,指出它的功能和运行结果。 2程序源代码(填写程序调试正确后的代码) #include char s []={ '\t', '0', '\n', '}', ';', '\n', '\n', '/', '*', '\n', /* (213 lines deleted*/ 0 }; /* * The string is a * representation of the body * of this program from '0' * to the end */ int main( { int i; printf("char \ts[]={\n" ; for (i=0;s[i];i++ printf("\t%d,\n",s[i]; printf("%s",s; return 0; 1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. } 3程序调试 错误序号 1 2 错误信息(列出出错语句以及出错提示)
所有的引号和逗号格式不对
是否解决
解决方法 都改为西文字符 main前加int 3 main.c|22|error: expected '=',
',', ';', 'asm' or '__attribute__' before '{' token| main.c|23|warning: missing terminating " character [enabled by default]| printf("char \ts[]={\" }; 格式不完整

改为
printf("char \ts[]={\n" ; 4 加上include,return 0; 4、相关问题回答
请上机运行这个程序,指出它的功能和运行结果。 答:功能输出字符串的数值。 5、测试与结果分析 、测试数据与结果 源文可执行文件件名
测试序号
1 测试用例选取原 测试用例
测试输入数据
测试输出结果
是否正确
结果分析 无误


题目 6 1、题目内容描述
在下面的 5×5 魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中, 然后, 检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 2程序源代码(填写程序调试正确后的代码) #include main( {

int i,j,sum1,sum2; int find1=0,find2=0,m=0; //定义变量 int a[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] //输出矩阵
} 1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持.
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 题目



(七 题目 7 1、题目内容描述 餐饮服务质量调查打分
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出
1文档来源为:从网络收集整理.word版本可编辑. 结果分析 无误

文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. 来。例如,一个公司的主管可能需要了解一年来公司的营业状况,比较一下各月份的销售收 入状况, 如果仅给出一大堆数据, 这显然太不直观了, 如果能将这些数据以条形图 (直方图) 的形式表示,那么将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客 对餐饮服务打分为例, 练习一下这方面的程序。 假设现在有40个学生被邀请来给自助餐厅的 食品和服务质量打分,分数为从1~1010个等级(1意味着最低分,10表示最高分,试统计调 查结果,并用‘*’打印出如下形式的统计结果直方图。 Grade Count Histogram 1 5 ***** 2 10 ********** 3 7 ******* ... 2、输入和输出信息描述及数据类型确定; 、输入数据
序号 输入数据描述
1 score[40],i,j,gradecount[11]
2输出数据
序号 输出数据描述
1 grade,count[grade]
3程序源代码(填写程序调试正确后的代码) #include int main( {

int score[40],i,j,grade; int count[11]={0}; //定义并初始化数组count11 for(i=0;i<40;i++ { printf("please input score[%d]:",i+1;
} printf("Grade\tCount\tHistogram\n"; //输出表头 for(grade=1;grade<=10;grade++ {

printf("%d\t%d\t",grade,count[grade]; //输出分数和每个分数的个数
for(j=0;j
//统计每个分数的个数
scanf("%d",&score[i]; //输入每个分数 switch(score[i]
{ case 1:count[1]++; break; //评分为1时,数组中count[1]加一 case 2:count[2]++; break; //评分为2时,数组中count[2]加二 case 3:count[3]++; break; case 4:count[4]++; break; case 5:count[5]++; break; case 6:count[6]++; break; case 7:count[7]++; break; case 8:count[8]++; break; case 9:count[9]++; break; case 10:count[10]++; break; default:printf("Input error!\n"; //其余情况
}

//统计每个分数的个数
数据类型 int 数据类型
char 1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持.
} 4、测试与结果分析 、测试数据与结果 测试测试用例选取序号 原因 1 测试用例
2 测试用例
}
return 0;

printf("%c",'*'; //根据评分的个数输出*
printf("\n"; 测试输入数据
82,93,54,136,37,2376 2142,331如下图 4,55,66,57,28,6931078,0,22 测试输出结果 如下图
是否正确
结果分析 无误 无误
(八 题目 8 1、题目内容描述
由计算机随机生成一个各位相异的4位数字,由人来猜,每次提示:xAxB A前面的数字表示有几个数字猜对位置也对了 B前面的数字表示有几个数字猜对但位置不对
提示:用数组a存计算机随机生成的4位数,用数组b存人猜的4位数,对ab的相同位置的元素进行比较,得到A前面的数字,对ab的不同位置的元素进行比较,得到B前面的数字。 2、输入和输出信息描述及数据类型确定; 、输入数据
序号 输入数据描述 1 a[4],b[4],m,n,i,j, 2输出数据
序号 输出数据描述 1 M,n 3程序源代码(填写程序调试正确后的代码) #include #include #include int main( {

int i,j,m,n; int a[4],b[4]; 数据类型 int 数据类型
int 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"; 1文档来源为:从网络收集整理.word版本可编辑.
文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢迎下载支持. 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("%d A %d B\n",m,n; } printf("你答对了!\n"; //m=4时输出
}
return 0;
} 3、测试与结果分析 、测试数据与结果 源文可执行文件测试测试用例选取原测试输入测试输出结果件名
序号 数据

1 测试用例



1文档来源为:从网络收集整理.word版本可编辑. 是否结果分析 正确
无误


本文来源:https://www.2haoxitong.net/k/doc/371289332dc58bd63186bceb19e8b8f67d1cef23.html

《C语言数组实验报告.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式