① 請教編程高手,如何產生從-5到5的一組正態分布的隨機數
#include <stdio.h>
//產生任意均值與方差的正態分布的隨機數
// double u μ 正顫空春態分布的均值
// double g σ2=g2 正態分布的方差
// double * r 指向隨機數種子
// double grn1() 返回一個均值u 方差g2 正態分布 的隨機數
double grn1(double u,double g,double * r)
{ int i,m;
double s,w,v,t;
s=65536.0; w=2053.0; v=13849.0;
t=0.0;
for (i=1; i<=12; i++)
{ *r=(*r)*w+v; m=(int)(*r/s);
*r=*r-m*s; t=t+(*r)/s;
}
t=u+g*(t-6.0);
return(t);
}
int main()
{
double u,g,r;
r=5.0;u=1.0;g=1.5;
printf("\n");
for(int i=0;i<=9;i++){
for(int j=0;j<茄耐=4;j++){
printf("%10.7lf ", grn1(u,g,&r));
}
printf("\n");
}
printf("\n");
}
運行結果:
1.2386322 -1.1779938 0.5128021 1.9047699 1.5916595
1.1672211 -0.7747955 1.8593597 1.6634369 1.7311859
0.6563568 -1.4673004 -0.0460358 -0.9860992 0.3062592
3.9247894 -0.5367584 3.5153656 -0.3250885 0.0356293
0.1912689 0.2355804 0.2623138 0.3652191 3.6380463
1.1745453 2.0684662 0.4135590 2.3035736 4.8322601
-0.9066315 0.1806488 2.1878510 2.2087250 1.8370209
-0.3335114 3.2908783 0.8039398 1.2994232 -1.1289215
4.1126556 0.6179047 0.4805756 0.7944183 -1.3468170
1.6506195 2.3804779 2.4365082 1.9124603 0.9020844
參考 常用演算法程序集(c語言描述)第三版
第三章 隨機數的產生
3.5 產生任意均值與方差的正態分布虧數的一個隨機數
② 最小二乘法三次多項式曲線擬合 演算法 C++ 實現,該怎麼處理
/******************************************
//參考《常用演算法程序集(C語言描述第三版)》
//最小二乘法
//x[n]y[n]已知輸入
//n輸入點個數
//a[m]返回m-1次擬合多項式的m個系數
//m擬合多項式的項數,即擬合多項式的最高次為m-1
//dt[3]dt[0]返回擬合多項式與各數據點誤差的平方和,
dt[1]返回擬合多項式與各數據點誤差的絕對值之和
dt[2]返回擬合多項式與各數據點誤差的絕對值的最大值
//
//擬合多項式的輸出
//Y(x)=a0+a1(x-X)+a2(x-X)^2+……am(x-X)^m
//其中X為已知點x的平均值
******************************************/
#include"math.h"
voidpir1(x,y,n,a,m,dt)
intn,m;
doublex[],y[],a[],dt[];
{
inti,j,k;
doublez,p,c,g,q,d1,d2,s[20],t[20],b[20];
for(i=0;i<=m-1;i++)a[i]=0.0;
if(m>n)m=n;
if(m>20)m=20;
z=0.0;
for(i=0;i<=n-1;i++)z=z+x[i]/(1.0*n);
b[0]=1.0;d1=1.0*n;p=0.0;c=0.0;
for(i=0;i<=n-1;i++)
{p=p+(x[i]-z);c=c+y[i];}
c=c/d1;p=p/d1;
a[0]=c*b[0];
if(m>1)
{t[1]=1.0;t[0]=-p;
d2=0.0;c=0.0;g=0.0;
for(i=0;i<=n-1;i++)
{q=x[i]-z-p;d2=d2+q*q;
c=c+y[i]*q;
g=g+(x[i]-z)*q*q;
}
c=c/d2;p=g/d2;q=d2/d1;
d1=d2;
a[1]=c*t[1];a[0]=c*t[0]+a[0];
}
for(j=2;j<=m-1;j++)
{s[j]=t[j-1];
s[j-1]=-p*t[j-1]+t[j-2];
if(j>=3)
for(k=j-2;k>=1;k--)
s[k]=-p*t[k]+t[k-1]-q*b[k];
s[0]=-p*t[0]-q*b[0];
d2=0.0;c=0.0;g=0.0;
for(i=0;i<=n-1;i++)
{q=s[j];
for(k=j-1;k>=0;k--)
q=q*(x[i]-z)+s[k];
d2=d2+q*q;c=c+y[i]*q;
g=g+(x[i]-z)*q*q;
}
c=c/d2;p=g/d2;q=d2/d1;
d1=d2;
a[j]=c*s[j];t[j]=s[j];
for(k=j-1;k>=0;k--)
{a[k]=c*s[k]+a[k];
b[k]=t[k];t[k]=s[k];
}
}
dt[0]=0.0;dt[1]=0.0;dt[2]=0.0;
for(i=0;i<=n-1;i++)
{q=a[m-1];
for(k=m-2;k>=0;k--)
q=a[k]+q*(x[i]-z);
p=q-y[i];
if(fabs(p)>dt[2])dt[2]=fabs(p);
dt[0]=dt[0]+p*p;
dt[1]=dt[1]+fabs(p);
}
return;
}
③ 用c語言怎麼編寫輸入一個矩陣求其逆矩陣的程序
下面是實現Gauss-Jordan法實矩陣求逆。
#include
<stdlib.h>
#include
<math.h>
#include
<stdio.h>
int
brinv(double
a[],
int
n)
{
int
*is,*js,i,j,k,l,u,v;
double
d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for
(k=0;
k<=n-1;
k++)
{
d=0.0;
for
(i=k;
i<=n-1;
i++)
for
(j=k;
j<=n-1;
j++)
{
l=i*n+j;
p=fabs(a[l]);
if
(p>d)
{
d=p;
is[k]=i;
js[k]=j;}
}
if
(d+1.0==1.0)
{
free(is);
free(js);
printf("err**not
inv
");
return(0);
}
if
(is[k]!=k)
for
(j=0;
j<=n-1;
j++)
{
u=k*n+j;
v=is[k]*n+j;
p=a[u];
a[u]=a[v];
a[v]=p;
}
if
(js[k]!=k)
for
(i=0;
i<=n-1;
i++)
{
u=i*n+k;
v=i*n+js[k];
p=a[u];
a[u]=a[v];
a[v]=p;
}
l=k*n+k;
a[l]=1.0/a[l];
for
(j=0;
j<=n-1;
j++)
if
(j!=k)
{
u=k*n+j;
a[u]=a[u]*a[l];}
for
(i=0;
i<=n-1;
i++)
if
(i!=k)
for
(j=0;
j<=n-1;
j++)
if
(j!=k)
{
u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for
(i=0;
i<=n-1;
i++)
if
(i!=k)
{
u=i*n+k;
a[u]=-a[u]*a[l];}
}
for
(k=n-1;
k>=0;
k--)
{
if
(js[k]!=k)
for
(j=0;
j<=n-1;
j++)
{
u=k*n+j;
v=js[k]*n+j;
p=a[u];
a[u]=a[v];
a[v]=p;
}
if
(is[k]!=k)
for
(i=0;
i<=n-1;
i++)
{
u=i*n+k;
v=i*n+is[k];
p=a[u];
a[u]=a[v];
a[v]=p;
}
}
free(is);
free(js);
return(1);
}
void
brmul(double
a[],
double
b[],int
m,int
n,int
k,double
c[])
{
int
i,j,l,u;
for
(i=0;
i<=m-1;
i++)
for
(j=0;
j<=k-1;
j++)
{
u=i*k+j;
c[u]=0.0;
for
(l=0;
l<=n-1;
l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j];
}
return;
}
int
main()
{
int
i,j;
static
double
a[4][4]={
{0.2368,0.2471,0.2568,1.2671},
{1.1161,0.1254,0.1397,0.1490},
{0.1582,1.1675,0.1768,0.1871},
{0.1968,0.2071,1.2168,0.2271}};
static
double
b[4][4],c[4][4];
for
(i=0;
i<=3;
i++)
for
(j=0;
j<=3;
j++)
b[i][j]=a[i][j];
i=brinv(a,4);
if
(i!=0)
{
printf("塌早MAT
A
IS:
");
for
(i=0;
i<=3;
i++)
{
for
(j=0;
j<=3;
j++)
printf("%13.7e
",b[i][j]);
printf("
");
}
printf("
");
printf("悶埋MAT
A-
IS:
");
for
(i=0;
i<=3;
i++)
{
for
(j=0;
j<=3;
j++)
printf("%13.7e
",a[i][j]);
printf("
");
}
printf("
");
printf("MAT
AA-
IS:
");
brmul(b,a,4,4,4,c);
for
(i=0;
i<=3;
i++)
{
for
(j=0;
j<=3;
j++)
printf("%13.7e
",c[i][j]);
printf("
");
}
}
}參考資料:螞衫螞C常用演算法程序集-徐士良
④ 請為C++新手推薦幾本教程好書吧。我不怕學著難,只要經典有價值的
你自己挑幾本看吧,
入門推薦看
C Primer Plus中文版(第五版)
C程序設計(第三版)
學好C之後再去學c++,建議看
白話c++
你先把這些書復制下來,這些書都是經典中的經典了。都是非常好的。
C程序設計語言(第2版·新版)---C語言「倚天屠龍雙劍」---Brian W.Kernighan「C語言之父」
C Primer Plus中文版(第五版)--------C語言「倚天屠龍雙劍」---Stephen Prata
C程序設計(第三版)---------------------------譚浩強
C語言大全(第四版)---------------------------HERBERT SCHILDT
C語言介面與實現:創建可重用軟體的技術-------------DAVID R.HANSON
C語言參考手冊(原書第5版)--------------------------Samuel P.Harbison
C程序設計教程---------------------------------H.M.Deitel/P.J.Deitel
C陷阱與缺陷-----------------------------------Andrew Koenig
The C Programming Language by Kernighan & Ritchie Complement : The Development of the C Language
C Traps and Pitfalls by Andrew Koenig
Expert C Programming by Peter van der Linden
The Standard C Library by P J Plauger
Books on Linux & C :
Linux Application Development by Michael K. Johnson & Erik W. Troan
Linux device drivers by Alessandro Rubini
Developing Linux applications with GTK+ and GDK (ISBN 0-7357-0021-4, New Riders)
C/C++入門基礎
Windows C 程序設計入門與提高
單片機C語言入門
C++ 入門基礎教程
C語言常用演算法源代碼
C常用演算法程序集
C++ 語言命令詳解
Borland C++使用手冊
C語言編程基礎
C語言編程要點
C語言數值演算法程序大全(第二版)
Borland C++4.0安裝與使用
C++ Builder 5.0經典入門
非C程序員C++入門自學教程
C/C++指令字典
C語言常用函數手冊
C++標准程序庫自修教程與參考手冊
C語言圖形函數介紹
C語言數值計算初步
C++ 設計新思維
C++Builder基礎進階
C語言初學者入門講座
C++完全參考手冊
C++Builder英文幫助
《C++Builder學習大全》中文版
C++ Builder編程研究文檔
C游戲編程從入門到精通
C++程序調試實用手冊
Borland C++4.0從入門到精通
實用教程:
經典C語言教程
C++捷徑教程(第三版)
Borland C++實用教材
C++程序設計語言題解
C++上機實踐指導教程(第三版)
創世紀的C++ Builder教程
Borland C++程序設計教程
C++ BUILDER 實用培訓教程
C++程序設計培訓教程
C++編程金典(第三版)
C高級實用程序設計
嵌入式系統中C的開發
C++Builder自學培訓教程
C++大學教程(第二版)
C++傻瓜教程
精通C++ Builder 5程序設計高級教程
C++程序設計語言經典題與實驗指導
C++程序設計教程實驗書
C++大學基礎教程
C++面向對象到窗口程序設計
C語言核心編程
嵌入式系統的C程序設計
經典C教程
實用C語言詳解
Borland C++深入編程
Borland C++4.0程序設計
C++ 面向對象多線程編程
編程實例
C++實例教程
C++30天極限教程
C++Builder程序設計範例
C語言程序基礎及應用實例
C語言趣味程序百例精解
C++編程實例詳解
C++ Builder網路開發實例
C++實踐之路
21天學通C語言(第六版)
C語言學習300例
C++Builder6.0界面實例開發經典編程900例(C語言)
一個月挑戰C++
Borland C++應用篇
自學C++半月通
邊用邊學C語言
C語言完美演繹
設計60系列C++游戲
C語言程序設計題典
C++物件模型
C++ Builder 5編程實例與技巧
C語言程序設計及應用實例
Borland C++ 高級開發實踐
Borland C++ Builder6開發人員
經驗技巧:C++編碼規范與指導
C++核心編程技術
C++程序設計陷阱
C數值演算法程序大全
C和C++代碼精粹
C++編程-數據結構與程序設計方法
C++語言教程大全
C++Builder核心program
C高級編程技術
C語言常見問題集
C++ Builder 3 核心編程技術
Borland C++程序設計技術
用C實現面向對象
C專家編程
C++數據結構
C語言高級實用編程技巧
C程序設計與應用
C&C++深層探索
C++ 和面向對象的數值計算
用C++開發Web商用程序
C++代碼設計與重用
C++程序員JAVA編程
Borland C++寶典
C語言最新編程技巧200例
C++語言學習經驗集合
C語言編程寶典大全
C++ Builder高級開發人員技術指南
C++ 內存管理演算法和實現
Turboc庫函數源程序與參考大全
C++ Builder 5 開發人員指南
C++程序設計實驗指導(錢能)
用C語言設計屏幕界面技術
C和C++代碼錦囊
C語言學習和精華文摘
標准C++寶典
C_C++深層探索
Borland C++庫函數詳解
高質量C、C++編程指南
C++和面向對象的數值計算
C++、
C++程序設計語言(特別版)---c++八大金剛----Bjarne Stroustrup「C++之父」
C++ Primer (第3版)中文版----c++八大金剛---Stanley B.Lippman
C++ Primer (第4版)中文版----c++八大金剛---Stanley B.Lippman
C++標准程序庫—自修教程與參考手冊--c++八大金剛--Nicolai M.Josuttis
C++語言的設計和演化-----c++八大金剛----Bjarne Stroustrup「C++之父」
深度探索C++對象模型---c++八大金剛----Stanley B.Lippman
Essential C++中文版---c++八大金剛---Stanley B.Lippman
Effective C++中文版 2nd Edition-----c++八大金剛------Scott Meyers
More Effective C++中文版----c++八大金剛------Scott Meyers
C++編程思想(第2版) 第1卷:標准C++導引--------Bruce Eckel
C++編程思想(第2版)第2卷:實用編程技術 --------Bruce Eckel
C++程序設計--------------------------譚浩強
C++ 程序設計教程(第2版)--------------錢能
C++ Primer Plus(第五版)中文版---Stephen Prata
廣博如四庫全書The c++ programming language、c++ Primer
深奧如山重水復Inside the c++ object model
程序庫大全The c++ standard libray
工程經驗之積累Effective c++、More Effective c++、Exceptional c++
c++八大金剛:
1、Essentital c++---lippman---C++之父,旁枝暫略,主攻核心,輕薄短小,初學者
2、The c++ programming language----C++之父,技術權威,用詞深峻,思想深遠,c++網路全書代表,聖經。
3、c++ Primer----lippman---縱橫書市十數年,c++最佳教本,c++網路全書代表。
4、Inside the c++ object model-----lippman----揭示c++底層,非常好,非常難。
5、Effective c++-----通過50個編程實例,展示專家經驗,行文有趣,深處淺出。
6、More Effective c++----通過35個編程實例,展示專家經驗,行文有趣,深處淺出。
7、The c++ standard libray---c++標准庫的網路全書。
8、設計模式:可復用面向對象軟體的基礎
⑤ C語言 求矩陣的逆
//源程序如下#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<iostream.h>
#include<stdlib.h>
#include<math.h>
#define max 100void inputstyle(int *); //輸入函數
void input(int **,int); //輸入函數
long danx(int **,int);
int sgnx(int);
void martx(int **,int);int main(void)
{
int style=0,i=0;
int matrix[max][max],*p[max];
for(i=0;i<max;i++)*(p+i)=matrix[i]; //*(p+i)是指針,指向第i個字元串
char exit1=' ';
while(exit1!='E'&& exit1!='e'){ printf("求n階矩陣的逆\n"); inputstyle(&style);
input(p,style);
printf("原矩陣為:\n");
for(i=0;i<style;i++){
for(int j=0;j<style;j++){
printf("%4d",matrix[i][j]);
}
printf("\n");
}
martx(p,style);
printf("\n");
printf("Exit=e Continue=Press any key\n");
cin>>exit1;
fflush(stdin);
printf("\n\n"); }
return(0);
} void input(int **p,int n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("遲螞輸入矩陣(%d行,%d列)元素:",j+1,i+1);
*(*(p+j)+i)=0;
scanf("%d",*(p+j)+i);
fflush(stdin);
}
}
}void inputstyle(int *style){
do{
printf("碼攜埋輸入矩陣n*n階數n(0<n<%d):",max);
fflush(stdin);
scanf("隱告%d",style);
fflush(stdin);
}while(*style<=0 && *style>max);
}long danx(int **p,int n){
int i=0,j1=0,k1=0,j2=0,k2=0;
long sum=0;
int operate[max][max],*po[max];
for(i=0;i<max;i++)*(po+i)=operate[i]; if(n==1)return *(*(p+0)+0);
else{
for(i=0;i<n;i++){
for(j1=1,j2=0;j1<n;j1++,j2++){
k1=-1;k2=-1;
while(k2<n-1){
k1++;
k2++;
if(k1==i)k1++;
*(*(po+j2)+k2)=*(*(p+j1)+k1);
}
}
/*for(int i1=0;i1<n-1;i1++){
for(int h1=0;h1<n-1;h1++){
printf("(%d,%d)%d ",i1,h1,*(*(po+h1)+i1));
}
printf("\n");
}*/
sum+=*(*(p+0)+i) * sgnx(1+i+1) * danx(po,n-1);
}
return sum;
}
}int sgnx(int i){
if(i%2==0)return(1);
else return(-1);
}void martx(int **p,int n){
int i=0,j=0,j1=0,k1=0,j2=0,k2=0,num=0;
int tramform[max][max];
int operate[max][max],*po[max];
for(i=0;i<max;i++)*(po+i)=operate[i];
num=danx(p,n);
if(num==0)printf("矩陣不可逆\n");
else{
if(n==1)printf("矩陣的逆為: 1/%d\n",num);
else{
printf("矩陣的逆為: 系數 1/%d *\n",num);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
j1=-1;j2=-1;
while(j2<n-1){
j1++;j2++;
if(j1==j)j1++; k1=-1;k2=-1;
while(k2<n-1){
k1++;
k2++;
if(k1==i)k1++;
*(*(po+j2)+k2)=*(*(p+j1)+k1);
}
}
tramform[i][j]=sgnx(2+i+j) * danx(po,n-1);
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%4d",tramform[i][j]);
}
printf("\n");
}
}
}
}
//運行結果//希望對你有幫助