C语言介绍
发布网友
发布时间:2022-04-22 00:54
我来回答
共4个回答
热心网友
时间:2022-04-09 17:29
C语言的发展过程
C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。
当代最优秀的程序设计语言
早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。
C语言的特点
C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
C语言版本
目前最流行的C语言有以下几种:
·Microsoft C 或称 MS C
·Borland Turbo C 或称 Turbo C
·AT&T C
这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。
面向对象的程序设计语言
在C的基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++目前流行的最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2.0。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。
C和C++
但是,C是C++的基础,C++语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。
C源程序的结构特点
为了说明C语言源程序结构的特点,先看以下几个程序。这几个程 序由简到难,表现了C语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个C源程序的基本部分和书写格式。
main()
{
printf("C语言世界www.vcok.com,您好!\n");
}
main是主函数的函数名,表示这是一个主函数。每一个C源程序都必须有,且只能有一个主函数(main函数)。函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。printf函数是一个由系统定义的标准函数,可在程序中直接调用。
热心网友
时间:2022-04-09 18:47
我晕,自己去买本书看把。想学就要付诸行动,光说不练有个屁用。
热心网友
时间:2022-04-09 20:21
给你介绍一本学C的人都知道(不夸张的说,对编程有点了解的人都知道的书,也都略知一二),谭浩强编写,清华大学出版社出版的《C语言程序设计》是C学习的经典之作。一句话,只要学C这本书必备,除非你是学什么都是三分钟热度的人。只要不是地摊,肯定有卖。(其实很多地摊也卖。)希望对你有所帮助。
热心网友
时间:2022-04-09 22:13
下面对C语言的常用语法进行简要总结。
1.标识符
由字母、数字和下划线组成。标识符必须以字母或下划线开头。大、小写的字母分别认为是两个不同的字符。不同的系统对标识符的字符数有不同的规定,一般允许7个字符。
2.注释
“/*”和“*/”必须成对出现;注释不能嵌套;注释可出现在程序的任何位置。
3. 常量
整型常量十进制常数(八进制常数、十六进制常数、长整型常数);字符常量(用单引号括起来的字符);字符串常量(用双引号括起来的字符序列);浮点型常量(小数形式、指数形式)。
4. 表达式
算术表达式(整型表达式、实型表达式);逻辑表达式(用逻辑运算符连接的整型量,结果为一个整数0或1,逻辑表达式可以认为是整型表达式的一种特殊形式);字位表达式;强制类型转换表达式(用“类型”运算符使表达式的类型进行强制转换);逗号表达式;赋值表达式(将赋值号“=”右侧表达式的值赋给赋值号左边的变量);条件表达式;指针表达式(对指针类型的数据进行运算)。
5. 数据定义
对程序中用到的所有变量都需要进行定义。对数据定义其类型,需要时要指定其存储类别。类型标识符可用:int、short、long、unsigned、char、float、double、 struct 结构体名、union 共用体名等;存储类别可用:auto、static、register、extern(如不指定存储类别,作auto处理)。注意:外部数据定义只能用 extern或static,而不能用auto或register。
6. 函数定义
形式为:存储类别 数据类型 函数名(形参表列);形参说明;函数体。
函数的存储类别只能用extern或static。函数体是用花括弧括起来的,可包括数据定义和语句。
7. 变量的初始化
可以在定义时对变量或数组指定初始值;静态变量或外部变量如未初始化,系统自动使其初值为零(对数值型变量)或空(对字符型数据);对自动变量或寄存器变量,若未初始化,则其初值为一不可预测的数据;只有静态或外部数组才能初始化.
给你个初学的题库和答案
clude <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "math.h"
void project1()
{
printf("Hello C-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
/*题目:用*号输出字母C的图案。
程序分析:可先用'*'号在纸上写出字母C,再分行输出。
*/
/*求1+2+3+4…+100的和。*/
void project2()
{
int num;//一个数
int sum = 0;//总和
printf("\nproject2\n");
for(num=1;num<=100;num++)
{
sum += num;
}
printf("The sum is %d\n", sum);
}
/*
题目:输出9*9口诀。
*/
void project3()
{
int i,j;//被乘数和乘数
int result;//积
printf("\nproject3\n");
for (i=1;i<10;i++)
{
for(j=1;j<=i;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
//题目:有1、2、3、4个数字,能组成多少个互不相同
// 且无重复数字的三位数?都是多少?
void project4()
{
int i,j,k;//百位,十位,个位数
int num = 0;//计数器
printf("\nproject4\n");
for(i=1;i<5;i++)
{
for(j=1;j<5;j++)
{
for (k=1;k<5;k++)
{
if(i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
{
printf("%d,%d,%d\t",i,j,k);
num++;
}
}
}
printf("\n");
}
printf("The total num is %d\n", num);
}
/*
打印楼梯,同时在楼梯上方打印两个笑脸。
*/
void project5()
{
int i,j;//行数和列数
printf("\nproject5\n");
printf("\1\1\n");/*输出两个笑脸*/
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
{
printf("%c%c", 219, 219);
}
printf("\n");
}
}
/*
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
void project6()
{
long f1,f2;//前两个月的数值
int i;//个数
printf("\nproject6\n");
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld",f1,f2);
if(i%3==0)
{
printf("\n");/*控制输出,每行四个*/
}
f1=f1+f2; /*前两个月加起来赋值给第三个月*/
f2=f1+f2; /*前两个月加起来赋值给第三个月*/
}
}
/*
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
第10次落地时,共经过多少米?第10次反弹多高?
*/
void project7()
{
float sum=100.0;//行驶路程
float next=50;//下一次的反弹高度
int n;//反弹的次数
printf("\nproject7\n");
for(n=2;n<=10;n++)
{
sum=sum+2*next;/*第n次落地时共经过的米数*/
next=next/2; /*第n次反跳高度*/
}
printf("the total of road is %f\n",sum);
printf("the tenth is %f meter\n",next);
}
/*
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
*/
void project8()
{
int n,temp,number=20;
int a=2,b=1;
float s=0;
printf("\nproject8\n");
for(n=1;n<=number;n++)
{
s=s+a/b;
temp=a;a=a+b;b=temp;
}
printf("sum is %9.6f\n",s);
}
/*
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
*/
void project9()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("\nproject9\n");
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
{
letters++;
}
else if(c==' ')
{
space++;
}
else if(c>='0'&&c<='9')
{
digit++;
}
else
{
others++;
}
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}
/*题目5:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
*/
void project10()
{
int day,month,year,sum,leap;
printf("\n\nproject10\n");
printf("please input year,month,day: ");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
case 1:
{
sum=0;
break;
}
case 2:
{
sum=31;
break;
}
case 3:
{
sum=59;
break;
}
case 4:
{
sum=90;
break;
}
case 5:
{
sum=120;
break;
}
case 6:
{
sum=151;
break;
}
case 7:
{
sum=181;
break;
}
case 8:
{
sum=212;
break;
}
case 9:
{
sum=243;
break;
}
case 10:
{
sum=273;
break;
}
case 11:
{
sum=304;
break;
}
case 12:
{
sum=334;
break;
}
default:
{
printf("\ndata error");
break;
}
}
sum=sum+day; /*再加上某天的天数*/
if(year%4==0) /*判断是不是闰年*/
{
leap=1;
}
else
{
leap=0;
}
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
{
sum++;
}
printf("It is the %dth day.",sum);
}
/*
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
*/
void project11()
{
int m,i,k,h=0,leap=1;
printf("\n\nproject11\n");
for(m=101;m<=200;m++)
{
k=(int)sqrt(m+1);
for(i=2;i<=k;i++)
{
if(m%i==0)
{
leap=0;
break;
}
}
if(leap)
{
printf("%-4d",m);
h++;
}
leap=1;
}
printf("\nThe total is %d",h);
}
/*
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
void project12()
{
int n,i;
printf("\nproject12\n");
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else
{
break;
}
}
}
printf("%d",n);
}
/*
输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
*/
void project13()
{
int a,b,num1,num2,temp;
printf("\nproject13\n");
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1<num2)/*交换两个数,使大数放在num1上*/
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}
/*题目: 企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,
高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?
*/
void project14()
{
long int num;
int level;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
bonus1 = (int)(100000*0.1);
bonus2 = bonus1+(int)(100000*0.075);
bonus4 = bonus2+(int)(200000*0.05);
bonus6=bonus4+(int)(200000*0.03);
bonus10=bonus6+(int)(400000*0.015);
printf("\nproject14");
while(1)
{
printf("\nplease input a num: ");
scanf("%ld", &num);
if(0 < num)
{
level = num / 100000;
switch(level)
{
case 0:
{
bonus=(int)(num * 0.1);
break;
}
case 1:
{
bonus=bonus1 + (int)((num - 100000) * 0.075);
break;
}
case 2:
case 3:
{
bonus = bonus2 + (int)((num-200000) * 0.05);
break;
}
case 4:
case 5:
{
bonus = bonus4 + (int)((num - 400000) * 0.03);
break;
}
case 6:
case 7:
case 8:
case 9:
{
bonus = bonus6 + (int)((num - 600000) * 0.015);
break;
}
default:
{
bonus = bonus10 + (int)((num - 1000000) * 0.01);
break;
}
}
printf("bonus = %d",bonus);
}
else
{
printf("wrong num\n");
break;
}
}
}
/*题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:
*/
void project15()
{
long int i,x,y;
printf("\nproject15\n");
for (i=1;i<100000;i++)
{
x=(long)sqrt(i+100); /*x为加上100后开方后的结果*/
y=(long)sqrt(i+268); /*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
{
printf("%ld\t",i);
}
}
}
void main()
{
project1();
project2();
project3();
project4();
project5();
project6();
project7();
#if 0
project8();
project9();
project10();
project11();
project12();
project13();
project14();
#endif
}