湖北专升本C语言编程题总结(1)

我是2024年专升本考生,本人自己在学习中总结的,不一定完全正确,仅作为个人学习记录,所有编程题无固定解法,可能有更好的方法,思维多变,仅供参考,如有错误,欢迎指出。

1、输出100以内所有的质数(素数),每行输出5个质数
  • 题目来自武汉纺织大学_2013-2014 2 C语言程序设计试卷
// Created by zjc on 2024/3/7 22:01

//4.输出100以内所有的质数,每行输出5个质数,(10分)

// 质数(素数)就是只能被1和其本身整除,1不是质数,例如:2,3,5,7,11,13
#include<stdio.h>

int main() {
   

    int i, j, count = 0;  //定义两个变量i,j作为循环,一个作为被取模数,一个为模数
    for (i = 2; i < 100; i++) {
    //在2到100之间找质数
        for (j = 2; j < i; j++) {
   
            if (i % j == 0) {
      //试除法,能不能被j整除,从2开始找,直到等于x
                break; // 跳出内层循环
            }
        }
        if (i == j)   //找到和j相等也没有被整除的,证明是质数
        {
   
            printf("%d ", i);
            count++; // count用于计数
            if (count % 5 == 0) {
      // 用于五行后进行换行
                printf("\n");
            }
        }
    }
    return 0;
}
2、定义一个函数,求两个正整数×和 y的最大公约数,在主函数中输入这两个数后调用该函数
  • 题目来自武汉纺织大学_2013-2014 2 C语言程序设计试卷
  • 传统方法
// Created by zjc on 2024/3/7 16:38
#include<stdio.h>
//2.定义一个函数,求两个正整数×和 y的最大公约数,在主函数中输入这两个数后调用该函数。(10分)
int fun(int x,int y){
   
    int i,m;
    for (i = 1; i <= (x < y ? x : y); i++) {
   
        if ( x%i == 0 && y%i == 0) {
   
            m=i;
        }
    }
    return m;
}
int main() {
   
    int a, b, i, max=0, result = 0;
    // 18 24
    scanf("%d %d", &a, &b);
    result=fun(a,b);
    printf("%d", result);
    return 0;
}
  • 改进方法-递归:(欧几里得算法-求最小公约数)

这个函数使用欧几里得算法(Euclideanalgorithm)来计算最大公约数。该算法基于一个事实:两个整数的最大公约数与其中较小的那个数和两数相除的余数的最大公约数相同。

  1. 如果 b 等于0,那么 a 就是最大公约数(因为任何数和0的最大公约数就是该数本身)。
  2. 如果 b 不等于0,那么递归调用 gcd 函数,传入 ba 除以 b 的余数作为参数。

这个递归过程会持续进行,直到 b 变为0,此时递归终止,并返回 a 作为最大公约数。
在这里插入图片描述

  • 余数为0时,最后一次运算中的除数12就是 36和24的最大公约数。
    在这里插入图片描述
// Created by zjc on 2024/3/13 17:22
// 如果 b 等于0,那么 a 就是最大公约数(因为任何数和0的最大公约数就是该数本身)。
// 如果 b 不等于0,那么递归调用 gcd 函数,传入 b 和 a 除以 b 的余数作为参数。
int gcd(int a, int b) {
   
    if (b == 0) {
   
        return a;
    }
    return gcd(b, a % b);
}

// 求最小公倍数
// 
int lcm(int a, int b) {
   
    return (a * b) / gcd(a, b);
}

int main() {
   
    int num1, num2, result1,result2;
    scanf("%d %d", &num1, &num2);
    result1 = gcd(num1, num2);
    result2 = lcm(num1, num2);
    printf("%d和%d的最大公约数为:%d,最小公倍数为:%d\n", num1, num2, result1,result2);
    return 0;
}
3、求3行5列二维数组中的最小值,及最小值的行号和列号,并输出
  • 题目来自武汉纺织大学_2013-2014 2 C语言程序设计试卷
// Created by zjc on 2024/3/7 21:27

//3.求3行5列二维数组中的最小值,及最小值的行号和列号,并输出。(10分)
#include<stdio.h>

int main() {
   
    char str[3][5] = {
   {
   1, 3, 4, 5, 8},
【程序1】 题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i,j,k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数 1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一颗星星辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值