C语言是一门结构化的程序设计语言
程序结构:
1.顺序结构
2.选择结构
3.循环结构
分支语句 if switch 循环语句 while for do while goto语句
什么是语句? C语言中由一个分号 ; 隔开的就是一条语句。 比如:
1 2 3 4 5 6 7 8 9 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { printf ("hehe" ); 1 +2 ; ; }
if语句 语法结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if (表达式) 语句; if (表达式) 语句1 ; else 语句2 ;if (表达式1 ) 语句1 ; else if (表达式2 ) 语句2 ; else 语句3 ;
if代码例:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int age = 10 ; if (age <18 ) printf ("未成年\n" ); return 0 ; }int main () { int age = 18 ; if (age <18 ) printf ("未成年\n" ); else printf ("祝贺成年\n" ); return 0 ; }int main () { int age = 18 ; if (age <18 ) printf ("未成年\n" ); else if (age>=18 && age<30 ) printf ("青年\n" ); else if (age>=30 && age<50 ) printf ("中年\n" ); return 0 ; }int main () { int age = 18 ; if (age <18 ){ printf ("未成年\n" ); printf ("游戏时间受限\n" ); } else { if (age>=18 && age<30 ) printf ("青年\n" ); else if (age>=30 && age<50 ) printf ("中年\n" ); else if (age>=50 && age<70 ) printf ("老年\n" ); } }
如果表达式的结果为真,则语句执行。
在C语言中如何表示真假? 0表示假,非0表示真。
悬空else 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 int main () { int a = 0 ; int b = 2 ; if (a == 1 ) if (b == 2 ) printf ("加油\n" ); else printf ("努力\n" ); return 0 ; }int main () { int a = 0 ; int b = 2 ; if (a == 1 ) if (b == 2 ) printf ("加油\n" ); else printf ("努力\n" ); return 0 ; }
编译结果:
例1和例2都不能输出任何结果,例1和例2代码除了缩进本质一致,不能输出结果原因是:else有就近原则
,例1和例2if
条件都为假,不能进入循环,因此不能输出
改正:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 int main () { int a = 0 ; int b = 2 ; if (a == 1 ) { if (b == 2 ) { printf ("hehe\n" ); } } else { printf ("haha\n" ); } return 0 ; }
if书写形式的对比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 if (condition) { return x; }return y;if (condition) { return x; } else { return y; }int num = 1 ;if (num == 5 ) { printf ("hehe\n" ); }int num = 1 ;if (5 == num) { printf ("hehe\n" ); }
结论:
代码2和代码4更好,逻辑更加清晰,不容易出错。
练习:
1.判断一个数是否为奇数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int x; printf ("请输入一个整数\n" ); scanf ("%d" ,&x); if (x % 2 == 0 ) { printf ("您输入的是偶数\n" ); } else { printf ("您输入的是奇数\n" ); } }
2.输出1-100之间的奇数
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 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i; for (i=1 ;i<100 ;i+=2 ) { printf ("%d\t" ,i); } getchar(); return 0 ; }int main () { int i; for (i=1 ;i<=100 ;i++) { if (i%2 != 0 ) { printf ("%d\t" ,i); } } return 0 ; }
switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
🐸案例分析:
输入1-7,输出数字对应周一至周日
如果写成 if...else if ...else if
的形式太复杂,那我们就得有不一样的语法形式 ——— switch 语句。
if方法 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 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int day = 0 ; printf ("请输入1至7的整数\n" ); scanf ("%d" ,&day); if (1 == day) printf ("今天是周1\n" ); else if (2 == day) printf ("今天是周2\n" ); else if (3 == day) printf ("今天是周3\n" ); else if (4 == day) printf ("今天是周4\n" ); else if (5 == day) printf ("今天是周5\n" ); else if (6 == day) printf ("今天是周6\n" ); else if (7 == day) printf ("今天是周7\n" ); return 0 ; }
switch方法
switch(整型表达式) { 语句项; }
语句项
break 在switch语句中,我们没法直接实现分支,搭配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 30 31 32 33 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int day = 0 ; printf ("请输入1至7的整数\n" ); scanf ("%d" ,&day); switch (day) { case 1 : printf ("星期一\n" ); break ; case 2 : printf ("星期二\n" ); break ; case 3 : printf ("星期三\n" ); break ; case 4 : printf ("星期四\n" ); break ; case 5 : printf ("星期五\n" ); break ; case 6 : printf ("星期六\n" ); break ; case 7 : printf ("星期天\n" ); break ; } return 0 ; }
✏️break语句的实际效果是把语句列表划分为不同的部分。
有时候我们的需求变了:
输入1-5输出的是“weekday”;
输入6-7输出“weekend”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int day = 0 ; printf ("请输入1至7的整数\n" ); scanf ("%d" ,&day); switch (day) { case 1 : case 2 : case 3 : case 4 : case 5 : printf ("weekday\n" ); break ; case 6 : case 7 : printf ("weekend\n" ); break ; } return 0 ; }
😊编程好习惯
在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最 后一个 case 语句后面忘了添加 break语句)。
default子句 如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签 default:
写在任何一个 case标签可以出现的位置。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句.
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 30 31 32 33 34 35 36 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int day = 0 ; printf ("请输入1至7的整数\n" ); scanf ("%d" ,&day); switch (day) { case 1 : printf ("星期一\n" ); break ; case 2 : printf ("星期二\n" ); break ; case 3 : printf ("星期三\n" ); break ; case 4 : printf ("星期四\n" ); break ; case 5 : printf ("星期五\n" ); break ; case 6 : printf ("星期六\n" ); break ; case 7 : printf ("星期天\n" ); break ; default : printf ("用户输入错误\n" ); break ; } return 0 ; }
😊编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 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 30 31 32 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int n = 1 ; int m = 2 ; switch (n) { case 1 : m++; case 2 : n++; case 3 : switch (n) { case 1 : n++; case 2 : m++; n++; break ; } case 4 : m++; break ; default : break ; } printf ("m = %d, n = %d\n" , m, n); return 0 ; }
while循环 当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次。 但是我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 C语言中给我们引入了:while语句,可以实现循环。
代码例:
在屏幕上打印1-10的数字
1 2 3 4 5 6 7 8 9 10 11 12 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 1 ; while (i<=10 ) { printf ("%d\n" , i); i = i+1 ; } return 0 ; }
while语句中的break和continue break介绍 1 2 3 4 5 6 7 8 9 10 11 int main () { int i = 1 ; while (i<=10 ) { if (i == 5 ) break ; printf ("%d" , i); i = i+1 ; } return 0 ; }
✏️总结: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的 break是用于永久 终止循环的。
continue介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int main () { int i = 1 ; while (i<=10 ) { if (i == 5 ) continue ; printf ("%d " , i); i = i+1 ; } return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 int main () { int i = 1 ; while (i<=10 ) { i++; if (i == 5 ) continue ; printf ("%d " , i); } return 0 ; }
✏️总结: continue是用于终止本次循环 的,也就是本次循环中continue后边的代码不会再执行,而是直接 跳转到while语句的判断部分。进行下一次循环的入口判断。
getchar()与putchar()
getchar()函数的作用是从计算机终端(一般为键盘)获取一个无符号字符。getchar()函数只能接收一个字符,其函数值就是从输入设备获取到的字符。
putchar语法结构为 int putchar(int char) ,其功能是把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中,为C 库函数 ,包含在C 标准库 <stdio.h>中。其输出可以是一个字符 ,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是用char 定义好的一个字符型变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int ch = 0 ; while ((ch = getchar()) != EOF){ putchar (ch); } return 0 ; }
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 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int ret = 0 ; int ch = 0 ; char password[20 ] = {0 }; printf ("请输入密码:>" ); scanf ("%s" ,password); printf ("请确认密码(Y/N):>" ); while ((ch = getchar()) != '\n' ) { } ret = getchar(); if (ret == 'Y' ){ printf ("确认成功!\n" ); }else { printf ("放弃确认!\n" ); } return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int ch = 0 ; while ((ch = getchar()) != EOF) { if (ch < '0' || ch > '9' ) continue ; putchar (ch); } return 0 ; }
for循环 语法:
1 2 for (表达式1 ;表达式2 ;表达式3 ) 循环语句;
表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断 循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
使用for循环 在屏幕上打印1-10的数字。
1 2 3 4 5 6 7 8 9 10 int main () { int i = 0 ; for (i=1 ; i<=10 ; i++) { printf ("%d" , i); } return 0 ; }
for循环和while循环对比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; i=1 ; while (i<=10 ) { printf ("hehe\n" ); i = i+1 ; } }int main () { int i = 0 ; for (i=1 ; i<=10 ; i++) { printf ("hehe\n" ); } }
可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离 较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高。
break和continue 我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有些差异:
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 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; for (i=1 ; i<=10 ; i++) { if (i == 5 ) break ; printf ("%d " ,i); } return 0 ; }int main () { int i = 0 ; for (i=1 ; i<=10 ; i++) { if (i == 5 ) continue ; printf ("%d " ,i); } return 0 ; }
📖for语句的循环控制变量 一些建议:
不可在for 循环体内修改循环变量,防止 for 循环失去控制。
建议for语句的循环控制变量的取值采用“前闭后开区间” 写法。
1 2 3 4 5 6 7 8 int i = 0 ;for (i=0 ; i<10 ; i++) {}for (i=0 ; i<=9 ; i++) {}
for循环打印数组 1 2 3 4 5 6 7 8 9 10 11 12 13 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int arr[10 ] = {0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 }; int i; for ( i = 0 ;i < 10 ;i++){ printf ("%d " ,arr[i]); } return 0 ; }
for循环的变种 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int x,y; for (x = 0 , y = 0 ;x<2 && y<5 ;++x,y++) { printf ("hehe\n" ); } return 0 ; }
变种1:
1 2 3 4 5 for循环的初始化、调整、判断都可以省略 但是∶ for循环的判断部分如果被省略,那判断条件就是:恒为正 ⚠️如果不是非常熟练,建议大家不要随便省略
易错代码举例:
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 30 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; int j = 0 ; for (;i<10 ;i++) { for (;j<10 ;j++) { printf ("hehe\n" ); } } return 0 ; }int main () { int i = 0 ; int j = 0 ; for (;i<10 ;i++) { for (j = 0 ;j<10 ;j++) { printf ("hehe\n" ); } } return 0 ; }
变种2:
1 2 3 4 5 6 7 8 9 10 11 12 13 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int x,y; for (x = 0 , y = 0 ;x<2 && y<5 ;++x,y++) { printf ("hehe\n" ); } return 0 ; }
练习:
请问循环要循环多少次?
1 2 3 4 5 6 7 8 9 10 11 12 13 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; int k = 0 ; for (i=0 ,k=0 ;k=0 ;i++,k++){ k++; } return 0 ; }
do…while()循环 do…while()语句的语法:
do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
1 2 3 4 5 6 7 8 9 10 11 12 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 10 ; do { printf ("%d\n" , i); } while (i<10 ); return 0 ; }
break和continue 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 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; do { if (5 == i) break ; printf ("%d\n" , i); i++; } while (i<10 ); return 0 ; }int main () { int i = 0 ; do { if (5 == i) continue ; printf ("%d\n" , i); i++; } while (i<10 ); return 0 ; }
练习
计算 n的阶乘。
计算 1!+2!+3!+……+10!
在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0] <=v[1]<=v[2]<= ….<=v[n-1]的数组中查找x.
编写代码,演示多个字符从两端移动,向中间汇聚。
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <windows.h> #include <stdlib.h> int main () { int i =0 ; int n =0 ; int ret = 1 ; printf ("请输入正整数:\n" ); scanf ("%d" ,&n); for (i = 1 ;i<=n;i++){ ret = ret * i; } printf ("ret = %d\n" ,ret); return 0 ; }int main () { int i =0 ; int n =0 ; int ret = 1 ; int sum = 0 ; for (n = 1 ;n<=10 ;n++){ ret = 1 ; for (i = 1 ;i<=n;i++){ ret = ret * i; } sum = sum + ret; } printf ("sum = %d\n" ,sum); return 0 ; }int main () { int i =0 ; int n =0 ; int ret = 1 ; int sum = 0 ; for (n = 1 ;n <= 10 ;n++){ ret = ret * n; sum = sum + ret; } printf ("sum = %d\n" ,sum); return 0 ; }int main () { int arr[] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 }; int k = 7 ; int i = 0 ; int sz = sizeof (arr)/sizeof (arr[0 ]); for (i = 0 ;i<sz;i++){ if (k == arr[i]){ printf ("找到了,下标是: %d\n" ,i); break ; } } if (i == sz){ printf ("未找到\n" ); } return 0 ; }int main () { int arr[] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 }; int k = 7 ; int sz = sizeof (arr)/sizeof (arr[0 ]); int left = 0 ; int right = sz-1 ; while (left<=right){ int mid = (left + right) / 2 ; if (arr[mid] > k){ right = mid-1 ; } else if (arr[mid] < k){ left = mid+1 ; } else { printf ("找到了,下标是: %d\n" ,mid); break ; } } while (left>right){ printf ("未找到\n" ); } return 0 ; }int main () { char arr1[] = "welcome to bit!!!" ; char arr2[] = "#################" ; int left = 0 ; int right = strlen (arr1)-1 ; printf ("%s\n" ,arr2); while (left<=right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf ("%s\n" , arr2); Sleep(1000 ); left++; right--; system("cls" ); } printf ("%s\n" , arr2); return 0 ; }int main () { int i = 0 ; char psw[10 ] = {0 }; for (i = 0 ;i < 3 ;i++) { printf ("请输入密码:\n" ); scanf ("%s" ,psw); if (strcmp (psw,"520" ) == 0 ) { printf ("密码正确\n" ); break ; } else { printf ( "哦豁!密码错误\n" ); } } if (i == 3 ) printf ("3次密码输入错误:exit\n" ); return 0 ; }
6.实现从大到小的3个数输出
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 30 31 32 33 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int a = 0 ; int b = 0 ; int c = 0 ; printf ("请输入3个数字:\n" ); scanf ("%d%d%d" ,&a,&b,&c); if (a<b){ int tmp = a; a = b; b = tmp; } if (a<c){ int tmp = a; a = c; c = tmp; } if (b<c){ int tmp = b; b = c; c = tmp; } printf ("排序结果为:%d %d %d" ,a,b,c); return 0 ; }
7.打印1-100中3的倍数
1 2 3 4 5 6 7 8 9 10 11 12 13 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; for (i = 1 ;i<=100 ;i++){ if (i%3 == 0 ){ printf ("%d " ,i); } } return 0 ; }
8.给定2个数,求其最大公约数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int m = 0 ; int n = 0 ; int r = 0 ; printf ("请输入2个数字:\n" ); scanf ("%d%d" ,&m,&n); while (m % n){ r = m%n; m = n; n = r; } printf ("====================\n" ); printf ("最大公约数为:%d\n" ,n); printf ("====================\n" ); return 0 ; }
9.求得1000-2000年的所有闰年
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int year = 0 ; int count = 0 ; for (year = 1000 ;year<=2000 ;year++){ if (year%4 ==0 && year%100 !=0 ){ printf ("%d " ,year); count++; } else if (year%400 ==0 ){ printf ("%d " ,year); count++; } } printf ("\ncount=%d\n" ,count); return 0 ; }
10.打印100-200的素数
曾称质数 。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数 。如2,3,5,7,11
试除法
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; int count = 0 ; for (i = 100 ;i<=200 ;i++) { int j = 0 ; for (j = 2 ;j<i;j++){ if (i%j == 0 ){ break ; } } if (j == i){ count++; printf ("%d " ,i); } } printf ("\ncount=%d\n" ,count); return 0 ; } #include <math.h> int main () { int i = 0 ; int count = 0 ; for (i = 100 ;i<=200 ;i++) { int j = 0 ; for (j = 2 ;j <= sqrt (i);j++){ if (i%j == 0 ){ break ; } } if (j > sqrt (i)){ count++; printf ("%d " ,i); } } printf ("\ncount=%d\n" ,count); return 0 ; }
11.编写程序数一下1到100的所有整数中出现多少个数字9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; int count = 0 ; for (i = 1 ;i<=100 ;i++) { if (i%10 == 9 ) count++; if (i/10 == 9 ) count++; } printf ("count=%d\n" ,count); return 0 ; }
12.计算1/1-1/2+1/3-1/4+1/5 ......+ 1/99 - 1/100
的值,打印出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i = 0 ; double sum = 0.0 ; int flag = 1 ; for (i = 1 ;i<=100 ;i++) { sum += flag*1.0 /i; flag = -flag; } printf ("%lf\n" ,sum); return 0 ; }
13.求10个整数中最大值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int arr[] = {1 ,-2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,-10 }; int max = arr[0 ]; int i = 0 ; int sz = sizeof (arr)/sizeof (arr[0 ]); for (i = 1 ;i<sz;i++){ if (arr[i]>max){ max = arr[i]; } } printf ("max=%d\n" ,max); return 0 ; }
14打印九九乘法表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { int i,j,n; for (i=1 ;i<=9 ;i++){ for (j=1 ;j<=i;j++) printf ("%d*%d=%-2d " ,i,j,i*j); printf ("\n" ); } return 0 ; }
C语言九九乘法表(五种输出形式)
15.猜数字游戏(1-100)
电脑出随机数,玩家猜,判断対误
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> void menu () { printf ("**********************************\n" ); printf ("*********** 1.play *********\n" ); printf ("*********** 0.exit *********\n" ); printf ("**********************************\n" ); }void game () { int ret = 0 ; int guess = 0 ; ret = rand()%100 +1 ; while (1 ) { printf ("请猜数字:>\n" ); scanf ("%d" ,&guess); if (guess > ret) { printf ("----数字猜大了!----\n" ); } else if (guess < ret) { printf ("----数字猜小啦!----\n" ); } else { printf ("----您可真厉害!猜中啦!!!----\n" ); break ; } } }int main () { int input = 0 ; srand((unsigned int )time(NULL )); do { menu(); printf ("请选择选项:>\n" ); scanf ("%d" ,&input); switch (input) { case 1 : printf ("*****您选择开始游戏!*****\n" ); game(); break ; case 0 : printf ("----已退出游戏!----\n" ); break ; default : printf ("----选择错误!----\n" ); break ; } }while (input); return 0 ; }
goto语句 C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程 例如一次跳出两层或多层循环。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto代码例:
1 2 3 4 5 6 7 8 9 10 11 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { flag: printf ("你好,C语言学习者!\n" ); goto flag; return 0 ; }
例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main () { printf ("你好,C语言学习者!\n" ); goto flag; printf ("你一定要" ); flag: printf ("好好学习鸭!\n" ); return 0 ; }
goto语句的随意性较大,如果不加以限制,就会破坏结构化设计风格,会导致代码晦涩难懂,降低可读性。
goto语言真正适合的场景如下:
1 2 3 4 5 6 7 8 9 10 11 12 for (...) for (...) { for (...) { if (disaster) goto error; } } … error: if (disaster)