
初始化时:ch[0] = { '6','9','3',0, 0 } ; ch[1] = { '8','2','5',0, 0 } ;
i的循环是i=0,i= 1 j的循环只有j=0
i = 0 , j = 0 : s=ch[0][0] - '0' = '6' - '0' = 6
i = 1 , j = 0 : s=s 10+ ch[1][0] - '0' = 6 10 + '8' - '0' = 60 + 8 = 68
所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。
struct 结构体类型名{类型名 成员名;类型名 成员名;……},先声明结构体类型,再定义结构体变量名。声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。
扩展资料:
结构体数组指针类型:
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址,指针变量也可以用来指向结构体数组中的元素。
1、类型一:
指向结构体变量的指针引用结构体变量中的成员。
2、类型二:
用结构体变量和指向结构体变量的指针构成链表,链表是一种常见的重要的数据结构。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。
链表中的每一个元素称为“结点”,每个结点都应包括两个部分:
一是用户需要用的实际数据,
二是下一个结点的地址。
链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。这种链表的数据结构,必须利用结构体变量和指针才能实现。
可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。
参考资料来源:百度百科—结构体类型—数组
#include <stdioh>
void input_data(int l,int r,int data[100][100])
{ int i,j,k;
printf("输入矩阵行数:");
scanf("%d",l);
printf("输入矩阵列数:");
scanf("%d",r);
printf("按行输入数据,数据间用空格间隔:\n");
for(i=0;i<l;i++)
for(j=0;j<r;j++)
scanf("%d",&data[i][j]);
}
int add_subtra(int m1[100][100],int l1,int r1,
int m2[100][100],int l2,int r2,char m,int rm[100][100])
{ int i,j;
if(l1!=l2 || r1!=r2)
{ printf("矩阵数据错误1\n"); return; }
if(m=='+')
for(i=0;i<l1;i++)
for(j=0;j<r1;j++)
rm[i][j]=m1[i][j]+m2[i][j];
else
for(i=0;i<l1;i++)
for(j=0;j<r1;j++)
rm[i][j]=m1[i][j]-m2[i][j];
}
int mul(int m1[100][100],int l1,int r1,
int m2[100][100],int l2,int r2,int m[100][100])
{ int i,j,k;
if(l1!=r2 )
{ printf("矩阵数据错误2\n"); return; }
for(i=0;i<l1;i++)
for(j=0;j<r2;j++)
{ m[i][j]=0;
for(k=0;k<r1;k++)
m[i][j]+=m1[i][k]m2[k][j];
}
}
int output(int m[100][100],int l,int r)
{ int i,j;
for(i=0;i<l;i++)
{ for(j=0;j<r;j++)
printf("%3d ",m[i][j]);
printf("\n");
}
}
int main()
{ int d1[100][100],d2[100][100],d[100][100];
int l1,r1,l2,r2;
int i,j,k;
char mark[2];
printf("输入第一个矩阵数据:\n");
input_data(&l1,&r1,d1);
printf("输入的第一个矩阵:\n");
output(d1,l1,r1);
printf("输入第二个矩阵数据:\n");
input_data(&l2,&r2,d2);
printf("输入的第二个矩阵:\n");
output(d2,l2,r2);
printf("指定运算符(+/-/):");
scanf("%s",mark);
while(mark[0]!='+' && mark[0]!='-' && mark[0]!='')
{ printf("符号错误请重新输入(+/-/):");
scanf("%s",mark);
}
switch(mark[0])
{ case '+':
case '-': add_subtra(d1,l1,r1,d2,l2,r2,mark[0],d); break;
case '': mul(d1,l1,r1,d2,l2,r2,d); break;
}
//output(d1,l1,r1);
//output(d2,l2,r2);
printf("运算:%c,计算结果为:\n",mark[0]);
output(d,l1,r2);
system("pause");
}
两个运算矩阵可以是大小不同的, 输出结果由被乘数矩阵的行和乘数矩阵的列决定,
你要求的输出格式比较烦,没时间不够啦!有时间再玩吧。
#include<stdioh>
main ()
{
int i,j,k;
int n[8]={1,2,5,8,9,13,22};
printf("请输入需要插入的整数:\n");
scanf("%d",&k);
if(k>n[6])
n[7]=k;
else
{
for(i=0;n[i]<=k;i++);
for(j=7-1;j>=i;j--)
n[j+1]=n[j];
n[i]=k;}
for(i=0;i<=7;i++)
printf("%6d",n[i]);
}
#include<stdioh>
main(){
int a[10]={0,1,2,3,4,5,6,7,8,9};
int i;
for(i=0;i<10;i++){
printf("%4d",a[i]);
}
printf("\n");
}
#include <stdioh>
#define M 10
#define N 10
void merge(int a[],int b[],int c[],int m, int n)
{
int i,j,k;
i=0;
j=0;
k=0;
while(i<m&&j<n)
if(a[i]<=b[j])
c[k++]=a[i++];
else c[k++]=b[j++];
while (i<m)
c[k++]=a[i++];
while (j<n)
c[k++]=b[j++];
}
void main()
{
int a[M],b[N],c[M+N];
int i;
printf("输入递增数组a\n");
for(i=0;i<M;i++)
{
printf("第%d个:",i+1);
scanf("%d",&a[i]);
}
printf("\n输入递增数组b\n");
for(i=0;i<N;i++)
{
printf("第%d个:",i+1);
scanf("%d",&b[i]);
}
merge(a,b,c,M,N);
printf("\n\n合并后的数组是:\n");
for(i=0;i<M+N;i++)
printf("%d ",c[i]);
}
运行的一个示例:
输入递增数组a
第1个:4
第2个:8
第3个:9
第4个:78
第5个:90
第6个:91
第7个:92
第8个:93
第9个:94
第10个:95
输入递增数组b
第1个:1
第2个:2
第3个:4
第4个:5
第5个:6
第6个:10
第7个:11
第8个:12
第9个:13
第10个:14
合并后的数组是:
1 2 4 4 5 6 8 9 10 11 12 13 14 78 90 91 92 93 94 95 Press any key to continue
以上就是关于C语言 数组 怎么做希望有具体过程
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)