c数组存储数据
Ⅰ C语言如何定义一个数组存放字符和数字
1、首先,编写头文件以及main函数主框架。

注意事项:
尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
Ⅱ C语言数组储存量
c[3]是可以存储3个字符的,c[n]就是存储n个字符,n是int
整形常量.
对于,以上你提出的问题,定义一个字符数组
c[3],的确,他只可以储存三个字符,分别储存在c[0],c[1],c[2],但是,在c/c++中并没有检查数组是否越界或者是超界的功能,所以,在scanf(),语句中,我们输入的字符,c/c++是没有检查,所以,理论上我们只能输入两个字符,最后一个留给系统自动添加的\0,
但是,实际上,我们输入的字符.qwe是可以正确运行的,最后,系统也会自动添加\0,但是,添加的\0,就可能在数组定义之外了,可能就是系统在定义数组的之后,对于我们输入的其他字符也相应在数组定义之后的一连串空间中继续添加,所以,可以输入大于3的字符都可以正常输出,但是,会报错!错误是数组的访问越界了吧!以上纯属个人理解,仅供参考!希望对你有帮助!^_^.
Ⅲ C语言 数组用来表示什么样的数据
数组能表示很多东西,而且用来做存储很方便
他跟单一变量的定义很相似
如int
a[20],就是整型数组
他能存储20组数据
每组的的大小为
该数组里的数字多少乘2
float
a[20],就是单精底数组
大小计算和上述相同
char
a[20],就是字符数组
需要注意的是
他们的地址是从a[0]到a[19]而不是a[1]~a[20]
在计算机里
如果你存储超过了a[19],有时候计算机不会提示有错误
但是这样做很危险!
你找本书看看建议
希望对你有帮助
Ⅳ C语言中,如何把几个数组的值保存到一个数组里
这个问题不难!这个很简单嘛。不过建议不要用数组,数组的话,太大浪费,太小会越界。可以用vector容器。
你首先自己写个判断水仙花数的函数先,这里我假设就是boolhanshu(int);
再定义一个足够大的数组.例如inta[1000];intn=0;//这个n用来表示数组下标的
for(inti=1;i<100000;i++)//这个范围你自己定义。
{
if(hanshu(i))
{
a[n++]=i;//将水仙花数保存在数组中
}
}
这样就ok了,然后水仙花数就保存在a数组中了
Ⅳ C语言用数组存储大型数据的算法
/*
size_a,pa——指向数组a的有效末端
ma——a的最大容量,必须大于na
n=12——求n的阶
p——求阶乘时的当前乘数
*/
#include<stdio.h>
#define Ma 10000
int pa;/*指向数组a的有效末端*/
int p=2;
int memory_over=0;
union data
{ unsigned long int b;
struct
{unsigned l:16;
unsigned h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
算法说明1:考虑到result比较长,我用a[Ma].b来存储n!的result,每一位a[pa].b能存储4位10进制数字。
因为我定义的数组是静态的,所以Ma应该足够大。
ps:其实只用定义一个unsigned long int b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考虑到可能会访问每一结点b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考虑是多余的!!不用像我这样定义这么复杂的共用体!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned int cashe;
unsigned int carry;
void main()
{
unsigned int n;/*求n的阶*/
void facto(unsigned int n);
printf("Input n:");
scanf("%u",&n);
/*=================开始求阶乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
算法说明2:上面这句直接调用facto(n)来求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是显示最后结果====================================*/
if(memory_over==0)
{printf("the result include %dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
算法说明2:求阶函数facto(n)说明:
这个函数会不断地调用multiple(),它的作用是每被调用一次就使得a[pa].b与阶数p相乘一次,直到乘完n为止!
{multiple();
p++;/*每一轮乘一个阶数p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void facto(unsigned int n)
{void multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一轮乘一个阶数p*/
}
if(p<=n)
{printf("memory out!\n");memory_over=1;}/*如果当前的存储结果的数组a[Ma]不够用!应提高Ma*/
}
/*==============================================================================
算法说明3:乘法函数multiple()说明:负责a[pa].b与阶数p相乘。
a[pa].b有很多结点,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
当然是从低结点a[0].b开始不断与p相乘,产生的“进位”加到高位a[1].b,直到a[pa].b*p为止!
随着结果数值增大,pa个结点的a[].b可能容纳不下结果,所以如果a[pa].b与p相乘后还有“进位”carry,就扩大pa,并把carry放入到新增加的结点:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void multiple()
{int i=0;
carry=0;
while(i<=pa)/*i指向当前处理的元素a[i],每一轮用一个位与阶数p相乘*/
{a[i].b=a[i].b*p+carry;/*计算结果,要考虑来自低位的进位*/
carry=a[i].b/10000;/*计算进位*/
a[i].b=a[i].b%10000;/*计算余数*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}
Ⅵ C语言数组中如何存放混合数据
还是用字符串去存,只是在判断数字的时候,做一个转换,比如将char类型的6,转成数字6,根据ANSCII编码,减去或者加上一个固定值就可以了。
Ⅶ C语言用数组存储大型数据的算法
/*
size_a,pa——指向数组a的有效末端
ma——a的最大容量,必须大于na
n=12——求n的阶
p——求阶乘时的当前乘数
*/
#include
#define
Ma
10000
int
pa;/*指向数组a的有效末端*/
int
p=2;
int
memory_over=0;
union
data
{
unsigned
long
int
b;
struct
{unsigned
l:16;
unsigned
h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
算法说明1:考虑到result比较长,我用a[Ma].b来存储n!的result,每一位a[pa].b能存储4位10进制数字。
因为我定义的数组是静态的,所以Ma应该足够大。
ps:其实只用定义一个unsigned
long
int
b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考虑到可能会访问每一结点b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考虑是多余的!!不用像我这样定义这么复杂的共用体!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned
int
cashe;
unsigned
int
carry;
void
main()
{
unsigned
int
n;/*求n的阶*/
void
facto(unsigned
int
n);
printf("Input
n:");
scanf("%u",&n);
/*=================开始求阶乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
算法说明2:上面这句直接调用facto(n)来求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是显示最后结果====================================*/
if(memory_over==0)
{printf("the
result
include
%dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
算法说明2:求阶函数facto(n)说明:
这个函数会不断地调用multiple(),它的作用是每被调用一次就使得a[pa].b与阶数p相乘一次,直到乘完n为止!
{multiple();
p++;/*每一轮乘一个阶数p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void
facto(unsigned
int
n)
{void
multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一轮乘一个阶数p*/
}
if(p<=n)
{printf("memory
out!\n");memory_over=1;}/*如果当前的存储结果的数组a[Ma]不够用!应提高Ma*/
}
/*==============================================================================
算法说明3:乘法函数multiple()说明:负责a[pa].b与阶数p相乘。
a[pa].b有很多结点,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
当然是从低结点a[0].b开始不断与p相乘,产生的“进位”加到高位a[1].b,直到a[pa].b*p为止!
随着结果数值增大,pa个结点的a[].b可能容纳不下结果,所以如果a[pa].b与p相乘后还有“进位”carry,就扩大pa,并把carry放入到新增加的结点:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void
multiple()
{int
i=0;
carry=0;
while(i<=pa)/*i指向当前处理的元素a[i],每一轮用一个位与阶数p相乘*/
{a[i].b=a[i].b*p+carry;/*计算结果,要考虑来自低位的进位*/
carry=a[i].b/10000;/*计算进位*/
a[i].b=a[i].b%10000;/*计算余数*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}
Ⅷ 在C语言中,数组就一组数据,不能用来存放用户数据。()
显然是错的啊,C语言的数据非常灵活
数组就是一块内存,可以定义成任何形式的数据。
例如malloc分配的内存通常都可以用数组表示
Ⅸ C语言用数组存储大型数据的算法
楼主一定懂c++吧?c++标准库里面有一个模板类叫
bitset<>
专门用来做位操作的。
你的问题用这个可以高效的解决,建立一个足够大的空间,比如8000个位
bitset<8000>
然后就简单了,乘法函数把乘数转化成bitset<32>类型的对象(用乘数直接初始化代表乘数的bitset<32>对象)然后用位运算符把被乘数(那个bitset<8000>类型的对象)按位右移,(一个10进制数右移一次相当于乘10,一个2进制数右移一次相当于乘2;乘数中,二进制位如果知道它是从右数第n位,那么就把被乘数向右移动n-1位就完成了乘法,然后再做下一个二进制位的乘法,直到被乘数中所有的2进制位都被使用过为止)。做完了每32位2进制位转化成一个unsigned
long,存储在一个链表或者数组(怀疑空间不够,内存里很有可能没有这么大的连续空间)中,如果按顺序逐个输出就是问题的结果。
我觉得这个方法比2楼的高效。
如果你不想使用c++标准库……那也可以考虑用c中的位域,也支持位操作。不过远没有前面的方便,很多操作都要自己做,比如最基本的你必须有一个适合乘法操作的动态增长的位域组成的链表。而且即使这样还不一定高效。
……写完了才看的3楼,3楼就做得很好了。
