C语言入门知识【笔记总结】持续更新ing!!!

发布时间:2024年01月19日

C语言入门知识【笔记总结】

By:weixiao

——大一小白对半年学习c语言的笔记(有错误希望能够帮忙在评论区指正出来!!)

1.C语言の程序设计

C语言是一种面向过程的语言,C程序的运行流程为:编辑源程序->编译源程序->连接目标程序->运行可执行程序。

C语言源程序文件的后缀.c
编译后生成文件的后缀.obj
连接后生成的文件后缀.exe
1.1关于C语言の结构

(1)C程序的基本单位——函数
(2)一个C语言程序是由一个或多个函数组成的,其中必须包含一个 main 函数,而且有且仅有一个 main 函数
(3)数据声明和语句结束最后必须要有一个分号‘ ;’,正如汉语中说完话需要一个句号一样。
(4)程序永远从main执行
(5)要用英文输入法 ※※※※※

1.2关于编译预处理

(1)编译预处理包括文件包含,宏定义和条件编译。
(2)引用头文件

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

(3)宏定义: #define 名称 内容
小小的例题:有如下的宏定义,则下列语句的结果是(910)。

#define MAX 30
#define NUM MAX+10
X=MAX*NUM

题解:3030+10=910
易错:30
(30+10)=1200

1.3关于算法

※算法的特性
①有穷性。
②确定性。
③有零个或多个输入。
④有一个或多个输出。
⑤有效性。
程序=数据结构+算法

2.顺序结构程序设计

2.1关于常量和变量

(1)常量分为

整型常量实型常量字符常量字符串常量

(2)字符常量又分为

普通字符转义字符

单引号单独括起来的一个字符叫普通字符,比如’a’,需要注意的是,字符常量在计算机中所存储的并不是一个字符,而是以ASCII 代码的形式来存储的,像’a’的ASCII 码值为97,因此在计算机存储单元的就是97.
问题来了,ASCII 码值我怎么知道?
解决方法:点击浏览器搜索ASCII 码值即可。
(3)转义字符:顾名思义,把字符转换成其他意义

转义字符字符值
\’一个单引号’
\”一个双引号”
\\一个反斜线
\n换行
\r回车
\t空格

(4)字符串常量:用双引号把若干个字符括起来,字符串常量是双引号中的全部字符,比如 “weixiao”
(5)变量:一个有名字的,具有特定属性的存储单元。用来存放数据,变量的值是可以改变的。需注意的是,变量必须先定义,再使用。
(6)char(字符型数据)类型在内存中的存储形式是ASCII 码 。

2.2标识符

(1)定义:我们编程时使用的“名字",像各种变量名、函数名等等。
(2)规则:① 标识符只能由数字、字母、下划线组成。 ② 标识符区分大小写。 ③第一个字符必须是字母或者下划线。

2.3数据类型

(1)数据类型分为:整型类型、浮点类型、字符型

整型类型基本整型(int)2或4字节,短整型(short)2字节,长整型(long)4字节
浮点类型单精度浮点型(float)4字节,双精度浮点型(double)8字节
字符型char

整型的存储方式是:用整数的补码形式存放。

2.4运算符和表达式及优先级

(1)基本的算术运算符:+ - * / %
(2)※※※

自增、自减运算符作用是使变量的值加 1 或减 1。
++i,–i在使用 i 之前,先使 i 的值加(减)1
i++,i–在使用 i 之后,再使 i 的值加(减)1

(3)关于表达式
用算术运算符和括号将运算对象连接起来的、符合 C 语法规则的式子
(4)关于优先级
在了解优先级之前我们需要掌握一项基本知识——C运算符

算数运算符+ - * / % ++ –
关系运算符> < == >= <= !=
逻辑运算符! && ||
赋值运算符=
条件运算符?:
逗号运算符,
指针运算符* &
求字节数运算符sizeof
强制类型转换运算符(类型)

优先级(简化版)(应对简单考试版)! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
如更加详细了解优先级,请进入csdn搜索:C语言运算符优先级
经典的小小例题:
设有声明”char w;int x;double y;",则表达式w-x+y值的数据类型为(double)
题解:char类型看作ASCII 码值,因此w-x返回值是int类型,int+y(double)根据优先级,所以答案是double。

3.C语句

3.1C语句の作用和分类

(1)控制语句

if()…else…条件语句
for()…> < == >= <= !=
逻辑运算符! && ||
赋值运算符=
条件运算符?:
逗号运算符,
指针运算符* &
求字节数运算符sizeof
强制类型转换运算符(类型)

(2)输入输出语句
把内容输入到屏幕上,这里我们需要用到printf函数,下面让我们打印一个hello world吧!

#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;           
}               //注意代码规范性

进阶一下:把变量值输入进去

printf("%x",变量);
%d输出int变量的值
%c输出char类型变量的值
%s输出一个字符串
%f输出float类型变量的值
%lf输出double类型变量的值

写一个程序试试吧

