c语言的发展、特点与程序结构

c语言的发展和特点

程序设计的基本方法

算法+数据结构=程序

算法的概念及其表示

image-20220923095642504

c语言的基本结构

c语言程序基本结构

image-20220923101319858

image-20220923101404057

c语言的字符集、关键字和标识符

image-20220923101552165

c语言的字符集中不包含$,汇编语言中可以使用$

c语言的关键字

image-20220923101937089

image-20220923102246093

scanf和printf不是关键字

标识符

image-20220923102038336

基本数据类型、运算符和表达式

数据与数据类型

image-20220923104418584

常量、变量和标准函数

常量

常量是程序执行期间其值保持不变的量

c语言中有以下几种类型的常量

整型常量

整型常量有三种形式:

  • 十进制整数:如:11,-13,0,65535,…
  • 八进制整数:由数字0开头
  • 十六进制整数:由0x开头

整数又可分为:

  • 长整型整数:用后缀L/l表示
  • 无符号整数:用后缀U/u表示
  • 无符号长整数:用后缀UL/ul表示

实型(浮点型)常量

image-20220923112218213

字符常量

image-20220923112638008

转义字符

image-20220923112738685

要注意在转义字符中,用\ddd表示用八进制数字表示字符的ascii码,用\xhh表示用十六进制数字表示字符的ascii码,区别于表示数字时的0前缀和0x前缀

字符串常量

image-20220923115023674

变量

image-20220923120052718

整型变量

image-20220923120237812

实型变量

image-20220924093832051

标准函数

image-20220924094843331

海伦公式求三角形的面积:

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:

S=p(pa)(pb)(pc)p为半周长,即三角形周长的一半S=\sqrt{p(p-a)(p-b)(p-c)}\quad\text{p为半周长,即三角形周长的一半}

基本运算符及其表达式

image-20220924100505857

基本算术运算符

image-20220924100537453

整数相除时会丢掉余数,浮点数相除时不会丢掉余数

自增、自减运算符

image-20220924101133170

自增自减运算符只能用于变量

image-20220924103406809

不同数据类型间的转换和运算

image-20220924104500010

image-20220924104727225

image-20220924110038077

关系运算(比较运算)

逻辑运算符与逻辑表达式

image-20220924111349694

逻辑与、逻辑或都具有短路特性

image-20220924114132903

运算顺序

image-20220924114335073

三目运算符

image-20220924120122509

赋值运算符和赋值表达式

image-20220924121116004

C/C++中 (A = B) 返回得到是赋值号(=)的左面的值

image-20220925101723056

逗号运算符和逗号表达式

image-20220925102138589

运算符的优先级

image-20220925113017564

基本语句与顺序结构

c语言程序的基本语句

表达式语句、函数调用语句、控制语句、复合语句、空语句,赋值语句,;是c语句结束标志

数据的输入输出

printf()函数

image-20220925120213606

image-20220925120636239

image-20220925121110398

image-20220925122637915

image-20220926082405329

image-20220926082851429

scanf()函数

image-20220926083250333

image-20220926083414292

image-20220926083635189

scanf()函数输入实数时,不能用修饰符规定实数的精度,但是可以指定宽度

image-20220926083840831

image-20220926084036987

image-20220926084405109

当格式输入时同时有%c和%d时,需要注意在下一个输入如果是%c时,%c会接收空格,如果下一个输入时%d时,%d不会接收空格

getchar()函数

image-20220926090356001

putchar()函数

image-20220926090806053

选择结构

用if语句实现选择结构

if语句的三种形式

单分支结构

双分支结构

多分支结构

image-20220926100453529

if语句的嵌套

用switch语句实现选择结构

image-20220926103914800

default后若还有case,则执行完毕default之后且没有break,还会继续去执行后面的case语句

image-20220926104558275

循环结构

while语句

image-20220927113830246

do-while语句

for语句

image-20220927121940064

image-20220927122002311

image-20220927122022669

循环的嵌套

break语句、continue语句和goto语句

习题

  • image-20220927144756590

    解答

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <stdio.h>
    int main(){
    double sum,t=0,x,y = 1,z;
    x=1;
    while (t<10){
    printf("%f的阶乘是:",t);
    for (int i = t;i>0;i--)
    {
    y *=i;
    }
    printf("%lf\n", y);
    if (t==0){
    x = 1;
    } else{
    for (int i = t; i > 0;i--){
    x *= x;
    }
    }
    sum += x/y;
    printf("sum是%lf\n",sum);
    y=1;
    t++;
    x=1;
    }
    printf("%lf",sum);
    return 0;
    }

数组

一维数组

image-20220929172515360

image-20220929172837856

例题

image-20220930194943442

c语言代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<stdio.h>
int main(){
/*
定义一个长度为6的数组,里面只保存5个数,
给要插入的数留一个空间
*/
int array[6]={1,2,3,5,6},p=0,num;
scanf("%d",&num);
/*
先判断p<5,当p=5时退出循环,
利用短路原理防止数组访问越界,
需要注意逗号表达式的值是最后一个表达式的值
*/
while(p<5&&(printf("%d\n",array[p]),num>array[p])){
p++;
}
printf("p=%d\n",p);
/*
从数组最后向前循环,把要插入的数的位置直到最后的数全都后移一位
*/
for(int i=5;i>p;i--){
array[i]=array[i-1];
}
/*
要插入数字的位置已经空了出来,赋值数字
*/
array[p]=num;
for(int i=0;i<6;i++){
printf("%d ",array[i]);
}
return 0;
}

二维数组

image-20220930200658042

image-20220930200845799

image-20220930200945283

例题

image-20220930211842432

图解:

image-20220930212840124

c实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
int main(){
int x=0,y=0, array[5][5]={{1,1,1,1,1},
{1,1,1,1,1}
,{1,1,1,1,1}
,{1,1,1,1,1}
,{1,1,1,1,1}};
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
// 主对角线上元素和
if(i==j){
x+=array[i][j];
}
// 副对角线上元素和
if(i+j==4){
printf("i=%d j=%d\n",i,j);
y+=array[i][j];
}
}
}
printf("%d\n",x);
printf("%d\n",y);
// 输出二维数组
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
printf("%d ",array[i][j]);
}
putchar('\n');
}
return 0;
}

字符数组

image-20221001111443485

  • 字符数组中未定义的位置上会默认是'\0',整型数组中未定义的位置上会默认是0

  • 字符数组可以用

    1
    char c[5]={"abc"}

    来初始化,需要注意字符串结尾有一个\0, 如果要用字符数组保存此字符串时需要给字符串最后的没有显示出的\0留出位置。

image-20221001113310550

image-20221001113627232

字符串输出格式控制字符

image-20221001115656845

字符串输入函数

scanf()函数不能接收空格和制表符

gets()函数可以接收空格和制表符

image-20221001120153137

字符串输出函数

image-20221001123447845

字符串处理函数

image-20221001131352255

  • strcpy

    原型:char *strcpy (char * __dest, const char * __src);
    功能:将一个字符串(__src)拷贝到另一个字符串缓冲区中(__dest),并返回拷贝后的字符串指针;

    注意:strcpy()函数会把源字符串的结束符号\0也复制到目的字符串

  • strcat

    原型:char *strcat (char *__dest, const char *__src);
    功能:将一个字符串(__src)拼接到另一个字符串缓冲区中(__dest),并返回拼接后的字符串指针;

  • strlen

    原型:size_t strlen (const char *__s);
    功能:返回一个字符串(__src)的长度,即字节(符)数,这里仅考虑ASCII字符;

  • strcmp

    原型: int strcmp (const char *__s1, const char *__s2);
    功能:比较字符串__s1和字符串__s2,返回比较结果,如果相等,则返回0;
    比较方式:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止;
    返回结果:当s1<s2时,返回值<0;当s1=s2时,返回值=0;当s1>s2时,返回值>0;

函数

函数概述

函数的分类与定义

image-20221002104244065

image-20221002104319033

函数调用

函数的嵌套调用和递归调用

变量的作用域和生存期

image-20221003112941364

变量的存储类别

image-20221003115833127

内部函数和外部函数

指针

指针和指针变量的概念

image-20221003135603921

指向变量的指针变量

指针变量的定义

image-20221003140824864

指针变量的引用

指针变量的初始化

指针变量作为函数参数

指针与数组

指针变量的运算

image-20221004101909234

一维数组的指针

image-20221004104639055

image-20221004104907442

数组名作为函数参数

image-20221004115056865

字符串的指针和指向字符串的指针变量

image-20221004115515743

不能通过字符串常量指针修改字符串,因为字符串存储在常量区。而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。

指针的指针

指针数组

image-20221004124615635

指针的指针

image-20221004135326850

结构体

定义结构类型

image-20221005104219304

结构体类型变量所占字节数是其所有成员所占字节数之和

定义结构类型变量

image-20221005105721359

image-20221005111102539

image-20221005111113851

结构变量的引用

image-20221005112108307

共用体

image-20221005115942741

  • 共用体所占字节空间是其包含的变量中所占字节数最大的那个所占的字节空间
  • 共用体不可以同时给所有成员赋值,共用体不能同时存储所有在其中定义的变量