搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 几个简单C问题.
标题:
几个简单C问题.
只看楼主
cdmalcl
等 级:
贵宾
威 望:
24
帖 子:4091
专家分:524
注 册:2005-9-23
第
21
楼
得分:0
以下是引用
cdmalcl
在2006-2-12 11:30:00的发言:
4 return是把Z指返回到main中去 但如果没有return n等于7
你可以在printf ("x=%d,y=%d,n=%d",x,y,n);后面加一个getch();就知道拉
不信就自己运行一下
2006-02-13 09:19
cordier
等 级:
论坛游民
威 望:
1
帖 子:449
专家分:14
注 册:2006-2-9
第
22
楼
得分:0
对于第一个和第二个问题可以通过数学的泰勒级数展开(有的书也称台劳公式)
exp(x)=1+x+x^2/2!+x^3/3!+……+x^n/n!+……
ln(1+x)=x-x^2/2!+x^3/3!-x^4/4!+x^5/5!+……+(-1)^(n-1)x^n/n!……
上面的!表示阶乘运算
当然n为自然数,并且n取越大,越接近真实值,但n越大,计算量也越大,因为每一次都要算阶乘。
而C语言中的log(x)就是数学中的ln(x),它是以自然对数e(e=2.718281828)为底的对数。
数学中的以10为底的对数lg(x),在C语言表达式为log10(x).
它们之间有一个换底公式。
具体的我也记不太清楚,好像是下面的表达式:
loga(x)=logb(n)/logb(a)。
2006-02-14 09:43
cordier
等 级:
论坛游民
威 望:
1
帖 子:449
专家分:14
注 册:2006-2-9
第
23
楼
得分:0
对于第三个问题,我也只是有点点印象:
就是它们共有一个内存块,内存块的大小取决于共用体中最大的那个变量类型的空间。
比如
一个整形和一个浮点型还有一个字符型共用一个共同体a,那么a的大小就以最大的那个浮点来算。
2006-02-14 09:45
cordier
等 级:
论坛游民
威 望:
1
帖 子:449
专家分:14
注 册:2006-2-9
第
24
楼
得分:0
对于第一题和第二题你在设计的时候可以根据精度来控制n的取值。
比如:
你算exp(2.3),你算到n阶乘时,exp(2.3)的值为temp,你再算一下n+1阶乘时,exp(2.3)的值为new.当fabs(new-tmep)的值小于那个精度(比如你要小数点后面5位)那么你就可以用if (fabs(new-temp)<0.00001)来退出循环
共用体的大小你可以看一下下面的程序
#include <stdio.h>
#include <conio.h>
main()
{
union{int a;float b;char c;}M;
system("cls");
printf("sizeof\tint\tfloat\tchar\tunion\n");
printf("\t%d\t%d\t%d\t%d\n",sizeof(int),sizeof(float),sizeof(char),sizeof(M));
getch();
return 0;
}
2006-02-14 09:56
cordier
等 级:
论坛游民
威 望:
1
帖 子:449
专家分:14
注 册:2006-2-9
第
25
楼
得分:0
对于第四个问题,我记得以前书上是讲,它返回一个不确定的值。
我刚才试过了,如果将上面的return(z)去掉,主程序中显示是7,
但我在s函数后面加了一句z=1+1;再去掉return(z),主程序中显示的值不是2,而是1824
so I do not know why!!
2006-02-14 10:01
cordier
等 级:
论坛游民
威 望:
1
帖 子:449
专家分:14
注 册:2006-2-9
第
26
楼
得分:0
对于第五题,我想楼主您运行一下下面的程序,你就会明白。
main()
{
union{short a;char ch;}M;
M.a=100;
M.ch='A';
system("cls");
printf("%d,%d,%c \n",sizeof(M),M.a,M.ch);
M.ch='A';
M.a=100;
printf("%d,%d,%c \n",sizeof(M),M.a,M.ch);
getch();
}
就是将
M.a=100;
M.ch='A';
变成
M.ch='A';
M.a=100;
你就会明白的。
2006-02-14 10:04
cordier
等 级:
论坛游民
威 望:
1
帖 子:449
专家分:14
注 册:2006-2-9
第
27
楼
得分:0
对于第六题
要明确的是一个int是2个字节,一个char是1个字节。sql_1结构体中有两个char,也就是2个字节,所以number这个共用体是占2个字节的。
由于sql_1是由2个char组成,所以这两个char就与int共同占有一个内存块。也就是说int的前1个字节(前8位)与结构体sql_1的second对应。int的后1个字节(后8位)与结构体sql_1的first对应。
当进行number.i=0x4445赋值时,i的前8位是0x44H(对应于char型也就是D),也就是说sql_1.second='D'.
i的后8位是0x45H(对应于char型也就是E),也就是说sql_1.first='E'.
当进行
number.sql_1.first='c';
number.sql_1.sencond='d';赋值时,
first='c'相当于0x63H,也就是i的后8位是0x63H;
second='d'相当于0x64H,也就是i的前8位是0x64H;
最后i的值为0x6463H.
上面只是我的个人看法,不知对不??
2006-02-14 10:19
27
3/3页
1
2
3
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-45232-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.126528 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved