【www.myl5520.com--教学设计】
C语言 实验二 算法的设计
篇一:c语言二维码识别算法
实验题目:算法的设计
实验目的:掌握算法的一般用法,以及对算法的操作。
实验内容和步骤:
1. 输入3个数,输出其中最大的一个数。
S1:输入变量a,b,c;
S2:设t=a;
S3:如果b>t则4否则5;
S4:t=b;
S5:如果c>t则6否则7;
S6:t=c;
S7:输出t,程序结束;
遇到的问题:无
(使用自然语言设计)
2.
将100-200之间的素数输出。(使用传统流程图设计)
遇到的问题:开始的时候,我不知道怎样把这些单个图和线的组合起来。
3、求两个数m和n的最大公约数。
遇到的问题:无
4、求ax+bx+c=0的根。分别考虑d=b-4ac大于0、等于0和小于0这3种情况。(使用计算机语言设计,VF和C都可以)
#include "stdio.h"
#include "math.h"
int main()
{
double a,b,c;
printf("输入a b c:");
scanf("%lf%lf%lf",&a,&b,&c);
if(b*b-4*a*c<0)
printf("没有实根\n");
else
{
printf("x1=%lf\n",(-b+sqrt(b*b-4*a*c))/(2*a));
printf("x2=%lf\n",(-b-sqrt(b*b-4*a*c))/(2*a));
}
}
22
遇到的问题:忘记了定义变量。
计算方法上机课(C语言)
篇二:c语言二维码识别算法
计算方法上机课参考资料
1. 拉格朗日插值多项式。
C/C++ code
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
float lagrange(float *x,float *y,floatxx,int n) { inti,j;
float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
{ a[i]=y[i];
for(j=0;j<=n-1;j++)
if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
free(a);
return yy;
}
main()
{ inti,n;
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
for(i=0;i<=n-1;i++)
{ printf("x[%d]:",i);
scanf("%f",&x[i]);
}
printf("\n");
for(i=0;i<=n-1;i++)
{ printf("y[%d]:",i);scanf("%f",&y[i]);}
printf("\n");
printf("Input xx:");
scanf("%f",&xx);
yy=lagrange(x,y,xx,n);
printf("x=%f,y=%f\n",xx,yy);
getch();
}
2.牛顿插值多项式,用于离散数据的拟合
C/C++ code
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
void difference(float *x,float *y,int n)
{ float *f;
intk,i;
f=(float *)malloc(n*sizeof(float));
for(k=1;k<=n;k++)
{ f[0]=y[k];
for(i=0;i<k;i++)
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{ inti,n;c语言二维码识别算法。
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}
for(i=0;i<=n-1;i++)
{ printf("x[%d]:",i);
scanf("%f",&x[i]);
}
printf("\n");
for(i=0;i<=n-1;i++)
{ printf("y[%d]:",i);scanf("%f",&y[i]);}
printf("\n");
difference(x,(float *)y,n);
printf("Input xx:");
scanf("%f",&xx);
yy=y[20];
for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];
printf("NewtonInter(%f)=%f",xx,yy);
getch();
}
3.高斯列主元消去法,求解其次线性方程组
C/C++ code
#include<stdio.h>
#include <math.h>
#define N 20
int main()
{ intn,i,j,k;
intmi,tmp,mx;
float a[N][N],b[N],x[N];
printf("\nInput n:");
scanf("%d",&n);
if(n>N)
{ printf("The input n should in(0,N)!\n");
getch();
return 1;
}
if(n<=0)
{ printf("The input n should in(0,N)!\n");
getch();
return 1;
}
printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
scanf("%f",&a[i][j]);}
printf("Now input b(i),i,j=0...%d:\n",n-1);
for(i=0;i<n;i++)
scanf("%f",&b[i]);
for(i=0;i<n-2;i++)
{ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx)
{ mi=j;
mx=fabs(a[j][i]);
}
if(i<mi)
{ tmp=b[i];b[i]=b[mi];b[mi]=tmp;
for(j=i;j<n;j++)
{ tmp=a[i][j];
a[i][j]=a[mi][j];
a[mi][j]=tmp;
}
}
for(j=i+1;j<n;j++)
{ tmp=-a[j][i]/a[i][i];
b[j]+=b[i]*tmp;
for(k=i;k<n;k++)
a[j][k]+=a[i][k]*tmp;
}
}
x[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{ x[i]=b[i];
for(j=i+1;j<n;j++)
x[i]-=a[i][j]*x[j];
x[i]/=a[i][i];
}
for(i=0;i<n;i++)
printf("Answer:\n x[%d]=%f\n",i,x[i]);
getch();
return 0;
}
#include<math.h>
#include<stdio.h>
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d
float A[NUMBER][NUMBER+1] ,ark;
intflag,n;
exchange(intr,int k);
float max(int k);
message();
main()
{
float x[NUMBER];
intr,k,i,j;
char celect;
clrscr();
printf("\n\nUse Gauss.");
printf("\n\n1.Jie please press Enter.");
printf("\n\n2.Exit press Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n input n=");
scanf("%d",&n);
printf(" \n\nInput matrix A and B:");
for(i=1;i<=n;i++)
{
printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);
for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); }
for(k=1;k<=n-1;k++)
{
ark=max(k);c语言二维码识别算法。
if(ark==0)
{
printf("\n\nIt's wrong!");message();
}
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k]; }
x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k>=1;k--)
{
float me=0;
for(j=k+1;j<=n;j++)
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
message();
重要的算法C语言实现源代码
篇三:c语言二维码识别算法
10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 (转) 1.拉格朗日插值多项式 ,用于离散数据的拟合
C/C++ code#include <stdio.h>
#include <conio.h>
#include <alloc.h>
float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/
{ int i,j;
float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/
a=(float *)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
{ a[i]=y[i];
for(j=0;j<=n-1;j++)
if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
free(a);
return yy;
}
main()
{ int i,n;
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
for(i=0;i<=n-1;i++)
{ printf("x[%d]:",i);
scanf("%f",&x[i]);
}
printf("\n");
for(i=0;i<=n-1;i++)
{ printf("y[%d]:",i);scanf("%f",&y[i]);}
printf("\n");
printf("Input xx:");
scanf("%f",&xx);
yy=lagrange(x,y,xx,n);
printf("x=%f,y=%f\n",xx,yy);
getch();
}
2.牛顿插值多项式,用于离散数据的拟合
C/C++ code#include <stdio.h>
#include <conio.h>
#include <alloc.h>
void difference(float *x,float *y,int n)
{ float *f;
int k,i;
f=(float *)malloc(n*sizeof(float));
for(k=1;k<=n;k++)
{ f[0]=y[k];
for(i=0;i<k;i++)
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{ int i,n;
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++)
{ printf("x[%d]:",i);
scanf("%f",&x[i]);
}
printf("\n");
for(i=0;i<=n-1;i++)
{ printf("y[%d]:",i);scanf("%f",&y[i]);}
printf("\n");
difference(x,(float *)y,n);
printf("Input xx:");
scanf("%f",&xx);
yy=y[20];
for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];
printf("NewtonInter(%f)=%f",xx,yy);
getch();
}
3.高斯列主元消去法,求解其次线性方程组
C/C++ code#include<stdio.h>
#include <math.h>
#define N 20
int main()
{ int n,i,j,k;
int mi,tmp,mx;
float a[N][N],b[N],x[N];
printf("\nInput n:");
scanf("%d",&n);
if(n>N)
{ printf("The input n should in(0,N)!\n");
getch();
return 1;
}
if(n<=0)
{ printf("The input n should in(0,N)!\n");
getch();
return 1;
}
printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
scanf("%f",&a[i][j]);}
printf("Now input b(i),i,j=0...%d:\n",n-1);
for(i=0;i<n;i++)
scanf("%f",&b[i]);
for(i=0;i<n-2;i++)
{ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx)
{ mi=j;
mx=fabs(a[j][i]);
}
if(i<mi)
{ tmp=b[i];b[i]=b[mi];b[mi]=tmp;
for(j=i;j<n;j++)
{ tmp=a[i][j];
a[i][j]=a[mi][j];
a[mi][j]=tmp;
}
}
for(j=i+1;j<n;j++)
{ tmp=-a[j][i]/a[i][i];
b[j]+=b[i]*tmp;
for(k=i;k<n;k++)
a[j][k]+=a[i][k]*tmp;
}
}
x[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{ x[i]=b[i];
for(j=i+1;j<n;j++)
x[i]-=a[i][j]*x[j];
x[i]/=a[i][i];
}
for(i=0;i<n;i++)
printf("Answer:\n x[%d]=%f\n",i,x[i]);
getch();
return 0;
}
#include<math.h>
#include<stdio.h>
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d
float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
exchange(int r,int k);
float max(int k);
message();
main()
{
float x[NUMBER];
int r,k,i,j;
char celect;
clrscr();
printf("\n\nUse Gauss.");
printf("\n\n1.Jie please press Enter.");
printf("\n\n2.Exit press Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n input n=");
scanf("%d",&n);
printf(" \n\nInput matrix A and B:");
for(i=1;i<=n;i++)
{
printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);
for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); }
for(k=1;k<=n-1;k++)
{
ark=max(k);
if(ark==0)
{
printf("\n\nIt's wrong!");message(); }
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k]; }
x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k>=1;k--)
{
float me=0;
for(j=k+1;j<=n;j++)
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k]; }
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]); }
message();
}
exchange(int r,int k)
{
int i;
for(i=1;i<=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i<=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i<=n+1;i++)
A[k][i]=A[0][i];
}
float max(int k)
{
int i;
float temp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{
temp=fabs(A[i][k]);
flag=i;
}
return temp;
C语言上机操作常考算法
篇四:c语言二维码识别算法
C语言常考算法
一.累加与累乘
(1) 累加与累乘
例如1+2+3+4+5+6??.100
int add(int n)
{
int sum=1;
for(int i=1;i<=100;i++)
{
sum=sum+i
}
return sum
}
例如1*2*3*4*+5*6??.100
int add(int n)
{
int sum=1;
for(int i=1;i<=100;i++)
{
sum=sum*i
}
return sum
}
二.求最大、最小值
(1) 求最大、最小值
例如:查找a[ ]数组中的最小值,n为数组的大小
int func(int a[ ], int n)
{
int max=a[0];
for(int i=0;i<n;i++)
{
if(min>a[i]) min=a[i];
}
return min;
}
例如:查找a[ ]数组中的最大值
int func(int a[ ], int n)
{
int max=a[0];
for(int i=0;i<n;i++)
{
if(max>a[i]) max=a[i];
}
return max;
}
三.求阶乘
(1) 求阶乘
long func(int n)
{
int i;
long t=1;
for(i=2;i<=n;i++)
t*=i;
return t;