‘壹’ 谁有用平方根法解线性代数方程组的算法(求解正定矩阵)的c语言程序
为什么一定要用平方根法,消元法不可以吗?
‘贰’ 用c语言编程求线性方程组的解
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
int rgauss(n,a,b)
int n;
double a[],b[];
{ int *js,l,k,i,j,is,p,q;
double d,t;
js=malloc(n*sizeof(int));
l=1;
for (k=0;k<=n-2;k++)
{ d=0.0;
for (i=k;i<=n-1;i++)
for (j=k;j<=n-1;j++)
{ t=fabs(a[i*n+j]);
if (t>d) { d=t; js[k]=j; is=i;}
}
if (d+1.0==1.0) l=0;
else
{ if (js[k]!=k)
for (i=0;i<=n-1;i++)
{ p=i*n+k; q=i*n+js[k];
t=a[p]; a[p]=a[q]; a[q]=t;
}
if (is!=k)
{ for (j=k;j<=n-1;j++)
{ p=k*n+j; q=is*n+j;
t=a[p]; a[p]=a[q]; a[q]=t;
}
t=b[k]; b[k]=b[is]; b[is]=t;
}
}
if (l==0)
{ free(js); printf("fail\n");
return(0);
}
d=a[k*n+k];
for (j=k+1;j<=n-1;j++)
{ p=k*n+j; a[p]=a[p]/d;}
b[k]=b[k]/d;
for (i=k+1;i<=n-1;i++)
{ for (j=k+1;j<=n-1;j++)
{ p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if (fabs(d)+1.0==1.0)
{ free(js); printf("fail\n");
return(0);
}
b[n-1]=b[n-1]/d;
for (i=n-2;i>=0;i--)
{ t=0.0;
for (j=i+1;j<=n-1;j++)
t=t+a[i*n+j]*b[j];
b[i]=b[i]-t;
}
js[n-1]=n-1;
for (k=n-1;k>=0;k--)
if (js[k]!=k)
{ t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}
free(js);
return(1);
}
徐世良老师的.原地工作全选主元的高斯消元.用的符号有点诡异,而且将矩阵以线性表输入的.
我也写过一个,不过估计你不太喜欢用我的,这个用来解b也是矩阵的.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void swap(double *a,double *b){
double temp;
temp=*a;
*a=*b;
*b=temp;
}
void printMatrix(int n,int m,double **a){
int i,j;
for (i=0;i<n;i++){
for (j=0;j<m;j++) printf("%e\t",a[i][j]);
printf("\n");
}
}
int rgauss(int n,int m,double **a,double **b){//,double *det){
int *colex,rowex,s,i,j,k;
double d,t;
// *det=1;
s=0;
colex=malloc(n*sizeof(int));
for (k=0;k<n;k++){
d=0.0;
for (i=k;i<n;i++){
for (j=k;j<n;j++){
t=fabs(a[i][j]);
if (t>d){
d=t;
colex[k]=j;
rowex=i;
}
}
}
if (d+1.0==1.0){
free(colex);
printf("Singular Matrix!\n");
return 0;
}
else{
if (colex[k]!=k){
for (i=0;i<n;i++)
swap(a[i]+colex[k],a[i]+k);
s=s+colex[k]-k;
}
if (rowex!=k){
for (j=0;j<n;j++)
swap(a[rowex]+j,a[k]+j);
for (j=0;j<m;j++)
swap(b[rowex]+j,b[k]+j);
s=s+rowex-k;
}
}
d=a[k][k];
// *det=*det*d;
for (j=k+1;j<n;j++) a[k][j]/=d;
for (j=0;j<m;j++) b[k][j]/=d;
for (i=k+1;i<n;i++){
for (j=k+1;j<n;j++)
a[i][j]-=a[i][k]*a[k][j];
for (j=0;j<m;j++)
b[i][j]-=a[i][k]*b[k][j];
}
}
for (i=n-2;i>-1;i--)
for (j=i+1;j<n;j++)
for (k=0;k<m;k++)
b[i][k]-=a[i][j]*b[j][k];
colex[n-1]=n-1;
for (i=n-1;i>-1;i--)
if (colex[i]!=i)
for (j=0;j<m;j++) swap(b[colex[i]]+j,b[i]+j);
// if (s&1) *det=-*det;
return 1;
}
void main(){
#define N 2
#define M 1
double input_a[]={1,1,1,2};
double input_b[]={1,2};
double *a[N],*b[N];
int i;
for (i=0;i<N;i++){
a[i]=input_a+N*i;
b[i]=input_b+M*i;
}
rgauss(N,M,a,b);
printf("方程解为:\n");
printMatrix(N,M,b);
printf("\n");
}
‘叁’ 线性方程组求解——C语言程序设计代码,高手们,拜托啦!急急急啊!!!
这是矩阵运算的两个文件,调用相应的函数即可:
// Matrix.h: interface for matrix calculation functions.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MATRIXCALCULATE_H__CCBC1D7D_4466_4E8B_87DD_0A98B462C18D__INCLUDED_)
#define AFX_MATRIXCALCULATE_H__CCBC1D7D_4466_4E8B_87DD_0A98B462C18D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
////求矩阵matrix的行列式值,n为维数
float CalculateLiner(float *matrix,int n);
////求矩阵matrix的第i行,j列的代数余子式,n为维数
float CalculateCofacter(float *matrix,int i,int j,int n);
////matrixAT=(matrixA)T,m,n为matrixA的行、列数
void CalculateAT(float *matrixA,float *matrixAT,int m,int n);
////matrixAB=matrixA*matrixB,i,j为matrixA的行、列数,j,k为为matrixB的行、列数
void CalculateAB(float *matrixA,float *matrixB,float *matrixAB,int i,int j,int k);
////matrixATA=(matrixA)T*matrixA,m,n分别为matrixA的行、列数
void CalculateATA(float *matrixA,float *matrixATA,int m,int n);
////matrixA_为matrixA的逆,m为matrixA的行、列数
void CalculateA_(float *matrixA,float *matrixA_,int m);
///*矩阵求逆子程序(Good)*/
int Invers_matrix(float *m1,int n);
////求正定矩阵a的逆矩,n为阶数
int MatrixInversion(float *a, int n);
void MatInversion(float *a,int n);
////解矩阵方程matrixA*matrixX=matrixL,m,n分别为matrixA矩阵的行,列数
void EquationResolution(float *matrixA,float *matrixL,float *matrixX,int m,int n);
#endif // !defined(AFX_MATRIXCALCULATE_H__CCBC1D7D_4466_4E8B_87DD_0A98B462C18D__INCLUDED_)
// Matrix.cpp: implementation of the matrix calculation functions.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "Matrix.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
////求矩阵matrix的行列式值,n为维数
float CalculateLiner(float *matrix,int n)
{
float liner=0;
int i=0,j=0,k=0;
int p=0,q=0;
if(n==1)
return matrix[0];
else
{
float *tr=(float *)calloc((n-1)*(n-1),sizeof(float));
for(k=0;k<n;k++)
{
p=0;
for(i=0;i<n;i++)
{
if(i!=0)
{
q=0;
for(j=0;j<n;j++)
{
if(j!=k)
{
tr[p*(n-1)+q]=matrix[i*n+j];
q++;
}
}
p++;
}
}
liner+=matrix[k]*pow(-1,k)*CalculateLiner(tr,n-1);
}
free(tr);
return liner;
}
}
////求矩阵matrix的第i行,j列的代数余子式,n为维数
float CalculateCofacter(float *matrix,int i,int j,int n)
{
int x=0,y=0;
int p=0,q=0;
if(n==1)
return matrix[0];
else
{
float *tr=(float *)calloc((n-1)*(n-1),sizeof(float));
p=0;
for(x=0;x<n;x++)
{
if(x!=i)
{
q=0;
for(y=0;y<n;y++)
{
if(y!=j)
{
tr[p*(n-1)+q]=matrix[x*n+y];
q++;
}
}
p++;
}
}
float cc=pow(-1,i+j)*CalculateLiner(tr,n-1);
free(tr);
return cc;
}
}
////matrixAT=(matrixA)T,m,n为matrixA的行、列数
void CalculateAT(float *matrixA,float *matrixAT,int m,int n)
{
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
matrixAT[j*m+i]=matrixA[i*n+j];
}
}
}
////matrixAB=matrixA*matrixB,i,j为matrixA的行、列数,j,k为为matrixB的行、列数
void CalculateAB(float *matrixA,float *matrixB,float *matrixAB,int i,int j,int k)
{
for (int m=0;m<i;m++)
{
for (int n=0;n<k;n++)
{
matrixAB[m*k+n]=0;
for (int s=0;s<j;s++)
{
matrixAB[m*k+n]+=matrixA[m*j+s]*matrixB[s*k+n];
}
}
}
}
////matrixATA=(matrixA)T*matrixA,m,n为分别为matrixA的行、列数
void CalculateATA(float *matrixA,float *matrixATA,int m,int n)
{
float *at=(float *)calloc((m)*(n),sizeof(float));
CalculateAT(matrixA,at,m,n);
CalculateAB(at,matrixA,matrixATA,n,m,n);
free(at);
}
////matrixA_为matrixA的逆,m为matrixA的行、列数
void CalculateA_(float *matrixA,float *matrixA_,int m)
{
float liner=CalculateLiner(matrixA,m);
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
matrixA_[j*m+i]=CalculateCofacter(matrixA,i,j,m)/liner;
}
}
////////////////////////////////////////////////////////////////////
////求正定矩阵a的逆矩,n为阶数
int MatrixInversion(float *a, int n)
{
int i, j, k, m;
float w, g, *b;
b = new float [n];
for(k = 0; k <= n - 1; k++)
{
w = a[0];
w=a[0]+1.0e-15;
/*
if(fabs(w)+1.0 == 1.0)
{
delete b;
printf("fail\n");
return(-2);
}
*/
m = n - k - 1;
for(i = 1; i <= n - 1; i++)
{
g = a[i * n];
b[i] = g / w;
if(i <= m)
b[i] = -b[i];
for(j = 1; j <= i; j++)
a[(i - 1) * n + j - 1] = a[i * n + j] + g * b[j];
}
a[n * n - 1] = 1.0 / w;
for(i = 1; i <= n - 1; i++)
a[(n - 1) * n + i - 1] = b[i];
}
for(i = 0; i <= n - 2; i++)
for(j = i + 1; j <= n - 1; j++)
a[i * n + j] = a[j * n + i];
delete b;
return(2);
}
////求正定矩阵a的逆矩,n为阶数
void MatInversion(float *a,int n)
{
int i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
if(i!=k) *(a+i*n+k) = -*(a+i*n+k)/(*(a+k*n+k));
}
*(a+k*n+k)=1/(*(a+k*n+k));
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=0;j<n;j++)
{
if(j!=k) *(a+i*n+j) += *(a+k*n+j)* *(a+i*n+k);
}
}
}
for(j=0;j<n;j++)
{
if(j!=k) *(a+k*n+j)*=*(a+k*n+k);
}
}
}
/*矩阵求逆子程序(Good)*/
int Invers_matrix(float *m1,int n)
{
int *is,*js;
int i,j,k,l,u,v;
float temp,max_v;
is=(int *)malloc(n*sizeof(int));
js=(int *)malloc(n*sizeof(int));
if(is==NULL||js==NULL)
{
printf("out of memory!\n");
return(0);
}
for(k=0;k<n;k++)
{
max_v=0.0;
for(i=k;i<n;i++)
{
for(j=k;j<n;j++)
{
temp=fabs(m1[i*n+j]);
if(temp>max_v)
{
max_v=temp; is[k]=i; js[k]=j;
}
}
}
if(max_v==0.0)
{
free(is); free(js);
printf("invers is not availble!\n");
return(0);
}
if(is[k]!=k)
{
for(j=0;j<n;j++)
{
u=k*n+j; v=is[k]*n+j;
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
}
if(js[k]!=k)
for(i=0;i<n;i++)
{
u=i*n+k; v=i*n+js[k];
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
l=k*n+k;
m1[l]=1.0/m1[l];
for(j=0;j<n;j++)
{
if(j!=k)
{
u=k*n+j;
m1[u]*=m1[l];
}
}
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=0;j<n;j++)
{
if(j!=k)
{
u=i*n+j;
m1[u]-=m1[i*n+k]*m1[k*n+j];
}
}
}
}
for(i=0;i<n;i++)
{
if(i!=k)
{
u=i*n+k;
m1[u]*=-m1[l];
}
}
}
for(k=n-1;k>=0;k--)
{
if(js[k]!=k)
for(j=0;j<n;j++)
{
u=k*n+j; v=js[k]*n+j;
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
if(is[k]!=k)
for(i=0;i<n;i++)
{
u=i*n+k; v=i*n+is[k];
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
}
free(is); free(js);
return(1);
}
void EquationResolution(float *matrixA,float *matrixL,float *matrixX,int m,int n)
{
if (m<n) return;
float *at=(float *)malloc((m)*(n)*sizeof(float));
float *ata=(float *)malloc((n)*(n)*sizeof(float));
float *atl=(float *)malloc((n)*sizeof(float));
CalculateATA(matrixA,ata,m,n);
MatrixInversion(ata,n);
CalculateAT(matrixA,at,m,n);
CalculateAB(at,matrixL,atl,n,m,1);
CalculateAB(ata,atl,matrixX,n,n,1);
free(at);
free(ata);
free(atl);
}
‘肆’ 信息与计算科学专业数值分析实验 用解正定对称线性方程组的平方根法解线性方程组: 解下述五十阶矩阵 2 -1
这是C语言代码,把增广矩阵输进去就能得到结果了,我自己编写已经用过
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define EPS 1.0e-8
#define N 20
double a[N][N], b[N], x[N];
int n;
int zhuyuan(int row); /* 选主元*/
void hangjiaohuan(int row1, int row2); /* 行交换*/
void xiaoyuan(int row); /*消元*/
void huidai(); /* 回代*/
void main()
{
printf("请输入方程的维数n!\n n = ");
scanf("%d", &n);
getchar();
printf("\n输入%d行%d列矩阵\n", n, n);
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
scanf("%lf", &a[i][j]);
getchar();
}
printf("\n输入线性方程组右端项b[%d]: ", n);
for (i=0; i<n; i++)
{
scanf("%lf", &b[i]);
}
getchar();
for (i=0; i<n-1; i++)
{
double rowmark = zhuyuan(i);
if (rowmark == -1)
{
printf("多解!");
system("pause");
return;
}
if (rowmark != i)
{
hangjiaohuan(i, rowmark);
}
xiaoyuan(i);
}
huidai();
printf("\n线性方程组的解为: ");
for (i=0; i<n; i++)
{
printf("x%d=%lf ", i+1, x[i]);
}
printf("\n");
system("pause");
}
int zhuyuan(int row)
{
double elem = a[row][row];
int rowmark = row;
for (int i=row+1; i<n; i++)
{
if (elem<a[i][row])
{
elem = a[i][row];
rowmark = i;
}
}
if(fabs(elem) <= EPS)
{
return -1;
}
return rowmark;
}
void hangjiaohuan(int row1, int row2)
{
double tmp;
tmp = b[row1];
b[row1] = b[row2];
b[row2] = tmp;
for (int j=0; j<n; j++)
{
tmp = a[row1][j];
a[row1][j] = a[row2][j];
a[row2][j] = tmp;
}
}
void xiaoyuan(int row)
{
for (int i=row+1; i<n; i++)
{
int j=row;
double tmp = a[i][j]/a[row][row];
b[i] -= tmp*b[row];
for (a[i][j++] = 0; j<n; j++)
{
a[i][j] -= tmp*a[row][j];
}
}
}
void huidai()
{
x[n-1] = b[n-1]/a[n-1][n-1];
for (int i=n-2; i>=0; i--)
{
double sum = 0.0;
for (int j=i+1; j<n; j++)
{
sum -= a[i][j]*x[j];
}
x[i] = (b[i]+sum)/a[i][i];
}
}
‘伍’ C语言程序解线性方程组
给,下面的代码已经编译运行确认,肯定好用了,试试吧:)
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d
float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
void exchange(int r,int k);
float max(int k);
void message();
int main()
{
float x[NUMBER]; /*此数组用于存放方程解*/
int k,i,j;
char celect;
system("cls");
printf("\n用Gauss列主元消元法解线性方程组");
printf("\n1.解方程组请按Enter.");
printf("\n2.退出程式请按Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n 输入方程组的维数:n=");
scanf("%d",&n);
printf("\n现在输入系数矩阵A和向量b:");
for(i=1;i<=n;i++)
{
printf("\n请输入a%d1--a%d%d系数和向量b%d: \n",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此方程组不合法!");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("\nx%d=%f",i,x[i]);
}
message();
getch();
return 1;
}
void 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;
}
void message() /*实现菜单选择的函数*/
{
printf("\n 继续运算按 Enter ,退出程式按 Esc!");
switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n不合法的输入!");message();}
}
}
‘陆’ 平方根迭代公式求解,c语言实现
#include <iostream>
#include <math.h>
double a;
double re(int n);
using namespace std;
void main()
{
int c=0;
double ch=0;
cout << "please enter a:";
cin >> a;
for (c = 10; ch>1e-7; c++)
{
ch = fabs(re(c) - re(c - 1));
}
cout << "sqrt is:" << re(c) << endl;
}
double re(int n)
{
double x;
if (n >= 2)
x = 0.5*(re(n - 1) + a / re(n - 1));
else
x = 0.5*a;
return x;
}
以上为改正后代码
几处错误,可能是编译器不同,都指出来吧。
1,<iostream>应该没有.h
2,使用cin cout之前加using namespace std;
3!!!!,循环节设置错误,for (c = 10; ch>1e-7; c++)
4,建议声明变量同时初始化
‘柒’ C语言程序设计:线性方程组求解
程序能成功运行,用的高斯消元法
不过没有给出菜单
输入提示信息比较清楚
某次的结果如下:
你要解几元线性方程组:
2
请输入第1行相应的系数:
a[0][0]: 2
a[0][1]: -1
请输入第1行相应的常数:
b[0]: 3
请输入第2行相应的系数:
a[1][0]: 1
a[1][1]: 1
请输入第2行相应的常数:
b[1]: 9
方程组:
2.000000X1 - X2= 3.000000
X1 + X2= 9.000000
该方程组的解为:
x1 = 4.00
x2 = 5.00
Press any key to continue
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
int GS(int,double**,double *,double);
double **TwoArrayAlloc(int,int);
void TwoArrayFree(double **);
void main()
{
int i,j,n;
double ep,**a,*b;
ep = 1e-4;
printf("你要解几元线性方程组:\n");
scanf("%d",&n);
a = TwoArrayAlloc(n,n);
b = (double *)calloc(n,sizeof(double));
if(b == NULL)
{
printf("内存分配失败\n");
exit(1);
}
for(i=0;i<n;i++)
{
printf("请输入第%d行相应的系数:\n",i+1);
for(j=0;j<n;j++)
{
printf("a[%d][%d]: ",i,j);
scanf("%lf",a[i]+j);
fflush(stdin);
}
printf("请输入第%d行相应的常数:\n",i+1);
printf("b[%d]: ",i);
scanf("%lf",b+i);
fflush(stdin);
}
printf("方程组:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]>0)
{
if(j>0)printf(" + ");
if(a[i][j]!=1)
printf("%lfX%d",a[i][j],j+1);
else
printf("X%d",j+1);
}
if(a[i][j]<0)
{
if(j>0)printf(" - ");
if(a[i][j]!=-1)
printf("%lfX%d",fabs(a[i][j]),j+1);
else
printf("X%d",j+1);
}
}
printf("= %lf\n",b[i]);
}
if(!GS(n,a,b,ep))
{
printf("不可以用高斯消去法求解\n");
exit(0);
}
printf("该方程组的解为:\n");
for(i=0;i<n;i++)
printf("x%d = %.2f\n",i+1,b[i]);
TwoArrayFree(a);
free(b);
}
int GS(int n,double **a,double *b,double ep)
{
int i,j,k,l;
double t;
for(k=1;k<=n;k++)
{
for(l=k;l<=n;l++)
if(fabs(a[l-1][k-1])>ep)
break;
else if(l==n)
return(0);
if(l!=k)
{
for(j=k;j<=n;j++)
{
t = a[k-1][j-1];
a[k-1][j-1]=a[l-1][j-1];
a[l-1][j-1]=t;
}
t=b[k-1];
b[k-1]=b[l-1];
b[l-1]=t;
}
t=1/a[k-1][k-1];
for(j=k+1;j<=n;j++)
a[k-1][j-1]=t*a[k-1][j-1];
b[k-1]*=t;
for(i=k+1;i<=n;i++)
{
for(j=k+1;j<=n;j++)
a[i-1][j-1]-=a[i-1][k-1]*a[k-1][j-1];
b[i-1]-=a[i-1][k-1]*b[k-1];
}
}
for(i=n-1;i>=1;i--)
for(j=i+1;j<=n;j++)
b[i-1]-=a[i-1][j-1]*b[j-1];
return(1);
}
double **TwoArrayAlloc(int r,int c)
{
double *x,**y;
int n;
x=(double *)calloc(r*c,sizeof(double));
y=(double **)calloc(r,sizeof(double*));
if(!x||!y)
{
printf("内存分配失败\n");
exit(1);
}
for(n=0;n<=r-1;++n)
y[n]=&x[c*n];
return (y);
}
void TwoArrayFree(double **x)
{
free(x[0]);
free(x);
}
‘捌’ c语言求平方根
我有你想要的答案,全部给你吧:
1. 输入两个数如果是大于0的数就算出评分根,小于0就输出绝对值。(用IF语句)
2. #include "stdio.h"
3. #include "math.h"
4. void main()
5. {
6. int a,b,c;
7.
8. scanf("%d%d",&a,&b);
9. if(a<0&&b<0)
10. {
11. printf("%d%d",a,b);}
12. else
13. { c=a+b;
14. printf("%d",c);}
15.
16. getch();
17.
18. }
19.
20.
21.
22. 键盘输入任意的一个数字【0-5】,输出它对应的英文单词。(用swich语句)
23. void main()
24. {
25. int a;
26. scanf("%d",&a);
27. switch(a)
28. { case 0:printf("zero");break;
29. case 1:printf("one");break;
30. case 2:printf("two");break;
31. case 3:printf("three");break;
32. case 4:printf("four");break;
33. case 5:printf("five");break;
34.
35. }
36. getch();
37.
38. }
39. 用switch语句编写程序,根据键盘输入的月份,输出对应季度,如输入3,则输出“春季”
40. void main()
41. {
42. int a;
43. scanf("%d",&a);
44. switch(a)
45. {
46. case 1:printf("winter");break;
47. case 2:printf("winter");break;
48. case 3:printf("spring");break;
49. case 4:printf("spring");break;
50. case 5:printf("spring");break;
51. case 6:printf("summer");break;
52. case 7:printf("summer");break;
53. case 8:printf("summer");break;
54. case 9:printf("autumn");break;
55. case 10:printf("autumn");break;
56. case 11:printf("autumn");break;
57. case 12:printf("winter");break;
58. default:printf("Please enter the digital\n \nsingle-digit");
59.
60. }
61. getch();
62.
63. }
64. 编写计算器程序。用户输入运算数和四则运算符,输出计算结果。(用swith语句,需要3个变量,一个是字符型变量存放运算符,两个用于运算的整型变量)
65. void main()
66. {
67. int a,b,d;
68.
69. char c;
70. printf("Please input operator\nFor example '+' '-' '*' '/'\n");
71. scanf("%c",&c);
72. printf("Please input number\n");
73. scanf("%d%d",&a,&b);
74. switch(c)
75. {
76. case '+':
77. d=a+b;break;
78. case '-':
79. d=a-b;break;
80. case '*':
81. d=a*b;break;
82. case '/':
83. d=a/b;break;
84. default: break;
85. }
86.
87. printf("%d",d);
88. getch();
89.
90. }
简单版以下的计算器:
void main()
{
int a,b,d;
char c;
scanf("%c",&c);
scanf("%d%d",&a,&b);
switch(c)
{case '+': d=a+b; ;break;
case '-': d=a-b; ;break;
case '*': d=a*b; ;break;
case '/': d=a/b; ;break;
default: break;
}
printf("%d",d);
getch();
}
91. 编写程序,要求:输入学生某科成绩,输出其等级。成绩【90,100】为A等,成绩【80,89】为B等,成绩【60-79】为C等,60分以下为D等。
92. void main()
93. {
94. int a;
95. scanf("%d",&a);
96. switch(a/10)
97. { case 6: printf("C") ;break;
98. case 7: printf("c") ;break;
99. case 8: printf("B") ;break;
100. case 9: printf("A") ;break;
101. case 10: printf("A") ;break;
102. default: printf("Not qualified D "); break;
103. }
104.
105. getch();
106. }
全部自己做的。
‘玖’ C语言编程 求平方根
#include <stdio.h>
#include <math.h>
int main( )
{
double x, root;
scanf("%lf", &x);
/*---------*/
root=sqrt(x);
printf("The square root of %0.1f is %0.1f\n", x, root);
return 0;
}