目录
一、第一个C程序
二、基本数据类型、变量和常量
1、基本数据类型
2、变量
3、常量
三、输入和输出
1、用printf函数输出数据
2、用scanf输入数据
3、字符输入输出函数
4、转义字符
5、关键字
四、数组
五、选择(判断)语句
六、循环语句
1、while循环
2、for循环
3、do...while循环
七、函数
八、操作符
1、关系操作符
2、单目操作符
3、位操作符
4、条件操作符
5、逻辑操作符
九、指针
十、结构体
十一、预处理
1、#define定义标识符常量
2、 #define预定义宏
十二、文件操作
一、第一个C程序
#include<stdio.h>
int main()//主函数—程序的入口 main函数有且只有一个 main前面int表示main函数返回一个整型值
{
printf("Hello World!\n"); //printf打印函数 \n表示输出之后要换行
return 0; //返回,在这里完成任务
}
二、基本数据类型、变量和常量
1、基本数据类型
C语言中基本数据类型有一下几种。
类型 | 存储大小 | 值范围 |
char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -2,147,483,648 到 2,147,483,647 |
short | 2 字节 | -32,768 到 32,767 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
float | 4 字节 | 1.2E-38 到 3.4E+38 |
double | 8 字节 | 2.3E-308 到 1.7E+308 |
2、变量
变量分为全局变量和局部变量两种,变量的名字是一种“标识符”,标识符的构造规则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,C语言的关键字不可以用作标识符。我们以下面的程序为实例。
#include <stdio.h>
int a = 9;//此处a为全局变量 全局变量定义在代码块({})之外的变量
int main()
{
int b = 6;
printf("%d", a);//此处b为局部变量 局部变量定义在代码块({})之内
return 0;
}
注意:
(1)C语言中所有的变量在使用之前必须定义或声明,所有变量必须有确定的数据类型,程序运行过程中不能改变变量的类型。
(2)所有变量在第一次使用之前应该被赋值一次。
(3)全局变量和局部变量的名字一般不要重复,容易产生bug。
(4)当全局变量和局部变量重复时,局部变量优先。
3、常量
(1)普通常量。 例如: 1,2
(2)const修饰的常变量。例如: const int A=1 A不能再改变
(3)#define定义的标识符常量。例如: #define max 1 max为标识符,代表1
(4)枚举常量。例如:
enum Sex
{
MALE,
FEMALE,
SECRET
};
三、输入和输出
在C语言中用来输出和输入的主要是printf函数和scanf函数。这两个函数是格式输入和输出函数。用这两个函数时,程序员必须根据数据的不同类型指定不同的格式。
1、用printf函数输出数据
(1)printf函数的一般格式:
printf(格式控制,输出列表)
①格式控制包括两个信息:
格式声明:%+格式字符,作用为将输出的数据转换为指定的个时候输出
普通字符:需要在输出是原样输出的字符。例如逗号、空格和转换符等等
②输出列表:
程序需要输出的一些数据,可以是常量、变量或表达式。
(2)格式字符
①d格式符:用来输出有符号的十进制整数(正数的符号不输出)
注意:可以在格式声明中指定输出数据的域宽(所占的列数),例如用“%5d”表示输出的数据占5列,输出的数据显示在5列区域的右侧。
printf("5d\n",12)
输出结果:
12(12前面由有3个空格)
另外:%lf表示长整型 %llf表示双长整型
②c格式符:输出一个字符(也可指定输出数据的域宽)
注意:一个整数若在0—127范围中,也可以使用“%c”是指按字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符
short a=121;
printf("%c",a);
输出结果:y
如果整数较大,则把他的最后一个字节信息以字符形式输出
int a=377;
printf("%c",a);
输出结果:y
00000000
00000000
00000001
01111001
最后一个字节信息为01111001,十进制表示为121
③s格式符:输出一个字符串
④f格式符:以小数形式输出实数(包括单、双精度、长双精度)
%f:由系统根据数据的实际情况决定数据所占的列数,整数部分全部输出,小数部分输出6位
%m.nf:输出的数据占m列,包括n位小数
%-m.nf:数据长度不超过m时数据向左靠,右端补空格
⑤e格式符:以指数形式输出实数
如果不指定输出数据所占的宽度和数字部分的小数位数,许多编译系统会自动给出数字部分的小数位数为6位,指数部分占5列。
printf("%e",123.456)
输出结果:
1.23456e+002
⑥其他格式:
%i—按十进制整型数据的实际长度输出
%o—以八进制整数形式输出
%x—以十六进制整数形式输出
%u—输出无符号行数据(十进制)
2、用scanf输入数据
(1)scanf一般格式:
scanf(格式控制,地址表列)
(2)scanf应该注意的问题:
①scanf函数中格式控制后面一概是变量地址,而不是变量名
②如果在格式控制字符串中除了格式声明以外还有其它字符,则在输入数据时在对应的位置上应该输入与这些字符相同的字符。
scanf("a=%d,b=%d,c=%d",&a,&b,&c)
应输入a=1,b=3,c=2
③在用"%c"格式声明输入字符时,空格字符和“转义字符”中的字符都作为有效字符输入。
scanf("%c%c%c",&a,&b,&c)
在执行此函数时应该连续输入3个字符,中间不要有空格,例如:
abc
④在输入数据时,如输入空格、回车、Tab键或遇非法字符(不属于熟知的字符),认为该数据结束.
scanf("%d%c%f",&a,&b,&c)
若输入1234a123o.26
a就为1234 b就为a c就为123(123后出现字母o就认为该数值数据到此结束,后面几个字符没被读入)
3、字符输入输出函数
(1)用putchar函数输出一个字符
①putchar函数的一般形式:
putchar(c)
#include <stdio.h>
int main()
{
int a = 66;
putchar(a);
putchar('\n');//输出换行字符
return 0;
}
输出结果: B
②putchar(c)中的c可以是字符常量、整型变量、字符变量或整型变量(其值在ASCII代码范围内)
(2)用getchar函数输入一个字符
①getchar函数的一般形式:
getchar(c)
②也可在printf函数中输出刚接收的字符
printf("%c",getchar())
③输入缓冲区
#include <stdio.h>
int main()
{
int ch,ret = 0;
char a[20] = { 0 };
scanf("%s", a);//数组本身就是一个地址
printf("请确认(Y/N):>");
while ((ch = getchar()) != '\n')
{
;
}//用来接收输入缓冲区中存的数据(scanf点回车输入结束,此时回车前面的数被scanf读取,\n还在输入缓冲区
ret = getchar();
if (ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
另外
%d——打印整型
%C——打印字符
%f——打印浮点数字(小数)
%p——以地址形式打印
%x——打印16进制
%s——打印字符串
%lf——打印双精度浮点数
4、转义字符
转义字符 | 意义 |
\t | 水平制表 |
\v | 垂直制表 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\a | 警告字符,蜂鸣 |
\b | 退格符,将当前位置移到前一列 |
\f | 换页符,将当前位置移到下页开头 |
\n | 换行符,将当前位置移到下一行开头 |
\r | 回车符,将当前位置移到本行开头 |
#include <stdio.h>
int main()
{
printf("c:\test\11\test.c");
return 0;
}
输出结果:
c : est est.c
#include <stdio.h>
int main()
{
printf("%c\n", '\x61');
//“\x61”是两个十六进制数字,换算成十进制 6*16^1+1*16^0=97
//查ASCII代码对照表可知97代表a
return 0;
}
输出结果:
a
5、关键字
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
四、数组
数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
数组定义方式:
数组数据类型 数组名 [元素个数]
在下面这个程序中我们对数组定义、初始化、数组元素的应用进行示例。
#include <stdio.h>
int main()
{
int a1[];//定义一个数组并没有指定数组元素的个数
int a2[10];//定义一个数组,数组元素的个数为10
int i;
//对数组进行初始化,数组下标从0开始
for(i=0;i<10;i++)
{
a2[i]=i;
}
printf("%d",a2[9]);//打印数组a2中最后一个元素的值 注意:数组最后元素的下标为数组元素个数-1
}
我们对字符数组(字符串)单独说明
#include <stdio.h>
int main()
{
char arr1[] = "abc";//数组 字符串""
//"abc"---'a','b','c','\0'
//字符串结尾默认放'\0' '\0'——字符串结束标志 '\0'是一个字符,字符的值是0
char arr2[] = { 'a','b','c' };//a b c后面没有遇到结束标志,所以后面就随便输出
char arr3[] = { 'a','b','c' ,0};//字符串 ' '
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
输出结果:
abc
abc烫烫烫烫蘟bc
abc
#include <stdio.h>
#include <string.h>//strlen的头文件
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
printf("%d\n", strlen(arr1));//strlen(计算字符串长度)--string length
printf("%d\n", strlen(arr2));//计算字符串长度时后边没有遇到字符串结束标志计算直到\0
return 0;
}
输出结果:
3
15(随机值)
注意: 字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
五、选择(判断)语句
C语言中有if…else...和switch两大种选择(判断)语句,我们以下面的程序为例。
if...else..语句的基本形式:
if(判断条件)
{
可执行语句;
}
else
{
可执行语句;
}
注意:一般情况下if/else后面的语句要写在{}内,如果不写{}编译器会判定if/else后面所接的第一条语句为if/else条件的执行语句。
#include <stdio.h>
int main()
{
int a = 100;
int b = 200;
if (a > b)//如果a>b为真则执行if后{}中的语句,否则执行else后面{}中的语句
{
printf("%d\n", a);
}
else
{
printf("%d\n", b);
}
return 0;
}
输出结果:
200
switch语句一般形式:
switch(表达式)
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
...
default:语句n+1;
}
#include <stdio.h>
int main()
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch(a)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
default:printf("error\n");
}
}
六、循环语句
C语言中有while、for、do...while几种循环。
1、while循环
while 循环的语法:
while(循环条件)
{
可执行语句;
}
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int n=5;
while(n--)//逆序输出数组中的数
{
printf("%d\n",a[n]);
}
return 0;
}
输出结果:
5
4
3
2
1
2、for循环
for 循环的语法:
for ( 执行语句1;循环条件; 执行语句2 )
{
可执行语句;
}
for循环会先执行执行语句1,然后判断此次循环是否符合循环条件,如果符合则执行{}中的可执行语句,然后执行执行语句2,否则执行for循环的下一条语句 。
注意:执行语句1、执行语句2可以为空。
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int n;
for(n=4;n>=0;n--)//逆序输出数组中的数
{
printf("%d\n",a[n]);
}
return 0;
}
输出结果:
5
4
3
2
1
3、do...while循环
do...while 循环的语法:
do
{
可执行语句;}while(循环条件);
do...while执行过程为先执行可执行语句一次,然后判断是否符合循环条件,如果符合则再执行{}中的可执行语句,否则执行do...while的下一条语句。
#include <stdio.h>
int main ()
{
int a = 1;
do
{
printf("%d\n", a);
a++;
}while(a<10);
return 0;
}
输出结果:
1
2
3
4
5
6
7
8
9
七、函数
在C语言中,每一个C程序都至少有一个函数,即主函数main(),C语言也可以定义简单的函数,函数的定义包括函数声明和函数主体,C 语言中的函数定义的一般形式如下:
返回类型 函数名称( 形参列表)
{
可执行语句;
}
下面通过一个简单地程序演示函数的声明、函数主体和函数调用。
#include <stdio.h>
int Max(int x, int y)//函数的声明
{//函数主体
if (x > y)
return x;//函数返回值
else
return y;
}
int main()
{
int a = 10;
int b = 20;
int max = Max(a, b);//对函数进行调用
printf("max=%d\n", max);
return 0;
}
输出结果:
max=20
八、操作符
1、关系操作符
== | 相等(注意:"="为赋值) |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
!= | 不相等 |
2、单目操作符
+ | 正值 |
- | 负值 |
& | 取地址 |
* | 解引用 |
~ | 对数按位取反 |
-- | 自减 |
++ | 自增 |
() | 强制类型转换 |
3、位操作符
& | 按位与 | 同1为1,其他都为0 |
| | 按位或 | 同0为0,其他都为1 |
^ | 按位异或 | 同为0,异为1 |
& 按位与
A=011 B=101
C=A&B=001=1
| 按位或
A=011 B=101
C=A|B=111=7
^ 按位异或
A=011 B=101
C=A^B=110=6
4、条件操作符
条件操作符基本形式:
a?b:c
说明:如果表达式1(a)结果为真,那表达式2(b)要被执行,表达式2(b)的结果是整个表达式的结果;如果表达式1(a)结果为假,那表达式3(c)要被执行,表达式3(c)的结果是整个表达式的结果.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int max;
max = (a > b ? a : b);
printf("max=%d\n", max);
return 0;
}
输出结果:
max = 20
5、逻辑操作符
&& | 逻辑与 |
|| | 逻辑或 |
#include <stdio.h>
int main()
{
//真—非0
//假—0
int a = 3;
int b = 5;
int c = a && b;//&&—逻辑与 3、5为真,输出就为1 若a为0,输出为0
printf("c=%d\n", c);
return 0;
}
输出结果:
c = 1
九、指针
指针也就是内存地址,计算机中所有程序的运行都是在内存中进行的,C语言中每一个变量都有一个内存位置。指针变量是用来存放内存地址的变量,我们可以用'&'来访问它的地址。
指针变量的声明:
数据类型 *变量名称;
在下面的程序中我们对指针的使用进行简要示例。
#include <stdio.h>
int main()
{
int a = 10;
int* p = &a;//&——取地址操作符取a的地址
printf("%p\n", p);
*p = 20;//*p表示把p位置所储存的变量提取出来 然后把值改为20
printf("%d\n", a);
return 0;
}
输出结果:
00EFF964
20
注意:指针也有大小, 指针在32位平台是4个字节,64位平台是8个字节。
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(double*));
return 0;
}
输出结果:
4
4
4
十、结构体
C语言中用户可以自定义结构,它允可以存储不同类型的数据项。
结构体的定义:
struct name {
member-list;//成员列表
member-list;
...
} variable-list(结构体变量);
在下面程序中对结构体进行简单示例。
#include <stdio.h>
#include<string.h>
struct Book//创建一个结构体类型
{
char name[20];
short price;
};
int main()
{
struct Book b1 = { "C程序设计",55 };
printf("书名:%s\n", b1.name); //b1.name——访问结构体中的成员
printf("价格:%d元\n", b1.price);
b1.price = 50;//对结构体中的成员进行修改
strcpy(b1.name, "c++");
printf("修改后的书名:%s\n", b1.name);
printf("修改后的价格:%d元\n", b1.price);
return 0;
}
输出结果:
书名:C程序设计
价格:55元
修改后的书名:c++
修改后的价格:50元
十一、预处理
1、#define定义标识符常量
C语言中可以用#define定义标识符常量,基本格式为;
#define 常量名 常量
#define max 100//此处就表明max为100
#include <stdio.h>
int main()
{
int a = max;
printf("a=%d\n",a);
return 0;
}
输出结果:
a=100
2、 #define预定义宏
我们以两个程序示例来理解#define预定义宏
函数方式:
#include <stdio.h>
int Max(int x, int y)
{
if (x > y)
return x;
else
return y;
}
int main()
{
int a = 10;
int b = 20;
int max = Max(a, b);
printf("max=%d\n", max);
return 0;
}
输出结果:
max=20
宏的方式
#include <stdio.h>
#define Max(X,Y)(X>Y?X:Y)
int main()
{
int a = 10;
int b = 20;
int max = Max(a, b);
printf("max=%d\n", max);
return 0;
}
输出结果:
max=20
十二、文件操作
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 在C语言中可以用fopen()函数打开文件,用fclose()函数关闭文件。
fopen()函数原型:
FILE *fopen( const char * filename, const char * mode );
//filename 是文件名称,mode为访问模式
访问模式有以下几种:
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
下面通过一个程序对文件操作进行简单示例。
#include <stdio.h>
int main ()
{
FILE * pf;//定义文件指针
pf = fopen("test.txt","w");//以只写模式打开文件
if (pf!=NULL)
{
fputs ("fopen example",pf);//写入"fopen example"
fclose (pf);
}
return 0;
}
更多推荐
C语言基础知识入门(C语言初级知识汇总)
发布评论