小甲鱼C语言系列课程笔记,共61个视频,每6个视频总结一次笔记,预计10篇。
https://www.bilibili.com/video/BV17s411N78s
while语句和dowhile语句
while语句
计算1+2+3+…+100
| 12
 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;
 }
 
 | 
统计从键盘输入的一行英文句子的字符个数
| 12
 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语句和循环嵌套
| 12
 
 | for (表达式1; 表达式2; 表达式3)循环体
 
 | 
- 表达式1:循环初始化表达式
- 表达式2:循环条件表达式
- 表达式3:循环调整表达式
打印10次 I love fishc.com
| 12
 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 为素数。
| 12
 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中,定义变量(如上述程序)。
| 12
 3
 4
 
 | for (int i = 0; i <= 10; i++)等价于
 int i;
 for (i = 0; i <= 10; i++)
 
 | 
循环嵌套
| 12
 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乘法表
| 12
 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语句可以跳出循环,减少运算次数。
| 12
 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语句
| 12
 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语句形式
| 12
 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;
 }
 
 | 
修改后:
| 12
 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的区别:
| 12
 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;
 }
 
 | 
运行结果:
