写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。
1. 求最大公约数
(1)枚举法:确定较大数与较小数,然后用循环一个个试即可。
cpp
int num1 = 0;
int num2 = 0;
int num = 0;
printf("请输入你的正整数:");
scanf("%d %d",&num1,&num2);
for (int i = 1;i<=num1;i++) {
if (num1 % i == 0) {
if (num2 % i == 0) {
num = i;
}
}
}
printf("输出最大公约数为:%d", num);
(2)辗转相除法:

cpp
int num1 = 0;
int num2 = 0;
int num = 0;
printf("请输入你的正整数:");
scanf("%d %d",&num1,&num2);
while (num2 > 0) {
num = num1 % num2;
num1 = num2;
num2 = num;
}
printf("输出最大公约数为:%d", num1);
2. 求给定条件的整数集

cpp
int num1 = 0;
printf("请输入你的正整数:");
scanf("%d",&num1);
for (int i = num1;i <= num1 + 3;i++) {
for (int j = num1;j <= num1 + 3;j++) {
if (j==i) { continue; }
for (int x = num1;x <= num1 + 3;x++) {
if (x==i || x==j) {continue;}
else {printf("%d ",i*100+j*10+x);}
}
}
printf("\n");
}
注意:多个条件只要有一个成立即成立时(或运算),用||连接。
注意:多个条件所有成立才成立时(和运算),用&&连接。
3. 水仙花数

cpp
int num = 0;
int result1 = 0;
int result2 = 0;
int sing = 0; //数字的最后一位
int a = 0; //用于将pow结果转换为int类型
int b = 0; //用于替代外层循环i在内层循环里的使用
printf("输入你的正整数:");
scanf("%d",&num);
for (int i = pow(10, num - 1);i < pow(10, num);i++) {
result1 = i;
b = i;
for (int j = 1;j <= num;j++) {
sing = b % 10;
b = b / 10;
a = pow(sing, num);
result2 = result2 + a;
}
if (result1 == result2) { printf("%d\n",result1); }
result2 = 0;
}
注意:最好不要将外层循环的循环变量直接在内层循环改变!
4. 输出九九乘法表

cpp
int num = 0;
int result = 0;
printf("输入你的正整数:");
scanf("%d",&num);
for (int i = 1;i <= num;i++) {
for (int j = 1;j < i;j++) {
result = i * j;
if (result / 10 == 0) {printf("%d*%d=%d ", j, i, result);}
else {printf("%d*%d=%d ", j, i, result);}
}
result = i * i;
if (result / 10 == 0) {printf("%d*%d=%d\n",i,i,result);}
else {printf("%d*%d=%d\n", i, i, result);}
}
5. 统计素数

cpp
int num1 = 0;
int num2 = 0;
int count = 0;
int sum = 0;
int flag = 1;
printf("输入你的正整数区间:");
scanf("%d %d",&num1,&num2);
for (int i = num1;i <= num2;i++) {
for (int j = 2;j < i;j++) {
if (i % j == 0) {flag = 0;break;}
}
if (flag == 1) {count++;sum = sum + i;}
flag = 1;
}
if (num1 == 1) { count--;sum--; }//剔除num1=1的情况。
printf("%d %d",count,sum);
注意:如果区间开端是1,需要剔除。
6. 猜数游戏


思考:第n次猜对了,则输出good guess。第n次如果猜错了,输出game over。
cpp
int num = 0;int val = 0;int num1 = 0;int count = 1;int flag = 0;
printf("输入要猜的数和次数:");
scanf("%d %d",&num,&val);
printf("开始你的猜测吧!\n");
scanf("%d",&num1);
while (count < val) {
if (num1 > 0) {
if (num1 > num) { count++;printf("大了\n");scanf("%d", &num1); }
if (num1 < num) { count++;printf("小了\n");scanf("%d", &num1); }
if (num1 == num) { flag = 1;break; }
}
else { break; }
}
if (flag == 1) {
if (count == 1) { printf("一次就中,Bingo!"); }
else if (count <= 3) { printf("三次以内,幸运!"); }
else { printf("猜对了。"); }
}
else { printf("游戏结束。"); }
7. 求序列前N项和

cpp
int num = 0;double son = 2;double mon = 1;int val = 0;double sum = 0;
printf("输入你的正整数:");
scanf("%d",&num);
for (int i = 1;i <= num;i++) {
sum = sum + son / mon;
val = son;
son = son + mon;
mon = val;
}
printf("%.2f",sum);
注意:保留两位小数的写法是%.2f。
注意:分子和分母用的是double类型。因为计算机内存关系,Int类型数字大到一定程度时,会变为负数。
8. 约分最简分式

cpp
int son = 0;int mon = 0;int max = 0;int min = 0;int num = 0;
printf("输入你的分数:");
scanf("%d/%d",&son,&mon);
if (son < mon) { max = mon;min = son; }
if (son > mon) { max = son;min = mon; }
if (son == mon) { max = mon;min = son; }
while (max > 0) {
num = min % max;
min = max;
max = num;
}
printf("最简分式:%d/%d",son/min,mon/min);
思考:利用了辗转相除法求最大公约数。