——大一小白对半年学习c语言的笔记(有错误希望能够帮忙在评论区指正出来!!)
C语言是一种面向过程的语言,C程序的运行流程为:编辑源程序->编译源程序->连接目标程序->运行可执行程序。
C语言源程序文件的后缀 .c 编译后生成文件的后缀 .obj 连接后生成的文件后缀 .exe
(1)C程序的基本单位——函数
(2)一个C语言程序是由一个或多个函数组成的,其中必须包含一个 main 函数,而且有且仅有一个 main 函数
(3)数据声明和语句结束最后必须要有一个分号‘ ;’,正如汉语中说完话需要一个句号一样。
(4)程序永远从main执行
(5)要用英文输入法 ※※※※※
(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)常量分为
整型常量 实型常量 字符常量 字符串常量
(2)字符常量又分为
普通字符 转义字符
单引号单独括起来的一个字符叫普通字符,比如’a’,需要注意的是,字符常量在计算机中所存储的并不是一个字符,而是以ASCII 代码的形式来存储的,像’a’的ASCII 码值为97,因此在计算机存储单元的就是97.
问题来了,ASCII 码值我怎么知道?
解决方法:点击浏览器搜索ASCII 码值即可。
(3)转义字符:顾名思义,把字符转换成其他意义
转义字符 字符值 \’ 一个单引号’ \” 一个双引号” \\ 一个反斜线 \n 换行 \r 回车 \t 空格
(4)字符串常量:用双引号把若干个字符括起来,字符串常量是双引号中的全部字符,比如 “weixiao”
(5)变量:一个有名字的,具有特定属性的存储单元。用来存放数据,变量的值是可以改变的。需注意的是,变量必须先定义,再使用。
(6)char(字符型数据)类型在内存中的存储形式是ASCII 码 。
(1)定义:我们编程时使用的“名字",像各种变量名、函数名等等。
(2)规则:① 标识符只能由数字、字母、下划线组成。 ② 标识符区分大小写。 ③第一个字符必须是字母或者下划线。
(1)数据类型分为:整型类型、浮点类型、字符型
整型类型 基本整型(int)2或4字节,短整型(short)2字节,长整型(long)4字节 浮点类型 单精度浮点型(float)4字节,双精度浮点型(double)8字节 字符型 char
整型的存储方式是:用整数的补码形式存放。
(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。
(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);
}
if语句的常见形式
(1)
if(表达式)
{
语句;
}
(2)
if(表达式)
{
语句;
}
else 语句;
(3)
if(表达式)
{
语句;
}
else if 语句;
需要注意的是else不能单独使用,需要和if配套使用。
(1)
运算符 含义 举例 解释 && 逻辑与 a&&b a和b都为真,结果就为真,否则为假 || 逻辑或 a||b a和b至少一个为真,结果为真,否则为假 ! 逻辑非 !a 如果a为假,!a为真,反之a为真,!a为假
条件运算符由两个符号?和:组成,必须一起使用
条件表达式的一般形式:
表达式 1 ?表达式 2 :表达式 3
执行顺序:先求解表达式 1,若为非 0(真)则求解表达式 2,此时表达式 2的值就作为整个条件表达式的值。若表达式 1 的值为 0(假),则求解表达式3,表达式 3 的值就是整个条件表达式的值。
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的作用和区别是什么?
一般形式:
while(循环条件)
{
语句;
}
使用方法:当…(循环条件)时,执行…(语句)
一般形式:
do
{
语句;
}
while(循环条件);
使用方法:执行(do)…(语句),判断…(循环条件)正确还是不正确再开始循环。
值得注意的是,do-while语句先执行循环中语句,再判断真假是否进行循环。
一般形式:
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;
}