先说明下这个教程是我06年的是写的 当时发在cfan的bbs上~觉得可能还有点用 就转过来~新手可以看看 高手飘过吧 当年水平比较低 大家就多多包涵吧欢迎关注Xushine研究院


现在只是现在给大家做点C语言的教程,主要是针对非计算机专业的朋友,以及想学习C语言的朋友,看了有些朋友在学习C语言的时候感觉不适应,所以就有个想做个入门教程给大家,这个由于是本人第一次做C语言的教程,难免有疏漏的地方,还请大家批评指正。本教程的代码80%均属原创,并且都在gcc下编译通过 ~有部分代码和定义来至参考书目!
本教程的参考书目为:

  谭浩强著的《C程序设计》(第三版)  清华大学出版社

黄远林著的《C程序设计》            高等**出版社

 

欢迎大家来我部落格:https://www.xushine.net
                                                                                                     转载请注明

C语言教程(一)

1 引言
关于那些C的发展历史我就不做说明了,有兴趣的朋友可以自己去看任何一本C的教程都会有详细的介绍.C语言的特点就是以多种循环,条件控,制语句的完全的结构化,使得在编写维护查看非常的方便。C语言是以函数的形式提供的,可以方便的调用,还有就是C语言可以和底层直接挂钩和 汇编语言有的一比哦。最最关键的C语言引入了指针的概念使得程序的执行效率更高。

2 C语言编译
编译环境是TURBO C系列,具体的TURBO C怎么使用请大家自己学习,一般上手还是比较快的,我用的是TURBO C2.0,是命令行界面,不过现在好像有图形界面的啦,好像是5.0吧,但是本人还是比较喜欢2.0的命令行,呵呵.

3常量和变量
定义:在程序运行中值不可以发生变化的是常量反之为变量。
常量:分为直接常量和符号常量(下面我用代码块表示)
直接常量
main()
{
int a;     /*int a为定义整形变量a*/
a=1+2;    /*1和2就是常量*/
printf(“a=%d\\n”,a); 
}
符号常量
#define PRICE 100 /*define是一条预处理命令作用是把标识符定义为后面的常量*/
#include <stdio.h>
void main()
{
int a,b;
a=100;
b=a*PRICE;
printf(“b=%d\\n”,b);
}
注意符号常量的值在作用域中是不能改变的也必能再去被赋值
#define PRICE 100 
#include <stdio.h>
void main()
{
int a ,b;
a=100;
PRICE=10;
b=a*PRICE;
printf(“b=%d\\n”,b);
}
这样就是 错的了!因为程序中的#define定义了PRICE就是代表了常量100。

变量:在C语言中用标识符标识变量名,而标识符只能有字母数字下划线三种字符组成,且第一个字符必须为字母或是下划线如:123(错),s23(对) ,_1s(对) ,但是有个东西大家要注意,就是标识符不能够和 C语言的关键字重名比如if(C语言的关键字) 要是用这个来命名就是错了哦,还有就是在C语言中大写和小写字母被认为是两个不同的字符如:a和A十不一样的,另外的ANSI中的C的标识符的长度没有定义,只是各个编译器都有自己的定义 TURBO就是长度不超过32位,超过了系统默认只读取前32位。
下面十C语言的关键字:
auto  break   case  char   char   conet   continue   default   do  double   else     enum   extern     flot   for   goto    if   int   long   register   return   short   signed   sizeof   static   struct   switch  typedef   union   unsigned  void  volatile  while
在使用变量的时候要对变量进行定义,如:
#include <stdio>
main()
{
int a=1 ,b=2 ,sum;
c=a+b
printf(“sum=%d\\n”,sum)
}
这一段程序就错了,应为C是没有定义的,程序就会报错

