C语言简单编程


一、一元二次方程求实根

#include <stdio.h>
#include <math.h>
int main()
{
	float a,b,c,x1,x2,m,n,disc;
	scanf("%f%f%f",&a,&b,&c);
	disc=b*b-4*a*c;//dis<0无实根,>0有两个不相等的实根,=0有两个相等的实根
	if(m<0)printf("方程无实根");
	else{
		m=sqrt(disc)/(2*a);
		n=(-b)/(2*a);
		x1=n+m;
		x2=n-m;
		printf("两个实根分别为%f,%f",x1,x2);
	}
return 0;	 
}

二、实现两个字符串的连接并且不用strcat函数

#include <stdio.h>
int main()
{
	char ch1[50],ch2[20],*p,*q;
	gets(ch1);
	gets(ch2);
	p=ch1;q=ch2;
	while(*p)p++;
	while(*q)
	{
	*p=*q;
	p++;q++;	
	}
	*p='\0';
	puts(ch1);
	return 0;
}

三、计算并输出杨辉三角前十行

#include <stdio.h>
int main()
{
	int i,j,a[10][10]={0};
	for(i=0;i<10;i++)
	     {
		 a[i][0]=1;
		 a[i][i]=1;}
    for(i=2;i<10;i++)
       	for(j=0;j<=i;j++)
       	    a[i][j]=a[i-1][j-1]+a[i-1][j];
	for(i=0;i<10;i++)
	{for(j=0;j<10;j++)
	    printf("%4d",a[i][j]);
	  printf("\n") ;  
	   }   
	   return 0;
}

四、输入正整数n生成n*n方阵,转置并输出

#include <stdio.h>
int main()
{
	int i,j,t,n,a[10][10],b[10][10];
	scanf("%d",&n);
	if(n>1&&n<=6)
	{for(i=0;i<n;i++)
	    for(j=0;j<n;j++)
	        a[i][j]=i*n+j+1;
	        
	for(i=0;i<n;i++)
	     {for(j=0;j<n;j++)
	     
	      	printf("%4d",a[i][j]);
	      	printf("\n");
		  }
	printf("\n");
	for(i=0;i<n;i++)
	    for(j=0;j<n;j++)
	     b[j][i]=a[i][j];
	     
	for(i=0;i<n;i++)
	     {for(j=0;j<n;j++)
	     
	      	printf("%4d",b[i][j]);
	      	printf("\n");
		  }
		  return 0;
}}

五、输入字符串求其长度

#include <stdio.h>
int main()
{
	int length (char *p);
	int len;
	char ch1[80];
	gets(ch1);
	len=length(ch1);
	printf("长度为%d",len);
}
int length(char *p)
{int n=0;
while(*p)
{p++;n++;
}
return n;
}

六、编写函数,函数功能:删去一维数组中所有重复的数,只保留不同的数。

#include <stdio.h>
int fun(int a[],int x)
{
	int i,j,k;
	for(i=0;i<x;i++)
	    {
	     for(j=i+1;j<x;j++)
	        if(a[i]==a[j])
	        {
	        	for(k=j;k<x-1;k++)
	        	   a[k]=a[k+1];
				   j--;
			       x--;
			}
			
        }   
    return x;
}
int main()
{
	int a[100],i,n,x;
	printf("输入数组个数:");
	scanf("%d",&x);
	printf("输入数组内容:"); 
	for(i=0;i<x;i++)
	  scanf("%d",&a[i]);
	n=fun(a,x);
	for(i=0;i<n;i++)
	    printf("%d ",a[i]);
	return 0;
}

七、将一个数插入到数组中,并且不改变数组原来的顺序

#include <stdio.h>
int main()
{
	int a[10]={1,3,5,7,9,10,11,15,17};
	int x,i,j,k;
	scanf("%d",&x);
	if(x>a[8])a[9]=x;
	else{
	    for(i=0;i<9;i++)
	     if(x<a[i])
	     {  
	     	for(j=9;j>i;j--)
	     	  a[j]=a[j-1];
		a[i]=x;
		break;
	     	
		 }
}
for(i=0;i<10;i++)
   printf("%3d",a[i]);
return 0;
}

八、输入两个整数,求最大公因数

#include <stdio.h>
int main()
{
	int m,n,r;
	do{
		scanf("%d%d",&m,&n);
	}while(m<=0||n<=0);
	if(m<n)
	{
		r=m;m=n;n=r;
	}
	while(n!=0)
	{
		r=m%n;
		m=n;
		n=r;
	}
	printf("%d",m);
	return 0;
}

