[C语言中怎样定义动态一维数组]在C语言中,数组的定义都是固定长度的,长度不允许变化。 可以通过链表的方式来达到定义”动态数组“的等价功能,举例如下: 链表节点定义如下: struct node { int data; // 数据域 s...+阅读
可以,但有可能会出现“truncation from 'const double' to 'float'”的警告,比如:
#include
运行结果是,正确,但出现了上述的警告,我以为应该不会影响程序的功能。float是默认为X.X的形式,输入的数据中存在整数1,若把1改为1.0,程序可无警告且正常运行,也可把float换为double,输出结果均相同。
怎么用C语言定义一个无限长的数组
C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。
比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。
但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。
1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。
通过下面例子来理解该方法:
#include
#include
int main()
{
int size=100;//最初为100个元素空间。
int *a = NULL;
int i = 0;
a = malloc(sizeof(int) * size);
if(a == NULL) return -1;
while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止
{
i++;
if(i == size)//数组空间不足
{
size *=2; //将数组空间扩大二倍, 也可以改用size+=100;之类的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空间
if(a==NULL)
{
return -1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
}
}
}
if(a) free(a);//对申请的内存进行释放。
return 0;
}从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。
如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。
所以这种方法可以做到软件意义上的无限大数组空间。
但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。
2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
用C语言定义数组a10
//不难啊..给你个参考吧
/* 对数字判断,输入10数字,去掉最大和最小的然后再求和!
用的就是对数组进行从小到大进行排列...
如果函数话差不多copy过去就行了... */ #include "stdio.h" #include "windows.h"
void main() { float x[10],y; y = NULL; system("title 简单的数字判断,没测试过...VC6.0编译通过"); printf("\n请输入10位学生的成绩(以空格隔开):"); int t; for(t=0;t<10;t++) scanf("%f",&x[t]); int i_t = 1; for(t=0;t<10;t++) { if(x[t]>100) { printf("\n\n你输入的%.2f超标了吧!\n",x[t]); while(i_t) { printf("\n\n请重新输入:"); scanf("%f",&x[t]); if (!(x[t]>100)) { i_t = 0; } } } } float z; int d,e; for (d=0;d<9;d++)//用冒泡法进行排列 { for (e=0;e<9-d;e++) if(x[e]>x[e+1]) { z = x[e]; x[e] = x[e+1]; x[e+1] = z; } }//排列到这里为止 for(t=1;t<9;t++) { y = y+ x[t]; } /* for(t=0;t<=9;t++) printf("%.2f + ",x[t]); */ printf("%.2f\n",(y/8)); }
以下为关联文档:
c语言动态数组定义并引用1 2 3 4 5 6 7 8 9 10 11 12 #include<stdlib.h> voidmain() { intn; char*p; scanf("%d",&n); p=(char*)malloc(n*sizeof(char)); for(inti=0;i<n;i++)scanf("%c",&c[i]); prin...
c语言用二维数组定义#include int main(int argc, char* argv[]) { float fScore[2][25]; //第一行表示c语言成绩,第二行表示网络设计成绩 float fCScore[25]; int i; int j; float ftmp; //输入成...
关于C语言定义二维数组的问题以下能正确定义二维数组的是 -- 以下能正确定义 数组的是 (去掉二维两字)。 A) int a[ ][3]; -- 语法错,没带初始化,不允许用 [空白],不允许 数组大小不定。 B) int a[ ]={2*3} --...
c语言关于定义二维数组的问题首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道a[][4]所表达的意思,是指二维数组a的每一维都是由4个元素组成...
c语言问题定义二维数组类楼主你好~ 修改了一下代码,请结合注释来阅读代码: #include<stdio.h> int main(void) { int n,i,j,d; d=0; static int a[10][10]; printf("Input n:"); scanf("%d",&n); for(i=0;...
C语言如何定义动态数组360问答 C语言中怎样定义动态一维数组 ruisiteng LV12 2013-09-08 用calloc或者malloc做。 因为 int n; int a[n]; 这个操作是不合法的,, 所以要用到分配内存的函数,, 请各位大虾...
C语言结构体数组的定义1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。 2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年...
C语言数组的定义以及使用定义:组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。 实际应用: #include <stdio.h>...
C语言自定义函数返回数组的问题C语言自定义函数返回数组的问题,C语言数组返回值问题:char p[] = "Hello, world!"; 是表示定义一个 字符串数组,而且是text( void )函数内的局部变量, 作用域只在text( void )函数...