c语言 /*知识点全概要(更新中)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

`在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、【那些函数】

函数定义

格式:返回类型 函数名 形参声明
比如:int max (int a,int b)
返回类型指,函数总的来说是个公式吧,那他总得有个得数,这时就需要返回类型指定返回值(得数)的类型了
函数名指,函数之间相互调用时,就用到函数名引导了
形参声明指,用于接收起辅助提示作用的变量–形式参数,就是桥梁作用

🔰像该参数接收多个形式参数的情况下,使用逗号把它们分割开

🔰在这个函数体声明变量时,不能有声明和形式参数同名的变量,否则会发生变量名冲突

函数调用-形参、

在这里插入图片描述
如果把他当成是信号的传递就好理解了,子函数max2()函数,备有2个int形式的参数,一个是a,另一个是b,函数运算将使a和b最大的一个数,以int形式备好等待传出去;
直到mian()主函数,执行到调用的地方,执行子函数,把返回值拿到main()主函数用,这个是个实参。
形参指,形式上虚的一个参数,作用是起跨接桥梁作用,连接主函数的实参和子函数函数体中运算的参数a,b,子函数名后面,形式参数做引导作用

🔰函数调用运算符-“()”
函数调用的格式就是函数名后面加小括号()
比如:max2(n1, n2)
🔰函数调用 运算符(),括起来的都是实参,多个实参要用逗号分割
🔰进行函数调用后,程序的流程将一下子跳转到该函数处,因此,main()函数的执行将暂时中断,开始执行max2函数
🔰在被调用函数的地方,会生成用于形参的变量,形参会被赋上实参的值,这种情况下,形参a和b会被赋上实参n1和n2的值,即45和83,以便子函数使用这个45和83运算比大小去,同时这种函数间值传递的方式也叫做“值传递”,这时形参会充当是实参的一个副本
🔰程序执行到return或最后一个大括号时,就会跳回主函数中,同时把返回值带到主函数,如上面图所示
🔰函数调用时max2(n1, n2),使用的实参,既可以是实参也可以是变量,所以max2(n1, 5)这种写法也是可以的,函数将输出变量n1和5当中较大的哪一个
🔰实参和形参,是完全不同的两种东西,使用时候因此不必担心实参和形参名字相同的问题
🔰返回值时,返回值有且只能有一个,不会返回多个数
🔰函数的调用,函数2要调用函数1,函数1就得写在函数2的前面,若函数1写在函数2后面,函数2前面也要对其声明–也称为函数原型声明
🔰一般情况推荐把主函数写在最后,被调用函数写在他前面

void()函数-没有返回值的函数

/*
	显示出一个直角在左下方的等腰直角三角形(函数版)
*/
#include <stdio.h>
/*--- 连续显示出n个'*' ---*/
void put_stars(int n)
{
   
	while (n-- > 0)
		putchar('*');
}
int main(void)
{
   
	int i, len;
	printf("生成一个直角在左下方的等腰直角三角形。\n");
	printf("短边:");
	scanf("%d", &len);

	for (i = 1; i <= len; i++) {
   
		put_stars(i);
		putchar('\n');
	}
	return 0;
}

*🔰比如本函数是用来显示的,没有需要返回的结果,必须从子函数put_stars(int n)这拿吗?不是的,这种没有返回值类型的函数,要声明为void,意思是没有返回值
🔰void就是“空”的意思,在c语言中无论有没有返回值都被称为是函数,而在其他编程语言中,每有返回值会定义成非函数

形参为空的函数

/*
	逆向显示输入的正整数
*/

#include <stdio.h>

