| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1233 人关注过本帖
标题:几个简单C问题.
只看楼主 加入收藏
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分: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
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分: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
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
对于第三个问题,我也只是有点点印象:
就是它们共有一个内存块,内存块的大小取决于共用体中最大的那个变量类型的空间。
比如
一个整形和一个浮点型还有一个字符型共用一个共同体a,那么a的大小就以最大的那个浮点来算。

2006-02-14 09:45
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分: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
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
对于第四个问题,我记得以前书上是讲,它返回一个不确定的值。
我刚才试过了,如果将上面的return(z)去掉,主程序中显示是7,
但我在s函数后面加了一句z=1+1;再去掉return(z),主程序中显示的值不是2,而是1824

so I do not know why!!

2006-02-14 10:01
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分: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
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分: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
快速回复:几个简单C问题.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026389 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved