c语言小程序集锦

程序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:求二维数组中每行元素的平均值

代码:

//程序8:求二维数组中每行元素的平均值

#include
<stdio.h>

int main()
{
float a[10][10],sum;
int i,j;
for (i=0; i<10; i++)//传入数据
{
for (j=0; j<10; j++)
{
a[i][j]
= (i+2)*(j+rand())*rand();//随便赋值
}
}
for (i=0; i<10; i++)//求平均值
{
for (j=0; j<10; j++)
{
sum
+= a[i][j];
}
printf(
"第%d行的平均值:%f\n", i, sum/10);
}
return 1;
}

测试结果:

[hanxi@hanxi-workstation Documents]$ gcc -lm code8.c
[hanxi@hanxi
-workstation Documents]$ ./a.out
第0行的平均值:
733531699.200000
第1行的平均值:
455155609.600000
第2行的平均值:
625712537.600000
第3行的平均值:
36360051.200000
第4行的平均值:
-482607616.000000
第5行的平均值:
-487296256.000000
第6行的平均值:
-608275507.200000
第7行的平均值:
-720682086.400000
第8行的平均值:
-1062218342.400000
第9行的平均值:
-780733542.400000

程序9:已知 char a[10],设计函数使下标从6开始的元素全部设为‘#’,并保持前6个元素的内容不变。

代码:

//程序9:已知 char a[10],设计函数使下标从6开始的元素全部设为‘#’,并保持前6个元素的内容不变。

int main()
{
char a[10]="123456789a";
int i;
for (i=6; i<10;i++)
{
a[i]
= '#';
}
puts(a);
}

结果:

[hanxi@hanxi-workstation Documents]$ gcc -lm code9.c
[hanxi@hanxi
-workstation Documents]$ ./a.out
123456####

程序10:设计一个函数,功能为:删除字符串中所有个空格。

代码:

//程序10:设计一个函数,功能为:删除字符串中所有个空格。

#include
<stdio.h>
#include
<string.h>

void fun(char *a)
{
int i=0,j=0;
int len=strlen(a);
for (i=0; i<len; i++)
{
while (a[i] == ' ')
{
for (j=i; j<len; j++)
{
a[j]
= a[j+1];
}
}
}
}

int main()
{
char a[256]="as;ldfj s a s kdl jfl;k sadjf";
puts(a);
fun(a);
puts(a);
return 1;
}

测试结果:

[hanxi@hanxi-workstation Documents]$ gcc -lm code10.c
[hanxi@hanxi
-workstation Documents]$ ./a.out
as;ldfj s a s kdl jfl;k sadjf
as;ldfjsaskdljfl;ksadjf

程序11:输入三条线段的长度,判定它能否组成一个三角形。如果可以构成三角形,打印它所构成的三角形所构成的类型:等边/等腰/直角/任意三角形。

代码:

//程序11:输入三条线段的长度,判定它能否组成一个三角形。如果可以构成三角形,打印它所构成的三角形所构成的类型:等边/等腰/直角/任意三角形。

#include
<stdio.h>

int fun(float a, float b, float c)
{
int n=0;
//n=0代表任意三角形
//n=1代表等边三角形
//n=2代表等腰三角形
//n=3代表直角三角形
//n=4代表不能构成三角形
//n=5代表等要直角三角形

if (a+b>c && abs(a-b)<c)
{
if (a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
{
n
=3;
}
if (a==b || a==c || b==c)
{
n
=2;
if (a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
{
n
=5;
}
}
if (a==b && a==c)
{
n
=1;
}
}
else
{
n
=4;
}
return n;
}

int main()
{
float a,b,c;
printf(
"输入数据\na=");
scanf(
"%f",&a);
printf(
"b=");
scanf(
"%f", &b);
printf(
"c=");
scanf(
"%f", &c);
switch (fun(a,b,c))
{
case 0:
printf(
"三角形为任意三角形\n");
break;
case 1:
printf(
"三角形为等边三角形\n");
break;
case 2:
printf(
"三角形为等腰三角形\n");
break;
case 3:
printf(
"三角形为直角三角形\n");
break;
case 4:
printf(
"不能构成三角形\n");
break;
case 5:
printf(
"三角形为等腰直角三角形\n");
break;
}
return 1;
}

测试结果:

[hanxi@hanxi-workstation Documents]$ ./a.out
输入数据
a
=12
b
=12
c
=25
不能构成三角形
[hanxi@hanxi
-workstation Documents]$ ./a.out
输入数据
a
=12
b
=12
c
=23
三角形为等腰三角形

posted @ 2011-07-02 14:22  涵曦  阅读(14180)  评论(2编辑  收藏  举报