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]);
}
運行結果: