C语言复习

Posted by 梅 on 2025-01-10
Words 1.6k and Reading Time 6 Minutes
Viewed Times

程序设计概述

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
#include <stdio.h>

#include "stdio.h"

输出函数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个字符

例1

1
2
3
4
5
6
#include <stdio.h>
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 输入字符串

例1

1
2
3
4
5
6
7
8
#include <stdio.h>
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字符

例1

1
2
3
4
5
#include <stdio.h>
int main()
{
printf("Hello\nWorl\x64");
}

运行结果:

顺序结构

变量赋值

  • 使用赋值运算符“=”
    1
    2
    3
    int num;
    num=10;
    int num=10;
  • 通过输入函数进行赋值
    1
    2
    int num;
    scanf("%d",&num);

    运算符与表达式

  • 基本算数运算符
  • 自增自减运算符
    1
    2
    3
    int 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
    4
    if(条件)
    {
    语句;
    }

    双分支结构

    1
    2
    3
    4
    5
    6
    7
    8
    if(条件)
    {
    语句1;
    }
    else
    {
    语句2
    }

    多分支结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(表达式1)
    {
    语句1
    }
    else if(表达式2)
    {
    语句2
    }
    ……
    else
    {
    语句n;
    }

    switch语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch(表达式)
    {
    case 常量表达式1:
    语句1;
    case 常量表达式2:
    语句2;
    …………
    case 常量表达式n:
    语句n;
    default:
    语句n+1;
    }

循环结构

while循环

1
2
3
4
while(循环控制表达式)
{
语句序列;
}

do-while循环

1
2
3
4
do
{
语句序列;
}while(循环控制表达式);

for循环

1
2
3
4
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
18
int 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
18
int 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]);