程序设计概述
C语言的基本元素
基本字符集
- 大写英文字母:A~Z
- 小写英文字母:a~z
- 阿拉伯数字:0~9
- 28个标点符号和运算符
- 下划线(_)、空格符、制表符和换行符
标识符
命名规则:
- 以字母(不论大小写)或下划线(_)开头
- 随后可以跟若干个(包括0个)字母、数字、下划线
输入输出
变量定义
变量定义语句:数据类型 变量名1,变量名2;
常用数据类型:
数据类型 | 字节数 |
---|---|
char | 1 |
char*(指针变量) | 8 |
short int | 2 |
int | 4 |
unsigned int(无符号整型) | 4 |
float | 4 |
double | 8 |
long | 4 |
标准输入输出函数
库文件:stdio.h,在调用标准输入输出函数时,文件开头应有以下预编译命令:1
2
3
或
输出函数printf
函数格式:1
printf("格式控制字符串",输出项1,输出项2,...);
1
printf("%d,%d\n",a,b);
格式字符的符号和功能:
格式字符 | 输出项类型 | 功能项说明 |
---|---|---|
d | 整型 | 以十进制形式输出带符号整数 |
o | 整型 | 以八进制形式输出无符号整数(不输出前缀0) |
X,x | 整型 | 以十六进制形式输出无符号整数(不输出前缀0x或0X;对于字母,x输出小写,X输出大写) |
u | 无符号整型 | 以十进制形式输出无符号整型 |
f | 实型 | 以小数形式输出单、双精度实数,隐含输出六位小数 |
e | 实型 | 以指数形式输出单、双精度实数 |
g | 实型 | 以%f,%e中较短的输出宽度输出单、双精度实数 |
c | 字符型 | 输出单个字符 |
s | 字符串型 | 输出字符串 |
修饰符 | 意义 |
---|---|
- | 输出值左对齐,若指定的宽度过大则右边填空格。若无-号则右对齐 |
+ | 输出符号位(正号或负号) |
空格 | 输出值为正时以空格代替,为负时打印出负号 |
# | 对c,s,d,u无影响;对o格式输出时加前缀o;对x输出加前缀0x;对e,f,g格式,当结果有小数点时给出小数点 |
l | 用于输出长整型(long) |
h | 用于输出短整型(short) |
m | 代表输出值占m列,主要用于输出整型、字符型和字符串型 |
m.n | 输出实数时代表输出值总宽度占m列,小数占n列。输出字符串时它代表输出总宽度占m列,输出n个字符 |
例11
2
3
4
5
6
void main()
{
long x=2366;
printf("%ld,%8ld,%+8ld\n",x,x,x);
}
运行结果:
输入函数scanf
函数格式:1
scanf("格式控制字符串",输入项1,输入项2,...);
- 输入项必为变量的地址,常用”&变量名”组成
- 格式控制字符串中允许包含格式编辑符和原样输入的字符串
格式控制字符如下:
格式字符 | 说明 |
---|---|
d | 输入带符号的十进制整数 |
o | 输入无符号的八进制整数(带前导0) |
x | 输入无符号的十六进制整数(带前导0x) |
u | 输入无符号的十进制整数 |
f,e | 输入带小数点的形式或指数形式的实型数 |
c | 输入一个字符 |
s | 输入字符串 |
例11
2
3
4
5
6
7
8
void main()
{
int a,b;
float x,y;
scanf("%d%d%f%f",&a,&b,&c,&d);
printf("a=%d,b=%d,c=%f,d=%f",a,b,c,d);
}
转义字符
如下表
转义字符 | 功能 |
---|---|
\0 | 字符串结束 |
\f | 换页 |
\n | 换行 |
\r | 回车不换行 |
\t | 跳到下一个制表位 |
\ | \字符 |
\’ | 单引号 |
\” | 双引号 |
\ddd | 用八进制表示的ASCII字符 |
\xhh | 用十六进制表示的ASCII字符 |
例11
2
3
4
5
int main()
{
printf("Hello\nWorl\x64");
}
运行结果:
顺序结构
变量赋值
- 使用赋值运算符“=”
1
2
3int num;
num=10;
或int num=10; - 通过输入函数进行赋值
1
2int num;
scanf("%d",&num);运算符与表达式
- 基本算数运算符
- 自增自减运算符
1
2
3int i=5,j,k;
j=i++;//j=5
k=++i;//k=7,i=7 - 复合赋值运算符
- 关系运算符(左结合)
1
< <= > >= == !=//前四优先级高
优先级 | 运算符 | 结合性 |
---|---|---|
1 | (){} | 左 |
2 | ! + - ~ ++ — | 右 |
3 | * / % | 左 |
4 | + - | 左 |
5 | << >> >>> | 左 |
6 | < <= > >= | 左 |
7 | == != | 左 |
8 | & | 左 |
9 | ^ | 左 |
10 | 按位或 | 左 |
11 | && | 左 |
12 | 或 | 左 |
13 | ?: | 左 |
14 | 复合运算符 | 右 |
- 赋值运算符
- 条件运算符
1
<表达式1>?<表达式2>:<表达式3>//若表达式1为真则取表达式2的值,若为假则取表达式3的值
- 位运算符
1
<<(左移n位(*2^n)) >>(右移()
选择结构
单分支结构
1
2
3
4if(条件)
{
语句;
}双分支结构
1
2
3
4
5
6
7
8if(条件)
{
语句1;
}
else
{
语句2;
}多分支结构
1
2
3
4
5
6
7
8
9
10
11
12
13if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
……
else
{
语句n;
}switch语句
1
2
3
4
5
6
7
8
9
10
11
12switch(表达式)
{
case 常量表达式1:
语句1;
case 常量表达式2:
语句2;
…………
case 常量表达式n:
语句n;
default:
语句n+1;
}
循环结构
while循环
1 | while(循环控制表达式) |
do-while循环
1 | do |
for循环
1 | for (表达式1;表达式2;表达式3) |
数组
一维数组
定义格式:数据类型符 数组名[常量表达式];
排序
选择排序
基本思想:从N个数中选出最大的数,与第一个数交换位置,其余N-1个数再选出最大的数,与第2个数交换位置,重复N-1遍
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18int a[N];
int temp,imax;
for (int i=0;i<N;i++)
scanf("%d",&a[i]);
for (int i=0;i<N-1;i++)
{
imax=i;
for (int j=i+1;j<N;j++)
{
if (a[j]>a[imax])
imax=j;
}
temp=a[imax];
a[imax]=a[i];
a[i]=temp;
}
for (int i=0;i<N;i++)
printf("%d",a[i]);
冒泡排序:
两两相邻的元素进行比较,若前面的数大则交换。
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18int a[N];
int temp;
for (int i=0;i<N;i++)
scanf("%d",&a[i]);
for (int i=0;i<N-1;i++)
{
for (int j=0;j<N-1-i;j++)
{
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for (int i=0;i<N;i++)
printf("%d",a[i]);