本课程总结
第一章 C语言程序设计概述
目的:初步了解C语言程序,学会使用C语言环境编辑运行C程序。 要求:掌握程序设计语言、程序、算法的概念,了解算法的特点,熟悉算法的设计步骤,掌握用流程图表达算法的方法。了解C语言程序的结构特点,掌握在Turbo C集成环境下编辑、运行简单C语言程序的方法。 教学重点:C语言程序的结构特点;在Turbo C集成环境下运行C程序 教学难点:算法设计和算法描述。
算法:
算法:就是解决问题的方法。
计算机算法可分为两类别:
数值运算算法
—求数值解,用在科学计算。
非数值运算算法
—求非数值解,用在事物处理。
数值运算算法
例如:已知三角形的底a等8,高h等14,求三角形的面积s。则
数值运算算法为:
1、 a=8 a的值等于8
2、 h=14 h的值等于14
3、 s=a*h/2 计算面积S
非数值运算算法
例如从湛江乘火车去北京开会,其算法为:
1、买火车票
2、按时到车站
3、登上火车
4、到北京站后乘电车到会场
5、参加会议
C语言的特点:
C语言的基本结构
标识符与关键字:标识符用来表示函数、类型、变量的名称,使字母、下划线和数字的排列,必须用字母、下划线开头;关键字不能作为变量或函数名来使用。
C语言程序的开发环境:VC、TC
第二章 C语言的基本数据类型与表达式
目的:通过本讲学习,掌握基本类型数据在C程序设计中的用法。 要求:掌握数据类型、常量、变量的概念及变量的定义和使用方法; 教学重点:基本数据类型的表示方法,常量、变量的使用方法; 基本数据的三种类型及表示形式:
整型 int (十、八- -以数字0开头、十六进制—以0X开头) 实型 float(十进制制、指数形式---- e之前必须有数字,e之后指数必须为整数)
字符型:char(注意常见的转义字符)
常量和变量:变量类型与变量的定义
运算符:符号、优先级别、结合方向;尤其注意前增、前减、后增、后减和条件运算
表达式:表达式的值及类型(注意类型的强制转换)
第三章 顺序结构程序设计
目的:通过本讲学习,达到进行顺序结构程序设计的目的。
要求:了解程序的三种控制结构及其特点,能对任何一种结构绘制流程图;
掌握基本输出输入函数的基本格式及其主要用法;能够设计顺序结构程序。
教学重点:printf()和scanf()函数的基本格式及其主要用法。
1、C语言的基本语句
2、字符输入、输出:putchar()
getchar()
3、格式输入输出:scanf(“%d”,&a)
printf(“%d,%c,%f”,a,b,c)
重点:格式字符及其含义
第四章 选择结构程序设计(控制语句)
目的:通过本讲学习,达到能够使用if语句和switch语句进行程序设计的目的。
要求:掌握if语句三种形式(if,if-else,if-else if)和执行过程,掌握if
语句嵌套概念;掌握条件运算;掌握多路分支switch语句的格式和执行过程。
教学重点:if语句和switch语句的格式和执行过程。
关系运算和关系表达式:>、< 、 >= 、<= 、!= 、 = =
逻辑运算和逻辑表达式:&&、 || 、 !
注意:在多个&&运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为0,则停止运算;在多个 || 运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为1,则停止运算。
条件语句的三种格式:
一、单支选择:
int a=5,b=5,c;
if(a= =b) c=a;
二、二支选择:
int a=5,b=7,max;
if(a>b) max=a;
else max=b;
三、多支选择:
int a=5,b=7,c=9max;
if(a>b)
if(a>c) max=a;
else max=c;
else if( b>c) max=b;
else max=c;
条件语句注意的问题:
1、 if( )后面一般不跟“;”号。
如: if(a>c) ; max=c; 条件不影响后面语句。
2、 else 与if 的配对
3、 比较两个变量是否相等,必须用“==”两个等号。
如: if(a==b) c=a;
4、if( )语句括号内的值为 0,表示条件不成立。非0表示条件成立。 条件语句的应用例题:
1、将字母换成小写。
main()
{ char c;
scanf(“%d”,%c);
if( ?A?<=c&&c<=?Z? ) c=c+32 ;
printf(“%c”,c); }
2、 给出一个3位的正整数。
按反序打印每位数。例如:321,应输出123。
main()
{ int n,a,b,c;
scanf(“%d”,&n);
a=n/100;
b=n%100/10;
c=n%10;
printf(“\n%d%d%d” ,c,b,d);
}
3.switch语句的例子
#include "stdio.h"
main()
{ char s[]="ABCCDA";
int k;char c;
printf("\n");
for(k=1;(c=s[k])!='\0';k++)
{switch(c)
{ case 'A':putchar ('%'); continue;
case 'B': ++k;break;
default :putchar('*');
case 'C':putchar('&') ;continue;}
putchar('#');}}
答案:#&*&%
第五章 循环结构程序设计(控制语句)
目的:通过本讲学习,达到使用循环控制语句编写循环控制程序的目的。 要求:掌握while、do-while、for三种循环结构格式以及执行流程;掌握三种循环结构的区别。
重点:while、do-while、for三种循环的结构格式以及执行流程、break语句和continue语句的功能及应用。
主要掌握循环三个变量:
循环从哪开始-----初始值
到哪结束----终止值
步长多少。
for(i=0;i<=99;i++) printf(“%d”,a[i]);
循环语句注意的问题:
1、 for( )后面一般不跟“;”号。
如: FOR(I=0;I<=99;I++); printf(“%d”,a[i]);
管不了不后面的printf(“%d”,a[i]);
语句。
2、 while()语句的步长变量必须在循环体内改变。
例:i=1;
While(i<10)
{ printf(“%d”,i);
I++;}
否则死循环。
3、while( )语句括号内的值为 0,表示条件不成立。非0表示条件成立. 循环的应用例题:
一、一重循环的应用:
1、输入10个数据到数组a[10].
Main()
{ int I,a[10];
For(i=0;i<=9;i++)
Scanf(“%d”,%a[i]);}
2、已知有十个学生的成绩,
求最高分max和最低分min,所在的下标ma,mi。 main()
{ int max,mink,ma;
int a[10]={88,78,76,89,66,65,68,99,77,89};
max=a[0]; ma=0;
for(k=1;k<=9;k++)
if(max<a[k]) { max=a[k]; ma=k;}
min=a[0];
for(k=1;k<=9;k++)
if(min>a[k]) { min=a[k]; mi=k;}
printf(“\n max=%d,min=%d”,max,min); }
二重循环的应用:
1、打印图形
例题:打印下面图案:
*******
*******
*******
*******
总共打印4行,每行打印6个星号。
分析:
要求打n行.
每行打若干”*”
换行.
main()
{ int I,j;
for(i=1;i<=4;i++)
{ for(j=1;j<=6;j++)
printf(“*”);
printf(“\n”); }
}
2、将数组
a[10]={88,78,76,89,66,65,68,99,77,89};从小到大排序
main()
{ int I,j,ma;
int a[10]={88,78,76,89,66,65,68,99,77,89};
for(i=0;k<9)
for(j=i+1;j<=9;j++)
if(a[i]>a[j])
{ ma=a[i];a[i]=a[j];a[j]=ma;}
for(i=0;i<=9;i++)
printf(“ %d,”,a[i]);
}
第六章 函数与编译预处理(函数基础)
目的:通过本讲学习,达到能够设计和使用自定义函数进行编程的目的。 要求:掌握自定义函数的一般结构及函数的定义方法;掌握形参、实参、函数原型等重要概念;掌握函数声明、函数调用的一般方法。了解局部变量、全局变量和变量的存储类型的概念;熟悉auto型和static型局部变量的特点和用法。
重点:函数的定义、声明及调用方法(嵌套、递归调用)
子程序的作用:
1. 完成主程序里的一块功能.
2. 简化主程序.
3. 主程序里的任一块功能可以单独的编成子程序.
函数小结:
1.子程序一般有参数(有类型):调用的实参和定义的形参必须数量、类型、顺序一致。
2. 子程序的名字是除了main以外.
3.main() 叫主程序,是唯一的.
4. 子程序可以多个.
5. 子程序一般有return语句.
6. 函数声明的基本要求
函数举例:
求a,b最大值
max(float a,float b);
{ float m;
m= a>b?a:b;
return m; }
main()
{ float a,b,m;
Scanf(“%f,%f”,&a,&b);
m=max(a,b); 调用子程序max
printf(“%f”,m);
}
2、求出100—500内所有的素数,并按5个一排打印出来。 prim(int n)
{ int k,fg;
for(k=2;k<=n/2;k++)
if(n%k==0)
{ fg=0;break;}
else fg=1;
return fg;
}
main()
{ int k,x,cnt=0;
for(k=100;k<=500;k++)
{
if(prim(k))
{ if(cnt%5==0)
printf(“\n”);
printf(“ %d”,k);
cnt++;}
}}
3、教材 第79页 例6.7求最大公约数的程序。
变量作用域与存储方式:
注意局部变量、全局变量的概念及特点
预编译处理:
1、宏定义:无参数的宏定义、带参数的宏定义方法和注意事项
2、文件包含
第七章 数组(一维数组和二维数组)
目的:通过本讲介绍,达到使用数组进行基本编程的目的。
要求:掌握一维数组和二维数组的定义和初始化及引用;掌握一维数组的编程应用和二维数组的简单编程应用;了解数组作为函数参数的使用。
重点:一维数组和二维数组的定义、初始化及其数组元素的引用方法。 数组的概念
? 数组:具有相同类型的数据组成的序列,是有序集合
数组定义形式:数据类型 数组名[常量表达式]
◆ 数据类型: 数组的基本类型
有整型、实型、字符型等。
int a[10] float b[10] char c[10]
? 数组名 对数组的标识,遵循C语言标识符规则
? 常量表达式 是数组元素的个数,即数组长度。
int a[10] 10
它必须是常量。
下标:元素在数组的位置.
下标的上界: 0
下界: 9
数组的成员称为数组元素。
数组的基本应用:(必须掌握)
1.对一组数,求累加数,平均数。
2.对一组数,求最大值或最小值和下标。
3.将最小(大值)调到前面。
4.对一组数,按最大(小)值排序。
5. 将字符数组从小到大排序.
6. 对字符数组,把字母 a换成b,b---c,z---a.
7.对一组数a[],按给出的条值取数,赋给另外一个数组b[]。再对b[]排序。(难,等级考试题)
例题1、对字符数组,把字母 a换成b,b---c,z---a.
main()
{ int I,j; ?a?---?b? ?a?+1
Char a[10]={?a? ,?c?,?e?,…?u?};
for(i=0;i<=9;i++)
{ if(a[i]>=?a?&&a[i]<?z?)
a[i]=a[i]+1;
else if(a[i]==?z?) a[i]==?a?;}
}
2、对一组数a[],把偶数的元素,赋给另外一个数组b[]。再对b[]排序。(难,等级考试题)
main()
{ int b[16],cnt=0,I,j,y;
int a[16]={12,32,11,33,43,45,66,88,78,46,69,99,98,87,76,65};
for(i=0;i<16;i++)
if((a[i])%2==0)
b[cnt++]=a[i];
for(i=0;i<cnt-1;i++)
for(j=i+1;j<=cnt-1;j++)
if(b[i]>b[j])
{y=b[i];b[i]=b[j];b[j]=y;}
for(i=0;i<cnt;i++)
printf(“%d ,”,b[i]);
}
第八章 指针(指针基础)
目的:通过本讲介绍,达到应用指针进行基本编程的目的。
要求:掌握指针和指针变量的概念、掌握指针变量的定义、赋值方法,熟练使用指针访问简单变量;掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素;了解指针和二维数组的关系,掌握用指针表示二维数组元素的方法;掌握指针与字符串的关系。
不同的语言编写的程序是不相同的。但算法是相同的。
至今为止,我们只是描述算法,这些描述仅是便于我们阅读和理解,但计算机是无法识别的。只有用计算机语言编写的算法,计算机才能识别
和执行。
程序:
用计算机语言编写的算法。
或:
程序=算法+语法
编写程序也与写文章一样,是有结构的。高级语言编写的程序其结构限制为:
顺序结构
选择结构
循环结构
三种结构。称之为结构化程序。
C程序编写格式:
1、
2、
3、
4、 说明语句 数据赋值或输入 运算 输出
# include <math.h> 如果用到数学库才写
main()
{ int ; float ; char ; 必须有说明语句,
scanf(“格式符“,&变量名); 如果有输入,写输入语句。 运算
printf(“格式符“,变量名); } 必须有输出语句 C程序编写容易犯的错误
1、 有变量运算,没有说明语句。
2、 输入语句 scanf(),变量前面没写”&”地址符。
3、 用到大写字母开头或大写的函数名。如Printf(),SIN(x)
4、 打印语句printf()“格式符”或变量名错。
第二篇:Matlab程序设计课程总结
Matlab课程总结
1.Matlab的课程总结
随着对matlab的学习的深入,我对其了解也更加深入。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是矩阵实验室(Matrix Laboratory)的简称。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
应用matlab语言编程的方法来对复杂电路进行分析和计算,不仅节约计算时间、方便地调试电路参数,而且还可以非常直观地观察和测量电路中的电压、电流和功率等物理量。结论表明,matlab提供了高效简洁的编程方法,其强大而简易的绘图功能、矩阵和数组运算能力以及很强的扩充性,能充分的满足基本电路分析、计算的需要,从而可以大大地提高计算精度和工作效率,在电路理论学科研究与工程实践中具有很好的应用价值。
2.matlab的优势和应用
2.1 MATLAB的优势
(1)强大的科学计算机数据处理能力
MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
(2)出色的图形处理功能
图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
(3)应用广泛的模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
2.2matlab的应用
MATLAB的应用领域十分广阔,典型的应用举例如下:
(1) 数据分析
(2) 数值与符号计算;
(3) 工程与科学绘图;
(4) 语音处理;
(5) 图像与数字信号处理;
(6) 建模、仿真及样机开发;
(7) 新算法研究开发;
(8) 图形用户界面设计。
3.matlab在电路分析中的应用举例
在电路分析中,随着电路规模的加大,微分方程阶数以及联立方程的个数势必增多,给解算带来困难。传统的计算机编程语言,如FORTRAN、C语言等在处理高阶微分方程和大规模联立方程组问题时,大量的时间和精力都花在矩阵处理(如矩阵输入、求逆、稀疏矩阵处理等)和图形的生成分析等繁琐易错的细节上。而被誉为第四代计算机语言的MATLAB在矩阵处理和图形处理等方面有着得天独厚的优势。利用 MATLAB的M文件来求解电路 方程,只需一个或几个语句即可完成,同时MATLAB提供的 Simulink工具可直接建立电路模拟模型,随意改变模拟参数,并且立即可得到修改后的模拟结果(Scope显示),进一步省去了编程的步骤。
1.图一所示的电路中,Us=16V,R1=R3=R4=1Ω,R2=2Ω,K=4,求U10.:
求解此题的方程组为
对应的M文件为
A=[-7 -2 0;-3 2 0;1 0 1]; %定义方程组的系数矩阵A
B=[16 0 16]; %定义右端矩阵
C=A\B %求解未知变量矩阵C
C=4.000
6.000
12.000 此为U10值
2.在图3所示的电路中,R3=R6=1Ω,G8=1S,L1=1H,C4=1e-6F,C9=2e-6F,US7=10sin100tV,IS2=2sin100Ta,g=1.用2b法求各支路的变量。
与图3对应的2b方程的矩阵形式为
其M文件为
A=[-1 0 0 0 0 1 0 0 0;-1 1 0 0 0 1 0 0;0 1 0 0 0 -1 0 1 1;0 0 0 1 0 0 -1 0 0;0 0 0 0 -1 0 0 0 -1]
B=[1 1 0 0 0 1 0 0 0;0 0 1 -1 0 0 -1 0 0;0 -1 -1 0 0 0 0 1 0;0 0 0 0 -1 0 0 -1 1]
C=[-1 0 -1 j*1E -4 0 -1 1 1 j*2E -4]
Ye=diag(C)
Ye(5,6)=-1
D=[j*1 0 0 1 1 -1 1 1 0 -1 -1];
Ze=diag(D)
Us=[0 0 0 0 0 0 1 0+j* 0 0 0]'
Is=[0 -2+j*0 0 0 0 0 0 0 0]'
E=zeros(5,9)
F=zeros(4,9)
G=[0 0 0 0 0]'
H=[0 0 0 0]'
W=[E A;B F;Ye Ze]
N=[G;H;Us+Is]
Xn=W\N
第6条支路的电压向量为
1.0e+002*(-0.0000+0.0004i);
计算其峰值为:0.05656V。
扩频通信系统的建模与仿真
目的
1、 加深对扩频通信系统的理解
2、 了解直接序列扩频通信系统的抗噪声能力
3、 熟悉扩频码在直序扩频中的作用
内容
设计一个完整的扩频通信系统模型,包含信号的产生,扩频,调制,解扩,解调以及恢复的全过程,并通过信号的频谱对系统进行分析。
原理
1、 直接序列扩频通信系统
扩展频谱调制是指已调信号带宽远大于调制信号带宽的任何调制体制;在这类体制中已调信号的带宽基本上和调制信号带宽无关。
直接序列扩频发射机框图如图4-1所示,二进制数据源通过乘法器与PN序列相乘,由于PN序列的码元持续时间远小于数据源的码元持续时间,因此得到的信号频谱将大大扩展,接下来将扩展了频谱的数字信号通过数字调制进行发送,得到发射的扩频信号。其中,发射信号的表达式为
图4-1 直接序列扩频的发射机系统结构
直接序列扩频系统的信道以及接收机结构如图所示
图4-2 直接序列扩频的接收机系统框图
接收方接收到的信号由扩频信号,噪声信号以及干扰信号组成,由此可以得到接收信号的表达式:
当接收机达到同步要求时,其本地扩频序列与发射机扩频序列相同。解扩也是以乘法器完成的,因此解扩输出信号为:
由于扩频序列 ,故上式第一项为,后面两项属于宽频分量,可以通过滤波器滤除。
步骤
直接序列扩频发射机的设计:
为保证频谱的平滑,仿真参数如下图所示:
图4-3 系统仿真参数设置
1、二进制随机数发生器模块产生基带二进制信号,其采样时间设置为0.01,这样就可以得到数据率为100bps的基带信号,由于扩频时,需要与数据率高于自己的扩频码相乘,因此通过Rate Transition模块进行速率调整,并通过Unipolar to Bipolar Converter模块进行双极性转换,得到双极性信号。
2、扩频码由PN序列发生器产生,其中PN序列的生成多项式为[1 0 0 0 0 1 1],初始状态设置为[0 0 0 0 0 1]。由于采样时间设定为1/2000,这样,就能够产生数据率为2Kbps的扩频码
3、利用乘法器进行扩频,然后将扩频信号送入到BPSK调制模块进行数字调制,并经过速率转换后按照1/8000的采样时间进行采样保持(Unit Delay模块),最后通过频谱仪显示频谱
4、为了观察扩频前的信号频谱,再将二进制基带信号通过采样,然后观察频谱,其中Unit Delay模块与第三步中的Unit Delay模块设置一致。
图4-4 直接序列扩频发射机仿真模型
完整的直接序列扩频通信系统的设计与仿真
1、 将发射机模型封装为一个子系统,如下图所示:
图4-5 扩频信号发射机子系统
2、将直序扩频信号送到高斯白噪声信道中进行传输,设置高斯噪声信道的噪声方差为10。并通过加法器叠加单频干扰(设置为300Hz的正弦波,采样时间为1/2000)。
3、产生本地解扩码序列,解扩码与扩频码一致,可参照扩频码进行设置
4、扩频信号与解扩码相乘,产生解扩信号,然后送入到BPSK中进行解调,极性变换,最后观察信号频谱。
5、解调后的信号与原始二进制基带信号进行误码率计算,其中二进制基带信号的产生与发射机相同,可参照后者进行设置。
下图为完整的直序扩频的模型,其中所有的采样保持序列的采样时间均设置为1/8000
图4-6 直序扩频系统仿真模型
结果
分析扩频通信系统的频谱特性,并测试其抗噪声性能。
通信1001班
黎利丽