给学妹写C程——中国海洋大学C语言程序设计课作业(一)

2020年的海大C程序设计,自己做了一份答案

一 最值求解与数据统计

键盘输入一组学生成绩,输入以-1作为输入的结束。统计这批数据的个数,输出有效数据的个数,最大值,最小值,平均值 

给学妹写C程——中国海洋大学C语言程序设计课作业(一)_第1张图片 

# include

int main()
{
	int num = 0, max, min, score;
	float avg, sum = 0;
	while(true)
	{
		scanf("%d" , &score);   // 输入数字
		if(score == -1)  // -1退出
			break;

		num ++ ;   // 统计个数
		if (num == 1)   // 把输入的第一个数作为最大最小值的初始值
		{
			max = score;
			min = score;
		}
		else   // 如果不是第一个数字,进行比较更新最大最小值
		{
			if(score > max)
				max = score;
			if(score < min)
				min = score;
		}
		sum += score;
	} 

	avg = sum / num;
	printf("num=%d,max=%d,min=%d,avg=%0.2f", num, max, min, avg);

}

 

二  寻找素数

从键盘输入一个整数,输出距离该数最近的素数。

给学妹写C程——中国海洋大学C语言程序设计课作业(一)_第2张图片

这道题的想法是先讨论 2 和小于2 的特殊情况,因为2左边所有数字的结果都是2

接着使用循环,分别向左右移动,判断 

#include 
/* 判断是否是素数 */
static int is_prime(int num)
{
     int i;
     for (i = 2; i < num; i++) {
         if (num % i == 0)
             return 0;
     }
     return 1;
}
 
int main()
{
    int num = 0;
    printf("Input num:");
    scanf("%d",&num);

    if(num < 2)
    {
    	printf("2");
    	return 0;
    }
    if(num == 2)
    {
    	printf("3");
    	return 0;
    }
 
    int prev = num - 1;
    int next = num + 1;
 
    while (!is_prime(prev)) {
        prev--;
        if(prev < 2)
        {
        	prev = 2;
        	break ;
        }
    }
 
    while (!is_prime(next)) {
        next++;
    }
     
    if (num - prev < next - num) {
            printf("%d", prev);
    } else if (num - prev > next - num) {
            printf("%d", next);
    } else {
          printf("%d,%d", prev, next);
    }
 
    return 0;
}

 

三 最佳方案选择

某品牌巧克力使用500克原料可制作55小块巧克力,请编程实现:输入原料重量,计算出制作的巧克力块数。然后对小颗粒进行分包,问个分装多少大盒多少小盒剩余巧克力块数最少

给学妹写C程——中国海洋大学C语言程序设计课作业(一)_第3张图片

C语言中的四舍五入: 可加上0.5再取 Int

先求出总块数,再对所有包装情况进行遍历:

即0个小盒、1个小盒、2个小盒。。。。。对每一个小盒求出其大盒数量。再求出其剩余量,并跟之前的最小量做对比

使用数组储存结果

# include

int main()
{
	const int little = 11;   // 小盒容量
	const int big = 24;   // 大盒容量
	int a[10000], b[10000];   // 两个数组,用来储存结果
	float material;   
	scanf("%f", &material);
	float num2 = material/(0.5/55) + 0.5;
	int num = (int)num2 ;   // 四舍五入求数量

	int max_num_little, remain=num;
	max_num_little = num / little;    // 最多用到的小盒数
	int plans = 0;

	// 小盒从0开始,看用多少个大盒,即遍历所有的情况
	int i;
	for(i = 0; i <= max_num_little; i++)   
	{
		int the_remain = num - i*little;   // 用了i个小盒,还剩多少产品
		int j = the_remain / big;   // 用的大盒数j
		if(remain > (the_remain - j*big))   // 如果剩的少
		{
			remain = the_remain - j*big;
			plans = 0;   // 数组已存放结果个数
			a[plans] = i;   // 把结果放进数组
			b[plans] = j;
		}

		else if(remain == (the_remain - j*big))
		{
			plans ++;
			a[plans] = i;
			b[plans] = j;
		}
	}

	printf("%d\n", num);
	int k;
	for(k = 0; k <= plans; k++)
	{
		printf("%d  %d  %d \n", a[k], b[k], remain);
	}

}

 四 输出[m, n]范围内所有斐波那契数列(fibonacci)

给学妹写C程——中国海洋大学C语言程序设计课作业(一)_第4张图片

斐波那契数列是一定要从 1   1  2 开始的,所以无论什么范围,都要从头开始求 

# include

int main()
{
	int min, max;
	scanf("%d %d", &min, &max);
	// t是斐波那契数,第一个设为1,n1 n2分别为t前两个数,即n1+n2=t
	int n1 = 1, n2 = 1, t = 1;   
	while(true)
	{
		if(t > max)   // 超出范围
			break;
		if(t >= min)   // 符合输出
			printf("%d ", t);
		t = n1 + n2;   // 构造新的斐波那契数,n1 n2 向左移
		n1 = n2;
		n2 = t;
	}
	return 0;
}

 

五 拆数

编写函数,功能是:将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回

给学妹写C程——中国海洋大学C语言程序设计课作业(一)_第5张图片

通过取余来提取单个数字,判定奇偶后,通过乘10来累加 

# include

long fun(long int x)
{
	int ans = 0;
	while(true)
	{
		int n = x % 10;
		x = x / 10;
		if(n % 2 == 1)
			ans = 10*ans + n;
		if(x == 0)
			return ans;
	}
}

int main()
{
	long a, b;
	scanf("%ld", &a);
	b = fun(a);
	printf("b=%ld\n", b);
	return 0;
}

 

六 数字逆序输出的两种方式

方式一 收尾交换

如 8 6 9 2 5

让8和5  6和2交换

#include 
int main()
{
	int a[5]={8,6,9,2,5};
	int i,temp;
	for(i=0;i<5/2;i++)
	{
		temp=a[i];
		a[i]=a[5-i-1];
		a[5-i-1]=temp;
	}
	for(i=0;i<5;i++)
	printf("%4d",a[i]);
	return 0;
}

方式二 

这个比较难懂,即让最后一个数放在第一个,再让最后一个数放在第二个,依次迭代

相当于把整个数列 倒推着 又写了一遍

给学妹写C程——中国海洋大学C语言程序设计课作业(一)_第6张图片

# include

int main()
{
	int a[7] = {8, 6, 9, 2, 5, 1, 3};
	int n = 7;
	int i, j, temp;
	for(i = 0; i < n-1 ; i++)
	{
		temp = a[n-1];
		for(j = n-2; j >= i; j--)
		{
			a[j+1] = a[j];
		}
		a[i] = temp;
	}
	for(i = 0; i < n; i++)
		printf("%d ", a[i]);
	return 0;
}

 

你可能感兴趣的:(C++,基础,C++,算法题(基础))