C语言(学习笔记)

这篇具有很好参考价值的文章主要介绍了C语言(学习笔记)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 文件结构

(1) 文件名:xxx.c

(2) 引用:#include <stdio.h>

(3) 常量:#define SIZE 5

(4) 全局变量:int i = 1;

(5) 函数:void main() {... }

(6) 注释:// 单行注释,  /* 多行注释 */

(7) 局部变量:声明(int achar b[]="abc"double c,d,e;) 赋值(a=2;)

(8) 输入:scanf("%d", &a);

(9) 输出:printf("%d", a);

注释:extern int a; //引用其他文件的变量a,多个文件共用一个变量。

                    /* 1.1 文件名 main.c */ 
#include <stdio.h>  /* 1.2 引用 */ 
#define SIZE 5      /* 1.3 常量 */ 
int i = 1;          /* 1.4 全局变量 */ 
void main() {       /* 1.5 主函数 */ 
  // 1.6 单行注释:标识符命名规范(1-9,a-z,A-Z,_),数字不能开头,区分大小写
  /* 1.6 多行注释:变量定义 vs中可以边定义边使用,vc必须函数开头先定义全部变量 */

  int a;             /* 1.7 局部变量(动态变量)声明,默认省略[auto] */ 
  char b[] = "abc";  /* 1.7 局部变量(动态变量)声明,默认省略[auto] */ 
  double c,d,e;      /* 1.7 局部变量(动态变量)声明,默认省略[auto] */ 
  a = 2;             /* 1.7 变量赋值 */ 
  static int sta=1;  /* 1.7 局部变量(静态变量)声明,只在加载时调用1次 */

  scanf("%d", &a);   /* 1.8 输入:scanf输入空格结束,gets(b)输入可以识别空格, */
  scanf("%s", b);    /* 1.8 输入:b等同于 &b[0] */

  printf("%d+%d=%d \n", 1, 1, 1+1); /* 1.9 输出:puts(b)自动换行 */

}

2. 数据类型

(1) 字符型:[signed] char (1字节有符号), unsigned char (无符号), char c = 'a';

(2) 短整型:[signed] short(2字节有符号), unsigned short(无符号), short s= 1;

(3) 整型:    [signed] int (2或4字节有符号), unsigned (无符号), int i= 1; 

(4) 长整型:[signed] long (4或8字节有符号), unsigned long(无符号), long l= 3L;

(5) 长长整型:long long (8字节)

(6) 单精度浮点:float (4字节) , float f = 1.2F;

(7) 双精度浮点:double(8字节) , double d = 1.2;

注释:int转double:double d = (double)i; // 可省略(double)1 => 1.000000

注释:double转int:int i = (int)d;  // 1.23 => 1 下切(舍弃小数部分)

3. 符号

3.1 运算符

(1) 算术运算符:+, -, *, /, %   // ()内计算优先级高

(2) 赋值运算符:=, +=, -=, *=, /=, %=

(3) 比较运算符:>, >=, <, <=, ==, !=

(4) 逻辑运算符:&&, ||, !

(5) 自增自减符:++, --

(6) 三元运算符:表达式 ? 真 : 假

注释:sizeof(变量) 取字节长度

3.2 转义字符

(1) 退格:\b

(2) 换行:\n (自动转换,\r\n 或 \n)

(3) 制表:\t

(4) 符号:\\   \?  \"  \'

(5) 空值:\0  (null)

(6) 百分号:%%

3.3 占位符

(1) 整数:%d (short, int)   %ld (long)    %lld (long long)

(2) 浮点:%f (float)   %lf (double)  // %.2f 保留2位小数

(3) 字符:%c (char)

(4) 字符串:%s (char [])

(5) 十六进制:%x

(6) 内存地址:%p

4. 流程控制

4.1 分支

(1) if分支: if (表达式) {...}if (..) {...} else {...}if (..) else if (..) {...} else {...}

(2) switch:switch(xx) { case 值: ...; breakdefault : ...; break; } 

注释:switch不写break会使case后的case继续执行 

4.2 循环

(1) for:for (i=0; i<5; i++) {...}

(2) while:while (表达式) {...}

(3) do while:do {...} while (表达式);

注释:do while有分号。break终止循环,continue跳过循环。

注释:loop: if(..) {...; goto loop; } 可以使程序跳转,一般禁止使用goto

4.3 数组

(1) 整型数组:int arr[3];  arr[0]=1;  int arr[] = {1,2,3};

(2) 字符数组:char c[]="abc";  char c[4]={'a','b','c','\0'}; // \0代表null字符串终止

注释:二维数组 arr[2][3],三维数组 arr[x][y][x]

5. 函数

5.1 函数

(1) 有参有返回值:int sum(int x, int y) { return x + y; }  // 函数调用  int z = sum(x1,y1);

