1. C语言,这道题怎么做,不确定元素个数我没法定义数组啊
/* C99标准增加的变长数组(VLA) */
int N; /* 首先声明一个变量作为数组大小 */
scanf ("%d", &N); /* 程序运行时,在声明数组前设置N的值 */
int arr[N]; /* 声明大小为N的数组 */
/* 注意:N的值必须在声明数组前指定。声明变长数组时不可以初始化。N只能被赋值1次,一旦确定,不可改变。*/
2. C语言定义元素不确定的数组
用malloc函数动态申请一、二维数组
定义一维数组:
#include "stdio.h"
main()
{
int n;
int *p;
printf("请输入数组元素个数n:\n");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
printf("请输入数组:\n");
for(i=0;i<n;i++)
scanf("%d",&p[i]);
for(i=0;i<n;i++)
printf("%d ",p[i]);
}
定义二维数组:
#include "stdio.h"
main()
{
int n,m;
int **p;
printf("请输入二维数组的行列数n和m:\n");
scanf("%d%d",&n,&m);
p=(int **)malloc(sizeof(int)*n);
p[i]=(int *)malloc(sizeof(int)*m);
printf("请输入二维数组:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&p[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d "p[i][j]);
printf("\n");
}
}
如果对你有所帮助,请记得采纳最佳答案,谢谢!
3. C语言中如何实现一个排列,但是需要排列的个数是不确定的,也就是说输进去多少就排多少
这个很好实现,你可以使用malloc函数进行内存申请,给你举个例子吧,哈哈,
例如需要5个int型的数排列,你就可以这样定义
int* a=(int)malloc(sizeof(int)*5);
这样就申请了5个int型的内存单元,而且使用起来很灵活方便。直接可以按照数组的操作方式来操作,例如你可以直接这样做, a[0]=100;a[1]=200;也可以进行数组操作。不过这个需要实现由用户输入要排序元素的个数。在这个基础上进行改进就可实现你要的。如下。
首先和上边一样,当用户每输入一个,你就用malloc申请一个int单元。当用户输入第二个时你可以使用realloc函数,这个函数是在malloc的内存上追加内存单元,使用如下;
int* a=(int)malloc(sizeof(int)*1);
int* a=(int*)realloc(a,sizeof(int)*1);追加一个
这样就可以了,使用还是一样,可以使用数组方式和指针方式。哈哈,给分吧。!!~~应该会帮到你。
4. C语言题目 输入一组数字。 数字个数不确定。然后将其从大到小排序。。求代码 谢谢
/* 在命令 行输入 排序的数字 */
#include<stdio.h>
#include<stdlib.h>
void sort_(float *,int);
void printf_(char *,float *);
int
main(int argc ,char *argv[])
{ int i;
int b=0;
float *ptr;
char *endptr;
if(argc == 1)
{
printf("请输入要排序的数字\n");
exit(1);
}
if( (ptr = malloc(sizeof(float) * (argc-1)) ) == NULL){
perror("malloc \n");
exit(1);
}
/*将字符串 转变为数字*/
for( i = 1; i<argc ; i++)
{
ptr[b] = strtof(argv[i],&endptr);
if(strcmp(argv[i],endptr) == 0)
{printf("你输入的%s 是错误的\n",argv[i]);
continue;
}
b++;
}
ptr[b]='\0';
/*排序所得数字串,把输入错的丢弃*/
sort_(ptr,b);
printf_("最后的排序结果是 \n",ptr);
return(0);
}
void
printf_(char *str , float *ptf)
{
printf("%s",str);
int i;
for(i = 0; ptf[i] != '\0' ; i++)
printf("%12.3f",ptf[i]);
printf("\n");
}
/*冒泡排序*/
void
sort_(float* a,int n)//n为数组a的元素个数
{int i,j;
float temp;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(a[i]<a[i+1])//数组元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
5. C语言编程中一个数组里的数逆序排列,但数组里的数不确定有几个
首先正向遍历这个数组 记录这个数组的元素个数 在逆序交换
int a[100], b[100];//设置数组空间 要足够大 因为数组空间一旦确定不能更改
int count = 0;
int* p = a;
int i , j = 0;
while(*p)//若所指向的数组空间有值 则循环
{
p++;// 指针自加 指向下一个元素
count++;//记录数组元素个数
}
for(i = 0; i <= count; i++)
{
b[i] = a[count - i];//用数组a逆序给数组b赋值
}
6. c语言中数组元素的个数可以不固定吗
1.一维数组的定义方式为: 类型说明符 数组名 [常量表达式];
例如 int a[10];
常量表达式中可以包括常量和符号常量,不能包含变量。也就是说,c不允许对数组的大小作动态定义,
即数组的大小不依赖于程序运行过程中变量的值。
2.不过可以用宏定义来解决问题的:
#define M 20
然后在程序中定义数组a[M]
这样就可以通过改变M的数值来解决问题。
7. C语言 怎样实现不确定元素个数的数组的数据输入
intn,i;
int*a,*b,*c;
printf("请输入数组大小:");
scanf("%d",&n);
a=(int*)malloc(sizeof(int)*n);
b=(int*)malloc(sizeof(int)*n);
c=(int*)malloc(sizeof(int)*n);
printf("请输入数组a的数据:");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("请输入数组b的数据:");
fflush(stdin);
for(i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
for(i=0;i<n;i++)
{
c[i]=a[i]+b[i];
}
printf(" 数组c:");
for(i=0;i<n;i++)
{
printf(" %d",c[i]);
}
8. C语言里面要定义一个字符串数组,数组元素个数不确定,每个元素的长度也不确定,求动态定义的方法
你可以用动态分配内存的方法,
比如你要建立一个字符串数组:
char *str;
str=(char *)malloc(n);
n是变量,可以在确定了变量的值后再用以上代码分配内存,
而str字符串可以以一般数组的用法使用,比如
*str="hello";的话
str[1]='l';
最后别忘了释放内存
free(str);
9. 用C语言实现从键盘上输入不确定个数的数字,将数字从小到大排序后输出
对于输入的数据的个数不确定的情况,一般会预设一个特殊的非法值(这个值是属于论域之外的一个值)作为终止值,例如如果论域是正整数,则通常会将0作为终止值,即当输入0时结束,且0不作为有效数据。
因此如果你要输入的都是正整数,则程序可如下(对于其它情况可采用类似方法)
#include <stdio.h>
void Sort(int *s, int left, int right)
{
int i, j, min, tmp;
for(i = left; i < right; i++)
{
for(min = i, j = i + 1; j <= right; j++)
if(s[j] < s[min]) min = j;
if(min != i) tmp = s[i], s[i] = s[min], s[min] = tmp;
}
}
void main( )
{
int i, s[1000], length = 0, data;
scanf("%d", &data);
while(data > 0)
{
s[length++] = data;
scanf("%d", &data);
}
Sort(s, 0, length - 1);
for(i = 0; i < length; i++)
printf("%-4d", s[i]);
}
运行结果: