20240312,FOR,break&continue,验证素数,前N项求和,整数分解(智障未完成版)

文章讲述了初学者在编程中遇到的困惑,如for循环的使用、阶乘表达式的错误、break和continue的区别以及素数判断中的逻辑问题。作者通过实例展示了正确和错误的代码,并反思了学习过程中的误解。
摘要由CSDN通过智能技术生成

 摆烂,能学多少是多少把

一,for循环

N!代表了阶乘的意思,但是直接当表达式写进代码会报错;VS还说,factor不是单词,不是,MAIN也是老这么说!哪里有问题

int n;
int fact=1;
scanf_s("%d", &n);

do{
	fact *= n;
	n--;
	printf("n=%d,fact=%d\n", n, fact);
} while (n != 1);

printf("%d", fact);

啊!如果输入1,FACT会因为和0乘了之后一直是0,N一开始就是1,以后永远都不会是1,就会一直循环啊啊啊!

真是让人窒息!看下男神的代码

int n;
int fact=1;
int i = 1;
scanf_s("%d", &n);

do{
	fact *= i;
	i++;
	printf("i=%d,fact=%d\n", i, fact);
} while (i<=n);

printf("%d %d", n,fact);

我是直接拿N-1,剪到最后,男神是用I累加和N比较,这样输入1也是没问题的,但是!!!小艾的值一定会比N大一哦,不然就循环了

for (i = 1//初始条件; i <= n//循环产生的条件; i++//做的动作,!注意这里没有分号,不然会报错)
{
	fact *= i;
	printf("%d,%d\n", i, fact);
}
for (i = 2; i <= n; i++) {
	fact *= i;
	printf("%d,%d\n", i, fact);
}

第一轮X1的循环省略,因为对FACT的结果没有影响,输入1不满足循环条件i(2)<=n(1),不进入循环,输出FACT初始值1,N=1
只有C99可以把int写进括号里哦

for (i = n; i > 1; i--) {
	fact *= i;
	printf("%d %d\n", i, fact);
}

从N乘到1,也是可以1的情况省略

for (n = n; n > 1; n--) {
	fact *= n;
	printf("%d %d\n", n, fact);
}
printf("%d %d", i,fact);

这不就我开始想的!直接拿N乘

for (; n > 1; n--) {
	fact *= n;
	printf("%d %d\n", n, fact);
}
printf("%d %d", i,fact);

可以把n=n省略,但是分号不能省
关于循环的次数:i=1,i>5,i++和i=2,i>=5,i++循环次数是一样的,但是I的值在每次循环里面不一样
FOR循环等价WHILE循环

 有固定次数用for,一定要做一次用while,其他用d0-while

int i = 0;
for (i = 10; i > 1; i /= 2) {
	printf("%d ", i ++);
}

为什么!!!为什么输出10 5 3 2!!!
勉强理解一下就是,一开始的值是I,I>1,运行括号里面的指令,然后再进行I的动作!!!!
先后顺序是先花括号的指令,在小括号的II指令

二,break&continue

2.1 验证素数--break

//素数,只能被1和自己整除;
//好吧挨个除看有没有余数;
int n;
int i;
scanf_s("%d", &n);
for (i = 2; i <n; i++) {
	if (n %i == 0) {
		printf("不是素数");
	}
}
printf("是素数");

救命!改了好几次,输入6会出现两次“不是素数”,如果输入一个素数就没有反应了捏
而且!!!果然!!!如果输入12,会输出不是素数之外,还会把最后一句是素数输出来
 

int isprime = 0;
for (i = 2; i <n; i++) {
	if (n %i == 0) {
		isprime = 0;
		/*printf("不是素数");*/
	}
	else {isprime = 1;}
}

if (isprime == 0) {printf("不是素数");}
else { printf("是素数"); }

这一段真的很离谱啊啊啊,解释一下是,输入9,第一次循环是除2,ispeime=1,第二次循环是除3,isprime=0,但是!!!!!!循环不会停下!!!再转了第三次,除4,isprime就变成1了,一直到i=n-1的时候,最后一次循环,肯定isprime的值是1啊!!!离大普,所以这个时候只有输入1 2,isprime的值没改过,才会输出不是素数,但是,结果是反的是吧,
差不多就是,isprime的值没有意义,呵呵呵

scanf_s("%d", &n);
int isprime = 1;
for (i = 2; i <n; i++) {
	if (n %i == 0) {
		isprime = 0;
	}
}

if (isprime == 1) {
	printf("是素数");
}else { printf("不是素数"); 
}

嗷呜!这个是对的!!但是!!只要没有出现除尽的情况,ISPRIME就不会改变为1,但是我还是小小的高反了后面的输出捏
但是!循环还是一直到I等于N-1的时候循环才结束!

int isprime = 1;
for (i = 2; i <n; i++) {
	if (n %i == 0) {
		isprime = 0;
		break;
	}
}

if (isprime == 1) {
	printf("是素数");
}else { printf("不是素数"); 
}

break登场!直接出循环!!

scanf_s("%d", &n);
int isprime = 1;
for (i = 2; i <n; i++) {
	if (n %i == 0) {
		isprime = 0;
		continue;
	}
	printf("%d\n", i);
}

if (isprime == 1) {
	printf("是素数");
}else { printf("不是素数"); 
}

输入9,输出2 4 5 6 7 8 不是素数,continue是直接跳过剩下的循环里面的语句,进入下一轮循环
输入5,输出2 3 4 ,是素数……没输出的数字就是她的因数?

scanf_s("%d", &n);
for (i = 2; i <n; i++) {
	if (n %i == 0) {
		break;}
}
if (i<n)

如果没有走完循环,那么I就是小于N的,走完了,I=N,真的很想把聪明人的脑子安自己身上试一下什么感觉
这个时候isprime就不需要了
好吧,男神不喜欢这种方法,为什么,呵呵呵,我看起来像知道的样子吗,可能属于,非单一出口???单一出口是什么我都忘了,丢

啊啊试了一下输入负数,0,1,2一开始就没办法进入循环,都会输出是素数

完了,上课了,今天就学了一点点

2.2 前N项求和

int n;
int i;
int sum;
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
	sum = i + 1 / i;//错了!!!
}
printf("%d", sum);

