程序1:已知y=2*x^2 - 3*x^4 + 6*x^5 - 4*x + 50,求x=0 到 x=2 以步长为0.2递增时y的最小值和最大值。
知识点:
pow(计算次方值)
相关函数 exp,log,log10
表头文件 #include<math.h>
定义函数 double pow(double x,double y);
函数说明 pow()用来计算以x为底的y次方值,即xy值,然后将结果返回。
返回值 返回x的y次方计算结果。
错误代码 EDOM 参数x为负数且参数y不是整数。
附加说明 使用GCC编译时请加入-lm。
代码:
//程序1;
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float y(float x);
float y(float x)
{
return 2*x*x - 3*pow(x,4.) + 6*pow(x,5.) - 4*x + 50;
}
int main()
{
float x;
float miny;
float maxy;
x=0;
miny = y(x);
maxy = y(x);
while (x<=2)
{
x += 0.2;
if (miny > y(x))
{
miny = y(x);
}
if (maxy < y(x))
{
maxy = y(x);
}
}
printf("y的最小值为:%f\ny的最大值为:%f\n", miny, maxy);
return 1;}
运行结果:
[hanxi@hanxi-workstation Documents]$ gcc -lm code1.c
[hanxi@hanxi-workstation Documents]$ ./a.out
y的最小值为:48.397758
y的最大值为:194.000092
程序2:画y=sin(x)和y=x/3在[-pi/2,pi/2]的图像
没有画出坐标,直接画图像的形状,采用坐标描点。分y>0和y<0两种情况,y>0时,y=x/3在y=sin(x)后面。y<0时相反
代码:
//程序2;
#include<stdio.h>
#include<math.h>
int main()
{
double y;
int x,m,k;
for(y=1;y>=-1;y-=0.1) //y为列方向,值从1到-1,步长为0.1
{
m=asin(y)*10; //计算出y对应的弧度m,乘以10为图形放大倍数
k=3*y*10; //计算y=x/3对应的x,同样将图形放大10倍
if (y>0)//[0,PI/2]
{
for(x=1;x<31+m;x++) printf(" ");
printf("*");
for(;x<31+k; x++) printf(" ");
printf("*\n");
}
else//[-PI/2,0]
{
for (x=1; x < 31+k;x++) printf(" ");
printf("*");
for(;x<31+m;x++) printf(" ");
printf("*\n");
}
}
return 0;
}
运行结果:
[hanxi@hanxi-workstation Documents]$ gcc -lm code2.c
[hanxi@hanxi-workstation Documents]$ ./a.out
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
**
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
程序3:求一个方阵对角线上最小值
思想:将矩阵存在二维数组a[m][n]中,比较对角线上的元素就是在下标i=j时比较,从而选出最小值
代码:
//程序3:求一个方阵对角线上最小值
#include <stdio.h>
int main()
{
int a[5][5];
int i,j,min;
for (i = 0; i<5; i++)
{
for (j=0; j<5; j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
}
min=a[0][0];
for (i = 0; i<5; i++)
{
if (min>a[i][i])
{
min=a[i][i];
}
}
printf("对角线最小值为:%d\n", min);
return 1;
}
测试结果:
[hanxi@hanxi-workstation Documents]$ gcc -lm code3.c
[hanxi@hanxi-workstation Documents]$ ./a.out
a[0][0]=2
a[0][1]=3
a[0][2]=6
a[0][3]=5
a[0][4]=9
a[1][0]=6
a[1][1]=3
a[1][2]=5
a[1][3]=2
a[1][4]=1
a[2][0]=4
a[2][1]=5
a[2][2]=9
a[2][3]=8
a[2][4]=5
a[3][0]=7
a[3][1]=0
a[3][2]=2
a[3][3]=1
a[3][4]=3
a[4][0]=6
a[4][1]=8
a[4][2]=5
a[4][3]=4
a[4][4]=9
对角线最小值为:1
程序4:设计一个函数,使用递归法求x^n,并在住函数中调用
代码:
//程序4:设计一个函数,使用递归法求x^n,并在住函数中调用
#include <stdio.h>
float fun(float x, int n)
{
if (n!=1)
{
return x*fun(x,n-1);
}
else
{
return x;
}
}
int main()
{
float x;
int n;
printf("请输入数据\nx=");
scanf("%f",&x);
printf("n=");
scanf("%d", &n);
printf("x^n=%f\n",fun(x,n));
return 1;
}
测试结果:
[hanxi@hanxi-workstation Documents]$ ./a.out
请输入数据
x=5
n=2
x^n=25.000000
[hanxi@hanxi-workstation Documents]$ ./a.out
请输入数据
x=6.2
n=6
x^n=56800.225100
程序5:设计一个函数void sear(int a[], int n);n为数组a的长度。 通过使用全局变量的方法求:tave(数组a中正数的平均值),nave(数组a中负数的平均值)
代码:
//程序5:设计一个函数void sear(int a[], int n);n为数组a的长度。 通过使用全局变量的方法求:tave(数组a中正数的平均值),nave(数组a中负数的平均值)
#include <stdio.h>
int tave=0,nave=0;
void sear(int a[], int n)
{
int i;
int tsum=0,t_n=0,nsum=0,n_n=0;
for (i=0; i<n;i++)
{
if (a[i]>0)
{
tsum += a[i];
t_n++;
}
else
{
nsum += a[i];
n_n++;
}
}
if (t_n!=0) tave=tsum/t_n;
if (n_n!=0) nave=nsum/n_n;
}
int main()
{
int a[10];
int i;
printf("输入数据\n");
for (i=0; i<10; i++)
{
printf("a[%d]=",i);
scanf("%d", &a[i]);
}
sear(a,10);
printf("结果: \n tave=%d \n nave=%d \n",tave,nave);
return 1;
}
测试结果:
[hanxi@hanxi-workstation Documents]$ ./a.out
输入数据
a[0]=5
a[1]=2
a[2]=2
a[3]=25
a[4]=5
a[5]=2
a[6]=-6
a[7]=5
a[8]=2
a[9]=1
结果:
tave=5
nave=-6
程序6:求a*x^2+b*x+c=0的根
代码:
//求a*x^2+b*x+c=0的根
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c;
float tmp;
printf("输入数据\na=");
scanf("%f",&a);
printf("b=");
scanf("%f", &b);
printf("c=");
scanf("%f", &c);
tmp=b*b-4*a*c;
if (tmp>0)
{
printf("方程的根为:%f和%f\n", (-b+sqrt(tmp))/2,(-b-sqrt(tmp))/2);
}
if (tmp==0)
{
printf("方程的根为:%f\n", -b/2);
}
if (tmp<0)
{
printf("方程无解\n");
}
return 1;
}
测试结果:
[hanxi@hanxi-workstation Documents]$ gcc -lm code6.c
[hanxi@hanxi-workstation Documents]$ ./a.out
输入数据
a=2
b=2
c=2
方程无解
[hanxi@hanxi-workstation Documents]$ ./a.out
输入数据
a=1
b=0
c=0
方程的根为:-0.000000
[hanxi@hanxi-workstation Documents]$ ./a.out
输入数据
a=58
b=5
c=4
方程无解
[hanxi@hanxi-workstation Documents]$ ./a.out
输入数据
a=2
b=56
c=169
方程的根为:-6.881288和-49.118712
程序7:设计函数output()和函数input();使功能和puts()和gets()相同
代码:
//程序7:设计函数output()和函数input();使功能和puts()和gets()相同
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void output(char a[])
{
int i;
for (i=0; i<strlen(a); i++)
{
putchar(a[i]);
}
printf("\n");
}
int main()
{
int i;
char a[256]="als;ajasdlkfweiondvlj阿斯疯狂疯狂sdfdjf";
output(a);
}
测试结果:
[hanxi@hanxi-workstation Documents]$ gcc -lm code7.c
[hanxi@hanxi-workstation Documents]$ ./a.out
als;ajasdlkfweiondvlj阿斯疯狂疯狂sdfdjf
程序8:求二维数组中每行元素的平均值
代码:
全部评论
请发表评论