2021考研复试C上机1

1.二进制数转十进制数程序
# include <stdio.h>

//二进制转十进制c程序
int main()
{

	int bin_to_deci(int a);
	int a = 101111;
	int deci = bin_to_deci(a);
	printf("%d\n",deci);
	return 0;
}

int  bin_to_deci(int a)
{
	int factor = 1;
	int sum = 0,tem = 0;
	while(a>0){
		tem = (a%10)*factor;    //101111 = 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 0*2^4 + 1*2^5
		sum = sum + tem;
		factor = factor*2;
		a = a /10;
	}
	return sum;
}
2.十进制转二进制程序
# include <stdio.h>

int main()
{
	int deci_to_bin(int a);
	int a = 19;
	deci_to_bin(a);
	printf("\n");
	return 0;
}
int deci_to_bin(int a)
{
	int bin = 0;
	int m[20];
	int i = 0,j;
	while(a>0){
		m[i] = a%2;  //除2取余数法
		i++;
		a = a/2;     
	}		
	for(j=i-1;j>=0;j--){  //i需要减去1,因为每次结束后,i都加1,这里多了
		printf("%d",m[j]);
	}
	return bin;
}

3.给你一串数字,实现其排序,然后把排序后重复的数字只留下一个。如(3,5,5,2,1,4,6)—>(1,2,3,4,5,6)。
# include <stdio.h>
//给你一串数字,实现其排序,然后把排序后重复的数字只留下一个。如(3,5,5,2,1,4,6)--->(1,2,3,4,5,6)。
int main()
{
	void bubble(int a[10]);
	void remove_repeat(int *a);
	int i;
	int a[10];
	printf("请输入10个整数(中间用空格隔开):\n");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	bubble(a);  //先排序
	remove_repeat(a);	//去重复
	printf("\n");
	return 0;
}
//交换数据
void swap(int *x,int *y)
{
	int tem = 0;
	tem = *x;
	*x = *y;   //注意交换,传递数值,必须指针,直接传递数值,不行
	*y = tem;
}
//去重
void remove_repeat(int *a)  //传递地址,数组a[]的首个元素地址就是a
{
	int b[10];
	int i ,j = 1;
	b[0] = a[0];
	for(i=1;i<10;i++){
		if(a[i] != a[i-1]){	
			b[j] = a[i];
			j++;
		}
	}
	for(i=0;i<j;i++){
		printf("%d ",b[i]);
	}
	printf("\n");
}
//排序
void bubble(int a[10])   //冒泡排序算法
{
	void swap(int *x,int *y);
	int i ,j ;
	for(i= 0;i<10;i++){
		for(j= 0;j<10-i-1;j++){
			if(a[j]>a[j+1])
				swap(&a[j],&a[j+1]);
		}
	}

	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
}
4.求出一年中的第n天是几月几号并输出
# include <stdio.h>

//求出一年中的第n天是几月几号并输出 
int main()
{
	
	void date_fun(int year,int n);
	int year = 0, n = 0;
	printf("请输入年份和天数,中间用空格隔开:");
	scanf("%d%d",&year,&n);
	date_fun(year,n);
	return 0;
}

void date_fun(int year,int n)
{
	int arr1[] = {31,28,31,30,31,30,31,31,30,31,30,31};
	int arr2[] = {31,29,31,30,31,30,31,31,30,31,30,31};
	int i=0;
	int count = n;
	//闰年2月29天,其余2月28天
	if(year%4==0&&year%100!=0||year%400==0){
		for(i;i<12;i++){
			if(n>arr2[i]){   
				n = n-arr2[i]; //减去每个月的天数,求过了几个月
			}else
				break;	
		}
	}else{
		for(i;i<12;i++){
			if(n>arr1[i]){
				n = n-arr1[i];
			}else
				break;	
		}
	}
	if((i+1)>12){
		printf("输入天数超过一年的总天数,请重新输入:\n");
	}else{
		printf("%d年中的第%d天是%d月%d日\n",year,count,i+1,n);
	}
}
5.递归函数调用,求n的阶乘
# include <stdio.h>

//递归函数调用
int main()
{
	int recursion_fun(int n);
	int n = 0,res=0;
	scanf("%d",&n);

	res = recursion_fun(n);
	printf("%d\n",res);
	return 0;
}

int recursion_fun(int n)
{	
	if(n==0)
		return 0;
	if(n==1)
		return 1;		//递归终止条件

	return	n * recursion_fun(n-1); //递归调用
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janson666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值