(2) 无参无返回值:void printC() {... }  //调用  printC();

注释:函数声明  int sum(int x, int y);  主函数 main(){...}   函数实现  int sum(int x, int y) {...}

5.2 字符函数

注释:使用字符函数,需引入  #include <string.h>

(1) 复制:strcpy( s, "abc");  // char s[10]; 

(2) 拼接:strcat(s, "def");  // 在s后追加

(3) 取长:strlen(s);

(4) 比较:strcmp(s1, s2);  // 相等返回0,可用于判断 if (strcmp(s1,s2) == 0)

(5) 字符转数字: int a = atoi(s);  double d = atof(s);

(6) 数字转字符:sprintf(s, "xxx%d", i) // i换%d,赋值给s

6. 构造体

6.1 构造体

(1) 单个构造

定义:struct student { int id; char name[256]; }

使用:main() {  struct student data;  data.id=1; }

(2) 数组构造

定义:struct student { int id; char name[256]; }

重命名:typedef struct student re_data;

使用:main() {  re_data data[] = { {1,"aa"}, {2,"bb"} }; }

(3) 直接重命名

定义:typedef struct { int id; char name[256]; } re_data;

使用:main() { re_data n1={1,"aa"}, n2={2,"bb"}; }

6.2 枚举

(1) 默认值:enum XX{ X1, X2 }  //默认值,0, 1

(2) 初始值:enum XX{ X1=1, X2=2 } 

7. 多文件

注释:.h头文件,.c 源文件

7.1 .h头文件

(1) 判断声明是否存在 (ifdef),存在则加载内容

#ifdef {key}
  ...
