C语言学习笔记(一)-简单算法和数组

**写在前面:**本系列内容均为自学内容,旨在补一下C语言知识,以便更好的学习STM32单片机,笔者没有系统的看过相关教学视频,所以不会有太多的理论解释,并且可能会存在很多问题,如果有大佬路过发现了,还望帮忙指正,感谢各位。

学习目标

1、实现输入和输出;
2、进行简单的加减乘除操作(任选其一即可);
3、尝试输出二维数组。
使用的软件为《Visual Studio 2022》和《Code:Blocks》

一、输入和输出

先看一下C语言中的几种基本的数据类型,这里只列举4中,其他等后面用到的时候在看:
表1-1:

数据类型长度(bit)范围
char(字符型)8ASCII字符
int(整型)16-32768~32767
float(单精度型)32约精确到6位数
double(双精度型)64约精确到12位数

上述表格中我们使用的是int类型的;
在C语言中输出函数位printf();输入函数位scanf();,此外在使用输出输入函数时还需要注意格式,这是就要用到格式字符:
表1-2:

格式字符用法
%d十进制整型输出
%ld十进制长整型输出
%o以八进制数形式输出
%x以十六进制数形式输出
%u以十进制unsigned(无符号)型输出
%c输出一个字符
%s输出一个字符串
%f输出一个实数,以小数形式输出,默认保留小数点后6位
%.100f保留小数点后100位
%e以指数形式输出
%g根据大小自动选择f格式或者e格式,且不输出0

以上表格来自网络,笔者只使用了%d类型,其他并未使用验证;
看一下程序:

#include "stdio.h"  //c语言库文件

int a;	//定义一个整型变量

int main()
{
	printf("input there data:\n");  //输出一段英文
	scanf("%d",&a);                 //手动输入一个整型数字
	//scanf_s("%d",&a);             //vs2022软件使用这个函数输入
	printf("%d", a);                //将输入的数字显示在屏幕上
}

上述程序需要注意的是,软件如果使用VS2022,那么输入函数要使用scanf_s(),否则可能没办法编译通过,程序中“\n”表示后面的内容在下一行显示,下面是正确操作后的最终界面,使用的软件是:《Code:Blocks》:
图1-1:
在这里插入图片描述
我们主要看前三行:第一行是程序中的第一个输出函数所输出的内容,第二行的1是手动输入的数字,输入完成后按下回车键就会显示第三行的1,这是程序中第二个输出函数输出的内容,第四行不用管,第五行是说,按下任意键退出这个界面,以结束程序的运行;

二、简单的运算

在这个目标中我们要完成以下计算:1×2×3×4×5,直接看程序:

#include "stdio.h"  //包含c语言库文件

int b=1 ,c;  //定义变量,并将其中一个赋值

int main()
{
//这个for循环就是为了计算1*2*3*4*5,先让1*2,然后用得出的数据×3,再用相同的方法与4和5相乘,最后得到结果
	for(c = 2; c < 6; c++)
	{
		b = b * c;
	}
	printf("%d", b);
}

这个就不放运算结果的截图了,这个运算最后结果为120;

三、尝试输出二维数组

先看一下数组:a[8]={1,2,3,4,5,6,7,8},其中a[ ]表示数组,中括号中的8表示有8个成员,等号后面的大括号里的数字就是这8个成员,当然这是个一维数组;二维数组与之类似:b[2][2]={{1,2},{3,4}},其中b[2][2]表示二维数组有两行两列,前面是行,后面是列,后面大括号中,{1,2}表示第一行的数据是1和2,{3,4}表示第二行数据,二维数组定义时,行数可以不写,但列数一定要写;在数组中,位数从0开始数,比如上述数组a,其成员分别为a[0]~a[7],共8位;

#include "stdio.h"	//包含c语言库文件

int i;
int j,g[8] = { 4, 6, 8, 5, 2, 3, 10, 5 };
int s1=0, s2=0, ss[][2] = { {1,2},{3,4},{5,6},{7,8} };

