文档库 最新最全的文档下载
当前位置:文档库 › 课堂源代码_chap07

课堂源代码_chap07

课堂源代码_chap07
课堂源代码_chap07

Chap07

7.1 课堂程序

/*demo of chap07*/

#include

int main()

{

int i;

double avg=0;

/*数组的定义*/

int grade[10];

/*数组的初始化*/

for(i=0;i<3;i++)

{

printf("please enter %d grade:\n",i);

scanf("%d",&grade[i]);

}

/*数组引用*/

for(i=0;i<3;i++)

{

avg+=grade[i];

}

avg/=3;

printf("avg=%.2lf\n",avg);

for(i=0;i<3;i++)

{

if(grade[i]>=avg)

printf("grade[%d]=%d\n",i,grade[i]);

}

return 0;

}/*7-1 投票情况统计*/

#include

int main(void)

{

int count[9];

int i,response;

for(i=1;i<=8;i++)

count[i]=0;

for(i=1;i<=10;i++)

{

printf("Input your response:\n");

scanf("%d",&response);

if(response<1||response>8)

printf("Invalid response!\n");

else

count[response]++;

}

printf("result:\n");

for(i=1;i<=8;i++)

printf("%4d%4d\n",i,count[i]);

return 0;

}

/*7-2 输出费波纳气数列*/

#include

int main(void)

{

int i;

int fib[10]={1,1};

for(i=2;i<10;i++)

fib[i]=fib[i-1]+fib[i-2];

for(i=0;i<10;i++)

{

printf("%6d",fib[i]);

if((i+1)%5==0)

printf("\n");

}

return 0;

}

/*7-3 顺序查找法*/

#include

int main(void)

{

int i,flag,x;

int a[5];

printf("Enter 5 integers:\n");

for(i=0;i<5;i++)

scanf("%d",&a[i]);

printf("Enter x:\n");

scanf("%d",&x);

flag=0;

for(i=0;i<5;i++)

{

if(a[i]==x)

{

printf("Index is %d\n",i);

flag=1;

break;

}

}

if(flag==0)

printf("Not found!\n");

return 0;

}

/*7-4 输出最小值及对应下标*/

#include

int main(void)

