2020年的海大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);
}
从键盘输入一个整数,输出距离该数最近的素数。
这道题的想法是先讨论 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语言中的四舍五入: 可加上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);
}
}
斐波那契数列是一定要从 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中每一位上为奇数的数依次取出,并逆序构成一个新数返回
通过取余来提取单个数字,判定奇偶后,通过乘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;
}
这个比较难懂,即让最后一个数放在第一个,再让最后一个数放在第二个,依次迭代
相当于把整个数列 倒推着 又写了一遍
# 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;
}