int main()
{
//在一维数组中找出数字大于等于5的,并将位置标出来,位置从1开始数
	for (j = 0; j < 8; j++)
	{
		if (g[j] >= 5)
		{
			i = (j + 1);//用i表示位置,编号从1开始
			printf("%d,%d\n", g[j], i);
		}
	}
	printf("\n\n");	//将一维数组和二维数组的结果分开
//输出二维数组,并输出指定位数的数字
	for (s1 = 0; s1 < 4; s1++)//行数
	{
		for(s2 = 0; s2 < 2; s2++)//列数
			printf("%-4d", ss[s1][s2]);
		printf("\n");//每输出完一行就输出一次\n,防止输出成1行
	}
	printf("%d", ss[3][1]);

	printf("\n\n");
}

在上述程序中,我们同时操作了一维数组和二维数组,对一维数组,主要是取出其中大于等于5的数,并将其在数组中的位置输出出来,二维数组,主要是将上面定义的数组输出到屏幕上,并将其中一位数输出,下面看结果:
图1-2:
在这里插入图片描述
图片中,前5行是一维数组的计算结果,前面是数据,后面是位置,中间用逗号隔开;后5行中,6~9行是定义的二维数组,共4行2列,最后的8是输出的指定数据。
以上仅作笔记参考,不做教学,感谢观看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DIT-FFT算法(分裂方法快速傅里叶变换算法)是一种基于迭代的快速傅里叶变换算法,用于计算离散傅里叶变换(Discrete Fourier Transform, DFT)。它是一种高效的算法,用于将离散时间域信号转换为频域信号。 在使用C语言编制DIT-FFT算法程序时,可以按照以下步骤进行: 1. 首先,需要定义和初始化输入信号的离散采样值数组,通常为一个一维数组。 2. 计算输入信号的长度N,并进行必要的位数调整,确保N为2的幂次方。 3. 实现快速傅里叶变换的核心函数。该函数需要接收输入信号数组和N作为参数。 4. 在核心函数中,将输入信号数组根据DIT-FFT算法的递归特性进行分裂。 5. 在每一层递归中,进行蝶形运算(Butterfly Operation),通过分别计算两个采样点的DFT结果和结合因子,得到两个新的采样点。这些运算可以通过循环实现。 6. 重复执行上述步骤,直到完成所有的递归分裂和蝶形运算。最终,得到输出信号的频域表示,存储在一个新的一维数组中。 7. 最后,输出频域信号的结果,可以通过打印到控制台或以其他方式进行处理。 编写DIT-FFT算法程序时,需要理解该算法的原理,并善用C语言数组和循环等特性。此外,对于大规模信号处理,还可以考虑采用并行计算等技术,提高算法的效率。 ### 回答2: DIT-FFT全称为Decimation In Time的快速傅里叶变换算法,是一种用来将时域信号转化为频域表示的算法。下面我将用300字来简要解释C语言编制的DIT-FFT算法程序的基本原理和步骤。 首先,DIT-FFT算法是基于分治法的思想,将一个N点的离散傅里叶变换分解成多个较小规模的离散傅里叶变换。程序中需要指定输入信号的长度N,然后根据N的值确定需要进行多少级的分解。 其次,程序通过递归的方式将原始信号分解为多个子问题。每一级的子问题需要进行正交矩阵变换,并对得到的频域信号进行重新排序。具体来说,程序中会根据蝶形运算的方式对两个频域值进行组合(一个为奇数索引,一个为偶数索引),从而得到更高级别的频域值。 最后,在进行蝶形运算后,需要对得到的频域值进行幅度和相位的计算。得到最终的频域表示。C语言编制的DIT-FFT算法程序可以通过使用复数数组和迭代来实现这一过程。 总结来说,C语言编制的DIT-FFT算法程序通过分治法的思想,将一个N点的离散傅里叶变换分解成多个较小规模的离散傅里叶变换,并通过蝶形运算和重新排序得到频域信号。这个算法程序对于信号处理、图像处理等领域都有着广泛应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值