C语言教程
C语言结构
#include<stdio.h> /*引入头文件*/
int main(void) /*一个简单的C程序*/
{
int number; /*定义个名字叫做number的变量*/
number=2014; /*给number赋一个值*/
printf("Hello ! I am dotcpp.com\n"); /*像屏幕打印一句话*/
printf("This year is %d\n",number);
return 0;
}
预处理语句+主函数
预处理语句
预处理语句主要有三类构成,分别是宏定义(#define
),文件包含(#include
)和条件编译(#if
)。
宏定义(#define
)
宏定义相当于定义了一个全局变量,用全局变量来代替变量或者表达式。宏定义包含有参宏和无参宏。
宏定义
#define M (y*y+3*y);//无参宏,作用是指定标识符 M 来代替表达式(y*y+3*y)。
#define M(y) (y*y+3*y);//有参宏
宏调用
#define M(y) (y*y+3*y);//有参宏
int main(){
M(4);//输出的是4*4+3*4
}
文件包含(include)
(1)另外文件包含后面可以接<>
或者“”
,里面来包含要引入的文件(以下两种方式都是可以的),文件包含的作用是引入指定文件的所有内容。
#include "stdio.h"
#include <stdio.h>
尖括号表示在包含文件目录中去查找,而双引号则表示首先在当前的源文件目录中查找, 若未找到才到包含目录中去查找。
(2)一个 include 命令只能指定一个被包含文件,若有多个文件要包含,则需用多个 include 命令。
(3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。
条件编译(#if
)
条件编译存在3种形式
第一种形式:
#ifdef 标识符
程序段 1
#else
程序段 2
#endif
如果标识符被预定义过,则执行程序段1,否则执行程序段2。如果程序段2为空,则else可以不写。
#ifdef 标识符
程序段
#endif
第三种形式:
#ifndef 标识符
程序段 1 #else
程序段 2 #endif
如果标识符没有被预定义过,则执行程序段1,否则执行程序段2。
第三种形式:
#if 常量表达式
程序段 1 #else
程序段 2 #endif
如果常量表达式为真,则执行程序段1,否则执行程序段2。
其它预处理指令
1.#error
:强制停止编译。
2.# error-message
:遇到#error 指令时,显示错误信息和作者预先定义的其它内容。
3.# line
:改变__LINE__
和__FILE__
的内容,__LINE__
和__FILE__
都是编译程序中预定义的标识符。
4.# pragma
:允许由此向编译程序传入各种指令。
C语言的数据类型
基本数据类型
C语言的基本数据类型为:整型、字符型、浮点型。分别是:short
、int
、long
、char
、float
、double
等的有符号和无符号类型,有符号一般包含正负数,而无符号一般指的是正数。
下面列出了在32位操作系统下 常见编译器下的数据类型大小及表示的数据范围:
关键字
为了实现相应的功能,c语言中提供了一些关键字,在定义变量的时候注意不要和这些关键字重名,以下是c语言中的32个关键字。
C语言中的基本输入和输出
字符输出函数putchar
putchar
函数是字符输出函数,其功能是在终端(显示器)输出单个字符。
int putchar(int ch);
ch表示要输出的字符内容,返回值作用为:如果输出成功返回一个字符的ASC
码,失败则返回EOF
即-1。
putchar(‘A’); /*输出大写字母A */putchar(x); /*输出字符变量x的值*/putchar(‘\n’); /*换行*/
字符输入函数 getchar
getchar
函数的功能是接收用户从键盘上输入的一个字符。
char c; /*定义字符变量c*/c=getchar(); /*将读取的字符赋值给字符变量c*/
格式化输出函数printf
printf
函数叫做格式输出函数,其功能是按照用户指定的格式输出内容。printf
函数的格式为:
printf(“格式控制字符串”,输出表项);
格式控制字符串有两种:格式字符串和非格式字符串。非格式字符串在输出的时候原样打印;格式字符串是以%打头的字符串,在”%”后面跟不同格式字符,用来说明输出数据的类型、形式、长度、小数位数等。
格式字符串的形式为: % [输出最小宽度] [.精度] [长度] 类型
以下是格式字符串的类型
printf
中的修饰符*
,它的作用是由程序来控制宽度。
/*使用可变宽度输出字段*/#include<stdio.h>int main(void){ unsigned width,precision; int number = 256; double weight = 25.5; printf("Please input number's width:\n"); scanf("%d",&width); printf("The number is: %*d\n",width,number); printf("Then please input width and precision:\n"); scanf("%d %d",&width,&precision); printf("Weight = %*.*f\n",width,precision,weight); return 0;}
格式化输入函数scanf
scanf
函数称为格式输入函数,即将输入的内容格式化。scanf
函数的调用的一般形式为:
scanf(“格式控制字符串”,输入项地址列表);
输入项地址列表由地址运算符&
后跟变量名组成。
scanf
函数中格式字符串的构成与printf
函数基本相同,但使用时有几点不同.
(1) 格式说明符中,可以指定数据的宽度,但不能指定数据的精度。例:
float a;scanf(“%10f”,&a); //正确scanf(“%10.2f”,&a); //错误
(2) 输入long
类型数据时必须使用%ld
,输入double
数据必须使用%lf
或%le
。
scanf()
函数所用的转换说明符与printf()
所用的几乎完全相同。主要区别在于printf()
把%f、%e、%E、%g、%G
同时用于float
类型和double
类型,而scanf()
只是把他们用于float
类型,而用于double
类型时要求使用l(字母l)修饰符。
修饰符*在scanf中()
的用法是使函数跳过相应的输入项目。
/*用*跳过scanf接收的数字*/#include<stdio.h>int main(void){ int num; printf("Please enter three number:\n"); scanf("%*d %*d %d",&num); printf("The last number is %d\n",num); return 0;}
scanf()
的返回值,scanf()
函数返回成功读入的字符的个数,如果没有读取字符,则返回0
。
运算符和表达式
基本运算符
赋值运算符
数学匀速符
#