小甲鱼C语言系列课程笔记,共61个视频,每6个视频总结一次笔记,预计10篇。
https://www.bilibili.com/video/BV17s411N78s
while
语句和dowhile
语句
while
语句
计算1+2+3+…+100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <stdio.h>
int main() { int i = 1; int sum = 0;
while (i <= 100) { sum = sum + i; i = i + 1; }
printf("1+2+3+...+100 = %d\n", sum); return 0; }
|
统计从键盘输入的一行英文句子的字符个数
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() { int count = 0; printf("Please enter:"); while (getchar() != '\n') { count = count + 1; } printf("结果是%d\n", count); return 0; }
|
dowhile
语句
注意格式,while
后面有分号
for
语句和循环嵌套
1 2
| for (表达式1; 表达式2; 表达式3) 循环体
|
- 表达式1:循环初始化表达式
- 表达式2:循环条件表达式
- 表达式3:循环调整表达式
打印10次 I love fishc.com
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stdio.h>
int main() { int i; for (i = 0; i < 10; i++) { printf("I love fishc.com\n"); } return 0; }
|
判断一个数是否为素数
(小甲鱼)测试从 2
到 num / 2
所有整数是否能被整除,如果没有出现能被整除的整数,则 num
为素数。
(百度)测试从 2
到 sqrt(n)
所有整数是否能被整除,如果没有出现能被整除的整数,则 num
为素数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <stdio.h> #include <math.h>
int main() { int num; _Bool isPrime = 1; printf("Please enter a number(>=2): "); scanf("%d", &num); for (int i = 2; i < (int)sqrt(num) + 1; i++) { if (num % i == 0) { isPrime = 0; } }
if (isPrime) { printf("%d is a prime number.\n", num); } else { printf("%d is not a prime number.\n", num); } return 0; }
|
灵活修改
for语句的表达式可以根据需要省略,但是 ;
必须留下。
C99新标准
允许在for语句表达式1中,定义变量(如上述程序)。
1 2 3 4
| for (int i = 0; i <= 10; i++) 等价于 int i; for (i = 0; i <= 10; i++)
|
循环嵌套
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <stdio.h>
int main() { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("i = %d, j = %d\n", i, j); } }
return 0; }
|
运行结果
打印99乘法表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <stdio.h>
int main() { int i, j; for (j = 1; j <= 9; j++) { for (i = 1; i <= j; i++) { printf("%dx%d=%d\t", i, j, i * j); } printf("\n"); } return 0; }
|
运行结果:
break
语句和continue
语句
break
语句
使用break
语句可以跳出循环,减少运算次数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <stdio.h>
int main() { long long int i, num; _Bool flag = 1;
printf("请输入一个整数:"); scanf("%lld", &num);
for (i = 2; i < num / 2; i++) { if (num % i == 0) { flag = 0; break; } } if (flag) { printf("%lld是一个素数\n", num); } else { printf("%lld不是一个素数\n", num); } printf("i = %lld\n", i); return 0; }
|
break
语句只能跳出它所在的那一层循环,不能跳出外层循环。
continue
语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h>
int main() { int ch; while ((ch = getchar()) != '\n') { if (ch == 'C') { continue; } putchar(ch); } putchar('\n');
return 0; }
|
运行结果
continue
语句只能跳过一次它所在的那一层循环,不能跳过外层循环。
坑
将如下程序改成等价的while
语句形式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main() { int i; for (i = 0; i < 100; i++) { if (i % 2) { continue; } } return 0; }
|
修改后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <stdio.h>
int main() { int i = 0; while (i < 100) { if (i % 2) { continue; } i++; } return 0; }
|
问题出在:while
循环执行完continue
后,不会再执行i++
,而是直接再次循环,因此形成死循环。
拾遗
赋值运算符
赋值运算符的左边必须是lvalue
,变量名就是lvalue
。
复合赋值运算符
赋值 |
简写 |
a = a + 1 |
a += 1 |
a = a - 2 |
a -= 2 |
a = a * 3 |
a *= 3 |
a = a / 4 |
a /= 4 |
a = a % 5 |
a %= 5 |
自增自减运算符
i = i + 1
=> i++
++i
i = i - 1
=> i--
--i
i++
和++i
的区别:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() { int i = 5, j; j = ++i; printf("i = %d, j = %d\n", i, j);
i = 5; j = i++; printf("i = %d, j = %d\n", i, j); return 0; }
|
运行结果: