C语言基础

209 阅读8分钟

C语言概述

C语言是一种用途广泛、功能强大、使用灵活的过程性(procedural)编程语言,既可用于编写应用软件,又能用于编写系统软件

第一个C程序

#include <stdio.h>  // 包含头文件,stdio.h是标准的输入输出头文件,包含printf、scanf等函数的声明
// 函数首部(函数的第一行),包括返回值类型、函数名、参数(c语音参数也要定义类型)
int main(int a, int b) // main为主函数,有且只能有一个,c语言程序,从main函数开始执行,到main函数结束
{ // 花括号括起来的内容为函数体
// printf双引号内为格式控制会打印出来,用转义符%d可以输出表列对应的值,但是顺序要一一对应。
// 后面逗号隔开的为输出表列可以用逗号隔开写多个
    printf("demo为%d,%d",1,2); 
    return 0; // 将数据返回并结束函数。每一行代码都要以;英文分号结束
}
代码功能其他
#include <stdio.h>包含头文件,stdio.h是标准的输入输出头文件,包含printf、scanf等函数的声明
int main(int a, int b) 函数首部(函数的第一行),包括返回值类型、函数名、参数(c语音参数也要定义类型)main为主函数,有且只能有一个,c语言程序,从main函数开始执行,到main函数结束
{ } 花括号括起来的内容为函数体
printf("demo为%d,%d",1,2); printf双引号内为格式控制会打印出来,用转义符%d可以输出表列对应的值,但是顺序要一一对应。后面逗号隔开的为输出表列可以用逗号隔开写多个
return 0; 将数据返回并结束函数。每一行代码都要以;英文分号结束

基本数据类型

常量:不能改变的量,有六种

变量类=类型其他
1、a、-100、234L 整型常量234L为长整型常量
1.23、-7.89 实型(浮点型)常量
i、z、-、转译字符字符常量常见的转译字符:\n换行、\斜杠、\d输出整型、\b回删(Backspace)、\t制表符(Tab)、\010 八进制的10
ab、hello 字符串常量
const int a、int const a const修饰符常量使用const关键字定义的值,不可修改,修改编译器会报错
#define N 10 符号常量通过预定义指令创建的,为程序中某个值或者字符串提供一个容易理解且便于管理的名称,在预处理时,会被实际值所替换

变量:可以改变的量,基本数据类型的变量有七种

代码类型字节printf占位符
int 整型4%d
chart int 短整型2%hd
long int 长整型4%l
long long 长长整型8%ll
char 字符型1%c
float 单精度浮点型4%f
double 双精度浮点型8%lf

符号

代码名称功能例子其他
signed 有符号可以表示正数、负数、零signed int a 等价于 int a一半情况下缺省(可以省略不写)
unsigned 无符号可以表示正数、零,正数可使用范围更大unsigned int a用的多些
// signed和unsigned取值范围对比
signed char a; // a的取值范围为-128~127
unsigned char a; // a的取值范围为0~255

C语言概述

C语言特性

  • 灵活性,既可以编写应用软件,又可以编写系统软件
  • 运算符丰富
  • 数据类型丰富
  • 具有结构化的控制语句
  • 语法限制不太严格,程序设计自由度大
  • 有指针,可以直接访问物理地址,能进行位操作
  • c语言程序移植性好

一个源文件的组成部分

#include <stdio.h>
int main(int i,int j){
    printf("%d,%d",i,j);
    return 0;
}
代码描述其他
#include <stdio.h>包含头文件,标准输入输出头文件放置printf、scanf等函数
int main(int i,int j)函数首部(函数第一行)int是函数返回值类型定义,main是函数名, i和j是函数的参数,c语言中函数参数需要定义类型
mainmain是主函数,有且只有一个c语言程序从main函数开始,到main结束
{ }中括号里面是函数体c语言每行语句都要用英文分号;结尾
return 0;函数返回值,表示函数结束,返回的内容要和函数类型定义对应上如果类型是void,可以省略return

