C语言数组实验报告
实验名:数组
一、实验目的
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)n,a[n] int
(2)n
a[n] cons tint 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: expected
expression before '%' token|
scanf(“%d”,&n);是将%d两边的符号改为西文字符的引号scanf("%d",&n);
(1-2)main.c|6|warning: unused
variable 'a'
[-Wunused-variable]|
int a[n];
是将前面的n的输入去掉,把n改为具体数字
(5) main.c|6|warning: unused
variable 'a'
[-Wunused-variable]|
int a[M+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 int
(2)输出数据
序号输出数据描述数据类型
1 num[i] int
3、程序源代码(填写程序调试正确后的代码)
#include
int main( )
{
int num[5]={1,2,3,4,5}; /*定义num[5]*/
int i;
for(i=0;i<5;i++) /*下标应该是0到4*/ printf("%d",num[i]);
/*依次输出num[0]至num[4]*/
return 0;
}
4、程序调试
错误序号错误信息(列出出错语句以及出错
提示)
是否解决解决方法
1 格式不对是
2 main.c|5|error: unknown type
name 'inti'|
inti i;
是改为 int 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 整型指针变量
(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( )
{
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 int
(2)输出数据
序号输出数据描述数据类型
1 a[i] int
3、程序调试
错误序号错误信息(列出出错语句以及出错
提示)
是否
解决
解决方法
1 输出结果间无空格是在最后一个printf(“%d”的d后面加空格
4、测试与结果分析
、测试数据与结果
源文件名可执行文件
名
测试
序号
测试用例选取原
因
测试输入
数据
测试输出结果是否
正确
结果分析
1 测试用例 1 1
2 1
3 14
15 56 67
78 89 80
1 1
2 1
3 1
4 1
5 67
78 80 89
是无误
) 题目5
1、1983年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX 的鼻祖,C 语言的创始人
之一,图林大奖得主,Ken Thompson 上台的第一句话是:“我是一个程序员,在我的1040表上, 我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。”这个程序如下:
char s []={
‘\t’,
‘0’,
‘\n’,
‘}’,
‘;’,
‘\n’,
‘\n’,
‘/’,
‘*’,
‘\n’,
/* (213 lines deleted)*/
};
/*
* 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)*/
};
/*
* 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;
}
3、程序调试
错误序号错误信息(列出出错语句以及出错
提示)
是否
解决
解决方法
1 所有的引号和逗号格式不对是都改为西文字符
2 main.c|22|error: expected '=',
',', ';', 'asm' or
'__attribute__' before '{'
token|
是在main前加int
3 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]);//输出矩阵
}
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、题目内容描述
餐饮服务质量调查打分
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出
来。例如,一个公司的主管可能需要了解一年来公司的营业状况,比较一下各月份的销售收
入状况,如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,那么将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客
对餐饮服务打分为例,练习一下这方面的程序。假设现在有40个学生被邀请来给自助餐厅的
食品和服务质量打分,分数为从1~10的10个等级(1意味着最低分,10表示最高分),试统计调
查结果,并用‘*’打印出如下形式的统计结果直方图。
Grade Count Histogram
1 5 *****
2 10 **********
3 7 *******
...
2、输入和输出信息描述及数据类型确定;
、输入数据
序号输入数据描述数据类型
1 score[40],i,j,grade,count[11]int
(2)输出数据
序号输出数据描述数据类型
1 grade,count[grade]char
3、程序源代码(填写程序调试正确后的代码)
#include
int main()
{
int score[40],i,j,grade;
int count[11]={0}; //定义并初始化数组count【11】
for(i=0;i<40;i++)
{
printf("please input score[%d]:",i+1);
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"); //其余情况
}
}
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"); } return 0; } 4、测试与结果分析 、测试数据与结果 测试序号测试用例选取 原因 测试输入数据测试输出 结果 是否正确结果分析 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 a[4],b[4],m,n,i,j, int (2)输出数据 序号输出数据描述数据类型 1 M,n int 3、程序源代码(填写程序调试正确后的代码) #include #include #include int main() { int i,j,m,n; int a[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("%d A %d B\n",m,n); } printf("你答对了!\n"); //m=4时输出 } return 0; } 3、测试与结果分析 、测试数据与结果 源文件名可执行文件 名 测试 序号 测试用例选取原 因 测试输入 数据 测试输出结果是否 正确 结果分析 1 测试用例是无误 C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include<> main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.编写程序: (1) a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 (2)a=160,b=46,c=18,d=170, 编写求(a+b)/(b-c)*(c-d)的程序。 答案: (1) #include<> main() { int a,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } (2) #include<> main() { int a,b,c,d; float x; a=160; b=46; c=18; d=170; x=(a+b)/(b-c)*(c-d); printf("(a+b)/(b-c)*(c-d)=%f\n",x); } 3. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将0赋给c。(提示:用条件运算符) 答案: #include<> main() { int a,b,c; a=0; b=-10; c= (a>b) b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 2、(1) 编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7 a/c的商=3 游戏C语言实验报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】 嘉应学院计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015—2016学年第1学期 班级:计算机1505 指导老师:陈广明 设计题目:游戏2048 学生姓名(学号):第3组:钟瞻宇 目录 一、实验目的和要求 (1)使用C语言编写2048这款游戏。 (2)能够正常运行,拥有游戏界面。 (3)能正常进行游戏从开始到结束。? (4)用户操作方便。 二、实验环境、内容和方法 实验内容:1、游戏开始时随机产生两个数值为2/4的方格,其中一个方格置于4个角中的一个位置,另一个方格随机的置于其他位置,其他方格置于0。 2、每次按方向键(w,s,a,d)后,逐行计算移动后的方格值。每行移动的算法是:先将所有值为0的数移至行首。能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子。 3、每合并一次格子,将其值累计到游戏总分中。 4、一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值。 5、所有方格值不为0且上下、左右相邻的方格都不相等,则游戏结束。 6、2出现的概率为70%,4出现的概率为30%。 实验方法: 通过上机操作完成各内容。 实验环境: 实验用PC机一台,使用操作系统为Windows 7/ Windows 8/ Windows10,安装 vc++或v2008等编译软件 三、程序设计 Y 四、源代码 #include<> #include<> #include<> #include<> #define M 2048 void up(); n"); printf(" 玩家可以选择上(w)下(s)左(a)右(d)四个方向,若棋盘内的数字出现位移或合并,视为有效移动.\n"); printf(" 若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并.\n"); printf(" 合并所得的所有新生成数字想加即为该步的有效得分.\n"); printf(" 玩家选择的方向行或列前方有空格则出现位移.\n"); printf(" 每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4).\n"); printf(" 棋盘被数字填满,无法进行有效移动,判负,游戏结束.\n"); printf(" 棋盘上出现2048,判胜,游戏结束"); printf("\n\n\n"); printf(" \t\t\t按回车开始游戏.\n"); getchar(\n);C语言实验报告参考答案(原)
游戏C语言实验报告完整版
C语言实验报告(五-数组2)