C语言水平测试题 过关斩将(2)基础好❓你可知道有关 “素数“ 的三连问❓

举报
光之梦 发表于 2023/10/18 20:08:55 2023/10/18
【摘要】 我的目标是:用通俗易懂的口语来为大家带来我自己对C语言基础语法的理解,想让零基础小白也能看懂学会并且能够掌握C语言的基础语法

我的个人主页光之梦的博客_云社区-华为云 (huaweicloud.com)

欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,我会第一时间改正。非常感谢!

初学者推荐用的刷题网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com)

特别标注本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下我的<C语言基础语法>专栏。关注博主,学习不迷路哦

下列是:C语言水平测试题(2)

大家冲鸭!


一、💠输入一个数 判断是否为素数💠

素数:只能被1和自己整除的数,不包括1 2,3,5,7,11,13,17,19.


素数(1)输入一个数,判断是否为素数

代码示例:

#include <stdio.h>

int main()
{
	int x;
	int i; 
	printf("请输入一个数:");
	scanf("%d",&x);
	
	int isPrime = 1;	//x是素数
	for (i =2; i < x; i++){
		if (x % i == 0){
			isPrime = 0;//x不是素数 
			break;
		}
		break;
	}
	if (isPrime == 1) {
		printf("%d是素数\n",x);
	} else {
		printf("%d不是素数\n",x); 
	}
	
	return 0;
}


二、💠如何输出100以内的素数💠

素数(2)如何输出100以内的素数

代码示例:

#include <stdio.h>
// 输出100以内的素数 
int main()
{
	int x;
	// 因为1不是素数,所以从2开始 
	for (x = 2; x<100; x++){
		int i;
		int isPrime = 1;	//x是素数
		for (i =2; i < x; i++){
			if (x % i == 0){
				isPrime = 0;//x不是素数 
				break;
			}
		}
		if (isPrime == 1){
			printf("%d ",x);
		}
	}
	printf("\n");
	
	return 0;
}

运行结果:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97



三、💠如何输出前50个素数💠

素数(3)如何输出前50个素数

 代码示例:

#include <stdio.h>
// 输出前50个素数 
int main()
{
	int x = 2;
	int cnt = 0;
	// 因为1不是素数,所以从2开始 
	while (cnt < 50){
		int i;
		int isPrime = 1;	//x是素数
		for (i =2; i < x; i++){
			if (x % i == 0){
				isPrime = 0;//x不是素数 
				break;
			}
		}
		if (isPrime == 1){
			printf("%d ",x);
			cnt++;
		}
		x++; 
	}
	printf("\n");
	
	return 0;
}

运行结果:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229



四、🔷 凑硬币🔷

如何用 1 角、2 角和 5 角的硬币凑出 10 元以下的金额呢?

 方案1——得到多种结果

代码示例:

#include <stdio.h>

int main()
{
	int x;
	int one,two,five;
	
	// scanf("%d",&x);
	x = 2;
	for (one = 1; one <= x*10; one++) {
		for (two = 1; two <= x*10/2; two++) {
			for (five = 1; five <= x*10/5; five++) {
				if (one + two*2 + five*5 == x*10) {
					printf("可以用%d个1角+%d个2角+%d个5角得到%d元\n",one,two,five,x);
				}
			}
		}
	}
	return 0;
}
运行结果:

可以用1个1角+2个2角+3个5角得到2元
可以用1个1角+7个2角+1个5角得到2元
可以用2个1角+4个2角+2个5角得到2元
可以用3个1角+1个2角+3个5角得到2元
可以用3个1角+6个2角+1个5角得到2元
可以用4个1角+3个2角+2个5角得到2元
可以用5个1角+5个2角+1个5角得到2元
可以用6个1角+2个2角+2个5角得到2元
可以用7个1角+4个2角+1个5角得到2元
可以用8个1角+1个2角+2个5角得到2元
可以用9个1角+3个2角+1个5角得到2元
可以用11个1角+2个2角+1个5角得到2元
可以用13个1角+1个2角+1个5角得到2元


方案2(接力break)——只得到一种结果就结束  

代码示例:

#include <stdio.h>

int main()
{
	int x;
	int one,two,five;
	int exit = 0;
	
	// scanf("%d",&x);
	x = 2;
	for (one = 1; one <= x*10; one++) {
		for (two = 1; two <= x*10/2; two++) {
			for (five = 1; five <= x*10/5; five++) {
				if (one + two*2 + five*5 == x*10) {
					printf("可以用%d个1角+%d个2角+%d个5角得到%d元\n",one,two,five,x);
					exit = 1;
					break;
				}
			}
			if (exit == 1){
				break;
			}
		}
		if (exit == 1){
			break;
		}
	}
	return 0;
}

运行结果 :

可以用1个1角+2个2角+3个5角得到2元


方案3——goto语句  

代码示例:

#include <stdio.h>

int main()
{
	int x;
	int one,two,five;
	
	// scanf("%d",&x);
	x = 2;
	for (one = 1; one <= x*10; one++) {
		for (two = 1; two <= x*10/2; two++) {
			for (five = 1; five <= x*10/5; five++) {
				if (one + two*2 + five*5 == x*10) {
					printf("可以用%d个1角+%d个2角+%d个5角得到%d元\n",one,two,five,x);
                goto out;
				}
			}
		}
	}
out:
	return 0;
}
注:只在多重内循环需要跳转到最外侧的场景下使用goto语句,其他场景都不要去使用goto语句。因为goto语句破坏了程序结构性,难查错



今日小 tip:

if 语句只会在乎0与非0,为0则不执行,不为0则执行

以下代码段的输出是:

int sum = 0;
for ( int i=0; i<10; i++ ) {
    if ( i%2 ) continue;
    sum += i;
}
printf("%d\n", sum); //2+4+6+8   20





各位学习C语言的初学者,如果有问题随时都可以来问我,我会随时为您解答!欢迎大家与我一起学习,互相进步。

我的C语言专栏:C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客

创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。