1. C语言中的函数不可以单独进行编译。这句话为什么不对
C语言中的函数可以单独进行编译,编译为目标文件,要链接成可执行文件时,需要主函数以及库。
2. 下面的程序有什么问题,为什么函数单独编译的时候能通过,二整体通不过
不知道你的"二整体通不过"是什么意思.可能原因:没有声明函数.
在主函数里声明一下:
main()
{
float a, b,c,d,e;
float f,g,h,i,j;
float fun0( float a,float b,float c,float d,float e);
float fun1( float a,float b,float c,float d,float e);
float fun2( float a,float b,float c,float d,float e);
float fun4( float a,float b,float c,float d,float e,float g);
....
}
其他没怎么看,你的代码重复过多.可以精简一下的.
3. 写了一段代码函数,能通过编译但结果不对,看了好久都没找出错误,求大牛指出。
较的,查找效率依赖比较次数,其实理想的查找希望不经比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,这样查找k时,只要根据这个对应关系f找到给定值k的像f(k)。这种对应关系f叫哈希(hash)函数。按这种思想建立的表叫哈希表(也叫散列表)。哈希表存取方便但存储时容易冲突(collision):即不同的关键字可以对应同一哈希地址。如何确定哈希函数和解决冲突是关键。
1.哈希函数的构造方法
直接寻址法:H(k)=k 或H(k)=a*k+b(线形函数)
如:人口数字统计表
地址 1 2 3 ... 100
年龄 1 2 3 ... 100
人数 67 3533 244 ... 4
数字分析法:取关键字的若干数位组成哈希地址
如:关键字如下:若哈希表长为100则可取中间两位10进制数作为哈希地址。
81346532 81372242 81387422 81301367 81322817 81338967 81354157 81368537
平方取中法:关键字平方后取中间几位数组成哈希地址
折叠法:将关键数字分割成位数相同的几部分(最后一部分的位数可以不同)然后取几部分的叠加和(舍去进位)作为哈希地址。
除留余数法:取关键字被某个不大于表长m的数p除后所得的余数为哈希地址。
H(k)=k mod p p<=m
随机数法:H(k)=rondom(k)。
2.处理冲突的方法
假设地址集为0..n-1,由关键字得到的哈希地址为j(0<=j<=n-1)的位置已存有记录,处理冲突就是为该关键字的记录找到另一个"空"的哈希地址。在处理中可能得到一个地址序列Hi i=1,2,...k
0<=Hi<=n-1),即在处理冲突时若得到的另一个哈希地址H1仍发生冲突,再求下一地址H2,若仍冲突,再求H3...。怎样得到Hi呢?
开放寻址法:Hi=(H(k)+di) mod m (H(k)为哈希函数;m为哈希表长;di为增量序列)
当di=1,2,3,... m-1 时叫线性探测再散列。
当di=12,-12,22,-22,32,-32,...,k2,-k2时叫二次探测再散列。
当di=random(m)时叫伪随机探测序列。
例:长度为11的哈希表关键字分别为17,60,29,哈希函数为H(k)=k mod 11,第四个记录的关键字为38,分别按上述方法添入哈希表的地址为8,4,3(随机数=9)。
再哈希法:Hi=RHi(key) i=1,2,...,k,其中RHi均为不同的哈希函数。
链地址法:这种方法很象基数排序,相同的地址的关键字值均链入对应的链表中。
建立公益区法:另设一个溢出表,不管得到的哈希地址如何,一旦发生冲突,都填入溢出表。
3.哈希表的查找
例:如下一组关键字按哈希函数H(k)=k mod 13和线性探测处理冲突所得的哈希表a[0..15]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
14 01 68 27 55 19 20 84 79 23 11 10
当给定值k=84,则首先和a[6]比在依次和a[7],a[8]比结果a[8]=84查找成功。
当给定值k=38,则首先和a[12]比,再和a[13]比,由于a[13]没有,查找不成功,表中不存在关键字等于38的记录。
5.5 查找第k小元素
查找第k小元素即在n个元素中(未排序)找到第k小的元素。方法同快速排序,采用递归方式。
程序如下:
program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
b:arr;
i,k:integer;
function p(s,t:integer):integer;
var i,j,t1,x:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end
until i=j;
b[i]:=x;
p:=i;
end;
function find(s,t,k:integer):integer;
var p1,q:integer;
begin
if s=t then find:=b[s] else
begin
p1:=p(s,t);
q:=p1-s+1;
if k<=q then find:=find(s,p1,k) else find:=find(p1+1,t,k-q);
end;
end;
begin
write('input data:');
for i:=1 to n do read(b[i]);readln;
write('input k:');read(k);
write('output data:');
writeln('kthsmall:=',find(1,n,k));
end.
4. c语言中的函数可不可以单独进行编译
是可以的。
库函数是把函数放到库里,供别人使用的一种方式。函数库是由系统建立的具有一定功能的函数的集合。库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息。用户也可以根据自己的需要建立自己的用户函数库。
使用C语言的语句直接计算sin或cos函数,就需要编写颇为复杂的程序。因为C语言的语句中没有提供直接计算sin或cos函数的语句。又如为了显示一段文字,我们在C语言中也找不到显示语句,只能使用库函数printf。
(4)函数为什么单独编译不对扩展阅读
函数库的分类
1、字符串、内存和字符函数
需要的包含文件:string.h、mem.h、ctype.h或string.h;
2、数学函数
需要的包含文件:math.h;
3、动态存储分配
需要的包含文件:alloc.h或stdlib.h ;
5. C语言函数编译后不正确
#include<stdio.h>
void main ()
{
int i=0;
char p[20];
for(i=0;i<8;i++)
{
printf("请输入8个数:\n");
scanf("%c",&p[i]);
if(p[i]==13)
break;
}
for(i=0;i<8;i++)
if(p[i]==13)
break;
else if(p[i]+10>122)
p[i]='a'+(p[i]-112);
else
p[i]=p[i]+10;
printf("每个字母向后推10位以后变为:\n");
for(i=0;i<8;i++)
if(p[i]!=13)
printf(" %c",p[i]);
printf("\n");
printf("\n");
}
你本身用for语句i<8限制了只能输入8个数,你有加上条件if(p[i]==13)来结束for语句,这很没必要!再说要你输入8个数,你输入8个数就行了,用enter(字符代码为13)来控制不好控制,如果你想控制,你可以用\0来控制比较好,上面写的可以满足你的要求,你试试!!!
6. 为什么C/C++头文件单独编译会失败
估计是你编译器设置不对或者还没设置,找不到iostream这个文件,程序至少有一个入口,不然也是出错的
#include<iostream>
int main(void)
{
return 0;
}
这个是最简单的了,至少有这个才可以编译成可执行文件的
7. 这个函数定义为什么不能过编译
定义数组的时候不能用arr[n],中括号里面要是一个常数。题目中应该会告诉你数字最多有几个,定义的时候用最大数。在函数中循环时再用n
8. 如下的函数调用为什么会在编译的时候出错
在函数声明和定义的时候,如果参数列表为空,可以设为void,但调用的时候,因为参数列表为空,说明没有传递参数。
定义一个函数如下:
int getNum( int nNum )
{
return nNum;
}
则,调用的时候必须要给nNum赋值的,总不能在main()函数中这样调用吧
int main(){
getNum( int nNum );
}
所以调用的时候不用加void;
9. 在C语言程序中,只有main函数才可单独进行编译,哪里错了
有函数的都可以单独进行编译,编译是指把程序语句翻译为机器代码,对于C语言就是把.c文件翻译为.obj文件。
此外,必须要有main函数的才可以完成连接为exe文件。
10. 每个函数都可以被单独编译对吗
A、main函数是不能被任何函数调用的,所以a错了
B、函数可以单独编译,每个函数都能单独写成一个文件,所以B对的
C、函数都要通过main函数的调用才能正确的运行,main函数是一个程序的唯一入口
D、函数是不可以嵌套使用的