{

int i,index,n;

int a[10];

printf("Enter n:\n");

scanf("%d",&n);

printf("Enter %d integers:\n",n);

for(i=0;i

scanf("%d",&a[i]);

index=0;

for(i=1;i

{

if(a[i]

index=i;

}

printf("min is %d\tsub is %d!\n",a[index],index);

return 0;

}

/*7-5 选择排序法*/

#include

int main(void)

{

int i,index,n,k,temp;

int a[10];

printf("Enter n:\n");

scanf("%d",&n);

printf("Enter %d integers:\n",n);

for(i=0;i

scanf("%d",&a[i]);

for(k=0;k

{

index=k;

for(i=k+1;i

if(a[i]

index=i;

temp=a[index];

a[index]=a[k];

a[k]=temp;

}

printf("After stored:\n");

for(i=0;i

printf("%d ",a[i]);

printf("\n");

return 0;

}

/*7-6 二分查找法*/

#include

int main(void)

{

int a[10]={1,2,3,4,5,6,7,8,9,10};

int low,high,mid,n=10,x;

printf("Enter x:\n");

scanf("%d",&x);

low=0;

high=n-1;

while(low<=high)

{

mid=(low+high)/2;

if(x==a[mid])

break;

else if(x

high=mid-1;

else

low=mid+1;

}

if(low<=high)

printf("index is %d:\n",mid);

else

printf("not found!\n");

return 0;

}

/*7-7 找出矩阵中的最大值及行列标*/ #include

int main(void)

{

int col,i,j,row;

int a[3][2];

printf("Enter 6 integres:\n");

for(i=0;i<3;i++)

for(j=0;j<2;j++)

scanf("%d",&a[i][j]);

for(i=0;i<3;i++)

{

for(j=0;j<2;j++)

printf("%4d",a[i][j]);

printf("\n");

}

row=col=0;

for(i=0;i<3;i++)

for(j=0;j<2;j++)

{

if(a[row][col]

{

row=i;

col=j;

}

}

printf("max=a[%d][%d]=%d\n",row,col,a[row][col]);

return 0;

}

/*7.8生成矩阵并输出*/

#include

int main()

{

int a[3][2];

for(i=0;i<3;i++)

for(j=0;j<2;j++)

a[i][j]=i+j;

for(i=0;i<3;i++)

{

for(j=0;j<2;j++)

{

printf("%d ",a[i][j]);

}

printf("\n");

}

return 0;

}

/*7.9方阵转置*/

#include

int main()

{

int a[3][3];

int i,j;

int temp;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

a[i][j]=i*3+j+1;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(i

{

temp=a[i][j];

a[i][j]=a[j][i];

a[j][i]=temp;

}

}

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

printf("%d ",a[i][j]);

}

printf("\n");

}

return 0;

}

/*7.10日期计算*/

#include

int day_of_year(int year,int month,int day); int main()

{

int year;

int month;

int day;

printf("请输入年月日\n");

scanf("%d%d%d",&year,&month,&day);

printf("今天是%d年的第%d天",year,day_of_year(year,month,day));

return 0;

}

int day_of_year(int year,int month,int day)

{

int i,leap;

int tab[2][13]={

{0, 31, 28, 31, 30,31,30,31,31,30,31, 30,31},

{0, 31, 29, 31, 30,31,30,31,31,30,31, 30,31}

};

leap=(year%4==0&&year%100==0)||year%400==0;

for(i=1;i

day=day+tab[leap][i];

return day;

}

/*7.11判断回文*/

#include

int main()

{

int i=0,n,m;

char s[10];

printf("请输入字符串\n");

while((s[i]=getchar())!='\n')

{

i++;

}

s[i]='\0';

for(n=0,m=i-1;n

{

if(s[n]!=s[m])

break;

}

if(n>=m)

printf("it is a plalindrome\n");

else

printf("it is not a plalindrome\n");

return 0;

}

/*7-13统计字符串中数字字符的个数*/ #include

int main(void)

{

int count,i;

char str[80];

printf("Enter a string:\n");

i=0;

while((str[i]=getchar())!='\n')

i++;

str[i]='\0';

count=0;

for(i=0;str[i]!='\0';i++)

{

if(str[i]<='9'&&str[i]>='0')

{

count++;

}

}

printf("count=%d\n",count);

return 0;

}

/*7.12把字符串中的数字转换为十进制数数值转换,在13的基础上改造即可*/ #include

int main(void)

{ int i,number;

char str[10];

printf("Enter a string:");

i = 0;

while((str[i] = getchar( )) != '\n')

i++;

str[i] = '\0';

number = 0; /* 将字符串转换为整数*/

for(i = 0; str[i] != '\0'; i++)

if(str[i] >= '0' && str[i] <= '9')

number = number * 10 + (str[i] - '0');

printf("digit = %d\n", number);

return 0;

}

/*7-14进制转换*/

#include

int main(void)

{

int i,k;

char str1[80],str2[80];

long number;

printf("Enter a string:\n");

i=0;

while((str1[i]=getchar())!='\n')

i++;

str1[i]='\0';

k=0;

for(i=0;str1[i]!='\0';i++)

if((str1[i]>='0'&&str1[i]<='9')||(str1[i]>='a'&&str1[i]<='f')||(str1[i]>='A'&&str1[i]<='F'))

{

str2[k]=str1[i];

k++;

}

str2[k]='\0';

printf("New string:\n");

for(i=0;str2[i]!='\0';i++)

{

putchar(str2[i]);

}

printf("\n");

number=0;

for(i=0;str2[i]!='\0';i++)

{

if(str2[i]>='0'&&str2[i]<='9')

number=number*16+str2[i]-'0';

else if(str2[i]>='a'&&str2[i]<='f')

number=number*16+str2[i]-'a'+10;

else if(str2[i]>='A'&&str2[i]<='F')

number=number*16+str2[i]-'A'+10;

}

printf("number=%ld\n",number);

return 0;

}

7.2 练习参考答案

练习7-1 编写程序,输入一个正整数n (1<n≤10),再输入n个整数,输出平均值(保留2位小数)。

解答:

#include

int main(void)

{

int i, n, sum;

float aver;

int a[10];

printf("Input n: ");

scanf("%d", &n);

printf("Input %d integers: ",n);

for(i=0; i

scanf("%d", &a[i]);

sum=0;

for(i=0; i

sum=sum+a[i];

aver=1.0*sum/n;

printf("Average = %.2f\n", aver);

return 0;

}

练习7-2 编写程序,输入一个正整数n (1<n≤10) ,再输入n个整数,按逆序输出这些数。解答:

#include

int main(void)

{

int i, n, temp;

int a[10];

printf("Input n: ");

scanf("%d", &n);

printf("Input %d Integers: ",n);

for(i=0; i

scanf("%d", &a[i]);

for(i=0; i

temp=a[i];

a[i]=a[n-1-i];

a[n-1-i]=temp;

}

printf("After reversed: ");

for(i=0; i

printf("%d ", a[i]);

printf("\n");

return 0;

}

练习7-3 将例7-3程序中的break语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?

解答:

当去掉break语句后,一旦找到数据将不跳出循环,而是继续往下找值为x的元素,因此程序输出会有变化。当输入数据仍为2 9 8 1 9时,输出将是index is 4。

练习7-4 编写程序,输入一个正整数n (1<n≤10),再输入n个整数,先输出最大值及其下标(设最大值唯一,下标从0开始),再将最大值与最后一个数交换,并输出交换后的n 个数。

解答:

#include

int main(void)

{

int i, index, n, t;

int a[10];

scanf("%d", &n);

for(i=0; i

scanf("%d", &a[i]);

index=0;

for(i=1; i

if(a[i] > a[index])

index=i;

printf(“Max is %d , index is %d \n”,a[index],index);

t=a[n-1];

a[n-1]=a[index];

a[index]=t;

printf("After swap:");

for(i=0; i

printf("%d ", a[i]);

printf("\n");

return 0;

}

练习7-5 给二维数组赋值时,如果把列下标作为外循环的循环变量,行下标作为内循环的循环变量,输入的数据在二维数组中如何存放?用下列for语句替换例7-7中的对应语句,将输入的6个数存入二维数组中,假设输入数据不变,输出什么?与例7-7中的输出结果一样吗?为什么?

for( j=0;j<2;j++)

for( i=0;i<3;i++)

scanf(“%d”,&a[i][j]);

解答:

当把列下标作为外循环的循环变量,行下标作为内循环的循环变量时,输入的数据将以列优先的方式存放。当用上述for循环方式时,输出结果为:max=a[2][0]=10,与原例7-7不一样,因为当用上述方式输入是,二维数组中存放值如下:

3 -9

2 6

10 -1

练习7-6 在例7-9的程序中,如果将遍历上三角矩阵改为遍历下三角矩阵,需要怎样修改程序?运行结果有变化吗?如果改为遍历整个矩阵,需要怎样修改程序?输出是什么?为什么?

解答:

只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。

for(i = 0; i < n; i++)

for(j = 0; j < i; j++) {

temp = a[i][j];

a[i][j] = a[j][i];

a[j][i] = temp;

}

若修改为遍历整个程序,方法如下,则运行结果仍将输出原矩阵,无法达到转置要求,原因是矩阵中每个元素相应被交换了2次。

for(i = 0; i < n; i++)

for(j = 0; j < n; j++) {

temp = a[i][j];

a[i][j] = a[j][i];

a[j][i] = temp;

}

练习7-7 编写程序,读入1 个正整数n(1≤n≤6), 再读入n 阶方阵a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和(副对角线为从矩阵的右上角至左下角的连线)。

解答:

#include

int main(void)

{

int a[6][6],i,j,n,sum;

printf("Input n : ");

scanf("%d",&n);

printf("Input array:\n ");

for (i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

sum=0;

for (i=0;i

for (j=0;j

if( i!=n-1 && j!=n-1 && i+j!=n-1) sum+=a[i][j];

printf("sum = %d\n",sum);

return 0;

}

练习7-8 编写程序,输出一张九九乘法口诀表。提示:将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。

解答:

#include

int main(void)

{

int i,j,n,a[10][10];

for( i=0; i<=9; i++ )

for( j=0; j<=9; j++ )

if( i==0) a[i][j]=j;

else if( j==0) a[i][j]=i;

else a[i][j]=i*j;

for( i=0; i<=9; i++ ){

for( j=0; j<=9; j++ )

if( i==0&&j==0 ) printf( "%-4c", '*');

else if( i==0||j<=i ) printf( "%-4d", a[i][j]);

printf("\n");

}

return 0;

}

练习7-9 编写程序,输入日期(年、月、日),输出它是该年的第几天。要求调用例7-10中定义的函数day_of_year(year, month, day)。

解答:

#include "stdio.h"

int main(void)

{

int year, month,day, day_year;

int day_of_year(int year, int month, int day);

printf("Input year,month,day: ");

scanf("%d%d%d",&year, &month, &day);

day_year=day_of_year(year, month, day);

printf("Days of year: %d\n", day_year);

return 0;

}

经典的串口调试工具源代码(一)

经典的串口调试助手源代码(一) Dim OutputAscii As Boolean Dim InputString As String Dim OutputString As String '============================================================================== ======= ' 变量定义 '============================================================================== ======= Option Explicit ' 强制显式声明 Dim ComSwitch As Boolean ' 串口开关状态判断 Dim FileData As String ' 要发送的文件暂存Dim SendCount As Long ' 发送数据字节计数器 Dim ReceiveCount As Long ' 接收数据字节计数器Dim InputSignal As String ' 接收缓冲暂存 Dim OutputSignal As String ' 发送数据暂存 Dim DisplaySwitch As Boolean ' 显示开关 Dim ModeSend As Boolean ' 发送方式判断

Dim Savetime As Single ' 时间数据暂存延时用Dim SaveTextPath As String ' 保存文本路径 ' 网页超链接申明 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub CloseCom() '关闭串口 On Error GoTo Err If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打 开,如果打开则先关闭 txtstatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示 mnuconnect.Caption = "断开串口" cmdswitch.Caption = "打开串口" 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭 的图标 ImgSwitchoff.Visible = True ImgSwitchon.Visible = False Err: End Sub Private Sub UpdateStatus() If MSComm.PortOpen Then StatusBar1.Panels(1).Text = "Connected" mnuautosend.Caption = "自动发送" mnuconnect.Caption = "断开串口" Else StatusBar1.Panels(1).Text = "断开串口" mnuautosend.Caption = "disautosend" mnuconnect.Caption = "打开串口" End If StatusBar1.Panels(2).Text = "COM" & https://www.wendangku.net/doc/057623865.html,mPort StatusBar1.Panels(3).Text = MSComm.Settings If (OutputAscii) Then StatusBar1.Panels(4) = "ASCII" Else StatusBar1.Panels(4) = "HEX" End If ' On Error GoTo Err If ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送

PS2键盘编码Verilog源程序

PS2键盘编码Verilog源程序 之前探讨过PS/2键盘编解码以及数据传输协议,这次自己动手实现了利用FPGA接收键盘编码,然后通过串口传输到PC。做的比较简单,只是通过FPGA把大写字母A-Z转换成相应的ASCII码,只要字母按键被按下,就能在串口调试助手里显示相应大写字母。下面就共享代码吧! 除了顶层模块,三个底层模块分别为PS/2传输处理模块、串口传输模块以及串口波特率选择模块(下面只给出顶层模块和PS/2传输处理模块的verilog代码)。 module ps2_key(clk,rst_n,ps2k_clk,ps2k_data,rs232_tx); input clk; //50M时钟信号 input rst_n; //复位信号 input ps2k_clk; //PS2接口时钟信号 input ps2k_data; //PS2接口数据信号 output rs232_tx; // RS232发送数据信号 wire[7:0] ps2_byte; // 1byte键值 wire ps2_state; //按键状态标志位 wire bps_start; //接收到数据后,波特率时钟启动信号置位

wire clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点 ps2scan ps2scan( .clk(clk), //按键扫描模块 .rst_n(rst_n), .ps2k_clk(ps2k_clk), .ps2k_data(ps2k_data), .ps2_byte(ps2_byte), .ps2_state(ps2_state) ); speed_select speed_select( .clk(clk), .rst_n(rst_n), .bps_start(bps_start), .clk_bps(clk_bps) ); my_uart_tx my_uart_tx( .clk(clk), .rst_n(rst_n), .clk_bps(clk_bps), .rx_data(ps2_byte), .rx_int(ps2_state), .rs232_tx(rs232_tx), .bps_start(bps_start) );

C#100例经典源代码

C#语言100例经典源代码 程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { inti,j,k; printf("\n"); for(i=1;i<5;i++)/*以下为三重循环*/ for(j=1;j<5;j++) for(k=1;k<5;k++) { if(i!=k&&i!=j&&j!=k)/*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { longinti; intbonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; elseif(i<=200000) bonus=bonus1+(i-100000)*0.075; elseif(i<=400000)

串口调试助手c开发

1.建立项目: 打开VC+ + 6.0,建立一个基于对话框的MFC应用程序SCommTest(与我 源代码一致,等会你会方便一点); 2.在项目中插入MSComm控件 选择Project菜单下Add To Project子菜单中的Componentsand Controls,选项,在弹出的对话框中双击Registered ActiveXControls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control,version6.0,,单击Insert 按钮将它插入到我们的Project 中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX 一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView 视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。3.利用ClassWizard定义CMSComm类控制对象 打开ClassWizard- >Member Viariables 选项卡,选择CSCommTestDlg^,为IDC_MSCOMM1添加控制变量:m_ctrlCom m,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES()#include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。 4 .在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据ID为 IDC_EDIT_RXDATA另一个用于输入发送数据,ID为IDC_EDIT_TXDAT A再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为 IDC_BUTTON_MANUALSEND别忘记了将接收编辑框的Prop erties->Styles 中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。

数据结构源代码(清华大学+严蔚敏)

void Union(List &La, List Lb) { // 算法2.1 // 将所有在线性表Lb中但不在La中的数据元素插入到La中 int La_len,Lb_len,i; ElemType e; La_len = ListLength(La); // 求线性表的长度 Lb_len = ListLength(Lb); for (i=1; i<=Lb_len; i++) { GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给e if (!LocateElem(La, e, equal)) // La中不存在和e相同的数据元素 ListInsert(La, ++La_len, e); // 插入 } } // union void MergeList(List La, List Lb, List &Lc) { // 算法2.2 // 已知线性表La和Lb中的元素按值非递减排列。 // 归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。int La_len, Lb_len; ElemType ai, bj; int i=1, j=1, k=0; InitList(Lc); La_len = ListLength(La); Lb_len = ListLength(Lb); while ((i <= La_len) && (j <= Lb_len)) { // La和Lb均非空 GetElem(La, i, ai); GetElem(Lb, j, bj); if (ai <= bj) { ListInsert(Lc, ++k, ai); ++i; } else { ListInsert(Lc, ++k, bj); ++j; } } while (i <= La_len) { GetElem(La, i++, ai); ListInsert(Lc, ++k, ai); } while (j <= Lb_len) { GetElem(Lb, j++, bj); ListInsert(Lc, ++k, bj); } } // MergeList Status InitList_Sq(SqList &L) { // 算法2.3 // 构造一个空的线性表L。 L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) return OK; // 存储分配失败 L.length = 0; // 空表长度为0 L.listsize = LIST_INIT_SIZE; // 初始存储容量 return OK; } // InitList_Sq Status ListInsert_Sq(SqList &L, int i, ElemType e) { // 算法2.4 // 在顺序线性表L的第i个元素之前插入新的元素e, // i的合法值为1≤i≤ListLength_Sq(L)+1 ElemType *p; if (i < 1 || i > L.length+1) return ERROR; // i值不合法 if (L.length >= L.listsize) { // 当前存储空间已满,增加容量 ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof (ElemType)); if (!newbase) return ERROR; // 存储分配失败 L.elem = newbase; // 新基址 L.listsize += LISTINCREMENT; // 增加存储容量 } ElemType *q = &(L.elem[i-1]); // q为插入位置 for (p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p; // 插入位置及之后的元素右移 *q = e; // 插入e ++L.length; // 表长增1 return OK; } // ListInsert_Sq Status ListDelete_Sq(SqList &L, int i, ElemType &e) { // 算法2.5 // 在顺序线性表L中删除第i个元素,并用e返回其值。 // i的合法值为1≤i≤ListLength_Sq(L)。 ElemType *p, *q; if (i<1 || i>L.length) return ERROR; // i值不合法 p = &(L.elem[i-1]); // p为被删除元素的位置 e = *p; // 被删除元素的值赋给e q = L.elem+L.length-1; // 表尾元素的位置 for (++p; p<=q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移--L.length; // 表长减1 return OK; } // ListDelete_Sq int LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType, ElemType)) { // 算法2.6 // 在顺序线性表L中查找第1个值与e满足compare()的元素的位序。// 若找到,则返回其在L中的位序,否则返回0。 int i; ElemType *p; i = 1; // i的初值为第1个元素的位序 p = L.elem; // p的初值为第1个元素的存储位置 while (i <= L.length && !(*compare)(*p++, e)) ++i; if (i <= L.length) return i; else return 0; } // LocateElem_Sq void MergeList_Sq(SqList La, SqList Lb, SqList &Lc) { // 算法2.7 // 已知顺序线性表La和Lb的元素按值非递减排列。 // 归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。ElemType *pa,*pb,*pc,*pa_last,*pb_last; pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length+Lb.length; pc = Lc.elem = (ElemType *)malloc(Lc.listsize*sizeof(ElemType)); if (!Lc.elem) exit(OVERFLOW); // 存储分配失败 pa_last = La.elem+La.length-1; pb_last = Lb.elem+Lb.length-1;

C#的串口通信源程序

基于单片机串口通信的上位机和下位机 首先亮出C#的源程序吧。 主要界面: 只是作为简单的运用,可以扩展的。 源代码: using System; using System.Collections.Generic; using https://www.wendangku.net/doc/057623865.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Timers; namespace 单片机功能控制 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort sp = new SerialPort(); private void button1_Click(object sender, EventArgs e) {

String str1 = comboBox1.Text;//串口号 String str2 = comboBox2.Text;//波特率 String str3 = comboBox3.Text;//校验位 String str4 = comboBox5.Text;//停止位 String str5 = comboBox4.Text;//数据位 Int32 int2 = Convert.ToInt32(str2);//将字符串转为整型 Int32 int5 = Convert.ToInt32(str5);//将字符串转为整型 groupBox3.Enabled = true;//LED控制界面变可选 try { if (button1.Text == "打开串口") { if (str1 == null) { MessageBox.Show("请先选择串口!", "Error"); return; } sp.Close(); sp = new SerialPort(); sp.PortName = comboBox1.Text;//串口编号 sp.BaudRate = int2;//波特率 switch (str4)//停止位 { case "1": sp.StopBits = StopBits.One; break; case "1.5": sp.StopBits = StopBits.OnePointFive; break; case "2": sp.StopBits = StopBits.Two; break; default: MessageBox.Show("Error:参数不正确", "Error"); break; } switch (str3) { case "NONE": sp.Parity = Parity.None; break; case "ODD":

排序算法汇总(图解加程序代码)

排序算法汇总 第1节排序及其基本概念 一、基本概念 1.什么是排序 排序是数据处理中经常使用的一种重要运算。 设文件由n个记录{R1,R2,……,Rn}组成,n个记录对应的关键字集合为{K1,K2,……,Kn}。所谓排序就是将这n个记录按关键字大小递增或递减重新排列。b5E2RGbCAP 2.稳定性 当待排序记录的关键字均不相同时,排序结果是惟一的,否则排序结果不唯一。 如果文件中关键字相同的记录经过某种排序方法进行排序之后,仍能保持它们在排序之前的相对次序,则称这种排序方法是稳定的;否则,称这种排序方法是不稳定的。p1EanqFDPw 3.排序的方式 由于文件大小不同使排序过程中涉及的存储器不同,可将排序分成内部排序和外部排序两类。整个排序过程都在内存进行的排序,称为内部排序;反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。DXDiTa9E3d 内排序适用于记录个数不是很多的小文件,而外排序则适用于记录个数太多,不能一次性放人内存的大文件。 内排序是排序的基础,本讲主要介绍各种内部排序的方法。

按策略划分内部排序方法可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。 二、排序算法分析 1.排序算法的基本操作 几乎所有的排序都有两个基本的操作: <1)关键字大小的比较。 <2)改变记录的位置。具体处理方式依赖于记录的存储形式,对于顺序型记录,一般移动记录本身,而链式存储的记录则通过改变指向记录的指针实现重定位。RTCrpUDGiT 为了简化描述,在下面的讲解中,我们只考虑记录的关键字,则其存储结构也简化为数组或链表。并约定排序结果为递增。5PCzVD7HxA 2.排序算法性能评价 排序的算法很多,不同的算法有不同的优缺点,没有哪种算法在任何情况下都是最好的。评价一种排序算法好坏的标准主要有两条:jLBHrnAILg <1)执行时间和所需的辅助空间,即时间复杂度和空间复杂度; <2)算法本身的复杂程度,比如算法是否易读、是否易于实现。 第2节插入排序 插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的记录集中,使记录依然有序,直到所有待排序记录全部插入完成。xHAQX74J0X 一、直接插入排序 1.直接插入排序的思想

串口调试助手源代码

串口调试助手预源代码 using System; using System.Collections.Generic; using https://www.wendangku.net/doc/057623865.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Ports; using System.Threading; using DevExpress.XtraEditors; using System.Text.RegularExpressions; namespace WindowsFormsApplication3 { public partial class Form1 : XtraForm { SerialPort sp1 = new SerialPort(); int Flag = 0; int StateChanged = 0;

int StateChanged_Ascii = 1; int StateChanged_16 = 0; string Temp = null; string Temp_memoSend = null; private void memoSend_EditValueChanged(object sender, EventArgs e) { } public Form1() { InitializeComponent(); sp1.DataReceived += sp1_DataReceived; } private void Form1_Load(object sender, EventArgs e) { this.MaximizeBox = false; //检查是否有串口 string[] str = SerialPort.GetPortNames(); if (str == null) { MessageBox.Show("本机没有串口!", "error"); return; } //添加串口项目 foreach (string port in System.IO.Ports.SerialPort.GetPortNames()) { cbSerial.Properties.Items.Add(port); } //串口设置默认选择项 cbSerial.SelectedIndex = 0; Control.CheckForIllegalCrossThreadCalls = false; sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托 } private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs

史上最全快速排序法源代码

史上最全快速排序法源代码 快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。 快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。 //////////////////////////////////////////////////////////////////// ///////代码1 多数的教科书上所提及的版本(轴在最右侧)/////////////// #include #include #include using namespace std; #define MAX 10 #define SW AP(x,y) {int t; t = x; x = y; y = t;} int partition(int[], int, int); void quicksort(int[], int, int); void main() { int number[MAX] = {0}; int i; srand(time(NULL)); cout<<"排序前:"; for(i = 0; i < MAX; i++) { number[i] = rand() % 100; cout<

串口调试助手代码分析42

第5章串口调试助手代码分析 1、建立基于对话框的工程SCOMM 2、绘制界面,如下图: 接收区 串口组合框:IDC_COMBO_COMSELECT,m_Com 波特率组合框:IDC_COMBO_SPEED,m_Speed 停止位组合框:IDC_COMBO_STOPBITS,m_StopBits 数据位组合框:IDC_COMBO_DATABITS,m_DataBits 校验位组合框:IDC_COMBO_PARITY,m_Parity 十六进制显示(接收):IDC_CHECK_HEXRECIEVE,m_ctrlHexReceieve 接收编辑框:IDC_EDIT_RECIVE ,m_ReceiveData m_ctrlReceiveData Style:Vertical Scroll MultiLine 打开串口IDC_BUTTON_OPENPORT,m_ctrlOpenPort 串口开关标志图标IDC _STATIC_OPENOFF,m_ctrlIconOpenoff 数据文件保存路径IDC _EDIT_SA VEPATH,m_strCurPath 保存显示数据文件路径IDC _EDIT_SA VEPATH, m_ctrlSavePath 接收计数IDC_STATIC_RXCOUNT ,m_ctrlRXCOUNT 发送区 …。。。。。。。。。。。。。。 3、添加CSeraiPort类文件 将类文件SerialPort.h SerialPort.cpp 复制到工程所在文件夹中(选择改进

后的类),然后单击VC 6.0菜单Projrct -> Add to Projrct ->Files… ,再在打开的文件选择对话框中选择SerialPort.h 和SerialPort.cpp ,点击OK,就把类文件加入当前工程,并在SCOMMDlg.h 中加入头文件,#include "SerialPort.h",通过上述步骤就在当前工程中加入了CSeraiPort类。 4、完成串口消息处理函数OnCommunicatiom 在CserailPort 类中有多个串口事件可以响应。在一般串口编程中,只需要处理WM_COMM_RXCHAR消息就可以了,该类所有的消息均需要人工添加消息处理函数。我们将处理函数名定义为OnComm()。首先在SCOMMDlg.h 中添加串口字符接收消息WM_COMM_RXCHAR(串口接收缓冲区内有一个字符)响应函数的声明:如下图 然后,在SCOMMDlg.cpp文件中进行WM_COMM_RXCHAR消息映射: 如下图; 接着,在SCOMMDlg.cpp 文件中加入函数OnCommunication(WPARAM ch, LPARAM port)的实现,暂不添加代码。 LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port) { return 0; } 以上步骤需要手工完成。 至此完成了程序的对话框模板,在工程中插入了串口操作类CserailPort类。5、添加串口初始化及关闭 程序中有两种方法大开串口,一是程序启动,调用OnInitDialog()函数,就可以打开串口,缺省的串口号为COM1,如果COM1不存在或占用,就会给出提示;另外,单击“打开串口”按钮也可以打开串口。 //在初始化中打开串口 BOOL CSCOMMDlg::OnInitDialog() { m_nBaud=9600;//波特率 m_nCom=1;//串口号 m_cParity='N';//奇偶校验

基于MATLAB的潮流计算源程序代码(优.选)

%*************************电力系统直角坐标系下的牛顿拉夫逊法潮流计算********** clear clc load E:\data\IEEE014_Node.txt Node=IEEE014_Node; weishu=size(Node); nnum=weishu(1,1); %节点总数 load E:\data\IEEE014_Branch.txt branch=IEEE014_Branch; bwei=size(branch); bnum=bwei(1,1); %支路总数 Y=(zeros(nnum)); Sj=100; %********************************节点导纳矩阵******************************* for m=1:bnum; s=branch(m,1); %首节点 e=branch(m,2); %末节点 R=branch(m,3); %支路电阻 X=branch(m,4); %支路电抗 B=branch(m,5); %支路对地电纳 k=branch(m,6); if k==0 %无变压器支路情形 Y(s,e)=-1/(R+j*X); %互导纳 Y(e,s)=Y(s,e); end if k~=0 %有变压器支路情形 Y(s,e)=-(1/((R+j*X)*k)); Y(e,s)=Y(s,e); Y(s,s)=-(1-k)/((R+j*X)*k^2); Y(e,e)=-(k-1)/((R+j*X)*k); %对地导纳 end Y(s,s)=Y(s,s)-j*B/2; Y(e,e)=Y(e,e)-j*B/2; %自导纳的计算情形 end for t=1:nnum; Y(t,t)=-sum(Y(t,:))+Node(t,12)+j*Node(t,13); %求支路自导纳 end G=real(Y); %电导 B=imag(Y); %电纳 %******************节点分类************************************* * pq=0; pv=0; blancenode=0; pqnode=zeros(1,nnum); pvnode=zeros(1,nnum); for m=1:nnum; if Node(m,2)==3 blancenode=m; %平衡节点编号 else if Node(m,2)==0 pq=pq+1; pqnode(1,pq)=m; %PQ 节点编号 else if Node(m,2)==2 pv=pv+1; pvnode(1,pv)=m; %PV 节点编号 end end end end %*****************************设置电压初值********************************** Uoriginal=zeros(1,nnum); %对各节点电压矩阵初始化 for n=1:nnum Uoriginal(1,n)=Node(n,9); %对各点电压赋初值 if Node(n,9)==0;

通达信指标公式源码 顶底公式与排序公式

STICKLINE(C>0,0,100,15,0),COLOR7C221C; VAR1:=REF(C,2); A2: SMA(MAX(C-VAR1,0),7,1)/SMA(ABS(C-VAR1),7,1)*100,COLORGREEN,LINETHICK2; VAR2:=REF(C,1); VAR3:=SMA(MAX(C-VAR2,0),7,1)/SMA(ABS(C-VAR2),7,1)*100; STICKLINE(A279,80,85,1,0)COLORLIBLUE; STICKLINE(A2>=50,A2,50,1,0)COLORRED; STICKLINE(A2<50,A2,50,1,0)COLORLIBLUE; 80,POINTDOT;20,POINTDOT; CS:=(CLOSE-LLV(LOW,8))/(HHV(HIGH,8)-LLV(LOW,8))*100; YJD:=(EMA(CS,3)-50)*2; VAR4:=(1.1)*CLOSE; VAR5:=(0.9)*CLOSE; VAR6:=100*(WINNER(VAR4)-WINNER(VAR5)); S1:=EMA(100-VAR6,1); S2:=EMA(S1,9); S3:=MA(S2,9); 不抢跌停:STICKLINE(YJD<-80 AND S1>S2,60,50,1,0),COLORYELLOW; STICKLINE(A2<=12,30,A2,1,0)COLORRED; STICKLINE(VAR3<=12,50,30,1,0)COLORMAGENTA;

VB串口调试助手源代码

VB串口调试助手源代码 Dim OutputAscii As Boolean Dim InputString As String Dim OutputString As String '============================================================================== ======= ' 变量定义 '============================================================================== ======= Option Explicit ’强制显式声明 Dim ComSwitch As Boolean ’串口开关状态判断 Dim FileData As String ’要发送的文件暂存 Dim SendCount As Long ’发送数据字节计数器 Dim ReceiveCount As Long ’接收数据字节计数器 Dim InputSignal As String ’接收缓冲暂存 Dim OutputSignal As String ’发送数据暂存 Dim DisplaySwitch As Boolean ’显示开关 Dim ModeSend As Boolean ’发送方式判断 Dim Savetime As Single ’时间数据暂存延时用 Dim SaveTextPath As String ’保存文本路径 ' 网页超链接申明 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub CloseCom() '关闭串口 On Error GoTo Err If MSComm.PortOpen = True Then MSComm.PortOpen = False’先判断串口是否打开,如果打开则先关闭

经典的串口调试助手源代码

https://www.wendangku.net/doc/057623865.html,/article/446.html https://www.wendangku.net/doc/057623865.html,/hinzn/blog/item/4e81b4459b390a2ecffca3bb.html https://www.wendangku.net/doc/057623865.html,/modeng_2005/blog/static/265611200981142011329/https://www.wendangku.net/doc/057623865.html,/mod eng_2005/blog/static/265611200981142011329/ Dim OutputAscii As Boolean Dim InputString As String Dim OutputString As String '============================================================================== ======= ' 变量定义 '============================================================================== ======= Option Explicit ' 强制显式声明 Dim ComSwitch As Boolean ' 串口开关状态判断 Dim FileData As String ' 要发送的文件暂存 Dim SendCount As Long ' 发送数据字节计数器 Dim ReceiveCount As Long ' 接收数据字节计数器 Dim InputSignal As String ' 接收缓冲暂存 Dim OutputSignal As String ' 发送数据暂存 Dim DisplaySwitch As Boolean ' 显示开关

VB 源码 字符排列组合

效果图

编程界面

所有源码 Option Explicit Private newStr As String, tempNewStr As String, cont As Long Private Sub Command1_Click() Text1.Enabled = False RichTextBox1.Enabled = False RichTextBox1.Text = "" Dim tempStr As String

tempStr = Trim(Text1.Text) newStr = "": tempNewStr = "" cont = 0 If Check1.Value = 0 Then GetStr tempStr If Check1.Value = 1 Then GetStr2 tempStr, "" RichTextBox1.Text = newStr Frame1.Caption = "总个数:" & cont Text1.Enabled = True RichTextBox1.Enabled = True RichTextBox1.Find End Sub Private Sub Text1_Change() RichTextBox1.Text = "" Frame1.Caption = "总个数:" End Sub Private Function GetStr(ByVal str1 As String) As String str1 = Trim(str1) If str1 = "" Then Exit Function Dim i As Integer, tempStr As String, tempChr As String, tempLen As Integer Dim mytempStr As String mytempStr = tempNewStr For i = 1 To Len(str1) DoEvents tempChr = "" tempChr = Mid(str1, i, 1) '取一个字符 tempNewStr = tempNewStr & tempChr '单组组合 tempStr = Left(str1, i - 1) & Right(str1, Len(str1) - i) '剩余新字符 If Len(tempStr) > 1 Then GetStr tempStr Else newStr = newStr & tempNewStr & tempStr & IIf((cont + 1) Mod 200 = 0, Chr(13), Chr(9)) '终组组合 cont = cont + 1 Frame1.Caption = "执行中:" & cont

相关文档
相关文档 最新文档