2015年07月22日
1、关于求解一元二次方程函数的根的函数设计(不涉及虚数)
//一元二次方程的根
#include<stdio.h>
#include<math.h>
float *gen(float a,float b,float c)
{
float x[2]={0};
float drt=b*b-4*a*c; //b^2-4ac
//printf("%lf\n",a);
if(drt>=0)//实根
{
x[0]=(-b+sqrt(drt))/(2*a);
x[1]=(-b-sqrt(drt))/(2*a);
return x;
}
if(drt>=0)//实根
{
return NULL;
}
/*if(drt<0)
{
x[0]=(-b);
x[1]=sqrt(drt)/(2*a);
x[2]=i;
x[3]=(-sqrt(drt))/(2*a);
}*/
}
/*int main()//非命令行输入
{
float a=4.0,b=-4.0,c=1.0;
float *r=gen(a,b,c);
printf("%f\n",*r);
return 0;
}*/
int main(int argc,char **argv)//命令行输入
{
double a=atoi(argv[1]);
double b=atoi(argv[2]);
double c=atoi(argv[3]);
float *r=gen(a,b,c);
if(gen(a,b,c)==NULL)
printf("No Result!\n");
else
printf("x1=%.2lf,x2=%.2lf\n",*r,*(r+1));
}
2、使用冒泡法字符串排序(此处未考虑映射)
#include<stdio.h>
#include<string.h>
char *set( char *str)
{
int i,j,tmp;
char *s=str;
for(i=0;i<strlen(s)-1;i++)
for(j=0;j<strlen(s)-i-1;j++)
if(s[j]>s[j+1])
{
tmp=s[j];
s[j]=s[j+1];
s[j+1]=tmp;
}
return s;
}
int main(int argc,char **argv )
{
char *str=argv[1];
char *p=set(str);//*
while(*p)
{
printf("%c\n",*p);
p++;
}
}
3、实现atoi函数
#include<stdio.h>
int myatoi(const char *p)
{
int sum=0;
while(*p)
{
sum=sum*10+(*p-'0');
p++;
}
return sum;
}
int main (int argc,char**argv)
{
char str[50]={0};
char*p=str;
if(argc==1)
{
printf("Please input a string by the keyboard!\n");
gets(str);
}
else
{
p=argv[1];
}
int x=myatoi(p);
printf("%d\n",x);
}
4、使用命令行输入的方式实现加减乘除
#include<stdio.h>
int main(int argc , char **argv)
{
if(4!=argc)
{
printf("error!\nTry to input as <num><op><num>.");
return -1;
}
int x=atoi(argv[1]);
int y=atoi(argv[3]);
if(*(argv[2])=='+')
printf("%d\n",x+y);
if(*(argv[2])=='-')
printf("%d\n",x-y);
if(*(argv[2])=='*')
printf("%d\n",x*y);
if(*(argv[2])=='/')
printf("%.4lf\n",((double)x)/((double)y));
}
5、游程编码
//游程编码程序,输入需要输入数字的个数,之后输入需要编码的数字,并以‘,’分隔
#include<stdio.h>
#include<string.h>
#define NA 100
#define NB 50
int main()
{
char a[NA]={0};
char b[NB]={0};
int i=0,j=1,m=0,num=0;//i is a[];j is count;m is b[]
printf("How much number do you want to input:)\n");
scanf("%d",&num);
printf("Please input the numbers.Please use Enter between then.\n");
for(i=0;i<num;i++)
scanf("%d,",&a[i]);
b[m]=a[0];
for(i=1;i<strlen(a);i++)
{
if(b[m]==a[i])
{
j++;
if(i==strlen(a)-1)
b[++m]=j;
}
else
{
if(i==strlen(a)-1)
{
++m;
b[m]=j;
++m;
b[m]=a[i];
b[++m]=1;
}
else
{
++m;
b[m]=j;
++m;
b[m]=a[i];
j=1;
}
}
}
//printf("%d,%d\n",i,strlen(b));//for test!
for(i=0;i<strlen(b);i++)
{
printf("%-3hd",b[i]);
if((i+1)%4==0)
printf("\n");
if(i==(strlen(b)-1))
printf("\n");
}
return 0;
}
6、实现strlen函数
#include<stdio.h>
char mystrlen(const char *ptr);
int main()
{
char a[]="asdfghjkl";
char *ch=a;
printf("%d\n",mystrlen(ch));
return 0;
}
char mystrlen(const char *ptr)
{
/*int i=0;//plan 1
char *p=ptr;
while(*p!='\0')
{
i++;
p++;
}
return (i);
/*char *p=ptr;//plan 2
while(*p++ !='\0');
return(p-ptr-1);*/
}