4C语言的数据类型
C语言的数据类型分为:标准数据类型,构造疏浚类型,指针数据类型,和空类型
标准数据类型又分为整形,实型(浮点),字符型
整形数据:
整形常量:就是整常数,在C语言中整常数可以用3种形式表示:
<1>十进制整数:如123,456,100,-1,这些都是可以作为合法的十进制整常数
<2>八进制整数:八进制就是逢八进一,在C语言中所有的以0开头的数都是八进制数,如123的八进制表示就是0123,它的十进制计算的方法为:1*8(2)+2*8(1)+3*8(0) [不好意思我不会打幂,括号中的数字就是幂数了] 
<3>十六进制整数:和八进制是一样的但是它的开头是以0X作为开头的哦,比如0x123.十进制的计算法和八禁止一样,就是把八换成十六。
整形变量:整形变量基本类型符为int,但是可以根据数值的范围将变量的定义为基本的整形,短整形,长整型。具体的定义方法为在int前加上修饰符,加上修饰符signed则是指“有符号数”如果unsigned就是无符号数,要是既不指定signed也不指定unsigned系统会默认为signed,实际上signed可以不用去写:
基本整形  int表示    (变值范围是-32768~32767)
短整形    short int表示 或者用short   (变值范围是-32768~32767)
长整型    long int表示 或者用long     (变值范围-2147483648~2147483647)
有符号基本整形[signed] int;  16比特  (变值范围是-32768~32767)
无符号基本整形unsigned  int ;16比特  (变值范围是0~32767)
有符号短整形[signed]  short [int] ;16比特  (变值范围是-32768~32767)
无符号短整形unsigned   int ;16比特  (变值范围是0~32767)
有符号长整型[signed]  long [int] ;32比特  变值范围-2147483648~2147483647)
无符号长整型unsigned  int;  32比特 ( 变值范围-0~2147483647)
下面看个例子:
#include <stdio>
main()
{
int a=1 b=32768 ,sum;
sum=a+b
printf(“sum=%d\\n”,sum) /*超过了定义变量的取值大小就会溢出,程序报错*/
}

