【c语言】c语言常见编程题总结(三)

/*30.求一个数的二进制序列中1的个数。
#include <stdio.h>
int main()
{
	int a;
	int count=0;
	scanf("%d",&a);
	while(a>0)
	{
		if(a%2==1)
			count++;
		a=a/2;
	}
	printf("count=%d\n",count);
	return 0;
}



//	#include <stdio.h>

//	int main()
//	{
//		int count = 0;
//		int num = 15;
//		int i = 32;
//		while(i)
//		{
//			if(num & 1 == 1)
//			{
//				count++;
//			}
//			//num=num/2;
//			num = num >> 1;
//			i-=1;
//		}
//		printf("count= %d\n",count);
//		return 0;
//	}


//x=x&(x-1)
//	#include <stdio.h>

//	int main()
//	{
//		int count = 0;
//		int num = 0;
//		scanf("%d",&num);
//		//0000 1111
//		//0000 1110
//		//0000 1110---1
//		//0000 1101
//		//0000 1100---2
//		//0000 1011
//		//0000 1000---3
//		//0000 0111
//		//0000 0000---4
//		while(num)
//		{
//			count++;
//			num = num & (num-1);
//		}
//		printf("count = %d\n",count);
//		return 0;
//	}
*/


/*29.对任意一个整型数组排序(选择排序)
//n个记录的文件可经过n-1趟直接选择排序得到有序结果:
// 初始状态:无序区为R[1..n],有序区为空。
// 第一趟排序:
//	   在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第一个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区
//	   和记录个数减少1个的新无序区。
// 第i趟排序:
//	   第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n]。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第一个
//	   记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
#include <stdio.h>
#define N 10
int main()
{	
	void sort(int a[]);
	int a[N];
	int i;
	printf("请输入一个数组:");
	for(i=0;i<N;i++)
	{
		scanf("%d",&a[i]);
	}
	sort(a);
	printf("排序后数组:");
	for(i=0;i<N;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}
void sort(int a[])
{
	int i,j,t,min;
	for(i=0;i<N-1;i++)
	{
		min=i;
		for(j=i+1;j<N;j++)
		{
			if(a[min]>a[j])
			{
				min=j;
			}
		}
		t=a[i];
		a[i]=a[min];
		a[min]=t;
	}
}
*/


/*28.不允许创建临时变量求一个字符串的长度(递归)
#include <stdio.h>
int main()
{
	int my_strlen(char *string);
	char str[20];
	scanf("%s",&str);
	int ret=my_strlen(str);
	printf("%d\n",ret);
	return 0;
}
int my_strlen(char *string)
{
	if(*string=='\0')
		return 0;
	else
		return (my_strlen(string+1)+1);//string+1就是string++
}
*/



/*27.编写一个函数可以求字符串的长度
#include <stdio.h>
int main()
{
	int my_strlen(char *string);
	char str[20];
	scanf("%s",&str);
	int ret=my_strlen(str);
	printf("%d\n",ret);
	return 0;
}
int my_strlen(char *string)
{
	int length=0;
	while(*string++!='\0')
	{
		length++;
	}
	return length;
}
*/

/*26.用非递归的方式求斐波那契数列的第n个数(迭代)
//  迭代:
//	  每一次迭代的结果会作为下一次迭代的初始值;
#include <stdio.h>
int main()
{
	int fun(int n);
	int n;
	printf("请输入n的值:");
	scanf("%d",&n);
	printf("第%d个数是:%d\n",n,fun(n));
	return 0;
}
int fun(int n)
{
	int ret;
	int pre;
	int tmp;
	ret=pre=1;
	while(n>2)
	{
		n--;
		tmp=pre;
		pre=ret;
		ret=pre+tmp;
	}
	return ret;
}
*/

/*25.用递归的方式求斐波那契数列的第n个数
#include <stdio.h>
int main()
{
	int fun(int n);
	int n;
	printf("请输入n的值:");
	scanf("%d",&n);
	printf("第%d个数是:%d\n",n,fun(n));
	return 0;
}
int fun(int n)
{
	if(n==1||n==2)
		return 1;
	if(n>2)
		return (fun(n-1)+fun(n-2));
}
*/



/*24.将多个字符串排序输出
#include <stdio.h>
#include <string.h>
int main()
{
	int i,j;
	char s[10][20],*p[10],*q;
	for(i=0;i<5;i++)
	{
		scanf("%s",&s[i]);
		p[i]=s[i];
	}
	for(i=0;i<4;i++)
	{
		for(j=0;j<4-i;j++)
		{
			if(strcmp(p[j],p[j+1])>0)
			{
				q=p[j];
				p[j]=p[j+1];
				p[j+1]=q;
			}
		}
	}
	for(i=0;i<5;i++)
	{
		printf("%s\n",p[i]);
	}
	return 0;
}
*/



/*23.对任意一个整型数组排序(冒泡排序)
//冒泡排序:
//  比较相邻的元素,如果第一个比第二个大,就交换他们两个;if(a[i]>a[i+1])
//  对每一对元素作同样的工作,从开始第一对到结尾的最后一对。for(i=0;i<N-j;i++)
//  持续每次对越来越少的元素重复上面的步骤。直到没有任何一对数字需要比较。for(j=1;j<N;j++)
#include <stdio.h>
#define N 10
int main()
{	
	void sort(int a[]);
	int a[N];
	int i;
	printf("请输入一个数组:");
	for(i=0;i<N;i++)
	{
		scanf("%d",&a[i]);
	}
	sort(a);
	printf("排序后数组:");
	for(i=0;i<N;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}
void sort(int a[])
{
	int i,j,t;
	for(j=1;j<N;j++)
	{
		for(i=0;i<N-j;i++)
		{
			if(a[i]>a[i+1])
			{
				t=a[i];
				a[i]=a[i+1];
				a[i+1]=t;
			}
		}
	}
}
*/




/*22.将一个整型数组逆序
#include <stdio.h>
#define N 10
int main()
{
	int a[N];
	int i;
	int tmp;
	printf("请输入一个数组:");
	for(i=0;i<N;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<N/2;i++)
	{
		tmp=a[i];
		a[i]=a[N-i-1];
		a[N-i-1]=tmp;
	}
	for(i=0;i<N;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}
*/



/*21.求一个3*3矩阵对角线元素之和
#include <stdio.h>
int main()
{
	int a[3][3];
	int sum1=0;
	int sum2=0;
	int i,j;
	printf("请输入一个3*3矩阵:\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(i=0;i<3;i++)
	{
		sum1=sum1+a[i][i];
	}
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			if((i+j)==2)
			{
				sum2=sum2+a[i][j];
			}
		}
	}
	printf("sum1=%d,sum2=%d\n",sum1,sum2);
	return 0;
}
*/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值