C程序设计
第一、二章 基础
计算机语言:计算机和人沟通的语言
程序:一组计算机可以识别和执行的指令
程序设计:从设计开始,到形成文档的整个过程
- 机器语言:计算机能直接识别和接的二进制代码
- 汇编语言:机器语言的符号化,用英文和数字表示指令的符号语言
- 高级语言:接近人使用的自然语言,但也需要“翻译”,例如C语言、java
# include <stdio.h> # 预处理命令,<stdio.h>头文件
int main(){ # main表示主函数
程序体
return;
}
#include <stdio.h>
int main()
{
int a,b,sum;
a = 123;
b = 456;
sum = a+b;
printf("sum is %d\n",sum);
return 0;
}
// 单行注释。/* 多行注释 */
源程序:未编译的按照一定程序设计语言规范写的文本文件
目标程序:为源程序经编译可被计算机执行的代码集合
可执行程序:将所有编译后得到的目标模块连在一起,生成一个可供计算机执行的目标文件
算法:解决问题的求解步骤
五大特性:有穷性、确定性、可行性、输入输出
流程图
N~S流程图的三种基本结构:顺序、选择、循环
顺序程序c=5/9(f-32)
第三章 顺序程序设计
常量
整型常量:1000、123、-356、0等
实型常量:十进制形式;123.45,指数形式;12.34e3
字符常量:普通字符;‘a’,转义字符;‘\n’,‘\t’
字符串常量:‘boy’,‘123’
符合常量:# define PI 3.1416
标识符:只能由字母、数字、下划线组成,且第一位不能是数字
数据类型
整型 | int | 4字节 |
---|---|---|
短整型 | short | 2字节 |
长整型 | long | 4字节 |
字符型 | char | |
布尔型 | bool | |
float | 4字节 | |
double | 8字节 |
ASCII:‘A’:65;‘a’:97;‘0’:48;
强制类型转化
(类型名)(表达式)
输入输出
d | 输出一个有符号的十进制数 |
---|---|
c | 输出一个字符 |
s | 输出一个字符串 |
f | 输出一个实数 |
u | 输出一个无符号的十进制数 |
putchar 输出一个字符
getchar 输入一个字符
第四章 选择结构设计
逻辑运算符
&& | 与 |
---|---|
|| | 或 |
! | 非 |
if(表达式)
语句1
else
语句2
switch(表达式)
{
case 常量:语句1
case 常量:语句2
。。。。。。
}
例句:
scanf("%c",&grade)
switch(grade)
{
case 'A':printf("85~100\n");
break;
case 'B':printf("70~84\n");
break;
}
第五章 循环结构
do
语句
while(表达式);
先执行循环体,再判别表达式
第六章 利用数组处理批量数据
定义一维数组
类型符 数组名[常量表达式];不能是变量
一维数组初始化
int a[5] <==> int a[]={1,2,3,4,5}
定义二维数组
类型符 数组名[常量表达式] [常量表达式];
字符数组中以’\0’作为结束标志,不会输出
如果输入字符数组名,不需要加地址符&
puts 输出字符串的函数
puts (字符数组):puts(str)
gets 输入字符串的函数
gets (字符数组):gets(str)
注:gets、puts函数只能输入或输出一个字符串
strcat 字符串连接函数
strcat(字符数组1,字符数组2)
strcpy和strncpy 字符串复制函数
strcpy(字符数组1,字符数组2):将字符串2复制到字符串1中
strncpy(字符数组1,字符数组2,n):将字符串2前n个字符复制到字符串1中
strcmp 字符串比较函数
strcmp(字符数组1,字符数组2)
strclen 测字符串长度的函数
strclen(字符数组)
strupr 转换为大写的函数
strlwr 转换为小写的函数
第七章 模块化程序设计
函数调用
调用前需要先声明
#include <stdio.h>
int main
{
void print_start();
void print_message();
print_start();
print_message();
return 0;
}
void print_start()
{
printf("-----------------")
}
void print_message()
{
printf("本人最帅,部接受反驳")
}
函数的返回值是通过函数中的return语句获得的。
如果调用库函数,需要用# include指令将调用有关库函数所需的信息“包含”到本文件中,如 #include <stdio.h>。
函数的声明方式
- 函数类型 函数名(参数类型1 参数1,参数类型2 参数2)
- 函数类型 函数名(参数类型1,参数类型2)
C的存储类别
- 自动的(auto):调用时习题回给变量分配存储空间,但结束后也会自动释放
- 静态的(statis):调用时习题回给变量分配存储空间,但结束后依然保留
- 寄存器的(register):一般情况下存放在内存中,需用时再送到运算器中
- 外部的(extern):
内部函数、外部函数
- 内部函数:再定义函数时,前加static,即只能被本文件中其他函数所调用。static 类型名 函数名(形参)。
- 外部函数:可供其他文件调用。extern int fun (int a,int b)
第八章 指针
用于通过地址能找到变量单元,地址指向该变量单元,将地址形象化称为“指针”。因此指针指向的时变量的地址。
通过指针引用数组元素
- 下标法
- 通过数组名计算数组元素地址,找出元素的值
int main()
{
int a[10];
int i;
printf("please enter 10 integer numbers:")
for(i=0;i<10;i++)
scanf("%d",&a[i])
for(i=0;i<10;i++)
printf("%d",*(a+i))
return 0;
}
- 用指针变量指向数组元素
{
int a[10];
int i,*p;
printf("please enter 10 integer numbers:")
for(i=0;i<10;i++)
scanf("%d",&a[i])
for(p=a;p<(a+10);p++)
printf("%d",*p)
return 0;
}
两中运算结果相同,但第二种效率更高。用指针变量直接指向元素,不必每次都重新计算地址。
通过指针引用字符串
{
char string[]="I love China!";
printf("%s\n",string);
printf("%c\n",string[7]);
return 0;
}
第九章 结构体
结构体
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
结构体初始化和引用
{
long int num;
char name[20];
char sex;
char addr[20];
}a={10101,"LILIN",'M',"BeiJing"}; # 初始化
pirntf("NO:%d.....",a.num,a.name....) # 引用
定义结构体数组
struct Person{
char name[20];
int count;
} leader[3];
struct Person leader[3]= {"Li",0},{"Zhang",0},{"Wang",0}; # 初始化
共用体
union Data{
int i;
char ch;
float f;
} a,b,c; # 声明的同时定义变量
也可以拆开:union Data a,b,c;