实验名: 数组
一、 实验目的
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
(4) main() {
int a[2+2*4]; }
(5) #include
通过这一实验,可以说明什么问题?
1
2、输入和输出信息描述及数据类型确定; (1)、输入数据 序号 输入数据描述 (1) n,a[n] (2) (3) (4) (5)
n a[n] a[M]或a[10] a[2+2*4] a[M+N]
数据类型 int cons tint int int int int
3、程序调试 错误序错误信息(列出出错语句以及出号 错提示)
是否
解决
解决方法
将%d两边的符号改为西文字符的引号scanf(\
将前面的n的输入去掉,把n改为具体数字
(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)、输入数据
序号 输入数据描述 1 num[5],i
(2)输出数据
序号 输出数据描述 1 num[i]
3、程序源代码(填写程序调试正确后的代码) #include
2
数据类型 int 数据类型 int
{
int num[5]={1,2,3,4,5}; /*定义num[5]*/ int i;
for(i=0;i<5;i++) /*下标应该是0到4*/ printf(\
/*依次输出num[0]至num[4]*/
return 0; }
4、程序调试 错误错误信息(列出出错语句以及出错序号 提示) 1 2
格式不对
main.c|5|error: unknown type name 'inti'| inti i;
3
main.c|7|error: expected
expression before '%' token| printf(“%d”,num[i]);
4
for(i=0;i<5;i++)
是
去掉等号
是
将引号改为西文字符
是否解决 解决方法 是 是
改为 int i;
5、相关问题回答 运行结果:12345
根据运行结果,可以说明什么?
说明:数组元素的下标从0开始,比定义的时候会小一个。
(三)) 题目 3
1、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个 3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。 2、输入和输出信息描述及数据类型确定; (1)、输入数据
序号 输入数据描述 1 2
(2)输出数据
序号 输出数据描述 1 adress
数据类型
int
a[3][5],i.j adress
数据类型 int
整型指针变量
3、程序源代码(填写程序调试正确后的代码) #include
int a[3][5]; int *adress; //定义并初始化adress int i,j; for(i=0;i<3;i++) //每行循环 { printf(\ for(j=0;j<5;j++) //每列循环 { adress=&a[i][j]; //将adress赋值为整型指针变量 printf(\
3