/*--- 返回输入的正整数 ---*/
int scan_pint(void)
{
   
	int tmp;

	do {
   
		printf("请输入一个正整数:);
		scanf("%d", &tmp);
		if (tmp <= 0)
			puts("\a请不要输入非正整数。");
	} while (tmp <= 0);
	return tmp;
}

/*--- 返回正整数倒转后的值 ---*/
int rev_int(int num)
{
   
	int tmp = 0;

	if (num > 0) {
   
		do {
   
			tmp = tmp * 10 + num % 10;
			num /= 10;
		} while (num > 0);
	}
	return tmp;
}

int main(void)
{
   
	int nx = scan_pint();

	printf("该整数倒转后的值是%d。\n", rev_int(nx));

	return 0;
}

🔰int scan_pint(void)这里,函数scan_pint是用来读取键盘输入的正整数并返回,该函数无接收形参,为了加以说明,在小括号()中写入了void,当然主函数调用方也没有必要赋实值了,所以函数调用运算符()中是空,例程:int main(void),表示主函数不包含形参,另外也存在包含形参的主函数
🔰int nx = scan_pint();这里,主函数的声明nx的部分,该变量的初始值是函数scan_pint()的调用表达式。变量nx使用函数的返回值(程序执行时从键盘输入的非负的整数值)进行初始化,但是这种初始化方法只适用于拥有自动存储期的对象,不适用于静态存储器的对象
🔰作用域,在int rev_int(int num)和int scan_pint(void)都出现了相同标识符的变量标识符tmp,但是作用域也只在各自的代码块里作用

/*
	计算最高分
*/

#include <stdio.h>

#define NUMBER	5	/* 学生人数 */

int tensu[NUMBER];	/* 数组定义 */

int top(void);		/* 函数top的函数原型声明 */

int main(void)
{
   
	extern int tensu[];		/* 数组的声明(可以省略) */
	int i;

	printf("请输入%d名学生的分数。\n", NUMBER);
	for (i = 0; i < NUMBER; i++) {
   
		printf("%d:", i + 1);
		scanf("%d", &tensu[i]);
	}
	printf("最高分=%d\n", top());
	return 0;
}
/*--- 返回数组tensu 的最大值(函数top的函数定义)---*/
int top(void)
{
   
	extern int tensu[];		/* 数组的声明(可以省略)*/
	int i;
	int max = tensu[0];

	for (i = 1; i < NUMBER; i++)
		if (tensu[i] > max)
			max = tensu[i];
	return max;
}

🔰int tensu[NUMBER]; / 数组定义 /,这里,程序块中的声明是程序块的一部分,而相数组 tensu这样在函数外声明的变量标识符,其名称从声明位置开始,到该程序的结尾都能使用
🔰函数原型声明,主函数要调用函数int top(void),int top(void)就得写在主函数的前面,若int top(void)写在函数2后面,主函数前面也要对其声明–也称为函数原型声明int top(void); / 函数top的函数原型声明 /,一切的原因就是程序也是和人一样顺序读取的
🔰函数原型声明的特点是,会明确记述函数的返回类型和形参类型和个数等的声明,但是没有其他信息了

对象式-宏

函数式-宏

#define sqr(x)  ((x) * (x))		/* 计算x的平方的函数式宏 */

在程序中出现sqr(x)的地方,就把他替代展开成 ((x) * (x)) 的形式

如果在宏名称sqr和紧邻其后的“(”之间插入空格,进行如下宏定义

#define sqr (x) ((x)*(x))

则sqr就会被编译器当做对象式宏,即程序中的sqr都会被替换为(x)((x)*(x))。
我们在定义函数式宏时,必须注意不要误将空格写入宏名称和“(”之间。

#define sum_of(x,y)  x+y	/*两值之和的函数式宏*/
```c
#define max(x,y)  (((x)>(y))?(x):(y)) 	/*返回x,y中较大值的宏*/
**不带参数的函数式-宏**
函数式-宏也可以像函数那样进行不带参数的定义,例如下面这个响铃的宏alert().

```c
#define alert()  (putchar('\a'))    /*响铃的宏*/

库函数 library function

1.printf() 输出函数

printf(“%d”,15+37);
%d和15+37,都是实参,多个实参要用,隔开;
printf()函数的第一个参数是格式化字符串,格式化字符串可以包含转换说明,就是那个%d就是转换说明,格式化字符串中除转换说明以外的都会原样输出;
要在printf函数%号,就打%%;

2.scanf 格式化输入函数

scanf()可以从键盘读取到输入的信息;
使用scanf()时,变量前要加&,如:scanf(“%d”, &no);

3.puts() 输出函数

puts是,s指string英文是字符串的意思;
4.printf()输出函数和puts()输出函数异同

printf(“ABCDE\n”) 支持格式设定,换行需打上\n,可多个参数
puts(“ABCDE”) 不支持格式设定,换行不需要打上\n,参数只能1个
格式设定指的就是%d、%f那些;
5.printf()输出函数和scanf格式化输入函数
printf() 格式化字符串部分可以包含多个%号
scanf()
如:printf(“a除以b商%d余%d\n”, a / b, a % b);
如:scanf(“%d%d”,&a,&b);
在这里插入图片描述
在这里插入图片描述

4.putchar()字符显示函数

是专门用来显示字符的,像那些响铃符号

二、【那些语句】

1.【选择语句】

【选择语句】-if语句和switch语句

1.if//判定1个量

在这里插入图片描述
✅if语句,非0即真
在这里插入图片描述

2.if-else //判定2个量

在这里插入图片描述

3. if-else if-else//判定3个量

在这里插入图片描述

4.嵌套if-if-else-else

在这里插入图片描述

int main()
{
   
	int no;
	printf("请输入一个整数:"); scanf("%d", &no);
	if(no>0)//如果是正数
	{
   
		if(no%2==0)
			puts("偶数");
		else
			puts("奇数");	
	}
	else
	{
   
		puts("不是正数");	
	}
}

switch (表达式){case0;break;case1;break;case2;break;}

int main()
{
   
	int no;
	printf("请输入一个整数");
	scanf("%d", &no);
	switch (no % 3)
	{
   
		case 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值