实验四数组(二)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四
一、实验目的
1.掌握一维字符数组的定义及初始化。
2.掌握一维字符数组元素的引用及其应用。
3.掌握二维数组的定义和初始化。
4.掌握二维数组元素的引用及其应用。
二、实验内容
题目1:输入十个人的姓名,并按升序输出。(用选择法或者冒泡法排序)
问题
Strcpy函数是完全将后一个代替前一个么?
源代码
#include <stdio.h>
{
printf("A赢了!\n");
return 0;
}
do{
b=0;
printf("请B下子:");
scanf("%d%d",&m,&n);
system("cls");
b=printerB(m,n);
if(b==-99)
printf("对不起,您下错位置了!\n");
}
while(b==-99);
学号_班级_姓名_日期.docx
如:2013011296_软工1301_白雪_20141205.docx
4.报告上传邮箱
strcpy(a[j],a[i]);
strcpy(a[i],x);
}
for(i=0;i<10;i++)printf("\n%s",a[i]);
return 0;
}
程序流程图
实验结果
题目2:求两个矩阵的积。如:
运算规则为:
第i行第j列相乘得到结果矩阵中r[i][j]的值。比如:
r[0][0] = 1*1+2*5+3*8=35;
printf("input m and n:\n");
scanf("%d%d",&m,&n);
printf("请输入这个矩阵\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
for(sign=0,j=1;j<n;j++)
int basic[3][3]={0,0,0,0,0,0,0,0,0};
int tasic[3][3]={0,0,0,0,0,0,0,0,0};
char T[3][3];
int printerA(int site1,intsite2){
if(tasic[site1][site2]==0&&basic[site1][site2]==0){
3.接下来的m*n个数是第一个矩阵中的数。
4.再接下来的n*p个数是第二个矩阵中的数。
5.输出计算结果,为一个m行,p列的矩阵。
问题
无
源代码
# include<stdio.h>
int main()
{
int a[100][100]={0};
int b[100][100]= {0};
int c[100][100]= {0};
//output
for(i = 0;i < x;i++)
{
for(j = 0;j < z;j++)
printf("%d\t",c[i][j]);
printf("\n");
}
return 0;
}
程序流程图【必须有】
实验结果
题目3:求矩阵的鞍点。鞍点位置上的元素在该行中值最大,在该列中值最小。如下面矩阵的鞍点为35。
程序大致的执行过程如图所示:
功能包括:
1.允许两个玩家下棋
2.允许玩家输入下棋的坐标
3.显示当前棋盘状态
4.判断玩家是否下错位置,即在已经下过棋的位置再次下棋
5.判断玩家下棋后,输赢状态
6.在屏幕提示中指导玩家交替下棋
源代码
#include<stdio.h>
#include<stdlib.h>
int c,i,j,kongzhi=1,i=1;
}
}
return 0;
}
else
return -99;
}
int main(){
int m,n,a,b;
while(kongzhi==1){
do{
a=0;
printf("请A下子:");
scanf("%d%d",&m,&n);
system("cls");
a=printerA(m,n);
if(a==99)
printf("对不起,您下错位置了!\n");
}
while(a==99);
if((basic[0][0]+basic[0][1]+basic[0][2]==3)||(basic[1][0]+basic[1][1]+basic[1][2]==3)||(basic[2][0]+basic[2][1]+basic[2][2]==3)||(basic[0][0]+basic[1][1]+basic[2][2]==3)||(basic[0][2]+basic[1][1]+basic[2][0]==3))
【输入】前两个数为行数和列数,其后是矩阵中的元素
【输出】如果没有鞍点,输出NO;如果有输出格式为:[值1,行下标1,列下标1],[值2,行下标2,列下标2]……
问题
下标的输出转换。
源代码
#include <stdio.h>
int main()
{
int a[100][100];
int m,n,i,j,sign;
if((tasic[0][0]+tasic[0][1]+tasic[0][2]==-3)||(tasic[1][0]+tasic[1][1]+tasic[1][2]==-3)||(tasic[2][0]+tasic[2][1]+tasic[2][2]==-3)||(tasic[0][0]+tasic[1][1]+tasic[2][2]==-3)||(tasic[0][2]+tasic[1][1]+tasic[2][0]==-3))
printf("-------\n");
}
}
return 0;
}
else
return 99;
}
int printerB(int site1,int site2){
if(tasic[site1][site2]==0&&basic[site1][site2]==0){
tasic[site1][site2]=-1;
2.Strcpy函数若前一个字符串长后一个短,执行完后前一个字符串并不为后一个字符串,即\0后还有字符。
三、实验要求
1.利用F10进行循环结构的单步跟踪练习
2.实验报告内容
2.1.实验内容及结果
问题
源代码
程序流程图【必须有】
实验结果
2.2.实验心得体会
本次实验的收获是什么
遇到了哪些问题,如何解决的
3.报告命名
{
for(j=0;j<y;j++)
scanf("%d",&a[i][j]);
printf("\n");
}
printf("请输入矩阵b的行数:");
scanf("%d",&y);
printf("请输入矩阵b的列数:");
scanf("%d",&z);
printf("请输入矩阵b,元素之间用Tab隔开:\n");
for(i=0;i<y;i++)
{
for(j=0;j<z;j++)
scanf("%d",&b[iБайду номын сангаас[j]);
printf("\n");
}
//jisuan
for(i=0;i<x;i++)
for(j=0;j<z;j++)
for(k=0;k<y;k++)
c[i][j] += a[i][k]*b[k][j];
if(a[i][sign]<a[i][j])
sign=j;
for(j=0;j<m;j++)
if(a[i][sign]>a[j][sign])
break;
if(j>=m)
printf("鞍点是:%d\n",a[i][sign]);
}
return 0;
}
程序流程图【必须有】
实验结果
题目4:井字格游戏
本题目可替代题目1~3作为实验内容。
int i = 0,j = 0,k=0;
int n = 0;
int x=0,y=0,z=0;
printf("请输入矩阵a的行数:");
scanf("%d",&x);
printf("请输入矩阵a的列数:");
scanf("%d",&y);
printf("请输入矩阵a,元素之间用Tab隔开:\n");
for(i=0;i<x;i++)
r[0][1] = 1*5+2*3+3*1=14;
r[1][0] =4*1+5*5+6*8=77;
r[1][1] = 4*5+5*3+6*1=41;
要求:
1.数组的行数和列数不超过100。
2.输入第一行中,第一个正整数m,表示第一个矩阵的行数,输入第二个正整数n,表示第一个矩阵的列数,也即是第二个矩阵的行数,输入第三个正整数p,表示第二个矩阵的列数。
{
printf("B赢了!\n");
return 0;
}
i++;
if(i==9){
printf("平局!");
return 0;
}
}
}
程序流程图【必须有】
实验结果
2.2.实验心得体会
本次实验的收获是什么
了解strcpy函数和strcmp函数。
二维数组的赋值与输入输出。
遇到了哪些问题,如何解决的
1.矩阵相乘;解决,找到行与列还有两个矩阵中列和行相等的关系
basic[site1][site2]=1;
T[site1][site2]='X';
for(i=0;i<3;i++){
printf("-------\n");
for(j=0;j<3;j++){
printf("|");
printf("%c",T[i][j]);
}
printf("|\n");
if(i==2){
T[site1][site2]='O';
for(i=0;i<3;i++){
printf("-------\n");
for(j=0;j<3;j++){
printf("|");
printf("%c",T[i][j]);
}
printf("|\n");
if(i==2){
printf("-------\n");
#include <string.h>
int main()
{
char a[10][80],x[80];
int i,j;
for(i=0;i<10;i++)
gets(a[i]);
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(strcmp(a[i],a[j])>0)
{
strcpy(x,a[j]);
一、实验目的
1.掌握一维字符数组的定义及初始化。
2.掌握一维字符数组元素的引用及其应用。
3.掌握二维数组的定义和初始化。
4.掌握二维数组元素的引用及其应用。
二、实验内容
题目1:输入十个人的姓名,并按升序输出。(用选择法或者冒泡法排序)
问题
Strcpy函数是完全将后一个代替前一个么?
源代码
#include <stdio.h>
{
printf("A赢了!\n");
return 0;
}
do{
b=0;
printf("请B下子:");
scanf("%d%d",&m,&n);
system("cls");
b=printerB(m,n);
if(b==-99)
printf("对不起,您下错位置了!\n");
}
while(b==-99);
学号_班级_姓名_日期.docx
如:2013011296_软工1301_白雪_20141205.docx
4.报告上传邮箱
strcpy(a[j],a[i]);
strcpy(a[i],x);
}
for(i=0;i<10;i++)printf("\n%s",a[i]);
return 0;
}
程序流程图
实验结果
题目2:求两个矩阵的积。如:
运算规则为:
第i行第j列相乘得到结果矩阵中r[i][j]的值。比如:
r[0][0] = 1*1+2*5+3*8=35;
printf("input m and n:\n");
scanf("%d%d",&m,&n);
printf("请输入这个矩阵\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
for(sign=0,j=1;j<n;j++)
int basic[3][3]={0,0,0,0,0,0,0,0,0};
int tasic[3][3]={0,0,0,0,0,0,0,0,0};
char T[3][3];
int printerA(int site1,intsite2){
if(tasic[site1][site2]==0&&basic[site1][site2]==0){
3.接下来的m*n个数是第一个矩阵中的数。
4.再接下来的n*p个数是第二个矩阵中的数。
5.输出计算结果,为一个m行,p列的矩阵。
问题
无
源代码
# include<stdio.h>
int main()
{
int a[100][100]={0};
int b[100][100]= {0};
int c[100][100]= {0};
//output
for(i = 0;i < x;i++)
{
for(j = 0;j < z;j++)
printf("%d\t",c[i][j]);
printf("\n");
}
return 0;
}
程序流程图【必须有】
实验结果
题目3:求矩阵的鞍点。鞍点位置上的元素在该行中值最大,在该列中值最小。如下面矩阵的鞍点为35。
程序大致的执行过程如图所示:
功能包括:
1.允许两个玩家下棋
2.允许玩家输入下棋的坐标
3.显示当前棋盘状态
4.判断玩家是否下错位置,即在已经下过棋的位置再次下棋
5.判断玩家下棋后,输赢状态
6.在屏幕提示中指导玩家交替下棋
源代码
#include<stdio.h>
#include<stdlib.h>
int c,i,j,kongzhi=1,i=1;
}
}
return 0;
}
else
return -99;
}
int main(){
int m,n,a,b;
while(kongzhi==1){
do{
a=0;
printf("请A下子:");
scanf("%d%d",&m,&n);
system("cls");
a=printerA(m,n);
if(a==99)
printf("对不起,您下错位置了!\n");
}
while(a==99);
if((basic[0][0]+basic[0][1]+basic[0][2]==3)||(basic[1][0]+basic[1][1]+basic[1][2]==3)||(basic[2][0]+basic[2][1]+basic[2][2]==3)||(basic[0][0]+basic[1][1]+basic[2][2]==3)||(basic[0][2]+basic[1][1]+basic[2][0]==3))
【输入】前两个数为行数和列数,其后是矩阵中的元素
【输出】如果没有鞍点,输出NO;如果有输出格式为:[值1,行下标1,列下标1],[值2,行下标2,列下标2]……
问题
下标的输出转换。
源代码
#include <stdio.h>
int main()
{
int a[100][100];
int m,n,i,j,sign;
if((tasic[0][0]+tasic[0][1]+tasic[0][2]==-3)||(tasic[1][0]+tasic[1][1]+tasic[1][2]==-3)||(tasic[2][0]+tasic[2][1]+tasic[2][2]==-3)||(tasic[0][0]+tasic[1][1]+tasic[2][2]==-3)||(tasic[0][2]+tasic[1][1]+tasic[2][0]==-3))
printf("-------\n");
}
}
return 0;
}
else
return 99;
}
int printerB(int site1,int site2){
if(tasic[site1][site2]==0&&basic[site1][site2]==0){
tasic[site1][site2]=-1;
2.Strcpy函数若前一个字符串长后一个短,执行完后前一个字符串并不为后一个字符串,即\0后还有字符。
三、实验要求
1.利用F10进行循环结构的单步跟踪练习
2.实验报告内容
2.1.实验内容及结果
问题
源代码
程序流程图【必须有】
实验结果
2.2.实验心得体会
本次实验的收获是什么
遇到了哪些问题,如何解决的
3.报告命名
{
for(j=0;j<y;j++)
scanf("%d",&a[i][j]);
printf("\n");
}
printf("请输入矩阵b的行数:");
scanf("%d",&y);
printf("请输入矩阵b的列数:");
scanf("%d",&z);
printf("请输入矩阵b,元素之间用Tab隔开:\n");
for(i=0;i<y;i++)
{
for(j=0;j<z;j++)
scanf("%d",&b[iБайду номын сангаас[j]);
printf("\n");
}
//jisuan
for(i=0;i<x;i++)
for(j=0;j<z;j++)
for(k=0;k<y;k++)
c[i][j] += a[i][k]*b[k][j];
if(a[i][sign]<a[i][j])
sign=j;
for(j=0;j<m;j++)
if(a[i][sign]>a[j][sign])
break;
if(j>=m)
printf("鞍点是:%d\n",a[i][sign]);
}
return 0;
}
程序流程图【必须有】
实验结果
题目4:井字格游戏
本题目可替代题目1~3作为实验内容。
int i = 0,j = 0,k=0;
int n = 0;
int x=0,y=0,z=0;
printf("请输入矩阵a的行数:");
scanf("%d",&x);
printf("请输入矩阵a的列数:");
scanf("%d",&y);
printf("请输入矩阵a,元素之间用Tab隔开:\n");
for(i=0;i<x;i++)
r[0][1] = 1*5+2*3+3*1=14;
r[1][0] =4*1+5*5+6*8=77;
r[1][1] = 4*5+5*3+6*1=41;
要求:
1.数组的行数和列数不超过100。
2.输入第一行中,第一个正整数m,表示第一个矩阵的行数,输入第二个正整数n,表示第一个矩阵的列数,也即是第二个矩阵的行数,输入第三个正整数p,表示第二个矩阵的列数。
{
printf("B赢了!\n");
return 0;
}
i++;
if(i==9){
printf("平局!");
return 0;
}
}
}
程序流程图【必须有】
实验结果
2.2.实验心得体会
本次实验的收获是什么
了解strcpy函数和strcmp函数。
二维数组的赋值与输入输出。
遇到了哪些问题,如何解决的
1.矩阵相乘;解决,找到行与列还有两个矩阵中列和行相等的关系
basic[site1][site2]=1;
T[site1][site2]='X';
for(i=0;i<3;i++){
printf("-------\n");
for(j=0;j<3;j++){
printf("|");
printf("%c",T[i][j]);
}
printf("|\n");
if(i==2){
T[site1][site2]='O';
for(i=0;i<3;i++){
printf("-------\n");
for(j=0;j<3;j++){
printf("|");
printf("%c",T[i][j]);
}
printf("|\n");
if(i==2){
printf("-------\n");
#include <string.h>
int main()
{
char a[10][80],x[80];
int i,j;
for(i=0;i<10;i++)
gets(a[i]);
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(strcmp(a[i],a[j])>0)
{
strcpy(x,a[j]);