栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言学习-6

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言学习-6

c语言学习-6

六、函数

1.函数的嵌套调用2.全局变量3.递归调用4.局部变量与全局变量5.指针的传递题目6.malloc的使用题目7.走台阶问题 七、结构体

1.结构体2.结构体指针3.typedef的使用4.C++的引用

六、函数 1.函数的嵌套调用

main.c

#include "func.h"


int main()
{
	int a = 10;
	a = printstar(a);//printstar(a)函数调用,a是一个实参
	print_message();//调用print_message
	printstar(a);
	printf("a=%dn", a);

	return 0;
}

func.c

#include "func.h"

//printstar函数定义,就是函数实现
int printstar(int i)//i即为形式参数,也叫形参
{
	printf("***************************n");
	printf("printstar %dn", i);

	return i + 3;
}

void print_message()//可以调用printstar
{
	printf("how do you don");
	printstar(3);
}

func.h

#pragma once
#include//头文件放的是函数声明


int printstar(int i);//函数声明
void print_message();//函数声明
***************************
printstar 10
how do you do
***************************
printstar 3
***************************
printstar 13
a=13

D:cbook第六章  函数Debug01.函数的嵌套调用.exe (进程 17168)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
2.全局变量
#include
#include

int i = 10;//全局变量,在函数外定义的变量叫全局变量
int a = 20;
void print(int m)//自定义的print函数
{
	printf("print m = %dn", m);
	printf("print i = %dn", i);
}
void printa(int m)//自定义的print函数
{
	printf("printa m = %dn", m);
	printf("printa a = %dn", a);
}
int main()
{
	printf("main  i = %dn", i);
	printf("main  a = %dn", a);

	i = 5;
	print(i);

	int a = 2;
	printa(a);

	return 0;
}
main  i = 10
main  a = 20
print m = 5
print i = 5
printa m = 2
printa a = 20

D:cbook第六章  函数Debug02.全局变量.exe (进程 1228)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
3.递归调用
#define _CRT_SECURE_NO_WARNINGS
#include
#include


int f(int n)
{
	if (1 == n)
	{
		return 1;//一定写结束条件
	}
	return n * f(n - 1);//第一步写好公式
}

int step(int n)
{
	if (1 == n)
	{
		return 1;
	}
	if (2 == n)
	{
		return 2;
	}
	return step(n - 1) + step(n - 2);
}

int main()
{
	int n, ret;
	printf("求n的阶乘:n");
	scanf("%d", &n);//请输入数字的大小
	ret = f(n);
	printf("ret=%dn", ret);

	printf("走楼梯:n");
	scanf("%d", &n);//请输入台阶数
	ret = step(n);
	printf("ret=%dn", ret);

	return 0;
}
求n的阶乘:
5
ret=120
走楼梯:
3
ret=3

D:cbook第六章  函数Debug03.递归调用.exe (进程 11808)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
求n的阶乘:
6
ret=720
走楼梯:
5
ret=8

D:cbook第六章  函数Debug03.递归调用.exe (进程 7720)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
4.局部变量与全局变量

main.c

#include "func.h"


extern int k;
void print1()
{
	printf("print1 k=%dn", k);
}
int k = 10;//static修饰全局变量,该变量不能被其他文件借用
int main()
{
	int i = 10;
	{
		int j = 5;
	}//局部变量的有效范围是离自己最近的花括号

	printf("i=%d,k=%dn", i, k);
	print1();
	print();

	return 0;
}

func.c

#include "func.h"

extern int k;//借用main.c文件中的全局变量k
//static修饰函数,函数只能在本函数、本文件内使用
void print()
{
	static int t = 0;//只初始化一次
	t++;
	printf("print execute %dn", t);
	printf("print k=%dn", k);
}

func.h

#pragma once
#include
#include

void print();
i=10,k=10
print1 k=10
print execute 1
print k=10

D:cbook第六章  函数Debug04.局部变量与全局变量.exe (进程 12144)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
5.指针的传递题目
#define _CRT_SECURE_NO_WARNINGS
#include


void change(int *p)//相当于p=&i,*p=*&i等价于i
{
	*p = *p / 2;
}
int main()
{
	int i;
	scanf("%d", &i);
	change(&i);
	printf("%dn", i);

	return 0;
}
10
5

D:cbook第六章  函数Debug05.指针的传递题目.exe (进程 16672)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
7
3

D:cbook第六章  函数Debug05.指针的传递题目.exe (进程 18776)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
6.malloc的使用题目
#define _CRT_SECURE_NO_WARNINGS
#include


//malloc可以帮我们实现动态数组
int main()
{
	char* p;
	int n;//储存申请多少个字节的空间大小
	scanf("%d", &n);
	p = (char*)malloc(n);//malloc申请空间的单位是字节
	char c;
	scanf("%c", &c);//注意在scanf和gets中间使用scanf("%c",&c),去除换行
	//gets(p);//如果不通过上面的scanf去消除n,gets不会卡住
	fgets(p, n, stdin);
	puts(p);

	return 0;
}
10
hello
hello


D:cbook第六章  函数Debug06.malloc的使用题目.exe (进程 11668)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
7.走台阶问题
#define _CRT_SECURE_NO_WARNINGS
#include

//递归调用
//递归的判断条件一定是写到递归公式之前的
int step(int m)
{
	//递归的结束条件 
	if (1 == m || 2 == m) {
		return m;
	}

	//写递归公式
	return step(m - 1) + step(m - 2);
}
int main()
{
	int n;//存储台阶
	scanf("%d", &n);
	int result = step(n);
	printf("走到第%d个台阶有%d种走法n", n, result);

	return 0;
}
5
走到第5个台阶有8种走法

D:cbook第六章  函数Debug07.走台阶问题.exe (进程 4260)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

七、结构体 1.结构体
#define _CRT_SECURE_NO_WARNINGS
#include
#include

//结构体所占用空间是68个字节,因为存在对齐,对齐的目的是
//为了提高cpu访问内存的效率
//先声明一个结构体类型
struct student {
	int num;//num是结构体成员
	char name[20];
	char sex;
	int age;
	float score;
	char addr[30];
};//结构体类型声明,注意最后一定要加分号

int main()
{
	//后定义变量名
	//struct student student1, student2;

	struct student s = { 1001,"lele",'M',20,85.4,"Shenzhen" };//定义及初始化
	struct student sarr[3];
	int i;

	//sarr[0].num = 1002;
	//sarr->num = 1003;
	printf("%d %s %c %d %5.2f %sn", s.num, s.name, s.sex, s.age, s.score, s.addr);
	for (i = 0; i < 3; i++)
	{
		scanf("%d%s %c%d%f%s", &sarr[i].num, &sarr[i].name, &sarr[i].sex, &sarr[i].age, &sarr[i].score, &sarr[i].addr);
	}
	for (i = 0; i < 3; i++)
	{
		//printf("%d %s %c %d %5.2f %sn", sarr[i].num, sarr[i].name, sarr[i].sex,sarr[i].age, sarr[i].score, sarr[i].addr);
		printf("输出 sarr[%d] = {%d,%s,%c,%d,%5.2f,%s}n", i, sarr[i].num, sarr[i].name, sarr[i].sex, sarr[i].age, sarr[i].score, sarr[i].addr);
	}

	return 0;
}

1001 lele M 20 85.40 Shenzhen
1002 lily M 20 85.40 Shenzhen
1003 Marry M 25 95.30 Guangzhou
1004 hehe M 18 92.50 Xiamen
输出 sarr[0] = {1002,lily,M,20,85.40,Shenzhen}
输出 sarr[1] = {1003,Marry,M,25,95.30,Guangzhou}
输出 sarr[2] = {1004,hehe,M,18,92.50,Xiamen}

D:cbook第七章  结构体Debug01.结构体.exe (进程 11504)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
2.结构体指针
#define _CRT_SECURE_NO_WARNINGS
#include
#include

//结构体指针
struct student {
	int num;
	char name[20];
	char sex;
};
int main()
{
	struct student s = { 1001,"lidongmei",'M' };
	struct student* p;//定义结构体指针
	int num, i;
	p = &s;
	printf("%d %s %cn", p->num, p->name, p->sex);//结构体变量成员选择,方式一
	printf("%d %s %cn", (*p).num, (*p).name, (*p).sex);//指针的成员选择,方式二
	//结构体数组初始化
	struct student sarr[3] = { 1001,"lilei",'M',1005,"zhangsan",'M', 1007,"lisi",'M', };
	p = sarr;
	printf("-----------------------------n");
	num = p->num++;//num=p->num;p->num++ 1002
	printf("num=%d,p->num=%dn", num, p->num);//1001,1002
	for (i = 0; i < 3; i++)
	{
		printf("输出 sarr[%d] = {%d,%s,%c}n", i, sarr[i].num, sarr[i].name, sarr[i].sex);
	}
	num = p++->num;//num=p->num;p++ 1005
	printf("num=%d,p->num=%dn", num, p->num);//1002,1005
	for (i = 0; i < 3; i++)
	{
		printf("输出 sarr[%d] = {%d,%s,%c}n", i, sarr[i].num, sarr[i].name, sarr[i].sex);
	}

	return 0;
}
1001 lidongmei M
1001 lidongmei M
-----------------------------
num=1001,p->num=1002
输出 sarr[0] = {1002,lilei,M}
输出 sarr[1] = {1005,zhangsan,M}
输出 sarr[2] = {1007,lisi,M}
num=1002,p->num=1005
输出 sarr[0] = {1002,lilei,M}
输出 sarr[1] = {1005,zhangsan,M}
输出 sarr[2] = {1007,lisi,M}

D:cbook第七章  结构体Debug02.结构体指针.exe (进程 18136)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
3.typedef的使用
#define _CRT_SECURE_NO_WARNINGS
#include
#include


//给结构体类型起别名,叫stu,起了结构体指针类型的别名,叫pstu
typedef struct student {
	int num;
	char name[20];
	char sex;
}stu,* pstu;//pstu等价于struct student *

typedef int INTEGER;//为什么要对int起别名,为了实现代码即注释

int main()
{
	stu s = { 1001,"lidongmei",'M' };
	pstu p;//stu* p1,那么p1也是一个结构体指针
	INTEGER i = 10;
	p = &s;
	printf("i=%d,p->num=%dn", i, p->num);

	return 0;
}
i=10,p->num=1001

D:cbook第七章  结构体Debug03.typedef的使用.exe (进程 6604)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
4.C++的引用

main.cpp

#include
#include

//把&符号写到形参的位置是C++的语法,称为引用,这个时候操作b和在主函数里边使用a等价的
void modify_num(int &b)
{
	++b;
}

void modify_pointer(int *&q)//在子函数操作q和主函数操作q手法一致
{
	//不能将“void *”类型的值分配到"int *”类型的实体
	//说明要进行强制类型转换
	q = (int*)malloc(20);
	q[0] = 5;
}
//C++
int main()
{
	int a = 10;
	modify_num(a);
	printf("a=%dn", a);

	int *p = NULL;
	modify_pointer(p);
	printf("p[0]=%dn", p[0]);

	return 0;
}
a=11
p[0]=5

D:cbook第七章  结构体Debug04.C++的引用.exe (进程 19748)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号