CTGU—第4章循环结构进阶

本文介绍了8个C语言编程练习题目,涉及整数的整除判断、数字相乘、公式计算、组合求解、素数和完数查找以及数字和的计数,展示了基础算法在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:求同时被7或11整除的整数

任务:从键盘输入M,求[1,M]范围内能被7或11整除,但不能同时被7和11整除的整数。按每行8个数,每个数占5个字符且以左对齐的格式进行输出。

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/
    int M;
    int i;
    int count=0;
    scanf("%d",&M);

    for(i=1;i<=M;i++)
    {
        if((i%7==0 || i%11==0) && i%77!=0)
        {
            printf("%-5d",i);
            count++;
            if(count==8)
            {
                printf("\n");
                count=0;
            }
        }

    }
    /*********End**********/ 
    return 0;
} 

第2关:求各位数字之积

任务:从键盘任意输入一个正整数,计算其各位数字之积,注意正整数的位数不定。

例如:

输入:2583 经过—-(2583) 输出:240

输入:102 经过—-(102) 输出:0

输入:136 经过—-(13*6) 输出:18

 #include<stdio.h>
int main(void)
{  
    /*********Begin*********/
   
    int n;
    int product=1;
    scanf("%d",&n);

    while(n)
    {
        product=product*(n%10);
        n=n/10;
    }

    printf("%d",product);
    /*********End**********/ 
    return 0;
}

第3关:公式计算

任务:输入一个整数n,根据以下公式计算并输出s。公式为:

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/
    int i,j;
    double s=0.0;
    int n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        int sum=0;
        for(j=1;j<=i;j++)
        {
          sum=sum+j;  
        }
        s=s+1.0/sum;
    }
    printf("s=%lf",s);

    /*********End**********/ 
    return 0;
}

第4关:求出满足条件的所有组合

任务:已知abc+cba=1333,其中a、b、c均为一位数,编程求出满足条件的a、b、c的所有组合。

#include <stdio.h>
int main(void)
{
  /*********Begin*********/
  int a, b, c;
  for (a = 1; a <= 9; a++)
  {
    for (b = 1; b <= 9; b++)
    {
      for (c = 1; c <= 9; c++)
      {
        if (((a * 100 + b * 10 + c) + (c * 100 + b * 10 + a)) == 1333)
          printf("a=%d,b=%d,c=%d\n", a, b, c);
      }
    }
  }
  /*********End**********/
  return 0;
}

第5关:求素数之和

任务:从键盘输入m和n,计算m~n之间所有的素数之和。

#include <stdio.h>
int main(void)
{
  /*********Begin*********/
  int m, n;
  int i, j, sum = 0;
  int isprime;
  scanf("%d %d", &m, &n);
  for (i = m; i <= n; i++)
  {
    isprime = 1; // 假设是素数
    if (i <= 1)
    {
      isprime = 0; // 不是素数
    }
    for (j = 2; j < i; j++)
    {
      if (i % j == 0) // 如果i能被j整除,表明不是素数
      {
        isprime = 0;
        break;
      }
    }
    if (isprime)
    {
      sum = sum + i;
    }
  }
  printf("%d", sum);
  /*********End**********/
  return 0;
}

第6关:寻找完数

任务:输入一个正整数n,找出1-n之间的所有完数。一个正整数如果恰好等于它的所有因子之和,则这个数被称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此,6是“完数”。

#include <stdio.h>
int main(void)
{
  /*********Begin*********/
  int n, i, j;
  scanf("%d", &n);

  for (i = 1; i <= n; i++)
  {
    int sum = 0;
    for (j = 1; j < i; j++)
    {
      if (i % j == 0)
      {
        sum += j;
      }
    }
    if (sum == i)
    {
      printf("%d\n", i); // 每个完数输出后换行
    }
  }
  /*********End**********/
  return 0;
}

第7关:求被整除的整数个数

任务:从键盘输入N,统计[1,N]范围内各位数字之和能被15整除的整数个数。 例如:78的各位数字之和是:7+8=15,则78是一个各位数字之和能被15整除的整数。

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/

    int N,count=0;
    scanf("%d",&N);

    for(int i=1;i<=N;i++)
    {
        int sum=0,num=i;
        while(num>0)
        {
            sum=sum+num%10;
            num=num/10;
        }
        if(sum==15)
        count++;
    }
    printf("%d\n",count);
    /*********End**********/ 
    return 0;
}

第8关:有多少种不同的解

任务:学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元。输入学生总人数,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?

#include<stdio.h>
int main(void)
{  
    /*********Begin*********/
    int x,y,z;
    int count;
    int sum=0;

    scanf("%d",&count);

    for(x=1;x<count;x++)
    {
        for(y=1;y<count;y++)
        {
            z=count-x-y;
            if((z>=1) && 3*x+2*y+z==50)
            {
                printf("大学生是%d,中学生是%d,小学生是%d\n",x,y,z);
                sum=sum+1;
            }
        }
    }
    printf("%d",sum);
    /*********End**********/ 
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值