美文网首页
关于C的一些基础皮毛

关于C的一些基础皮毛

作者: Bangys | 来源:发表于2018-02-26 19:23 被阅读0次
  1. 一个C程序就是由若干头文件(#include)和函数组成,并有且只有一个主函数
  2. 在最新的C标准中,main函数前的类型为int而不是void(表示无类型没有返回值)
  3. 单行注释: //、多行注释: /* */
  4. 标识符:尽量不超8位、分大小写、非关键字、有意义
  5. 变量赋值的两种方式:1.先声明再赋值 2.声明的同时赋值
  6. 基本数据类型分四大类:


  • 普通整型int,字符型char,浮点型float,双精度浮点型double
  1. 常量分为直接常量(即字面量)和符号常量(需要#define 标识符 常量值来定义)
  2. 变量可在编译时可自动类型转换,char类型数据转换为int类型数据遵循ASCII码中的对应值,字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换
  3. 强制类型转换((数据类型) (表达式)):必须加括号;不会修改原值;不遵循四舍五入原则
  4. 算数运算符:加+ 减- 乘* 除/ 求余%(运算后的符号取决于被模数的符号) 自增++ 自减--
  5. 关于自增运算符:-/+号在前:先运算再取值,在后则反之
  6. 复合赋值运算符:即在简单运算符前面加=(如+=)
  7. 关系运算符: > >= < <= == !=
  8. 逻辑运算符:与&& 或|| 非!
  9. 三目运算符:表达式1? 表达式2:表达式3
  10. 分支结构:
if (表达式){
    代码块
    if (表达式){  // 嵌套if-else语句
    代码块Inner
    }
} 
[else if (表达式2)]{      // 多重if-else语句
代码块2
}
[else]{
代码块3
}
  1. 循环结构:while循环、do-while循环(先do再循环,while后面需有分号)、for循环(1初始;2判断;3步进,分号不能省略,变量要在for之前定义)
  2. 用循环结构和操作运算符实现水仙花数字:
/*所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数*/
#include <stdio.h>
int main()
{
    //定义三位数num,个位数sd,十位数td,百位数hd
    int num, sd, td, hd;
    //循环所有三位数
    for(num=100; num < 1000; num++)
    {
        // printf("%d", num);
        // 获取三位数字num百位上的数字
        hd =        num/100         ;
        //获取三位数字num十位上的数字
        td =        num/10%10         ;
        //获取三位数字num个位上的数字
        sd =        num%10         ;
        //水仙花数的条件是什么?
        if(hd * hd * hd + td * td * td + sd * sd * sd == num) 
        {
            printf("水仙花数字:%d\n", num);    
        }
    }
    return 0;    
}
  1. 多重循环:一般用2~3层循环,父循环执行一次,子循环需要全部执行完,直到跳出循环
  2. 分支结构switch:
switch(表达式){
    case1 exp1: code1; break;  // case后的各常量表达式不能相同,否则报错
    case2 exp2: code2; break;   // 代码块后面的分号不要忘
    caseN expN: codeN; break;   
    [default: codeX; break;]
}

switch后面的表达式语句只能是整型或字符型
在case后,允许有多个语句,可以不用{}括起来
case和default子句的顺序可以变动,结果不变

  1. goto语句:执行后,程序将跳转到定义的标识符(一般用英文大写)处并执行其后的语句
  2. 函数的定义:
/*其中[]内为可选内容*/
[数据类型说明] 函数名([参数]){    // 数据类型默认是int
    执行代码块;
    return (表达式);
}

自定义函数尽量放在main函数之前,如果在其后需要在前面先声明

形参是用来接收调用该函数时传入的参数
实参是在调用时传递该函数的参数

递归函数:自我调用且有完成状态,具有递推和回推两个阶段

  1. 函数返回值为三目运算符的写法:return 判断?表达式1:表达式2;
  2. 变量存储类别:按生存周期可分为静态存储方式和动态存储方式;按存储类别可分:自动auto(可省略)、静态static(分局部和外部)、来自寄存器register、来自外部extern
    • 静态局部变量属于静态存储类别,只赋初值一次(如无赋值则默认为0或空字符)
    • 只有局部自动变量和形式参数可以作为寄存器变量,不能定义任意多个寄存器变量(有限)
    • 外部变量的意义是某函数可以调用在该函数之后定义的变量
  3. 内部函数:不能被其他源文件调用的函数(也称静态函数),用static定义
    外部函数(系统默认):能被其他源文件调用的函数,用extern定义
  4. 数组:一块连续的、大小固定、数据类型一致的内存空间(数组是相同类型变量集合);
    三种初始化:
    • 数据类型 数组名称[数组长度n] = {元素1, 元素2...元素n}(当元素小于长度,多余的元素默认为0)
    • 数据类型 数组名称[] = {元素1, 元素2...元素n}
    • 数据类型 数组名称[数组长度n];数组名称[0] = 元素1;数组名称[1] = 元素2;数组名称[n-1] = 元素n
      在声明数组后没有进行初始化的时候,static和extern类型的数组元素初始化元素为0,auto类型的数组的元素初始化值不确定

27.字符串是用数组定义的:

法1:
char 字符串名[长] = "字符串值"
法2(在数组中不能写中文):
char 字符串名[长] = {'字符1', '字符2', '字符3', .... '字符n', '\0'}  //注意末尾的\0字符是结束标志

/*字符串数组当作形参时的写法*/
void foo(char stringname[]){
    return;
}

常用字符串函数:strlen(), strcmp(s1, s2), strcat(s1, s2), strcpy(s1, s2), atoi(s1)

  1. 多维数组:数组名后跟n个维度(称作第一维下标...第n维下标),使数组中的元素可以再用下标访问,如下
    int number[2][5] = {{11,12,13,14,15}, {21,22,23,24,25}}
    可看作一个2×5的二位矩阵;多维数组的初始化与数组类似:
    • 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};(必须指定的维数,系统会根据元素总个数分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数)
    • 数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n]; 数组名称[下标1][下标2]...[下标n] = 值;(需要同时指定行和列的维数)
  2. 求二维数组的对角线之和:
#include <stdio.h>
int main()
{
    int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int i,j;
    int sum=0;
    for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++){
           if((i+j)%2==0)    //关键点
           sum+= arr[i][j];
       }
    }
    printf("对角线元素之和是:%d\n",sum);
    return 0;    
}
  1. 结构体:是用户自定义的可用数据类型,可存储不同类型变量集合(与数组相反),有几种定义方法:
// 这里是定义了一个结构体类型
struct weapon{
    char name[20];
    int cost;
    char memo[100];
};
// 法1:声明和定义分离的形式
struct weapon weapon_number1;
// 法2:在声明的时候定义,即在尾部加变量名
struct weapon{
    char name[20];
    int cost;
    char memo[100];
}weapon_number2;
// 法3:不指定结构体名字,直接定义变量
struct{
    char name[20];
    int cost;
    char memo[100];
}weapon_number3;

初始化:用{}把常量依次传入,即weapon_number1={"gun", 70, "warning"}
访问成员的值:用.(成员运算符),weapon_number1.name
结构体数组的声明:由结构体组成的数组
struct weapon weapon_numbers[2] // 初始化时需要依次指定6个常量
结构体指针:

// 指针变量c指向结构体weapon_number1
struct weapon * c;
c=&weapon_number1;

//调用结构体成员,可用c->name替代(->称作指向运算符);
(*c).name;  // 指针两侧变量不能省略(因成员运算符.的优先级高于*)

相关文章

  • 关于C的一些基础皮毛

    一个C程序就是由若干头文件(#include)和函数组成,并有且只有一个主函数 在最新的C标准中,main函数前的...

  • 2018/07/15

    实验一,找关于c语言的视频,2018/07/16看一些关于c需要基础语法视频。

  • 顺序程序设计&字符数据的输入和输出

    关于C语言的学习,磨磨唧唧的。这里就总结一下到目前为止所学的东西。后续还会不断的更新总结。 关于一些基础概念 基础...

  • 关于C# async/await的一些说明

    关于C# async/await的一些说明 下文以个人对async/await的理解为基础进行一些说明。 1、自定...

  • Objective-C 内存管理深入

    前言 基础篇介绍了一些关于Objective-C内存管理的常见概念。本文将在前文的基础上扩展以下知识:成员变量se...

  • 出版基础(皮毛干货)

    出版社编辑人员的作者工作: 1、考察作者资质,选择合适的作者; 了解作者的经历、成果、写作风格以及内容质量。 2、...

  • C语言推荐书单

    关于C 关于C编程,我觉得有下面3个层次: 基础 - 基本语法 进阶 - 避免常见错误 与 良好的风格 高手 - ...

  • C C++内功心法-基础篇

    大家好,今天给大家讲讲C C++的一些基础语法,小编整理了一些简单入门基础知识,对于我们编程也有很多的帮助。 C...

  • webRTC的一些皮毛

    最近需要用到vad,之前也有写过一些算法,有时间再写那些算法的想法,今天先简单记录一下webRTC的vad的开发过...

  • 关于Docker知识

    关于Docker知识的列表: 关于Docker基础(一) https://www.jianshu.com/p/4c...

网友评论

      本文标题:关于C的一些基础皮毛

      本文链接:https://www.haomeiwen.com/subject/hzwlxftx.html