,.
实验名: 数组
一、 实验目的
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
int a[M];
}
(4) main() {
int a[2+2*4];
}
(5) #include
}
通过这一实验 , 可以说明什么问题 ?
; .
,.
2、输入和输出信息描述及数据类型确定; (1)、输入数据
序号 (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
3、程序调试 错误序号
错误信息(列出出错语句以及出错提示)
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];
是否 解决 是
解决方法
将%d两边的符号改为西文字符的引号scanf(\
(1-1 ) main.c|5|error: expected
是
将前面的 n的输入去掉,把 n改为具体数字
是
加上个scanf( “ %d”,&a[M+N]);
4、相关问题回答
通过这一实验 , 可以说明什么问题 ?
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 出数据 序号 1
输出数据描述 num[i]
数据类型 int 数据类型 int
3、程序源代码(填写程序调试正确后的代码) #include
; .
{
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 是
改为 int i;
name 'inti'| inti i;
3 main.c|7|error: expected 是
将引号改为西文字符
expression before '%' token| printf( “%d”,num[i]);
4
for(i=0;i<5;i++)
是
去掉等号
5、相关问题回答运行结果: 12345
根据运行结果 , 可以说明什么 ?
说明:数组元素的下标从 0开始,比定义的时候会小一个。
(三)) 题目 3
1、操作符 &用以求一个变量的地址,这在函数 scanf 中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址 , 并由此说明二维数组中各元素是按什么顺序存诸的。
2、输入和输出信息描述及数据类型确定;
输入数据
序号 输入数据描述 数据类型 1 a[3][5],i.j int
2
adress 整型指针变量
出数据
序号 输出数据描述 数据类型 1
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(\
; .
,.
,.
} } return 0; }
4、测试与结果分析 (1)、测试数据与结果 源文 件名
可执行文件 名
测试 序号 1
测试用例选取原 因 无
测试输入 数据 无
测试输出结果
是否 正确 是
结果分析
无误
(四)) 题目 4
为一个起泡排序程序设计测试用例,并测试之。1、程序源代码(填写程序调试正确后的代码) #include
int a[10]; int i,j,k; printf(\
//
请输入 10个数字 :\\n\
//
// // // //
//
定义一维数组 a[10]
for(i=0;i<=9;i++) scanf(\ printf(\for(j=0;j<9;j++) for(i=0;i<9-j;i++) 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(\printf(\return 0; }
依次输入数组的数字 换行
进行 9次循环,实现 9趟比较 在每一趟中进行 9-j 次比较 相邻两数比较
若后一个比前一个大,则交换位置
2、输入和输出信息描述及数据类型确定;
输入数据 序号 1
输入数据描述 a[10],i,j,k 出数据 序号
输出数据描述
数据类型 数据类型 int
; .
,.
1 a[i] int
3、程序调试 错误 序号 1
错误信息(列出出错语句以及出错 提示)
输出结果间无空格
是否 解决是
在最后一个 printf(
“ %d”的 d后面加空格
解决方法
4、测试与结果分析
(1)、测试数据与结果
源文 可执行文件 测试 测试用例选取原 测试输入 测试输出结果
是否 件名 名
序号 因 数据 正确 1
测试用例
1 12 13 14 1 12 13 14 15 67 是
15 56 67
78 80 89
78 89 80
(五)) 题目 5
1、1983年, 在ACM图林奖颁奖大会上 , 杰出的计算机科学家 ,UNIX 的鼻祖 ,C 语言的创始人 之一, 图林大奖得主 ,Ken Thompson 上台的第一句话是 : “我是一个程序员 , 在我的 1040表上 , 我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。”这个程序如下: 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 */ main( ) { int i;
printf( “char
” };
; .
结果分析
无误