用c语言声明数组,不带初始大小
编写一个程序来处理温度细节,如下所示。用c语言声明数组,不带初始大小,c,arrays,function,C,Arrays,Function,编写一个程序来处理温度细节,如下所示。 -输入要计算的天数主要功能 -以摄氏度为单位的输入温度–输入功能 -将温度从摄氏度转换为华氏度。-分离功能 -找到以华氏为单位的平均温度 如果没有数组的初始大小,如何制作此程序 #include<stdio.h> #include<conio.h> void input(int); int temp[10]; int d; void main() { int x=0; float avg=0,t=0; pri
-输入要计算的天数主要功能
-以摄氏度为单位的输入温度–输入功能
-将温度从摄氏度转换为华氏度。-分离功能
-找到以华氏为单位的平均温度 如果没有数组的初始大小,如何制作此程序
#include<stdio.h>
#include<conio.h>
void input(int);
int temp[10];
int d;
void main()
{
int x=0;
float avg=0,t=0;
printf("\nHow many days : ");
scanf("%d",&d);
input(d);
conv();
for(x=0;x<d;x++)
{
t=t+temp[x];
}
avg=t/d;
printf("Avarage is %f",avg);
getch();
}
void input(int d)
{
int x=0;
for(x=0;x<d;x++)
{
printf("Input temperature in Celsius for #%d day",x+1);
scanf("%d",&temp[x]);
}
}
void conv()
{
int x=0;
for(x=0;x<d;x++)
{
temp[x]=1.8*temp[x]+32;
}
}
#包括
#包括
无效输入(int);
内部温度[10];
int d;
void main()
{
int x=0;
浮动平均值=0,t=0;
printf(“\n天数:”);
scanf(“%d”、&d);
投入(d);
conv();
对于(x=0;x读取大小后在堆上动态分配“数组”。在C中,数组和指针密切相关。事实上,通过设计,数组只是访问指向已分配内存的指针的语法约定。*(有关更多详细信息,请参阅下面的注释)
所以在C语言中
anyarray[n]
与
*(anyarray+n)
使用指针算法
你真的不必担心细节就能让它“工作”,因为它的设计有些直观
只需创建一个指针,分配内存,然后像数组一样访问它
以下是一些例子--
请记住--如果您访问分配区域之外的区域,您将有未知的影响
- 需要明确的是,索引运算符(
[]
)被转换为指针算法。这不是现代意义上的数组
所涉及的指针是否指向(动态)分配的
内存对于该运算符的工作方式无关紧要。在更现代的语言中,您可以将数组作为抽象类型进行操作(例如,要查看它有多大),而在C语言中不能这样做
您需要将temp
声明为int
指针(而不是int
数组)。然后,您可以在main
中使用malloc
(在第一次scanf
之后):
如果您的编译器支持c99
,则只需使用VLA(可变长度数组)。如下所示:
void input(int);
int d;
void main()
{
int x=0;
float avg=0,t=0;
printf("\nHow many days : ");
scanf("%d",&d);
int temp[d];
input(d);
conv();
for(x=0;x<d;x++)
{
t=t+temp[x];
}
avg=t/d;
printf("Avarage is %f",avg);
getch();
}
void输入(int);
int d;
void main()
{
int x=0;
浮动平均值=0,t=0;
printf(“\n天数:”);
scanf(“%d”、&d);
内部温度[d];
投入(d);
conv();
对于(x=0;x没有初始大小的数组基本上只是一个指针。为了动态设置数组的大小,需要使用malloc()
或calloc()
函数。这些函数将分配指定数量的内存
在上面的代码中,将temp
声明为int指针
int *temp;
然后使用malloc()
或calloc()
为其分配空间。这些函数的参数是要分配的字节数。在这种情况下,您需要足够的空间来容纳d
int。因此
temp = malloc(d * sizeof(int));
malloc
返回指向刚刚分配的内存块中第一个字节的指针。常规数组只是指向一个分段内存块中第一个字节的指针,这正是temp
现在的情况。因此,您可以将temp
指针视为数组!如下所示:
temp[1] = 10;
int foo = temp[1];
printf("%d", foo);
输出
10
我没有改变任何东西,所以你可以看清楚
#include<stdio.h>
#include<conio.h>
#include <stdlib.h> //here
void input(int);
int *temp=0; //here
int d;
void main()
{
int x=0;
float avg=0,t=0;
printf("\nHow many days : ");
scanf("%d",&d);
temp=malloc(d * sizeof(int)); //here
input(d);
conv();
for(x=0;x<d;x++)
{
t=t+temp[x];
}
avg=t/d;
printf("Avarage is %f",avg);
getch();
}
void input(int d)
{
int x=0;
for(x=0;x<d;x++)
{
printf("Input temperature in Celsius for #%d day",x+1);
scanf("%d",&temp[x]);
}
}
void conv()
{
int x=0;
for(x=0;x<d;x++)
{
temp[x]=1.8*temp[x]+32;
}
}
#包括
#包括
#包括//
无效输入(int);
int*temp=0;//此处
int d;
void main()
{
int x=0;
浮动平均值=0,t=0;
printf(“\n天数:”);
scanf(“%d”、&d);
temp=malloc(d*sizeof(int));//此处
投入(d);
conv();
对于(x=0;x1-在文件顶部添加#包括。然后修改conv()代码,如下所示:
2-修改temp声明如下(全局变量):
3-修改输入(int d)
函数如下(在Visual Studio 2010上测试):
void输入(int d)
{
int x=0;
temp=(int*)malloc(sizeof(int)*d);
对于(x=0;x也许回答得晚了,但是。。。
如果使用小型嵌入式系统,则可能没有malloc和free函数。
因此,您必须为366*sizeof(您的_类型)
牺牲内存,静态定义它并将其用作循环缓冲区。然后您可以始终按计算平均值所需的天数对其进行切片。
当然,这会产生自然约束。你可以自己定义。为什么不首先分配具有所需大小的数组?@DrewMcGowen你是对的,我没有阅读代码,也没有看到大小被读取。更新的答案反映了这一点。你的编译器支持c99吗?1)#包括非标准头2)void main()
main()应该返回int。如何检查我的编译器是否支持c99。我是C语言的初学者:)顺便说一句:temp[x]=1.8*temp[x]+32
执行向零舍入的截断,将不精确的结果偏向0。建议(int)舍入(1.8*temp[x]+32)。最终你会得到更好的平均值。(通常的习惯用法+0.5只在所有转换都为正数的情况下才起作用。)为什么PO不接受或显然投票支持答案?我不明白你说的是什么。我试过这样的printf(“\n多少天:”);scanf(“%d”,&d);int temp[d];但它不起作用:(你需要更改行int temp[10]
到int*temp
。然后,代替执行int-temp[d]
,使用我在回答中提供的代码。我不知道malloc。你能告诉我如何在我的程序中使用它吗。malloc
基本上允许你为任何需要它的目的保留一些内存,但当你事先不知道它的大小时。可能是一个很好的地方start@Down选民们,从他的职位上可以清楚地看出他由于对指针知之甚少……请记住>@user2534857,您使用的是哪种编译器?@user2534857;给我介绍一下您的编译器/IDE(代码::block、Dev-c++、visualbasics等)@Hogan;那么他为什么还不接受任何答案呢
10
#include<stdio.h>
#include<conio.h>
#include <stdlib.h> //here
void input(int);
int *temp=0; //here
int d;
void main()
{
int x=0;
float avg=0,t=0;
printf("\nHow many days : ");
scanf("%d",&d);
temp=malloc(d * sizeof(int)); //here
input(d);
conv();
for(x=0;x<d;x++)
{
t=t+temp[x];
}
avg=t/d;
printf("Avarage is %f",avg);
getch();
}
void input(int d)
{
int x=0;
for(x=0;x<d;x++)
{
printf("Input temperature in Celsius for #%d day",x+1);
scanf("%d",&temp[x]);
}
}
void conv()
{
int x=0;
for(x=0;x<d;x++)
{
temp[x]=1.8*temp[x]+32;
}
}
int *temp;
void input(int d)
{
int x=0;
temp=(int*)malloc(sizeof(int)*d);
for(x=0;x<d;x++)
{
printf("Input temperature in Celsius for #%d day",x+1);
scanf("%d",&temp[x]);
}
}