本次为大家罗列了一些c语言一些最基础的编程题,也是学习c语言基础部分所必须.
#include<stdio.h>
int main() {
int a = 24;
int b = 18;
int c = a % b;
while (c != 0) {//这里推荐辗转相除法
a = b;//把除数赋值给被除数
b = c;//把余数赋值给除数
c = a % b;
}
printf("%d\n", b);//此时结果为6
return 0;
}
代码讲解: 比如求24和18的最大公约数,我们可以使用辗转相除法来求,假设a,b,c三个变量,把被除数24赋值给a,把除数18赋值给b,相除的余数a%b赋值给c,经过一轮相除,我们可以知道余数为6,此时我们把b的值赋值给a,再把c赋值给b,在进行一轮相除,此时余数为0,我们再把b的值赋值给a,c的值赋值给b,而c等于0,此时b的值为两数的最大公约数,其本质就是让除数和余数辗转相除,直到余数为0,此时除数就是最大公约数.
打印100~200之间的素数 素数的定义:只能被1和他本身的整除的数
#include<stdio.h>
#include<math.h>
int main() {
for (int i = 101; i < 200; i+=2) {//偶数一定不是素数
int flag = 1;//假设是素数
for (int j = 2; j <= sqrt(i); j++) {//sqrt()为开平方
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
printf("%d ", i);
}
}
return 0;
}
代码讲解: 我们可以使用嵌套循环,第一个循环来遍历100-200之间所有的整数,第二个循环来判断这个数是否为素数,可以遍历2到这个数本身的数中间能否被整除,如果可以就一定不是素数,此时我们可以直接跳出循环,判断下一个数字,如果第二层循环到它本身都没有被整除,则次数为素数. 代码优化:1.我们知道一个数有两因子,一定有一个大于它的开平方,有一个小于它的开平方,所以我们只需遍历到开平方即可,因为如果在它的开平方之前没有被整除,则之后就一定不能被整除.2.偶数一定不是素数,我们可以直接跳过
打印1000年到2000年之间的闰年
int main() {
int count = 0;
for (int i = 1000; i <= 2000; i++) {
int j = i;
if (j % 400 == 0) {//被400整除
printf("%d ", j);
count++;
}
if (j % 4 == 0 && j % 100 != 0) {//被4整除但不能被100整除
printf("%d ", j);
count++;
}
}
printf("\n闰年有%d个\n",count);
return 0;
}
代码讲解: 我们只需遍历1000到2000之间的数字,判断是否为闰年
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d * %d = %2d", j, i, i * j);
}
printf("\n");
}
return 0;
}
void play() {
int r = rand() % 100 + 1;
int num = 0;
while(1){
printf("请输入数字\n");
scanf("%d", &num);
if (num > r) {
printf("猜大了\n");
}
else if (num < r) {
printf("猜小了\n");
}
else {
printf("恭喜您猜中了\n");
break;
}
}
}
int main() {
int input = 0;
srand((unsigned int)time(NULL));
do {
printf("***************\n");
printf("****1.play*****\n");
printf("****0.exit*****\n");
printf("***************\n");
scanf("%d", &input);
switch (input) {
case 1:printf("开始游戏\n");
play();
break;
case 0:printf("结束游戏\n");
break;
default:printf("输入错误,请从新输入");
break;
}
} while (input);
return 0;
}
"*"的含义
限定最小宽度和小数位数这俩个限定值时,可以用"*"代替.
例如:
#include<stdio.h>
int main()
{
printf("%*.*f\n",6,2,0.5);
return 0;
return 0;
}
//等价于printf("%6.2f\n",0.5);
"*"的含义
scanf()提供了一个赋值忽略符*,只要把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后直接被丢弃.
例如:
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d", &year, &month, &day);
printf("%d-%d-%d", year, month, day);
return 0;
}
本段代码中输入的字符数据将不会被读取 输入:2024/3/23 输出:2024-3-23
上面实例中,%*c就是在占位符的百分号后面,加入了赋值忽略符,这个占位符没有对应的变量,解读后不必返回.
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有