#include <stdio.h> 
int main()
{
int a = 5, b = 7;
float x = 67.8564, y = -789.124;
char c = 'a'; long n = 1234567;
unsigned u = 65536; printf("%d%d\n", a, b);
printf("%3d%3d\n", a, b);
printf("%f,%f\n", x, y);
printf("%-10f,%-10f/n", x, y);
printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n", x, y, x, y, x, y); 
printf("%c,%d,%o,%x\n", c, c, c, c);
printf("%ld,%lo,%x\n", n, n, n);
printf("%u,&o,%x,%d\n", u, u, u, u);
printf("%s,%5.3s\n", "computer", "computer");
}

自己试着在编译器上写写看看输出结果是什么吧!
在上面的程序中我们注意到了两种形式“%-10f”和“%8.2f”,其中-10和8.2意思分别是,以左对齐形式后空格十位和以右对齐的方式先空格8位且保留小数点后两位。
关于输入语句
一般形式:

scanf("%x",&变量);

,后面是”&变量“而不是“变量”,scanf函数用到的是变量地址。因此&号自然就是取地址符。
写个程序试试

#include<stdio.h>
int main()
{ 
    int a;
    scanf(%d”,&a);
    printf(“a=%d”,a);
return 0;
}

在我学习过程中我发现了一个编译器问题,在使用vs2022过程中直接使用scanf是会报错的,这里存在一个代码安全性的问题,想要正常运行需要在scanf后面加上一个_s,这是第一种解决办法,第二种解决办法就是在所有头文件之前,也就是第一行我们宏定义一个函数

#define _CRT_SECURE_NO_DEPRECATE

当然如果编译器不是vs2022,用的是dev c++或cLion等编译器便不会遇到此问题,可以正常使用scanf函数。
来个例题玩玩
假设公民的个人所得税为工资总额的 5%,编程输入一个公民的工资总额,计算其应缴纳的个人所得税和其扣除所得税后的实际工资,并输出。

#include <stdio.h> 
void main()
{
    double wage, wax, laterwage; 
    printf("请输入您的工资:"); 
    scanf_s("%lf", &wage);
    wax = wage * 0.05; 
    laterwage = wage - wax;
    printf("您应缴税:%lf,剩余工资:%lf\n",wax,laterwage);
}

4.选择结构程序设计

4.1关于if语句

if语句的常见形式

1if(表达式)
{
  语句;
}2if(表达式)
{
  语句;
}
else 语句;3if(表达式)
{
  语句;
}
else if 语句;

需要注意的是else不能单独使用,需要和if配套使用。

4.2关于逻辑运算符

(1)

运算符含义举例解释
&&逻辑与a&&ba和b都为真,结果就为真,否则为假
||逻辑或a||ba和b至少一个为真,结果为真,否则为假
!逻辑非!a如果a为假,!a为真,反之a为真,!a为假
4.3条件运算符和条件表达式

条件运算符由两个符号?和:组成,必须一起使用
条件表达式的一般形式:
表达式 1 ?表达式 2 :表达式 3
执行顺序:先求解表达式 1,若为非 0(真)则求解表达式 2,此时表达式 2的值就作为整个条件表达式的值。若表达式 1 的值为 0(假),则求解表达式3,表达式 3 的值就是整个条件表达式的值。

4.4关于switch语句

switch语句的一般形式:

switch(表达式)
{
    case 常量 1: 
    语句 1;
    break;
    case 常量 2:
    语句 2;
    break;
    case 常量 n: 
    语句 n;
    break;
    default: 
    语句 n+1;
    break
}

注意:表达式的值需要为整数类型,default可以不存在,用处是在进入switch循环后但都没达到case要求,则执行default。多个case标号也可以共用一组执行语句一般情况下在执行完case需要用break跳出循环,写到这里我便想到一个知识点,就是关于coutinue和break的区别,下面我将引申一下:
在编写程序时,我们有时会用到continue,他与break最大的区别就是,continue跳出本次循环体中剩下尚未执行的语句,但还会进行下一次的循环条件,break将会完全跳出不进行。更加详细和官方的解释请移步csdn搜索:break和continue的作用和区别是什么?

5.循环程序结构设计

5.1 while循环

一般形式:

while(循环条件)
{
  语句;
}

使用方法:当…(循环条件)时,执行…(语句)

5.2 do-while循环

一般形式:

do
{
  语句;
}
while(循环条件);

使用方法:执行(do)…(语句),判断…(循环条件)正确还是不正确再开始循环。
值得注意的是,do-while语句先执行循环中语句,再判断真假是否进行循环。

5.3 for循环

一般形式:

for(表达式1;表达式2;表达式3;)
{
  语句;
}

表达式1:设置初始条件,可以为零个
表达式2:循环条件判定式,判断是否进行循环
表达式3:循环变量的增值
打个九九乘法表试试?

#include<stdio.h>
int main() {
	int i,j;
	for(i=1; i<=9; i++) {
		for(j=1; j<=i; j++)
			printf("%d*%d=%2d  ",i,j,i*j);
		  printf("\n");
	}
	return 0;
}
文章来源:https://blog.csdn.net/2302_79258441/article/details/135671600
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。