C语言复习(一)

一、程序实例概览

来一个最简单的C语言程序
#include <stdio.h>//头文件,因为你用到了printf语句,所以需要引用C的头文件
int main(void)->其中int指明了main函数返回的类型(整型),这个返回值返回给操作系统;
{
/* 我的第一个 C 程序 */
printf(“Hello, World! \n”);

return 0;
}
1.int main(void)->C语言程序中的主函数,其中int指明了main函数返回的类型(整型),这个返回值返回给操作系统;
void表明这个例子不需要外接传递任何信息给它;
假定main()函数需要接受参数,则写成:
int main(int argc,char *argv[]),这是main函数的标准声明形式来着
int argc:定义并规定了argc为整型参数,表示了参数的个数;
argv:指针数组
实例:
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("%d\n",argc);//打印出参数的个数
printf("%s\n",argv[0]);//打印出第一个参数
printf("%s\n",argv[1]);//打印出第二个参数
return 0;
}

运算结果:
在这里插入图片描述
对于void main(){}:不标准格式!
有些编译器允许这种形式,但是还没有任何标准考虑接受它;其实很多编译器不允许这么做的;

return 0:便是退出整个进程。由于我们定义的是int main(int argc,char *argv[]),故函数返回是一个整数;
对于main函数来说,如果你漏掉了return语句,大多数编译器会给出一个警告,有的甚至不让你编译通过;
这是初学者容易犯错误的一个关键!

二、C的数据类型

1.常量:
整型常量和浮点型常量
整型常见的是有二、八、十和十六进制:123,555,046,0x462a等;
浮点型:3.14,3.14e5,3.14E-5;
字符型常量和字符串型常量
字符型常量:‘a’,‘\0’,‘0scgi’
字符串型常量:“s\n”,“gdefleho”
不可见字符:这个我们用的比较少,在ASCII码表中,算上空格, 从32到126共95个是可见字符,不算上空格则为94个。也叫打印字符,即可以被直接打印出来的字符。剩下的则是不可见字符,即不可以被直接打印出来。
(我们可以用转义字符\表示)
2.变量类型:
整型int:初始化 int a = 5;
在C语言中,用0开头来表示八进制,0x开头来表示十六进制;
如:123 <- 十进制
0456 <- 八进制
0x789 <- 十六进制
C语言中提供3个关键字来修饰基本的整数类型
short int:
long int:
unsigned int:(这三个后面再补充!)

字符型char :初始化char ch;ch = ‘A’;ch= A(最后一个错误!)

布尔类型: _Bool、bool(必须包含stdbool.h)
_Bool类型由C99引入,其中true(1)表示为真,false(0)表示为假;

浮点型float、double、long double
浮点数可以与数学中的实数相对应,3.14,3.14e5,3.14E-5这些都是浮点型;3.0也是,但3是整数;
浮点数与整数的存储方案不同,浮点数表示将一个数分为小数部分和指数部分分开存储;
所以可能int(3)和float(3.0)占用的内存大小一样,但内部表示是完全不同的;

void型 :用来修饰指针变量、函数返回值类型和函数参数
在这里插入图片描述
3.数据类型转换
隐形类型转换:当表达式中出现不同的数据类型时,系统会自动地进行转换,即将“小”类(精度较低)转换为
“大”类型(精度较高);
强制类型转换:如a=3.24;int(a)=3;b = 5,float(b) = 5.000000
注意:由低精度数据类型转换向高精度类型不会产生数据丢失,但由高精度类型变为低精度存在丢失数据的危险!
无符号型比有符号的占用存储空间要大,因此一般的类型转换中,有符号->无符号型

4.字符串和格式化
必须知道:字符常量‘A’和字符串常量“A”是完全不同的;前者是基本类型,而后者则是派生类型;
“A”实际上由两个字符组成!

strlen()函数:包含头文件string.h
其计算长度的方法是遇到字符串结束符’\0’为止;

