我是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)来计算最大公约数。该算法基于一个事实:两个整数的最大公约数与其中较小的那个数和两数相除的余数的最大公约数相同。
- 如果
b
等于0,那么a
就是最大公约数(因为任何数和0的最大公约数就是该数本身)。- 如果
b
不等于0,那么递归调用gcd
函数,传入b
和a
除以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},