当前位置:首页 » 编程语言 » c语言nb

c语言nb

发布时间: 2022-12-14 20:30:37

1. 计算机基础编程可以用c语言写吗

楼上说的在理!C语言确实很NB!可以用来编程!1. C是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2.C是结构式语言。结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 3.C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 4. C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。 C语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型应用软件也是用C语言编写的。

2. 什么是C语言

C语言是贝尔实验室在20世纪70年代初开发的一种用途广泛的编程语言。

1969年Ken Thompson在PDP-7上用汇编语言编写了Unix的最初版本,用汇编语言编写的程序是难以维护的,Ken Thompson 意识到需要一种更加高级的变成语言来完成Unix的开发,于是他设计了一种简单的B语言,B语言是在BCPL语言的基础上开发的(BCPL是上个世纪60年代中期产生的一种系统编程语言)。

不久后,Dennis Ritchie加入到了Unix项目,并开始用B语言编写程序。1970年, 贝尔实验室为Unix项目争取到了一台PDP-11计算机。B语言经过改进运行在了PDP-11上时,Ken Thompson就用B语言重写了部分Unix代码。

到了1971年,B语言已经无法满足Unix的开发了,于是Dennis Ritchie开始开发B语言的升级版。他最初将心开发的语言明明为NB(New B), 但后来,新语言与B语言差别越来越大,于是他决定将它命名为C语言。

1973年C语言已经足够稳定,可以用来重新编写Unix系统了。改用C语言编写的程序显示出一个非常重要的好处:可移植性。通过在贝尔实验室里为其他类型的计算机编写C语言编译器,Unix也同样可以在不同类型的计算机上运行了。

C语言自出现后,一直持续发展,1978年Brain Kernighan 和 Dennis Ritchie 合作编写并出版了The C Programming Language (K&R)。此书一经出版就迅速成为了C程序员的宝典。由于当时缺少C语言的正式标准,所以这本书就成为了事实上的标准。
随着C语言的迅速普及,编写新的C语言编译器的程序员们都参考"K&R",但"K&R"对一些语言特性的描述非常模糊,导致编译器会对这些特征进行不同的处理(目前C语言里依然有很多未定义行为)。

由于在“K&R”出版后,C语言一直在持续发展,对C语言进行全面、准确且最新描述的需求就显得尤为迫切了,如果缺乏标准,就会出现各种方言(参考Lisp)会影响到C语言的可移植性。

1983年美国国家标准协会(ANSI)开始编制C语言标准。经过多次修订,C语言标准于1988年完成,并在1989年12月正式通过, 简称C89, 1999年通过了C99标准,2007 年,C语言标准委员会又重新开始修订C语言,到了 2011 年正式发布了C11。

3. C语言初学者,编写一个统计空格、制表符和换行符个数程序

1、直接对每个字符进行判断,如果是其中一种,数目加一即可。

2、例程:

#include<stdio.h>
main()
{
intc,hs,kgs,zfbs;
hs=0,kgs=0,zfbs=0;/*初始化*/
while((c=getchar())!='#')
{
if(c==' ')
++hs;
if(c=='')
++kgs;
if(c==' ')
++zfbs;
}
printf("%d%d%d ",hs,kgs,zfbs);/*zbfs改为zfbs*/
}
/*nl,cl,bl可能是代表行数,空格数,制表符数的英文缩写*/

4. C语言中两个连续的双引号是合法的字符串常量吗

是的。可以赋给一个字符数组。

1.字符串常量是不可改变的,放在文字常量区,也就是在静态存储区上。
2.除了char buffer[20]= "hello ";和strcpy(p, "hello ");这两个情况外,程序中出现的字符串都应该被视为字符串常量了.

如const char *p= "hello ";

简单地说,除了存在栈和堆上的字符串才不是字符串常量.其余的都是字符串常量.
举一个例子:char buffer[20]= "hello ";这个字符串是用来初始化字符数组buffer的,存在栈上,不是一个字符串常量,可以用下标读写其值.又比如,char *p=malloc(...);
strcpy(p, "hello ");这个 "hello "也不是一个字符串常量,因为是在堆上,也可以用指针p进行读写.至于在这两者的前面加上const修饰,虽然表明 "hello "是不允许更改的,但是对于字符串来说,不能说明是字符串常量.因为,const要修饰的不是明确说hello是不可写的,而是说p指向的这段内存区域是不可写的.修饰的对象是不同的,只是恰巧这段区域里存的是hello这个字符串(说得有点绕了吧,你再坚持一下).
除了这两个情况以外,程序中出现的字符串都应该被视为字符串常量了.
比如const char *p= "hello ";这个字符串是存放在静态存储区上的,是不可以更改的.它的有效范围是整个程序的生命期.如果有另外的语句p= "nb ";那么,hello这个字符串将会永远不被引用,但是它会存在于整个程序的生命期.这才是真正的字符串常量.

5. c语言位运算符的用法

c语言位运算符的用法1

c语言位运算符的用法如下:

一、位运算符C语言提供了六种位运算符:

& 按位与

| 按位或

^ 按位异或

~ 取反

<< 左移

>> 右移

1. 按位与运算

按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

main(){

int a=9,b=5,c;

c=a&b;

printf("a=%d/nb=%d/nc=%d/n",a,b,c);

}

2. 按位或运算

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下: 00001001|00000101

00001101 (十进制为13)可见9|5=13

main(){

int a=9,b=5,c;

c=a|b;

printf("a=%d/nb=%d/nc=%d/n",a,b,c);

}

3. 按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)。

main(){

int a=9;

a=a^15;

printf("a=%d/n",a);

}

4. 求反运算

求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110。

5. 左移运算

左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

6. 右移运算

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的`各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。

main(){

unsigned a,b;

printf("input a number: ");

scanf("%d",&a);

b=a>>5;

b=b&15;

printf("a=%d/tb=%d/n",a,b);

}

请再看一例!

main(){

char a='a',b='b';

int p,c,d;

p=a;

p=(p<<8)|b;

d=p&0xff;

c=(p&0xff00)>>8;

printf("a=%d/nb=%d/nc=%d/nd=%d/n",a,b,c,d);

}

c语言位运算符的用法2

C语言位运算。所谓位运算,就是对一个比特(Bit)位进行操作。比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。

C语言提供了六种位运算符:

按位与运算(&)

一个比特(Bit)位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。

C语言中不能直接使用二进制,&两边的操作数可以是十进制、八进制、十六进制,它们在内存中最终都是以二进制形式存储,&就是对这些内存中的二进制位进行运算。其他的位运算符也是相同的道理。

例如,9 & 5可以转换成如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

& 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)

也就是说,按位与运算会对参与运算的两个数的所有二进制位进行&运算,9 & 5的结果为 1。

又如,-9 & 5可以转换成如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

& 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-9 & 5的结果是 5。

关于正数和负数在内存中的存储形式,我们已在教程《整数在内存中是如何存储的》中进行了讲解。

再强调一遍,&是根据内存中的二进制位进行运算的,而不是数据的二进制形式;其他位运算符也一样。以-9&5为例,-9 的在内存中的存储和 -9 的二进制形式截然不同:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (-9 的二进制形式,前面多余的 0 可以抹掉)

按位与运算通常用来对某些位清 0,或者保留某些位。例如要把 n 的高 16 位清 0 ,保留低 16 位,可以进行n & 0XFFFF运算(0XFFFF 在内存中的存储形式为 0000 0000 -- 0000 0000 -- 1111 1111 -- 1111 1111)。

【实例】对上面的分析进行检验。

00001. #include

00002.

00003. int main(){

00004. int n = 0X8FA6002D;

00005. printf("%d, %d, %X ", 9 & 5, -9 & 5, n & 0XFFFF);

00006. return 0;

00007. }

运行结果:

1, 5, 2D

按位或运算(|)

参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为1,0|0为0,1|0为1,这和逻辑运算中的||非常类似。

例如,9 | 5可以转换成如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

| 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1101 (13 在内存中的存储)

9 | 5的结果为 13。

又如,-9 | 5可以转换成如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

| 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-----------------------------------------------------------------------------------

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-9 | 5的结果是 -9。

按位或运算可以用来将某些位置 1,或者保留某些位。例如要把 n 的高 16 位置 1,保留低 16 位,可以进行n | 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 -- 1111 1111 -- 0000 0000 -- 0000 0000)。

【实例】对上面的分析进行校验。

00001. #include

00002.

00003. int main(){

00004. int n = 0X2D;

00005. printf("%d, %d, %X ", 9 | 5, -9 | 5, n | 0XFFFF0000);

00006. return 0;

00007. }

运行结果:

13, -9, FFFF002D

按位异或运算(^)

参与^运算两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为1,0^0为0,1^1为0。

例如,9 ^ 5可以转换成如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1100 (12 在内存中的存储)

9 ^ 5的结果为 12。

又如,-9 ^ 5可以转换成如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-----------------------------------------------------------------------------------

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0010 (-14 在内存中的存储)

-9 ^ 5的结果是 -14。

按位异或运算可以用来将某些二进制位反转。例如要把 n 的高 16 位反转,保留低 16 位,可以进行n ^ 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 -- 1111 1111 -- 0000 0000 -- 0000 0000)。

【实例】对上面的分析进行校验。

00001. #include

00002.

00003. int main(){

00004. unsigned n = 0X0A07002D;

00005. printf("%d, %d, %X ", 9 ^ 5, -9 ^ 5, n ^ 0XFFFF0000);

00006. return 0;

00007. }

运行结果:

12, -14, F5F8002D

取反运算(~)

取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。。

例如,~9可以转换为如下的运算:

~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

-----------------------------------------------------------------------------------

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110 (-10 在内存中的存储)

所以~9的结果为 -10。

例如,~-9可以转换为如下的运算:

~ 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1000 (9 在内存中的存储)

所以~-9的结果为 8。

【实例】对上面的分析进行校验。

00001. #include

00002.

00003. int main(){

00004. printf("%d, %d ", ~9, ~-9 );

00005. return 0;

00006. }

运行结果:

-10, 8

左移运算(<<)

左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。

例如,9<<3可以转换为如下的运算:

<< 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 1000 (72 在内存中的存储)

所以9<<3的结果为 72。

又如,(-9)<<3可以转换为如下的运算:

<< 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-----------------------------------------------------------------------------------

1111 1111 -- 1111 1111 -- 1111 1111 -- 1011 1000 (-72 在内存中的存储)

所以(-9)<<3的结果为 -72

如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。

【实例】对上面的结果进行校验。

00001. #include

00002.

00003. int main(){

00004. printf("%d, %d ", 9<<3, (-9)<<3 );

00005. return 0;

00006. }

运行结果:

72, -72

右移运算(>>)

右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。

例如,9>>3可以转换为如下的运算:

>> 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

-----------------------------------------------------------------------------------

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)

所以9>>3的结果为 1。

又如,(-9)>>3可以转换为如下的运算:

>> 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-----------------------------------------------------------------------------------

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 1110 (-2 在内存中的存储)

所以(-9)>>3的结果为 -2

如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。

【实例】对上面的结果进行校验。

00001. #include

00002.

00003. int main(){

00004. printf("%d, %d ", 9>>3, (-9)>>3 );

00005. return 0;

00006. }

运行结果:

1, -2

c语言位运算符的用法3

一、位运算符

在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。

二、位运算

位运算符 & |~<< >> ∧ 按优先级从高到低排列的顺序是:

位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~ << >> & ∧ | 。

例1:左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。

例如:

a<<4

指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

例2:右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:

设 a=15,

a>>2

表示把000001111右移为00000011(十进制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。

例3:设二进制数a是00101101 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。

解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。

如 int a=3 , b=4;,想将a与b的值互换,可用如下语句实现:

a=a∧b;

b=b∧a;

a=a∧b;

所以本题的答案为: 11110000 。

6. C语言 ; 下面“nb nt nl”是什么意思

nb是你输入空格的个数,nt是你输入的制表符的个数,nl是你输入的换行符的个数
如果输入为0,结束循环

7. c语言编程问题

#include <stdio.h>

#include <stdlib.h>


struct student {

int num;

char name[20];

float score[4];

};


void input(struct student a[], int);


void aver(struct student a[], int,struct student b[]);


void order(struct student a[], int);


void output(struct student a[], int,struct student b[]);


int main() {

struct student stu[100];

struct student b[100];

int n;

printf("请输入学生个数:");

scanf("%d", &n);

input(stu, n);

aver(stu, n,b);

order(stu, n);

output(stu, n,b);

return 0;

}


void input(struct student a[], int n) {

int i, j;

// printf("请输入学生的学号,姓名,英语,数学,物理,语文成绩: ");

for (i = 0; i < n; i++) {

printf("请输入第%d个学生的学号,姓名,英语,数学,物理,语文成绩: ", i + 1);

scanf("%d", &a[i].num);

//gets(a[i].name);

scanf("%s", &a[i].name);

for (j = 0; j < 4; j++)

scanf("%f", &a[i].score[j]);

}

}


void aver(struct student a[], int n,struct student b[]) {

int i=0, j;

for (i = 0; i < n; i++) {

b[i].score[0] = 0;

for (j = 0; j < 4; j++)

b[i].score[0] += a[i].score[j];

b[i].score[0] = b[i].score[0] / 4;

}

}


void order(struct student a[], int n) {

int i, j;

struct student t[1];

for (i = 1; i < n; i++)

for (j = 0; j < n - i; j++)

if (a[j].score[3] < a[j + 1].score[3]) {

t[1] = a[j];

a[j] = a[j + 1];

a[j + 1] = t[1];

}

}


void output(struct student a[], int n,struct student b[]) {

int i, j;

printf("学号 姓名 英语 数学 物理 语文 平均成绩如下: ");

for (i = 0; i < n; i++) {

printf("%d %s ", a[i].num, a[i].name);

for (j = 0; j < 4; j++)

printf("%.2f ", a[i].score[j]);

printf("%.2f", b[i].score[0]);

printf(" ");

}

}


帮你改了一些,看看测试:

8. 为什么n%=2 等价于 n=n%2这个式子的结果是什么求计算过程

这是c语言的运算符,两个是等价的,当成定义就行了,计算过程:n%2余数赋给n

9. 在c语言中要怎么来判断整数和小数

你看一下这个方法符不符合你的要求
12.000算整数吧,只是后面多几个零
#include<stdio.h>
void main()
{
float num;
int NB;
printf("输入一个数");
scanf("%f",&num);
NB=(int)num;
while(1)
{
if((num-NB)!=0)
{
printf("\n您输入的是小数,请重新输入:");
scanf("%f",&num);
NB=(int)num;
}
else
{
break;
}
}
printf("\nnum=%f",num);
}

10. C#语言的诞生

楼上你就2吧,C#和C都不分你就敢来发帖

复制自新云网络的Anders Hejlsberg访谈,讲述了C#的种种背后:

在CNET News.com对微软公司最杰出的软件设计师 Hejlsberg的采访过程中,双方就C#的起源、Web服务的未来等问题进行了探讨。

当微软公司需要一项新技术来确保在软件业的统治地位时,它需要Anders Hejlsberg的帮助。

对于成千上万的使用Borland Turbo Pascal和 Delphi进行编程的软件开发者来说,Anders Hejlsberg,这位40岁的软件大师让他们肃然起敬,是他创制了上述两个备受欢迎的软件开发工具。

现在微软公司希望通过它最新的产品-C#软件开发语言-来赢得软件开发者的拥戴,在微软公司把视窗操作系统和软件向网络迁移的新市场战略中,C#语言是最重要的环节。

经过几年时间的埋头苦干,C#已成为微软公司反击Java语言的最有力武器。六年前,微软公司的老对手Sun公司推出了Java语言,并获得了Oracle和IBM公司的全力支持。

目前各大软件公司都争先恐后地把各自的应用程序移植为面向手持设备和个人电脑的互联网服务,因此微软公司希望软件公司会采用C#语言来编写各自的基于Web的软件和服务。同样,微软公司也希望商家能采用.Net家族的电子商务软件来运行Web服务。是的,微软公司希望用C#来打倒Java。

但就目前来说,C#还处于劣势,毕竟Java已经历了6年的风风雨雨,而C#还处于孕育时期。C#的正式版本最早也要等到年底才能投放市场。

市场分析人员认为微软公司希望利用C#来阻止原来的C++开发人员投向Java阵营。举例来说,C#摹仿了Java提供的多种特性,包括“碎片回收机制”(garbage collection)、可以利用多种类型的语言进行开发的“通用引擎”等等。

在CNET News.com对 Hejlsberg的采访过程中,双方就C#的起源、Web服务的未来等问题进行了探讨。Hejlsberg也就C#相对于Java的优点做了特别的说明。

问:创造C#的原因是什么?它是C++语言的升级吗,是否可以说C#是用来对抗Java的武器?
答:C#是立足于以往的基础上进行开发的,应该说它混合了以往开发语言的精华,但C#不会是终结其它开发语言的终极语言。这是个进化的世界,C#只是面向市场的需求应运而生的。

在C#语言的几个设计目标中,确保编程人员的高效生产率是最重要的一点。我们在设计C#的时候,就从大家熟悉的C++开始并对该语言进行了简化。我们希望把C++具备的强大和灵活、VB具备的简单易用同时赋予C#语言。C++确实需要升级了,但我们力求在增加更多的新特性-比如“碎片收集机制”-的同时,尽可能少地对它进行更动。

问:那么C#主要面向哪些开发人员?C++、Java还是Visual Basic?
答:C#语言传承自C和C++,它和Java一样,属于同一个语言体系。因此C#主要面向C和C++开发人员。

问:在与Java的竞争中,你认为C#将会表现出色吗?
答:你需要注意到,Java的推出领先于.Net平台整整五年的时间。而我们的.Net正式产品还没有投放市场。本公司也不会依靠现有的测试版C#进行市场竞争。但本公司认为C#测试版的表现符合预期水准。

问:说服开发人员弃Java而用C#的理由会有哪些?
答:当谈到Java,大多数人是在谈开发语言,但Java有时也被当作系统运行平台。本公司的C#就是纯粹的开发语言,而.Net可以说是它的运行平台。

我可以说C#与C++靠的更近。Java传承自C++,但当你观察它的模块,就会发现有些东西被省略了。而C#则保留了更多C++的特性。

C#语言首次引进了部件导向特性、方法以及事件。例如当你点击鼠标,就可以声明一个称为“点击”事件。而同样在Java语言中,开发人员就不得不进行特性和事件的模拟。尽管通过一个称为“Java Bean”的部件模块,开发人员也可以做同样的事,但这要比在C#开发环境中困难的多。

此外互用性也是C#的重要特性之一。Java一向以平台无关性作为卖点,但我们认为对已有的软件代码做出支持才是最重要的。C#可以提供出色的代码互用能力(例如已有的C++代码),且不需要开发者增加兼容性代码。

此外,Java和C#之间还有一点明显不同之处。当两三年前微软公司着手C#的开发,就注意到了如何让C#更适应新生的互联网应用世界的需求,而Java是在后来才补充了Web服务。

问:每个大软件厂商都在提出自己的Web服务版本。比如用户可以通过手机来进行互动商务活动,但这些许诺大都是空头支票,你认为何时互联网服务才会真正的蓬勃发展起来?
答:首先我认为,技术的发展是逐步渐进的。今天人们使用互联网,很大程度上是一种人对于机器的互动。开始人们会在门户网站中使用Email和日程安排,但逐渐地会在网络上获得更多的应用服务,相信再发展下去,人们日常需要的服务将会集成到智能设备和个人电脑中。这种进步会是自然而然的。

目前我们不得不等待宽带网络的到来,我们还需要无线设备具有更大的数据吞吐量。技术发展的方方面面将会是一个齐头并进的局面

热点内容
优质的虚拟机ftp服务器租用公司 发布:2025-01-23 17:53:06 浏览:350
新版安卓怎么用游戏键盘 发布:2025-01-23 17:51:32 浏览:544
如何开启电脑服务器无法上网 发布:2025-01-23 17:37:06 浏览:391
安卓手机锁了怎么开 发布:2025-01-23 17:21:18 浏览:137
经济学算法 发布:2025-01-23 17:13:46 浏览:421
如何和软件联系服务器 发布:2025-01-23 17:13:00 浏览:800
javacrc16算法 发布:2025-01-23 17:11:31 浏览:225
编程加图片 发布:2025-01-23 17:10:33 浏览:567
中国风网站源码 发布:2025-01-23 17:05:56 浏览:680
pythonfilter用法 发布:2025-01-23 17:04:26 浏览:569