C语言组成部分

  • 基本语法,包括关键字、标识符、运算符、分隔符
  • 数据类型,包括基本数据类型、构造数据类型、枚举类型、指针类型
  • 控制结构,包括顺序结构、选择结构、循环结构
  • 函数,是c语言最基本的模块,用于执行特定任务
  • 预处理指令,以#开头,像#include、#define
  • 输入输出,如printf()、scanf(),用于在程序和用户之间进行数据交互

基本数据类型

有无符号

常量(六种)

代码描述其他
a、b、c、-、转义字符字符常量转义字符:%%百分号、\n换行、\b回删、\t制表符(Tab)、\010八进制的10、 \斜杆
abc、dd、hello 字符串常量
100、30、 -10 、234L(长整型常量) 整型常量
10.23、科学计数法实型(浮点型)常量科学计数法:12E5(1.2*10的5次方,e大小写都可以,e前后需要都为数字)
#define N 10 符号(预定义)常量
const int 10; int const 10; const修饰常量尝试修改编译器会报错

有符号无符号

代码描述其他
signed 有符号可以表示0和正数,取值范围大
unsigned 无符号可以表示0、正数和负数,取值范围相对较小

变量(七种)

变量名的命名规则:符合标识符的命名规则(由数字、字母、下划线组成,不能以数字开头),不能与关键字重名

代码描述字节数占位符有符号取值范围无符号取值范围
char字符型1%c-2^7~2^7-10~2^8-1
float 单精度浮点型4%f
double 双精度浮点型8%lf
int 整型4%d-2^31~2^31-10~2^32-1
short int 短整型2%hd-2^15~2^15-10~2^16-1
long int 长整型4%ld-2^31~2^31-10~2^32-1
long long 长长整型8%l-2^63~2^63-10~2^64-1

格式化输入输出函数



void main(){
    print("请输入三个数,以空格隔开!\n");
    int a,b,c;
    // scanf("格式控制",地址表列);//特征:遇到空格/TAB或者回车停止读取,遇到回车结束  
    // 格式控制中如果有格式要求必须按照要求输入,否则数据有误
    // 注意:scanf格式控制里面不要加\n  !!!!!!!
    scanf("%d%d%d",&a,&b,&c);// 双引号内的%d没有间隔符,默认可以以空格、回车、Tab间隔
    // printf("格式控制",输出表列);//双引号里面的内容原样输出
    printf("%d,%d,%d",a,b,c);//%d会替换乘abc的值,逗号原样输出
    char a = getchar(); // 字符输入函数,只能一个字符,基本上就是ASCII的值
    putchar(a); // 字符输出函数,打印a的值,
    putchar('i') //括号内也可以不是变量,写死的字符串也可以
    // 格数控制 
    float d = 10/(float)(3);
    // %m.nf 或者 %m.nlf  或者 %md
    // m:输入/出数据域宽  (占几个字符宽度)   m>0时 :右对齐    m<0: 左对齐    m<实际数据长度:按照实际数据长度输出
    // n:保留小数的位数
    print("%1.2f",d); // 这里显示3.33,小数点前一位(这个一半以实际位数为准),小数点后两位
}

格式占位符

符号描述其他
%d 十进制有符号
%u 十进制无符号
%x 十六进制
%o 八进制

类型转换

代码描述其他
float a = 10/(float)(3) // 结果是3.33333强制类型转换
float a = 10/3.0隐式类型转换

运算符

算数运算符

+加、-减、*乘、/除、%取模(余)

赋值运算符

=直接赋值、+=先加再赋值 、/=先除再赋值、%=先取余再赋值

关系运算符

>大于、<小于、==等于、>=大于等于、<=小于等于

逻辑运算符

&&与、||或、!非

运算符优先级

!>算术运算符>关系运算符>&&>||>赋值运算符

sizeof 运算符

计算数据类型/变量所占用空间大小

三目运算符

void main(){
    int a,b,c;
    int max = a>b
                ?
                    a>c?a:c
                :
                    b>c?b?c;

}

三大结构,顺序、选择、循环

选择结构

void main(){
    int a,b,c,max;
    if(a>b){
        if(a>c){
            max = a;
        }else{
            max = c;
        }
    }else if(a<b){
        if(b>c){
            max = b;
        }else{
            max = c;
        }
    }else{
        pritf("a等于b");
        if(a>c){
            max = a;
        }else{
            max = c;
        }
    }
}