[#else]
  ...
#endif

(2) 判断声明是否不存在(ifndef),不存在则加载内容

#ifndef {key}
  ...
[#else]
  ...
#endif

(3) 判断表达式(if) 

#if {表达式}
  ...
[#else]
  ...
#endif

 (4) 代码例

#ifndef _文件名_H_
#define _文件名_H_  //不存在则声明变量,防止多次引用重复声明
  ...
  int sum(int x, inty); 
[#else]
  ...
#endif

7.2 .c源文件

(1) 代码例

#include "xx.h"  /* 引入.h头文件 */

int sum(int x, int y) {
  return x+y;
}

(2) 主程序

#include <stdio.h> /* <>引入系统程序 */
#include "xx.h"    /* ""引入自定义程序,找不到再找系统 */

void main() {
  ...
}

8. 指针

8.1 内存地址

(1) 值传递:setData1(n1);  //内部dn1属性值变更,不影响函数外的n1的值。

(2) 地址传递:setData2(&n2); //内部dn2属性值变更,外部变量n2的值也变更。

typedef struct {
  int id,
  char name[256]
} data

void main() {
  data n1={1,"aa"}, n2={2,"bb"};

  setData1(n1);
  setData2(&n2);
}

void setData1(data dn1) {
  dn1.id=3;
}

void setData2(data *dn2) {
  dn2.id=4;
}

8.2 指针

注释:int a =1;

(1) 定义:int *pint *p=null; 

(2) 赋地址:p=&aint *p=&a;

(3) 赋值: *p=300

注释:p为地址,*p为值

8.3 数组指针

(1) 数组:int a[3]={1,2,3}

注释:值 a[0],a[1],a[2],  地址 &a[0],&a[1],&a[2]

(2) 指针指向数组开头:int *p = &a[0];  //等同与 int *p = a;

注释:值 *p=a[0],*(p+1)=a[1], *(p+2)=a[2]   地址 p=&a[0], p+1=&a[1], p+2=&a[2]

(3) 指针指向数组中间:int *p = &a[1]; 

注释:值 *(p-1)=a[0],*p=a[1], *(p+1)=a[2]   地址 p-1=&a[0], p=&a[1], p+1=&a[2]

(4) 循环

for(i=0;i<3;i++){
  *(a+1) /* 或者 p[1] */
}
for(i=0;i<3;i++){
  *p
  p++  /* 指针使用后,需手动更改指针 */
}

9. 读写文件

9.1 文件函数

(1) 打开文件:FILE *file = fopen("c:\\xx.txt", "w");

(2) 关闭文件:fclose(file);

(3) 读写函数:

fgetc(file);  fputc(file); // 读写1个字符

fgets(s,n,file);  fputs(s, file); // 读n个字符到s, 写s到文件

注释:二进制读写 fread, fwrite。fscanf(file,"xx%d", &s);  fprintf(file, "xx%d\r\n", 1);

9.2 读写区分(fopen参数)

(1) 只读:r  // 文件不存在,异常

(2) 只写:w // 文件不存在,新建。覆盖原有文件内容

(3) 只写:a // 文件不存在,新建。原有文件末尾添加内容

注释:r+(读写),w+(读写), a+(读写)文章来源地址https://www.toymoban.com/news/detail-827669.html

9.3 例

#include <stdio.h>
#include <stdlib.h>

void main() {
  FILE *file = fopen("c:\\xx.txt", "w");
  if ( file == null ) {
    exit(1);
  }
  
  fprintf(file, "xxx \r\n");  /* \r\n输出后换行 */
  fclose(file);
}

到了这里,关于C语言(学习笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言(学习笔记)

    (1) 文件名: xxx.c (2) 引用: #include stdio.h (3) 常量: #define SIZE 5 (4) 全局变量: int i = 1; (5) 函数: void main() {... } (6) 注释: // 单行注释,  /* 多行注释 */ (7) 局部变量:声明( int a ;  char b[]=\\\"abc\\\" ;  double c,d,e ;) 赋值( a=2 ;) (8) 输入: scanf (\\\"%d\\\", a); (9) 输出: printf (\\\"%d\\\", a); 注

    2024年02月19日
    浏览(33)
  • 【go语言学习笔记】05 Go 语言实战

    在做项目开发的时候,要善于借助已经有的轮子,让自己的开发更有效率,也更容易实现。 1. RESTful API 定义 RESTful API 是一套规范,它可以规范如何对服务器上的资源进行操作。和 RESTful API 和密不可分的是 HTTP Method。 1.1 HTTP Method HTTP Method最常见的就是POST和GET,其实最早在

    2024年02月13日
    浏览(46)
  • 6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

    1、Go版本 2、汇编基础 推荐阅读:GO汇编语言简介 推荐阅读:A Quick Guide to Go\\\'s Assembler - The Go Programming Language 精简指令集 数据传输: MOV/LEA 跳转指令: CMP/TEST/JMP/JCC 栈指令: PUSH/POP 函数调用指令: CALL/RET 算术指令: ADD/SUB/MUL/DIV 逻辑指令: AND/OR/XOR/NOT 移位指令: SHL/SHR JCC有条件跳转: JE

    2024年02月04日
    浏览(41)
  • Go语言学习笔记(三)

    教程:文档 - Go 编程语言 (studygolang.com) 在call-module-code需要注意,需要在hello目录下操作 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具( go mod )中,这个命令用于修改模块依赖关系。 具体来说, go mod edit -replace example.com/greetings=../greetings  这个命令的作用是:

    2024年02月02日
    浏览(48)
  • go语言学习笔记1

    ​ GoLang是一种静态强类型、编译型、并发型,并具有 垃圾回收 功能的编程语言;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性,还可以发挥多核处理器同步多工的优点,并可解决面向对象程序设计的麻烦,并帮助程序设计师处理琐碎但重要的内存管理问题

    2024年02月12日
    浏览(50)
  • Go语言学习笔记(二)

    以下是一些推荐的Go语言学习资源的链接: Go语言教程:https://golang.org/doc/ Go by Example:Go by Example Golang Tutorials:https://golangtutorials.com/ Go语言第一课(慕课网):PHP模糊查询技术案例视频教程-慕课网 Go语言进阶教程(实验楼):极客企业版 Go语言高级编程(GitBook):谁是凶手

    2024年01月20日
    浏览(52)
  • 学习笔记:R语言基础

    R语言是一种开源的统计计算和图形制作环境,它不仅提供了全面的数据处理能力,还具备强大的数组运算工具,尤其在向量和矩阵运算上表现出色。此外,R语言内置了丰富的统计分析方法,并拥有卓越的统计图表绘制功能。更关键的是,R语言提供了一种灵活且功能强大的编

    2024年02月04日
    浏览(44)
  • C语言学习笔记<1>

    1. EOF(End of File)是文件结束标志,用于表示文件已经读取完毕。在C语言中,可以通过判断是否读取到EOF来判断文件是否读取完毕。 以下是一个简单的C语言代码示例,用于读取一个文本文件并输出其内容: 2.单步执行 #include Windows.h 是C/C++中引入Windows API头文件的语句,它包

    2024年04月22日
    浏览(31)
  • 极语言中文编程_学习笔记

    更多有关极语言中文编程的信息请看文件夹下的sec.htm或者官网的编程说明书 http://sec.yihuolao.com/sec.htm 。 极语言的官方网址是: http://sec.yihuolao.com/ http://sec.z5x.cn/ http://www.z5x.cn/ 极语言入门教学视频:https://www.ixigua.com/7128748847265743371 极语言游戏教学视频:https://www.ixigua.com/712

    2024年02月05日
    浏览(50)
  • C语言学习笔记:数组

    ✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 ​​​​​​​ 简介 数组声明 数组初始化 访问数组元素 多维数组 二维数组

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包