整形变量的定义:如同前面说道变量那样,在C语言中对于变量必须是要先定义,如:
int a   指定a为整形
unsigned  short a  指定a为无符号短整形,
其实对于变量的定义还是可以放在函数中的某一段分程序内,但是作用域只限它所在的分程序,这个以后再说。 现在还是看代码
#include <stdio.h>
void main()
{
int a,b,c,d;
unsigned e;
a=1;
b=-3;
e=10;
c=a+e;
d=b+e;
printf(“a+e=%d,b+e=%d\\n”, c,d); 
}
运行结果大家可以发现a+e=11 b+e=7我还是相信例子比空的定义好的多。
例题1:求边长l=5正方体的体积
分析:边长是5就可以是用基本整形来做,正方体的体积为S=l*l*l,程序代码如下:
main()
{
int l;int s;
l=5;
s=l*l*l;
printf(“s=%d\\n”,s); 
}
例题2 某中学学校有5个班,分别有 40,50,45,47,43个人求总人数,要求把40人的班用符号常量表示。
程序代码如下
#define PRICE 40
main()
{
int a,b,c,d,sum;
a=50;b=45;c=47 ;d=43;
sum=a+b+c+d+PRICE;
printf(“sum=%d\\n”,sum);
}
实型数据
实型又称为浮点型,有两种表示方式:十进制小数,指数形式(123e3表示了123*10(3次方))
实型变量和常量
实型的变量分为单精度(float),双精度(double)和长双精度(long double)
float   32比特   有效数字(6~7)  
double   64比特   有效数字(15~16)
long double   128比特    有效数字(18~19)
其定义方法和整形是一样的就不多 做赘述。
要注意的是实型的常量都是用双精度作为处理,如:f=3.148753*45624.15
系统是先把3.148753和45624.15转换为双精度再做乘法运算,并前去前7位赋值给f。
再如
float a;
a=123456,789;
由于float只能接受7位有效数字所以最后两位数字是没有任何作用的,所以最后表示a=123456.7。
例题1:三角形三边长分别是1.2,2.3,3.4求三角形的周长。
分析三角形的三边都是小数,所以必须要用实型来做,代码如下
main()
{
float a,b,c,l;
a=1.2;b=2.3;c=3.4;
l=a+b+c;
printf(“l=%f”,l);

结果为6.900000

字符型数据
字符常量都是用单括号括的一个字符。如\’2\’ \’a\’……但是还是那句话哦,C语言是严格区分大小写的,\’A\’ \’a\’是不一样的,除了前面的字符常量以外,C语言还允许一种特殊的字符常量形式,就是以””开头的字符,其实这个就是转义字符
转义字符是一种特殊的字符常量。转义字符以反斜线””开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
下面我把常用的以””开头的常用的转义字符及其含义给大家看下:
转义字符  转义字符的意义
\\n      回车换行
\\t      横向跳到下一制表位置
\\v      竖向跳格
\\b      退格
\\r      回车
\\f      走纸换页
\\      反斜线符””
\’      单引号符
\\a      鸣铃
\\ddd     1~3位八进制数所代表的字符
\\xhh     1~2位十六进制数所代表的字符
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的\\ddd和\\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\\101表示字?quot;A” ,\\102表示字母”B”,\\134表示反斜线,\\XOA表示换行等。转义字符的使用
现在大家就知道为什么前面的程序中的 \\n 是什么意思了吧。
转义字符:反斜线后面跟一个字符或一个代码值表示
现在给大家一段代码
main()
{
    printf(“\\101 \\x42 C\\n”);
    printf(“I say:”How are you?”\\n”);
    printf(“\\C Program\\n”);
    printf(“Turbo \’C\'”);
}
结果就是:
A B C
Isay:”How are you?”
\\C Program\\
Turbo ‘C’
现在再给大家一段程序代码答案大家就自己想咯:
void main()
{
printf(” ab c\\t de\\rf\\tg\\n”);
printf(“h\\ti\\b\\bj k  l\\top\\n”);
}
关于字符常量和字符变量是和其他的一样的,最多就是赋值的时候用到了 char定义了 如:
char a;
a=\’a\’;
就是这样表示。而字符串的变量就是用字符数组来表示啦 
现在给大家一个很经典的题目,当然也还是一个很经典的算法了,就是对于大小写的转换,
例题1:写个程序使之可以对a,b大小写进行转换.
分析:对于大小写的转换好像的整形和实型中没有直接转换的办法,但是可以通过字符来进行,查过ASCII码发现大小写的转换关系是n-32,由此写出以下的代码:
void main()
{
char a,b;
a=\’a\’;
b=\’b\’;
a=a-32;
b=b-32;
printf(“%c%c”,a,b);
}
这个十小写转换大写,至于大写变成小写就要靠大家自己去写了哦。
字符串常量:是由一对双撇号括起来的单个字符。其实也就是多个字符组成的,如”I LOVE XZ” “china” “$@jsa“……这些都是合法的字符串常量。就不 多 做赘述。
现在给大家讲下关于不同类型数据间的转换,数据转换分为四种:
运算转换——不同类型数据混合运算时
赋值转换——把一个值赋给与其类型不同的变量时
输出转换——输出时转换成指定的输出格式
函数调用转换——实参与形参类型不一致时转换
运算转换规则:不同类型数据运算时先自动转换成同一类型
而转换的方法分为显示转换和隐示转换:
显式转换(强制转换)
一般形式:(类型名)(表达式) 如:
    (int)(x+y)
    (int)x+y
    (double)(3/2)
    (int)3.6  
说明:强制转换得到所需类型的中间变量,原变量类型不变 还是给大家一个例题:
main() 
{   float  x;
    int  i;
    x=1.23;    i=(int)x;
    printf(“x=%f,i=%d”,x,i);
}
结果就是:x=1.230000,i=1

隐式转换:
一般来说隐示转换主要在以下几个条件才会使用
运算转换——不同类型数据混合运算时
赋值转换——把一个值赋给与其类型不同的变量时
输出转换——输出时转换成指定的输出格式
函数调用转换——实参与形参类型不一致时转换
运算转换规则:不同类型数据运算时先自动转换成同一类型
在隐示转换示组要是优先级起作用,如double>int……

评论被关闭。