IO函数:printf()和scanf函数,输入输出函数;
在这里插入图片描述
使用scanf()函数注意事项:
1.scanf()函数使用的转换说明符跟printf()几乎一致,除了前者用%lf来说明double类型,而不是跟float型数据一样都是使用%f;
2.当scanf()遇到不匹配的数据类型时,ANSIC要求函数在第一个出错的地方停止读取输入;
3.如果该函数使用%s转换说明符,那么除空白符以外的字符都是开源接受的,换句话说%s用于读取单个单词。

三、运算符、表达式和语句

1.运算符:算术运算符、关系运算符、逻辑运算符、位运算符合其他运算符;
在C语言中,“=”不表示等于,而是一个赋值运算符;如a=5;
C语言中不允许这种情况:5=a;原因是5是一个常量,常量无法被赋值;

几个术语:
数据对象:泛指数据存储区的术语,数据存储区用于保存值;如用于保存变量或数组的数据储存区是一个数据对象;
左值右值:这个感觉没什么好说的。。。。
操作数:即运算符操作的对象。

算术运算符:
在这里插入图片描述
关系运算符:
在这里插入图片描述
逻辑运算符:
在这里插入图片描述
位运算符:
在这里插入图片描述

其他运算符:
赋值运算符:=
复合赋值运算符:<操作符>=
+= -= *= %=。。。。等;
条件运算符:?:
格式:<表达式1>?<表达式2>:<表达式3>
还有sizeof 运算符、逗号等;

运算符优先级:
在这里插入图片描述
2.表达式:所谓的表达式就是由运算符、运算量和标点符号组成的有效序列,其目的用来说明一个计算过程;
如:5
i+522
v = ++y%5

3.语句:表达式可以独立形成语句,称为表达式语句。大多数语句由表达式构成,在表达式的后面加一个分号标识就构成了语句,一个语句是一条完整的计算机指令。
如:const = 5//表达式
const = 5;//语句

四、控制流

1.循环:
while循环被称为“入口条件循环”,即在检查判断条件是否成立之后才执行循环;
若expression为真,则执行一次statement;之后再次判断expression。
在expression变为假之前都要重复这个判断和执行的循环,每一个循环为称为一次迭代。

do…while循环被称为“退出条件循环”,与上面的while判断时间相反,即每次执行之后检查判断条件。
在执行一次statement之后,若expression为真,则继续执行,直到expression为假。
do…while本身是一个语句,因此它需要一个分号来结束。

for ( init; condition; increment )
{
statement(s);
}
init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

嵌套循环:一个循环体中包含另外一个循环体。

2.条件跳转
if(expression)
statement;
其逻辑为:如果expression为真,则执行statement;否则跳过该语句

if(expression)
statement_A;
else
statement_B;
其逻辑为:如果expression为真,则执行statement_A;否则执行statement_B语句

if(expression_A)
statement_A;
else if(expression_B)
statement_B;
else if(expression_C)
statement_C;
.
.
.
else
statement_X;
阶梯型if语句,逻辑上与上一个一样,这里不再叙述。

3.多路分支
swtich(expression)//此处expression表达式的值为整型
{
case constant1:statement_1;break;//此处break不是必须的,当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行
case constant2:statement_2;break;
case constant3:statement_3;break;
。。。。
}
swtich(expression)//此处expression表达式的值为整型
{
case constant1:statement_1;
case constant2:statement_2;
case constant3:statement_3;
。。。。
default:statement_x//default可用于在上面所有 case 都不为真时执行一个任务。
}

4.语句
continue语句:结束本次循环,进入下一次循环,只跟循环结构匹配
如:int a =0;
while(a<100)
{
a++;
if(a/2==0)
continue;//若执行到这里,跳回从头开始
printf("%d",a);
}//打印出100以内的所有奇数

break:跳出当层循环
如:int a =1;
while(a)
{
a++;
if(a>100)
break;//若执行到这里,跳出该循环
printf("%d",a);
}//打印出100以内的所有整数

goto语句:C语言中极少用到,break和continue是goto的特殊情况。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值