九、输入一个十进制数,转换为任意进制数

#include <stdio.h>
int main()
{
	int m,n,k,a[10],i,j;
	char s[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	printf("输入一个十进制数:\n");
	scanf("%d",&m);
	printf("要转换的进制是:\n");
	scanf("%d",&n);
	i=0;
	while(m!=0)
	{   
		k=m%n;
		a[i]=k;
		i++;
		m=m/n;
	}
	for(j=i-1;j>=0;j--)
	printf("%c",s[a[j]]);
return 0;
	 
}

十、输入一个以回车为结束的字符串,过滤掉所有的非数字字符后转换成十进制整数输出

#include <stdio.h>
int main()
{
	char c[20];
	int i=0,m=0;
	while((c[i]=getchar())!='\n')
	{
		if(!(c[i]>='a'&&c[i]<='z')&&!(c[i]>='A'&&c[i]<='Z'))
		    m=m*10+c[i]-'0';
		    i++;
	}
	printf("%d",m);
	return 0;
}

十一、循环右移:整数右移任意位置

有n个整数,使前面各数顺序循环移动m个位置(m<n)。
编写函数实现上述功能,在主函数中输入n个整数并输出调整后的n个数。例如:
输入 input n,m:5,3
1 2 3 4 5
输出:3 4 5 1 2

#include <Stdio.h>
void fun(int *x,int m,int n);
int main()
{
	int a[10],m,n,i;
	scanf("%d",&n);
	scanf("%d",&m);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
        fun(a,n,m);
	for(i=0;i<n;i++)
	printf("%d",a[i]);
	return 0;
}
void fun(int *x,int n,int m)
{
	int i,j,k;
	for(i=0;i<m;i++)
	{
		k=x[n-1];
		for(j=n-1;j>0;j--)
		x[j]=x[j-1];
		x[0]=k;
		
	}
}

十二、输入一个一回车结束的字符串,过滤掉所有非十六进制数后组成一个新的字符串,输出该字符串并将其转换成十进制后输出

#include <Stdio.h>
int main()
{
	char c,a[80];
	int i=0,j=0,b[80],m=0;
	while((c=getchar())!='\n')
	{
		if((c>='a'&&c<='f')||(c>='A'&&c<='F')||(c>='0'&&c<='9'))
		{
			a[j]=c;j++;
		}
		i++;
	}
	a[j]='\0';
	printf("%s\n",a);
	i=0;
	while(a[i]!='\0')
	{
		if(a[i]>='a'&&a[i]<='f')b[i]=a[i]-'a'+10;
		if(a[i]>='A'&&a[i]<='F')b[i]=a[i]-'A'+10;
		if(a[i]>='0'&&a[i]<='9')b[i]=a[i]-'0';
		i++;
	}
	for(j=0;j<i;j++)
	    m=m*16+b[j];
	printf("%d",m);
	return 0;
}

十三、字符数组中任意位置插入任意字符

#include <stdio.h>
int main()
{
	char s[80],c,*p,*q;
	int x,n=0;
	gets(s);scanf("%c",&c);
	scanf("%d",&x);
	p=q=s;
	while(*p)p++;
	while(*q)
	{
		n++;
		if(n==x)
		{
			while(p>=q)
			*(p+1)=*p--;
			*q=c;
			break;
		}
		q++;
	}
	puts(s);
	return 0;
}

十四、输入两个字符串,找到第二个字符串在第一个字符串中的位置,如没找到输出-1。用指针法实现

#include <stdio.h>
int main()
{
	char ch1[80],ch2[80],*p,*q;
	gets(ch1);gets(ch2);
	p=ch1;
	q=ch2;
	int count=0,flag=1;
	while(*p)
	{
		if(*p==*q)
		{
			while(*p==*q&&*q!='\0')
			{p++;q++;}
			p--;
		}
		
		if(*q=='\0'){flag=0;break;}
		else {p++;count++;q=ch2;}
	}
	if(flag==1)printf("-1");
	else printf("%d个位置",count);
	return 0;
	
}

十五、递归方法将整数n转换成字符串

#include <stdio.h>
int main()
{
	void convert(int n);
	int number;
	scanf("%d",&number);
	if(number<0)
	{
		putchar('-');
		number=-number;
	}
	convert(number);
	printf("\n");
	
}
void convert(int n)
{
	int i;
	if((i=n/10)!=0)
	    convert(i);
    putchar(n%10+'0');
}

版权声明:本文为m0_60500662原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。