C语言基础day7

C语言学习 从入门到进阶(五) 循环继续的学习。 这边我们学习一下循环的嵌套; 我们之前学习过条件语句的嵌套,其实循环语句的嵌套也是一样的。 我们看一个代码: #include<stdio.h> int main() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { printf("%d ", j); } printf("\n"); } return 0; } 这个语句大家在自己电脑当中实现一下就会像我一样 阅读详情

复习

冒泡排序

int a[10] = {1,1,1,1,1,1,1,1};
int i, j;
for(i = 0;i < 10-1;i++)//外层循环 反复冒泡
{
	for(j = 0;j < 10-1-i;j++)//内层循环冒一个泡
	{
	//升序排
		if(a[j] > a[j+1])
		{
			int t = a[j];
			a[j] = a[j+1];
			a[j+1] = t;
		}	
	}
}

二维数组的本质

C语言只有一维数组
所谓的二维数组是 数组元素是一维数组的一维数组。

定义二维数组

int a[2][3];

遍历

//遍历二维数组,一般使用双重for循环,因为二维数组的元素有两个角标
int i, j;
//一般都是使用外层循环遍历第一个角标,内层循环遍历第二个角标
for(i = 0;i < 2;i++)
{
    for(j = 0;j < 3;j++)
    {
        printf("%d\n", a[i][j]);
    }
}

初始化

//完全初始化
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{1,2,3},{4,5,6}};
//部分初始化
int a[2][3] = {1,2,3};
int a[2][3] = {{1}, {2,3};
//默认初始化
int a[][3] = {1,2,3,4,5};

作业:

请将杨辉三角形(7阶)保存在二维数组中,并输出。

1 0

1 1 0

1 2 1 0

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

#include <stdio.h> 

int main()
{	
	int a[7][7] = {0};
	int i, j;
	for(i = 0;i < 7;i++)
	{
		a[i][0] = 1;//每一行的第一个是1
		for(j = 1;j < i+1;j++)
		{
			a[i][j] = a[i-1][j]+a[i-1][j-1];
		}
	}

	for(i = 0;i < 7;i++)
	{
		for(j = 0;j < 7;j++)
		{
			printf("%d ", a[i][j]);
		}
		printf("\n");//打印完一个小数组换行
	}
	return 0;
}

作业1:

鞍点。 判断数组中是否存在鞍点,在该行最大,并且在该列最小

1 2 6 4 a[0][j]

5 6 7 8 a[1]

9 10 11 12 a[2]

6是鞍点

#include <stdio.h> 

int main()
{	
	int a[3][4] = {1,2,6,4, 5,6,7,8,9,10,11,12};
	int i, j;
	for(i = 0;i < 3;i++)
	{
		int max = a[i][0];
		int col = 0;
		for(j = 1;j < 4;j++)
		{
			if(a[i][j] > max)
			{
				max = a[i][j];
				col = j;//保存最大值所在的“列”
			}
		}
		int row;
		for(row = 0;row < 3;row++)
		{
			if(a[row][col] < max)
			{
				break;
			}
		}
		if(row == 3)
		{
			printf("安点%d\n", max);
		}
	}
	return 0;
}

作业2:(和二维数组没有关系)

输入一个字符串,转换为数字 例如:“1234” --> int 1234

sum=sum*10+a;    a是将数字字符转换成的整数
将数字字符转换成对应的整数,减去'0' char c = '7';int num = c-'0';
#include <stdio.h> 

int main()
{	
	char buf[] = "1234";
	int i = 0;
	int sum = 0;
	while(buf[i] != '\0')
	{
		int num = buf[i]-'0';
		printf("%d\n", num);
		sum = sum*10+num;
		i++;
	}
	printf("%d\n", sum);
	return 0;
}

作业3:

尝试输出如下图形。 输入位子信息和字符信息,可以任选位置,并将该位置的字符换成输入的新字符。

二维数组常用来表示一个平面直角坐标系。

一般没规定坐标原点在左上角;

X轴向右递增

y轴向下递增

第一个角标表示y轴

第二个角标表示x轴

2 3 &

* * * * *

* ^ * * *

* * * * *

* * & * *

* * * * *

#include <stdio.h> 

int main()
{	
	char map[10][9];
	int i,j;
    //1.数组初始化
	for(i = 0;i < 10;i++)//Y轴
	{
		for(j = 0;j < 9;j++)//X轴
		{
			map[i][j] = '*';
		}
	}

	while(1)
	{
        //2.打印数组
		for(i = 0;i < 10;i++)
		{
			for(j = 0;j < 9;j++)
			{
				printf("%c ", map[i][j]);
			}
			printf("\n");
		}
		int x, y;
		char c;
		scanf("%d%d %c", &x, &y, &c);
		map[y][x] = c;
	}
	return 0;
}

1、函数

什么时候封装函数?

1、固定的算法,应该封装成函数。

2、会反复执行的逻辑。

3、当函数写的太长,它一定可以拆分成若干个小函数。

1. 函数分类

系统函数: printf(); rand(); gets(); 会调用即可。

自定义函数: 要求自己实现功能。

函数是对功能的封装!

对于完整的函数实现,包含四个部分:

  1. 函数名
  2. 返回值类型 函数会产生一个结果,返回值类型就是结果的类型。
  3. 参数列表 y = x; 用来给函数的逻辑中的一些变量赋值。 sin(30) = 0.5 30是函数的参数,0.5是函数的返回值
  4. 函数体 被{}包含 写函数的逻辑。

示例:

int main(参数列表(可以为空))  
{
	 函数体(函数要做的事情)
}
//函数名  main
//返回值类型  int   
//参数列表空  ()    int main(int argc, char** argv)
//{} 函数

2. 函数的调用与执行

使用要点:

  1. 函数只有被调用,才会执行。如果不调用某函数,那么就不会执行它。

  2. 在 c 语言中,函数和变量,要先声明、再使用。

示例1:

#include <stdio.h>

//函数名 function
//返回值类型  int
//参数列表 空  ()
//函数体  {}里的内容   这个函数的功能是输出4 和 9 的最小值
int function()  
{
  	int a = 4, b = 9;
  	int min = a<b?a:b ;
 	printf("min = %d\n",min);
 	return 0;
}

int main()
{
	printf(“hello world\n”);
	function();  
	printf(“end\n”);
	return 0;
}

程序的执行过程分析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0eoT3OWA-1645615466484)(C:\Users\mudonghai\Desktop\C基础\day7\image-20220112113608029.png)]

练习1:

编写函数,实现功能。 可以对两个数进行求和输出。

#include <stdio.h> 

int add()
{
	int a = 4, b = 9;
	printf("%d\n", a+b);
	return 0;
}

int main()
{	
	add();
	return 0;
}

变量的作用域:

变量的可用范围,只在定义它的{}内是有效的。

int main()
{
	int a = 20, b = 10;
	if(a > b)
	{
		int max = a;
	}
	printf("%d\n", max);//max是在if的{}中定义的,所以只能在if的{}中使用
	return 0;
}

3、形参列表(参数列表)

注意要点:

  1. 信息传递的方向: 由 主调函数 传递给 被调函数。

  2. 形参与实参,个数要一致,类型要一致。

形参:定义在函数的()里的变量,我们叫形参。形参和定义在函数的{}里的变量唯一的区别,形参必须被实实参初 始化。

实参:调用函数时传递的参数,按照顺序给形参初始化。

示例2:

#include <stdio.h>

int get_sum(int a,int b) //a 和b就是函数get_sum的形参。每个形参都要写类型,形参之间用,隔开。
{
  	a = a + b; 
  	printf("sum = %d\n",a);
  	return 0;
}

int main()
{  
	printf(“hello world\n”);
	get_sum(6,7); //6 7是调用函数get_sum的实参,用来初始化形参a和b,实参也可以是变量
	printf(“end\n”);
	return 0;
}

程序执行过程分析:

练习2:

编写函数,实现功能:三个整数中,找到个最大值打印输出。

#include <stdio.h> 

//形参的作用域只在函数中
int max(int a, int b, int c)
{
	int bigger = a>b?a:b;
	int biggest = bigger>c?bigger:c;
	printf("%d\n", biggest);
	return 0;
}

int main()
{	
	int a, b, c;//main中的abc作用域在main中,和max中的形参abc没有任何关系
	scanf("%d%d%d", &a, &b, &c);
	max(a, b, c);//使用main中的abc分别初始化max中的abc
	return 0;
}

练习3:

编写函数,实现功能:将一个整数值,放大十倍输出。

#include <stdio.h> 

int ten(int num)
{
	printf("%d\n", num*10);
	return 0;
}

int main()
{	
	int num;
	scanf("%d", &num);
	ten(num);
	return 0;
}

4、返回值

注意要点:

1) 信息传递的方向: 被调函数 传回给 主调函数。

2) 返回的值是什么类型,取决于:函数定义的返回类型。

3) 对应关系:

​ float return 3.14; return后面也可以接变量

​ int return 3;

​ void return ; void表示函数没有返回值

​ 函数中一旦执行到return,函数马上停止,去继续执行主调函数。如果是main中执行到return,main函数会结束,程序也就结束了。

示例3:

#include <stdio.h>
int get_max(int a, int b, int c)
{
 	a = a>b ? a: b;
  	a = a>c ? a: c;
  	return a;
}

int main()
{
  	int number;
  	number = get_max(67,22,149);//将被调函数中的返回值赋值给 number
  	printf("max = %d\n",number);
  	return 0;
}

执行过程分析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvHBrzzw-1645615466487)(C:\Users\mudonghai\Desktop\C基础\day7\image-20220112143200183.png)]

练习4:

编写函数,实现功能: 可以将小写字符转换为大写,或者将大写转换为小写。其余字符,原样不动。

#include <stdio.h> 

char train(char c)
{
	if(c>='A' && c<='Z')
	{
		return c+32;
	}
	else if(c>='a' && c<='z')
	{
		return c-32;
	}
	else
	{
		return c;
	}
}

int main()
{	
	char c = getchar();
	c = train(c);
	printf("%c\n", c);
	return 0;
}

练习5:

编写函数,实现功能: 求一个整数的 n 次方。

#include <stdio.h> 

int power(int a, int n)
{
	int mul = 1;
	int i;
	for(i = 0;i < n;i++)
	{
		mul*=a;
	}
	return mul;
}

int main()
{	
	printf("%d\n", power(3, 3));
	return 0;
}

5、局部变量与全局变量

局部变量: 定义在函数(花括号)之内的变量,叫局部变量。

全局变量: 定义在函数之外的变量,叫全局变量。

区别:

  1. 对于全局变量,如果没有进行初始化操作。那么这个变量默认为 0.

  2. 生命周期:全局变量从定义的位置开始,到程序结束为止。 (可以先忽略)

    ​ 局部变量从所在的{}开始执行创建,{}执行完删除。

  3. 作用域: 全局变量程序的任何地方都可以用。

    ​ 局部变量只能在定义的{}里使用。

  1. 全局变量不能重名。

示例4:

全局和局部 变量的初始值问题。

#include <stdio.h> 
int a;//全局变量,默认值0
int main()
{
	int b; //局部变量,没有默认值
    printf("a = %d,b = %d\n", a,b);
	return 0;
}

示例5:

全局变量 与 局部变量 重名的问题。

#include <stdio.h> 

int a = 80; 

void function()
{
	int a = 1;
	printf("fun: a = %d\n",a);//输出 1 使用变量,就近原则,找最近的作用域里的变量
}

int main()
{
	function();
	printf("a = %d\n",a);//输出80  在main中没有a,所以使用全局变量a
   	return 0;
}

练习6:

编写函数,两个函数,分别实现 “给二维数组赋值” 功能 和 “输出二维数组值” 的功能。

  1. 二维数组定义为全局

  2. 封装两个函数,给二维数组赋值putArr,输出二维数组printArr

  3. main中调用两个函数

#include <stdio.h> 

int arr[4][5];

void putArr()
{
	int i, j;
	for(i = 0;i < 4;i++)
	{
		for(j = 0;j < 5;j++)
		{
			arr[i][j] = i+j;
		}
	}
}

void printArr()
{	
	int i, j;
	for(i = 0;i < 4;i++)
	{
		for(j = 0;j < 5;j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{	
	putArr();
	printArr();
	return 0;
}

练习7:

编写函数,实现功能:从一个一维数组中,找到一个最小值。 并返回

​ 一维数组定义成全局的

#include <stdio.h> 

int arr[10] = {12,34,56,78,6,4,334,67,9,45};

int findMin()
{
	int i;
	int min = arr[0];
	for(i = 1;i < 10;i++)
	{
		if(min > arr[i])
		{
			min = arr[i];
		}
	}
	return min;
}

int main()
{	
	int min = findMin();
	printf("%d\n", min);
	return 0;
}

作业1:

定义函数判断一个整数是否为质数

参数:要判断的整数

返回值:0 表示不是质数  1 表示是质数

作业2:

定义函数求任意整数的位数

例如:12345

返回:5

参数:要计算整数

返回值:整数的位数

作业3:

for(i = 0;i < 4;i++)
{
	for(j = 0;j < 5;j++)
	{
		arr[i][j] = i+j;
	}
}

}

void printArr()
{
int i, j;
for(i = 0;i < 4;i++)
{
for(j = 0;j < 5;j++)
{
printf("%d “, arr[i][j]);
}
printf(”\n");
}
}

int main()
{
putArr();
printArr();
return 0;
}










### 练习7:

编写函数,实现功能:从一个一维数组中,找到一个最小值。 并返回

​	一维数组定义成全局的

```C
#include <stdio.h> 

int arr[10] = {12,34,56,78,6,4,334,67,9,45};

int findMin()
{
	int i;
	int min = arr[0];
	for(i = 1;i < 10;i++)
	{
		if(min > arr[i])
		{
			min = arr[i];
		}
	}
	return min;
}

int main()
{	
	int min = findMin();
	printf("%d\n", min);
	return 0;
}

作业1:

定义函数判断一个整数是否为质数

参数:要判断的整数

返回值:0 表示不是质数  1 表示是质数

作业2:

定义函数求任意整数的位数

例如:12345

返回:5

参数:要计算整数

返回值:整数的位数

作业3:

35选7使用函数封装。

保姆级教程:用ncnn把自训练的YOLOv8模型塞进Android App(附完整代码) 本文提供了一份详细的保姆级教程,指导开发者如何将自训练的YOLOv8模型通过ncnn框架部署到Android应用中。教程涵盖环境配置、模型训练与转换、Android工程集成及性能优化等全流程,并附完整代码实现,帮助开发者快速掌握移动端AI模型部署技术。 阅读详情

相关推荐

基于Matlab与Bladed联合仿真的交互软件设计

基于Matlab与Bladed的交互软件设计

weixin_45014222的博客 774

输出如下杨辉三角形的前七行。

#include<stdio.h> void main() { int a[7][7]; int i,j; for(i=0;i<7;i++) a[i][0]=1; for(i=0;i<7;i++) a[i][i]=1; for(i=2;i<7;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<7;i++) { for(j=0;j<=i;j++) printf("%5d",a[i][j

qq_54603387的博客 1227

SAE J1211-2012.Handbook for Robustness Validation of Automotive

Handbook for Robustness Validation of Automotive

输出如下杨辉三角形的前七行

#include “stdio.h” void main() { int a[7][7],i,j; for(i=0;i<7;i++) a[i][0]=1; for(i=0;i<7;i++) a[i][i]=1; for(i=2;i<7;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<7;i++) { for(j=0;j<=i;j++) printf("%d “,a[i][j]); printf

m0_54616508的博客 1339

二维数组作为函数参数*

** 二维数组作为函数参数 ** 规定:如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,数组的行数没有太大关系,可以指定也可以不指定。因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。因此二维数组作为函数参数正确写法如下所示: void Func(int array[3][10]); void Func(int array[ ][10]); 因为数组的行数无关紧要,所以还可以写成如下形式: void Func(int (array)[10]); 注意array需要用

weixin_44358746的博客 576

Day 9

将数组每行的平均值打印出来: #include <stdio.h> int main(void) { int a[][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; int row = sizeof(a) / sizeof(a[0]); //printf("%d\n "...

nihap123456的博客 194

C语言基础 day7作业

3.输入一个二维数组,计算每一行的和,每一列的和。2.输入一个m行n列的二维数组,计算第二大值。6.输入一个字符串,实现单词的逆置。8.输入5个人的姓名,实现升序排序。5.使用非函数实现atoi函数。4.使用非函数实现字符串比较。

weixin_49366095的博客 186

Day 7 C语言基础

【代码】Day 7 C语言基础

samdududu的博客 105

Linux C语言基础 day7

数据类型 数组名[常量1][常量2];char 数组名[常量];

没有百宝袋的哆啦A梦的博客 1561

DAY7C语言基础

【代码】DAY7C语言基础

qq_50951387的博客 444

c语言基础day7

【代码】c语言基础day7

a136630108的博客 108

C语言基础Day7-结构体

C语言结构体

qq_44653420的博客 563

C语言基础学习Day7

printf("最大值为%d,最大值个数为%d\n", max, n);定义一个能存六个数的整形数组,求最大值并记录最大值的个数。printf("剩余元素个数: %d\n",n);定义一个能存六个数的整形数组,删除数组中重复的元素。bzero和memset的使用方法。

qq_64682865的博客 293

C语言基础 day7

m0_73670222的博客 240

day7 c语言基础

m0_72595899的博客 230

C语言基础-day7

4.在主函数中定义两个字符串并初始化,定义有参有返函数,实现字符串比较,返回两个字符串ASCII值的差。2.在主函数中定义字符串数组并初始化,自定有参有返函数,计算字符串长度,并返回长度。3.在主函数中定义两个字符串并初始化,定义有参无返函数,实现字符串连接。1.循环输入5个人姓名 (二维字符数组),计算最大值。

qq_43718559的博客 336

day7c语言基础

c语言基础

changxu6的博客 85

C语言基础:DAY7

【代码】C语言基础:DAY7

Moster_o的博客 266

C语言基础 day 7

函数原型:void *memset(void *s, int c, size_t n);函数原型:void bzero(void *s, size_t n);5、定义一个能存6个数据的整型数组,删除数组中重复的元素。参数:void *s,要置0的内存空间的首地址。7、整理bzero和memset的使用方法。void *s:要置位的内存空间的首地址。功能是内存置0,给两个字节置零。3、使用指针实现两个变量的交换。size_t n,置0多少字节。size_t n:置多大字节。int c:内存置位的内容。

A18801772899的博客 139
上一篇: C语言基础day6
下一篇: C语言基础day8
encounter♌
博客等级 码龄7年 22粉丝 27原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

encounter♌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值