第32題 int vector_add(double* a, double* b, double* c, unsigned int n); 功? 能:求兩個給定向量的和. 參? 數:a, b為表示兩個向量的一維數組;c為存放求和結果向量的數組(數組空間已由調用者分配好);n為向量的分量個數. 返回值:>=0,成功返回;<0,不成功返回. 分? 值:
//第32題
int?vector_add(double*?a,?double*?b,?double*?c,?unsigned?int?n){unsigned?int?i;for(i=0;i<n;i++){*(c+i)=*(a+i)+*(b+i);}if(i==n){return?0;}return?-1;
}
第33題 double* vector_add(double* a, double* b, unsigned int n); 功? 能:求兩個給定向量的和. 參? 數:a, b為表示兩個向量的一維數組;n為向量的分量個數. 返回值:求和結果向量數組的首地址(結果向量數組的空間由函數的實現者分配). 分? 值:
//第33題
double*?vector_add1(double*?a,?double*?b,?unsigned?int?n){unsigned?int?i;double?c[100];double?*p=c;for(i=0;i<n;i++){*(p+i)=*(a+i)+*(b+i);}return?p;
}//測試程序
void?main()
{//調用vector_add(),vector_add1()函數double?a[3]={1,2,3};double?b[3]={3,4,5};double?c[3];if(vector_add(a,b,c,3)>=0){for(int?i=0;i<3;i++){printf("%f??",c[i]);}printf("\n");}for(int?i=0;i<3;i++){printf("%f??",*(vector_add1(a,b,3)+i));}
}
第34題 int matrix_add(double* a, double* b, double* c, unsigned int m, unsigned int n); 功? 能:求兩個給定矩陣的和. 參? 數:a, b為表示兩個矩陣的二維數組;c為存放求和結果向量的數組(數組空間已由調用者分配好);m, n為二維數組的行數和列數. 返回值:>=0,成功;<0,不成功. 分? 值:
//第34題
int?matrix_add(double*?a,?double*?b,?double*?c,?unsigned?int?m,?unsigned?int?n){unsigned?int?i,k;for(i=0;i<m;i++){for(k=0;k<n;k++){*(c+i*n+k)=*(a+i*n+k)+*(b+i*n+k);}}if(i==m&&k==n){return?0;}return?-1;
}
第35題 double* matrix_add(double* a, double* b, unsigned int m, unsigned int n); 功? 能:求兩個給定矩陣的和. 參? 數:a, b為表示兩個矩陣的二維數組;m, n為二維數組的行數和列數. 返回值:求和結果向量數組的首地址(結果向量數組的空間由函數的實現者分配). 分? 值:
//第35題
double*?matrix_add(double*?a,?double*?b,?unsigned?int?m,?unsigned?int?n){unsigned?int?i,k;double?c[100];for(i=0;i<m;i++){for(k=0;k<n;k++){*(c+i*n+k)=*(a+i*n+k)+*(b+i*n+k);}}return?c;
}//測試程序
void?main()
{//調用matrix_add()、matrix_add()函數double?a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};double?b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};double?c[3][4];if(matrix_add((double*)a,(double*)b,(double*)c,3,4)>=0){for(int?i=0;i<3;i++){for(int?k=0;k<4;k++){printf("%.2f??",c[i][k]);}printf("\n");}}for(int?i=0;i<3;i++){for(int?k=0;k<4;k++){printf("%.2f??",*(matrix_add((double*)a,(double*)b,3,4)+i*4+k));}printf("\n");}
*/
}
第36題 int prime(unsigned int n); 功? 能:判斷給定自然數是否為素數. 參? 數:n為給定的自然數. 返回值:0,不是素數;1,是素數. 分? 值:
//第36題
int?prime(unsigned?int?n){unsigned?int?i,k;k=(unsigned?int)sqrt((double)?n);for(i=2;i<=k;i++){if(n%i==0)break;}if(i>k){return?1;}return?0;
}
第37題 int abs_prime(unsigned int n); 功? 能:判斷給定偶數位自然數是否為絕對素數(給定自然數左右兩半的數對換以后仍為素數). 參? 數:n為給定的偶數位自然數. 返回值:0,不是絕對素數;1,是絕對素數. 分? 值:
//第37題int?abs_prime(unsigned?int?n){unsigned?int?n1=n;unsigned?int?n2=n;int?i=1;//表示n的位數while(n1/10!=0){n1=n1/10;i++;}if(i%2==0){int?k;for(k=0;k<(i/2);k++){n2=n2/10;}unsigned?int?n3,n4;for(k=0;k<(i/2);k++){n3=n2*10;}n4=n-n3;for(k=0;k<(i/2);k++){n4=n4*10;}unsigned?int?n5=n4+n2;printf("%d-----",n5);if(prime(n)==1&&prime(n5)==1){return?1;}else{return?0;}}return?0;
}
第38題 int Goldbach_conjecture(unsigned int n, unsigned int *a, unsigned int *b); 功? 能:驗證哥德巴赫猜想,將一個給定的大于5的偶數表示為兩個素數的和. 參? 數:n為給定的大于5的偶數;a, b為存放拆分成的兩個素數的數組的首地址,拆成的一對素數分別放在數組a和b的相同下標單元中(如8拆成3和5,則a[0]=3,b[0]=5). 返回值:>=0,成功;<0,不成功. 分? 值:
//第38題
int?Goldbach_conjecture(unsigned?int?n,?unsigned?int?*a,?unsigned?int?*b){unsigned?int?i;int?k=0;for(i=1;i<n/2;i++){if(prime(i)==1&&prime(n-i)==1){*(a+k)=i;*(b+k)=n-i;k++;}}if(k>0){return?k;}return?-1;
}
//測試程序
void?main()
{unsigned?int?a[100];unsigned?int?b[100];printf("%d\n",abs_prime(17));if(Goldbach_conjecture(8,a,b)>0){for(int?i=0;i<Goldbach_conjecture(8,a,b);i++){printf("%d-----%d\n",*(a+i),*(b+i));}}}
轉載于:https://blog.51cto.com/junzhichen/1672223
《新程序員》:云原生和全面數字化實踐 50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔 為你收集整理的C语言 基础60题(5) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。