C语言--第一篇导言

                                    C语言重生之路--导言

       一段写在前面的话,本人现在研二,就读与于某理工大学自动化专业,研究方向是计算机视觉,编程能力一般般。今夏要找工作了,借着这段时间看书总结的机会,决定把一些平时容易忽略的知识给写一写,本博客仅做学习交流i之用。不装B,只是写给自己,当是自己读书的一些心得体会。这个系列是根据《C程序设计语言》一书来学习的,中间主要是例举一些C语言学习的难点,重点。文笔一般,欢迎吐嘲。哈哈。

1.1 引言及入门

      C语言是一种通用的程序设计语言,它实在Unix系统上开发的,而且Unix系统本身以及大多数编译器都是C语言写的,所以C也被称为“系统编程语言”。C语言来源于B语言,包括整型,浮点型,字符型3种基本数据类型,通过指针,数组,联合等派生的数据类型。函数是C语言的基本单位,C程序都是从main()函数开始执行的,函数的返回值类型有基本类型、空型、结构体型、联合、指针类型。

      ANSI C是美国国家标准协会发布的C语言标准,这是C的第一个标准,后来,ANSI 采纳了 ISO/IEC 9899:2011 标准。这个标准通常即C11,它是C程序语言的现行标准。GCC,VC++,ARM REALVIEW支持该标准。

      ISO C标准是C语言的国际标准也就是C11,他定义了C的语法和语义,还定义了其标准库(24个)。比如访问操作系统(读写文件)、格式化输入/输出、内存分配和字符串操作等函数。

      在C语言中,所有的变量必须先声明后使用。声明通常放在函数起始处。注意:在允许使用某种类型变量值的任何场合,都可以使用该类型的更复杂的表达式。比如下面的代码:

    

#include <stdio.h>
int main()
{
        int fahr;
        for (fahr = 0; fahr <= 300; fahr = farh + 20)
                printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr - 32));
        rerutn 0;
}

printf函数第三个参数变成了表达式,其实 for语句的初始化部分、条件部分与步长部分都可以是任何表达式。

1.2 符号常量

       幻数是在程序中类似300,20这样的数字常量。但是这样的数字常量通常阅读起来很头疼,处理幻数的一种方法是使用符号常量,用#define指令可以定义。如  #difine  名字  替换文本     定义之后,名字将相应的替换文本替换掉。名字的命名也是以数字母开头的字母和数字序列;替换文本也不限于数字。符号常量的定义成为宏定义,在程序与编译时完成替换。

1.3 字符输入/输出

      文本流:是由多行字符构成 的字符序列。这里顺便提一下ASCII码,ASCII码是将字符用二进制表示的编码。我们知道文本流以行序列的形式出现,每一行均已换行符结束。因此统计文本流的个数等价于统计换行符的个数。如下面的代码

#include <stdio.h>

int main()
{
       int count,c;
       count = 0;
       while ((c =getchar()) != EOF)
                if (c == '\n')
                    ++count;
       printf("%d\n",count);
       return 0;
                
}

注意"\n"与‘\n’的区别。"\n"表示字符串,它有'\'和'n'两个字符组成,而'\n'仅仅表示换行符的意思,ASCII值65。

举个例子 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替?

#include <stdio.h>

int main()
{
	int c, count;
	while ((c = getchar()) != EOF)
		if (c != ' ')
		{
		  putchar(c);
		  count = 0;
		}
		  else if (count >= 0)
		{
		 if (count >= 1)
		  ++count;
		 else
		  {
		  putchar(c);
		   ++count;
		  }
		} 
		
	return 0;
}

注意,文件结束符为Chrl+D字符,即EOF,这里再顺便提一下,EOF定义在头文件<stdio.h>中,它是一个整形数,而 getchar()函数输出的是字符型数据,我们使用c = getchar()也是考虑到可能会输入文件结束符,所以才定义c为int型,int型完全可以存储char型数据。以0开头的是8进制,0x开头的是16进制。

1.4 数组和函数

       在C语言中,数组的下标总是从0开始的,而且数组的下标可以是任何整形表达式,包括整形变量(如i)以及整形常量。由定义可知,char类型的字符是小整形,因此char类型的变量和常量在算术表达式中等价于int类型的变量和常量。例如

int c; c - ‘0’就是一个整形表达式,

      函数是C语言的基本单位,函数定义的一般形式为:

      返回值类型  函数名 (0到多个参数声明)

         {

                声明部分

                语句序列

         }   

       比如 定义一个函数power ,int power (int base, int n)。power函数的参数使用的名字旨在powei函数内部有效,对其他函数都是不可见的:其他函数可以使用于之相同的参数名而不会起冲突。通常把圆括号内的参数称为形式参数,而吧函数调用中与形式参数对应的值称为实际参数。函数通过return语句把控制权返回给调用者。return 语句可以不带表达式,主调函数也可以忽略函数返回的值。旧式的函数声明中可以不带参数列表比如,int power(),默认返回也是int型:现在ANSI C标准还是支持这种声明与定义,但是强烈建议使用新式的函数声明方式。

      C语言在参数传递的时候是采用“值传递”的形式,FORTRAN函数是通过“引用传递”,而对于C而言,被调用的函数是不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。

     

int power(iint base, int n)
{
      int p;
      
      for (p = 1; n > 0; --n)
              p = p * n;
      return p;
}
上述代码中,对n的改变不会影响调用函数中原始参数的值。 

      而如果需要改变原始值的时候,则需要提供设置值的变量的地址(指针),如果是数组类型的话,就需要传入数组起始元素的位置或地址----并不复制数组元素本身。

1.5字符数组 外部变量与作用域

     字符数组也是C语言常用的数组类型,字符串常量以数组的形式存储时,以‘\0’为结束符,而‘\0’并不是普通文件的一部分。外部变量必须定义在所有函数之外,而且只能定义一次,定义后编译器在编译阶段将为它分配存储单元。外部变量使用时,需要用extern来进行声明。如 extern int line[20];不过在有些情况下可以省略。如果外部变量出现在使用它的函数之前,此时可以省略extern的声明,通常将外部变量定义在文件的开头。如果程序中包含过个源文件,而某个变量在file1中,在file2和file3文件中使用,那么在file2和file3中就需要使用extern声明来建立该变量与其定义之间的联系,

       通常情况下,如果要声明空参数的函数,则必须使用void关键字来进行显示调用。如 void getline(). 函数定义表示创建便利那个或分配存储单元,而声明指的是说明变量的性质,并不分配存储单元。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值