今天主要做了几个C语言练习,下面将我所写代码分享给大家
1. 九九乘法表
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
// 打印九九乘法表
int main()
{
int x = 0, y = 0;
for (x = 1; x <= 9; x++) // 外层循环控制行数(1-9)
{
for (y = 1; y <= 9; y++) // 内层循环控制列数(1-9)
{
printf("%d*%d=%-2d ", x, y, x * y); // %-2d保证对齐
}
printf("\n"); // 每行结束后换行
}
return 0;
}
2. 分数序列求和
// 计算1/1-1/2+1/3-1/4...+1/99-1/100的值
int main()
{
int a = 0;
int b = 0;
double ja = 0, jb = 0; // ja存储奇数项和,jb存储偶数项和
double sum = 0;
// 计算奇数项和
for (a = 1.; a <= 100; a++)
{
if (a % 2 == 1) // 判断是否为奇数
{
ja = ja + (1.0/a); // 累加奇数项
}
}
// 计算偶数项和
for (b = 1.; b <= 100; b++)
{
if (b % 2 == 0) // 判断是否为偶数
{
jb = jb + (1.0/b); // 累加偶数项
}
}
sum = ja - jb; // 奇数项和减去偶数项和
printf("%lf", sum); // 输出结果
}
3.0~100数字9统计
// 统计1-100中数字9出现的次数
int main()
{
int num = 0;
int a = 0, b = 0; // a存储个位,b存储十位
int count = 0; // 计数器
for (num = 1; num <= 100; num++)
{
a = num % 10; // 获取个位数
if (a == 9) // 个位是否为9
{
count++;
}
b = num / 10; // 获取十位数
if (b == 9) // 十位是否为9
{
count++;
}
}
printf("%d\n", count); // 输出总数
return 0;
}
4. 1000~2000年闰年打印
// 打印1000-2000年之间的闰年
int main()
{
int year = 0;
for (year = 1000; year <= 2000; year++)
{
// 闰年条件:能被4整除但不能被100整除,或能被400整除
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
printf("%d ", year); // 输出闰年
}
}
5. 最大公约数(辗转相除法)
#include <stdio.h>
// 计算最大公约数的函数(辗转相除法)
int gcd(int a, int b) {
while (b != 0) { // 当余数不为0时循环
int temp = b; // 临时保存除数
b = a % b; // 计算余数
a = temp; // 更新被除数为原除数
}
return a; // 当余数为0时,a就是最大公约数
}
// 用户交互版本
int main() {
int num1, num2;
printf("输入两个正整数: ");
scanf("%d %d", &num1, &num2);
printf("最大公约数是: %d\n", gcd(num1, num2));
return 0;
}
// 固定值演示版本
int main()
{
int a = 18;
int b = 24;
int c = 0;
while (c = a % b) // 当余数不为0时循环
{
a = b; // 更新被除数为原除数
b = c; // 更新除数为余数
}
printf("%d\n", b); // 输出最大公约数
return 0;
}
6. switch语句
// switch语句的贯穿现象演示
int main() {
int x = 3;
int y = 3;
switch (x % 2) { // 3%2=1,进入case 1
case 1:
switch (y) // 嵌套switch
{
case 0:
printf("first");
case 1:
printf("second");
break; // 只跳出内层switch
default:
printf("hello");
}
// 注意:这里没有break,会继续执行case 2
case 2:
printf("third"); // 由于case 1没有break,会执行到这里
}
return 0;
}
最大公约数即两个数据中公共约数的最大者。求解方式有多种:
暴力穷举法
辗转相除法(欧几里得算法)
更相减损法
Stein算法
我所使用的是辗转相除法:
方法
以18和24为例:
- 第一次:a = 18, b = 24, c = a % b = 18 % 24 = 18
- 循环中:a = 24, b = 18
- 第二次:a = 24, b = 18, c = a % b = 24 % 18 = 6
- 循环中:a = 18, b = 6
- 第三次:a = 18, b = 6, c = a % b = 18 % 6 = 0
- 循环结束
此时b中的内容即为两个数的最大公约数。