写错了!!!SUM等于之前累加的和再加1/I,难顶

int n;
int i;
double sum=0.0;
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
	sum +=1.0/i;
}
printf("%f", sum);

跟着男神改了!for语句,最后的执行条件,等于,EHILE花括号里面放在最后的条件!刚才又晕了

2.2.1 差和相间

int n;
int i;
double sum=0.0;
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
	if (i % 2 == 0) {
		sum -= 1 / i;
	}
	else {
		sum += 1 / i;
	}
}
printf("%f", sum);

啊啊啊为撒不对,为撒!!!!,为什么看着循环没事但是!算的结果不对!

if (i % 2 == 0) {
	sum -= 1.0/ i;
}
else {
	sum += 1.0/ i;
}

嗷呜!是语句格式的问题!!注意啦!和DOUBLE有关的都写成浮点数

double sum=0.0;
int sine = 1;
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
	sum += sine * 1.0 / i;
	sine = -sine;
}

男神的办法!!!!

double sum=0.0;
double sine = 1.0;
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
	sum += sine * 1 / i;
	sine = -sine;
}
printf("%f", sum);

继续改进!这样循环里面自带浮点数了!

2.3 整数分解

 啊!正序整数分解我只能想到两个循环,第一个循环看有几位数,第二个循环再挨个/,救命!

啊,逆序的我都开始傻了

int n;
int i;
int a;
scanf_s("%d", &n);
int t = n;
printf("%d的各位数是",t);

for (i = 1; n >=10;i++) {
	a = n % 10;
	n /= 10;
	printf("%d ", a);
}

不能边看电视边写!!啊,为什么最后一个数字不输出,哦!最后一个数小于10,不进入循环

int x;
scanf_s("%d", &x);
do {
	int d =x % 10;
	printf("%d ", d);
	x /=10;
} while (x > 0);

printf("\n");

男神代码!

int x;
scanf_s("%d", &x);
do {
	int d =x % 10;
	printf("%d", d);
	if (x >= 10) {
		printf(" ");
	}
	x /=10;
} while (x > 0);

解决最后一个数字输出了空格的问题
男神的正序思路是,先把数字逆序,再输出逆序数字的逆序,让俺自己写一下

int a = 0;
	int x = 0;
	int sum = 0;

	scanf("%d", x);
	do {
		a = x % 10;
		sum = sum * 10 + a;
		x /= 10;
	} while (x > 0);
	printf("%d", sum);

 错的好离谱,为什么!!我要疯了

关机!啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

妈的头痛

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值