今天了解C语言中常案例
C 语言实例 1、C 语言实例 - 输出 “Hello, World!” 1 2 3 4 5 6 7 #include <stdio.h> int main () { printf ("Hello, World!" ); return 0 ; }
2、 C 语言实例 - 输出整数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int number; printf ("输入一个整数: " ); scanf ("%d" , &number); printf ("你输入的整数是: %d" , number); return 0 ; }
3、 C 语言实例 - 输出单个字符 1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> int main () { char c; c = 'A' ; printf ("c 的值为 %c" , c); return 0 ; }
4、 C 语言实例 - 输出浮点数 1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> int main () { float f; f = 12.001234 ; printf ("f 的值为 %f" , f); return 0 ; }
5、 C 语言实例 - 输出双精度数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { double d; d = 12.001234 ; printf ("d 的值为 %le" , d); return 0 ; }
6、 C 语言实例 - 两个数字相加 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 #include <stdio.h> int main () { int firstNumber, secondNumber, sumOfTwoNumbers; printf ("输入两个数(以空格分割): " ); scanf ("%d %d" , &firstNumber, &secondNumber); sumOfTwoNumbers = firstNumber + secondNumber; printf ("%d + %d = %d" , firstNumber, secondNumber, sumOfTwoNumbers); return 0 ; }
7、 C 语言实例 - 两个浮点数相乘 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 输入两个浮点数,计算乘积。 #include <stdio.h> int main () { double firstNumber, secondNumber, product; printf ("输入两个浮点数: " ); scanf ("%lf %lf" , &firstNumber, &secondNumber); product = firstNumber * secondNumber; printf ("结果 = %.2lf" , product); return 0 ; } 运行结果: 输入两个浮点数: 1.2 2.345 结果 = 2.81
8、 C 语言实例 - 字符转 ASCII 码 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 ASCII 定义了 128 个字符。 分类: 一:0 -31 、127 (删除键)是控制字符 二:空白字符:空格(32 )、 制表符、 垂直制表符、 换行、 回车。 三:可显示字符:a-z、A-Z、0-9、~、!、@、、%、^、&、#、$、*、(、)、-、+、{、}、[、]、'、"、<、>、,、?、/、|、\、_、:、;、.,还有顿号、。 ASCII 表: ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 、1 SOH 33 ! 65 A 97 a2 STX 34 " 66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL 39 ' 71 G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT 43 + 75 K 107 k 12 FF 44 , 76 L 108 l 13 CR 45 - 77 M 109 m 14 SO 46 . 78 N 110 n 15 SI 47 / 79 O 111 o 16 DLE 48 0 80 P 112 p 17 DCI 49 1 81 Q 113 q 18 DC2 50 2 82 R 114 r 19 DC3 51 3 83 S 115 s 20 DC4 52 4 84 T 116 t 21 NAK 53 5 85 U 117 u 22 SYN 54 6 86 V 118 v 23 TB 55 7 87 W 119 w 24 CAN 56 8 88 X 120 x 25 EM 57 9 89 Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 [ 123 { 28 FS 60 < 92 / 124 | 29 GS 61 = 93 ] 125 } 30 RS 62 > 94 ^ 126 ` 31 US 63 ? 95 _ 127 DEL #include <stdio.h> int main() { char c; printf(" 输入一个字符: "); // 读取用户输入 scanf(" %c", &c); // %d 显示整数 // %c 显示对应字符 printf(" %c 的 ASCII 为 %d", c, c); return 0; } 运行结果: 输入一个字符: a a 的 ASCII 为 97
9、 C 语言实例 - 两数相除 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 两数相除,如果有余数,输出余数。 #include <stdio.h> int main () { int dividend, divisor, quotient, remainder; printf ("输入被除数: " ); scanf ("%d" , ÷nd); printf ("输入除数: " ); scanf ("%d" , &divisor); quotient = dividend / divisor; remainder = dividend % divisor; printf ("商 = %d\n" , quotient); printf ("余数 = %d" , remainder); return 0 ; } 运行结果: 输入被除数: 5 输入除数: 2 商 = 2 余数 = 1
10、 C 语言实例 - 数值比较 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 #include <stdio.h> int main () { int a, b; a = 11 ; b = 99 ; if (a > b) printf ("a 大于 b" ); else printf ("a 小于等于 b" ); return 0 ; } 输出结果: a 小于等于 b
比较三个数 以下实例中定义了两个整数变量,并使用 if 来比较三个数值,可以先看下逻辑图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int a, b, c; a = 11 ; b = 22 ; c = 33 ; if ( a > b && a > c ) printf ("%d 最大" , a); else if ( b > a && b > c ) printf ("%d 最大" , b); else if ( c > a && c > b ) printf ("%d 最大" , c); else printf ("有两个或三个数值相等" ); return 0 ; }
输出结果:
11、 C 语言实例 - 计算 int, float, double 和 char 字节大小 使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。
sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++、–等,它并不是函数。
sizeof 操作符以字节形式给出了其操作数的存储大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int integerType; float floatType; double doubleType; char charType; printf ("Size of int: %ld bytes\n" ,sizeof (integerType)); printf ("Size of float: %ld bytes\n" ,sizeof (floatType)); printf ("Size of double: %ld bytes\n" ,sizeof (doubleType)); printf ("Size of char: %ld byte\n" ,sizeof (charType)); return 0 ; } 运行结果: Size of int : 4 bytes Size of float : 4 bytes Size of double : 8 bytes Size of char : 1 byte
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> int main () { int a; long b; long long c; double e; long double f; printf ("Size of int = %ld bytes \n" , sizeof (a)); printf ("Size of long = %ld bytes\n" , sizeof (b)); printf ("Size of long long = %ld bytes\n" , sizeof (c)); printf ("Size of double = %ld bytes\n" , sizeof (e)); printf ("Size of long double = %ld bytes\n" , sizeof (f)); return 0 ; } 运行结果: Size of int = 4 bytes Size of long = 8 bytes Size of long long = 8 bytes Size of double = 8 bytes Size of long double = 16 bytes
12、 C 语言实例 - 交换两个数的值 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 #include <stdio.h> int main () { double firstNumber, secondNumber, temporaryVariable; printf ("输入第一个数字: " ); scanf ("%lf" , &firstNumber); printf ("输入第二个数字: " ); scanf ("%lf" ,&secondNumber); temporaryVariable = firstNumber; firstNumber = secondNumber; secondNumber = temporaryVariable; printf ("\n交换后, firstNumber = %.2lf\n" , firstNumber); printf ("交换后, secondNumber = %.2lf" , secondNumber); return 0 ; } 运行结果: 输入第一个数字: 1 输入第二个数字: 2 交换后, firstNumber = 2.00 交换后, secondNumber = 1.00
不使用临时变量交换两个整数的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main () { int a, b; a = 11 ; b = 99 ; printf ("交换之前 - \n a = %d, b = %d \n\n" , a, b); a = a + b; b = a - b; a = a - b; printf ("交换后 - \n a = %d, b = %d \n" , a, b); } 运行结果: 交换之前 - a = 11 , b = 99 交换后 - a = 99 , b = 11
13、 C 语言实例 - 判断奇数/偶数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main () { int number; printf ("请输入一个整数: " ); scanf ("%d" , &number); if (number % 2 == 0 ) printf ("%d 是偶数。" , number); else printf ("%d 是奇数。" , number); return 0 ; } 运行结果: 请输入一个整数: 5 5 是奇数。
14、 C 语言实例 - 循环区间范围内的奇数/偶数 循环输出区间范围内的奇数/偶数可以通过除于 2 的余数来判断。
以下实例通过循环输出指定区间范围的偶数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> int main () { int i; for (i = 1 ; i <= 10 ; i++) { if (i%2 == 0 ) printf (" %2d\n" , i); } return 0 ; } 运行结果: 2 4 6 8 10
以下实例通过循环输出指定区间范围的奇数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> int main () { int i; for (i = 1 ; i <= 10 ; i++) { if (i%2 != 0 ) printf ("%d\n" , i); } return 0 ; } 运行结果: 1 3 5 7 9
15、 C 语言实例 - 判断元音/辅音 判断输入的字母是元音,还是辅音。
英语有26个字母,元音只包括 a、e、i、o、u 这五个字母,其余的都为辅音。y是半元音、半辅音字母,但在英语中都把他当作辅音。
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> int main () { char c; int isLowercaseVowel, isUppercaseVowel; printf ("输入一个字母: " ); scanf ("%c" ,&c); isLowercaseVowel = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ); isUppercaseVowel = (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' ); if (isLowercaseVowel || isUppercaseVowel) printf ("%c 是元音" , c); else printf ("%c 是辅音" , c); return 0 ; } 运行结果: 输入一个字母: G G 是辅音
16、 C 语言实例 - 判断三个数中的最大数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { double n1, n2, n3; printf ("请输入三个数,以空格分隔: " ); scanf ("%lf %lf %lf" , &n1, &n2, &n3); if ( n1>=n2 && n1>=n3 ) printf ("%.2f 是最大数。" , n1); if ( n2>=n1 && n2>=n3 ) printf ("%.2f 是最大数。" , n2); if ( n3>=n1 && n3>=n2 ) printf ("%.2f 是最大数。" , n3); return 0 ; } 运行结果: 请输入三个数,以空格分隔: 1 2 3 3.00 是最大数。
17、 C 语言实例 - 一元二次方程 求一元二次方程:ax2+bx+c=0 的根。
输入三个实数a,b,c的值,且a不等于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 #include <stdio.h> #include <math.h> int main () { float a,b,c,x1,x2,d; printf ("输入方程的三个系数:" ); scanf ("%f %f %f" ,&a,&b,&c); if (a!=0 ) { d=sqrt (b*b-4 *a*c); x1=(-b+d)/(2 *a); x2=(-b-d)/(2 *a); if (x1<x2) printf ("%0.2f %0.2f\n" ,x2,x1); else printf ("%0.2f %0.2f\n" ,x1,x2); } return 0 ; } 运行结果: 输入方程的三个系数:1 2 1 -1.00 -1.00
18、 C 语言实例 - 判断闰年 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 #include <stdio.h> int main () { int year; printf ("输入年份: " ); scanf ("%d" ,&year); if (year%4 == 0 ) { if ( year%100 == 0 ) { if ( year%400 == 0 ) printf ("%d 是闰年" , year); else printf ("%d 不是闰年" , year); } else printf ("%d 是闰年" , year ); } else printf ("%d 不是闰年" , year); return 0 ; } 运行结果: 输入年份: 1990 1990 不是闰
19、 C 语言实例 - 判断正数/负数/零 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main () { double number; printf ("输入一个数字: " ); scanf ("%lf" , &number); if (number <= 0.0 ) { if (number == 0.0 ) printf ("你输入的是 0。" ); else printf ("你输入的是负数。" ); } else printf ("你输入的是正数。" ); return 0 ; } 运行结果: 输入一个数字: 9 你输入的是正数。
20、 C 语言实例 - 判断字母 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main () { char c; printf ("输入一个字符: " ); scanf ("%c" ,&c); if ( (c>='a' && c<='z' ) || (c>='A' && c<='Z' )) printf ("%c 是字母" ,c); else printf ("%c 不是字母" ,c); return 0 ; } 运行结果: 输入一个字符: a a 是字母
21、 C 语言实例 - 计算自然数的和 自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,……一个接一个,组成一个无穷的集体,即指非负整数。
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 #include <stdio.h> int main () { int n, i, sum = 0 ; printf ("输入一个正整数: " ); scanf ("%d" ,&n); for (i=1 ; i <= n; ++i) { sum += i; } printf ("Sum = %d" ,sum); return 0 ; } #include <stdio.h> int main () { int n, i, sum = 0 ; printf ("输入一个正整数: " ); scanf ("%d" ,&n); i = 1 ; while ( i <=n ) { sum += i; ++i; } printf ("Sum = %d" ,sum); return 0 ; } #include <stdio.h> int addNumbers (int n) ; int main () { int num; printf ("输入一个整数: " ); scanf ("%d" , &num); printf ("Sum = %d" ,addNumbers(num)); return 0 ; } int addNumbers (int n) { if (n != 0 ) return n + addNumbers(n-1 ); else return n; } 运行结果: 输入一个正整数: 100 Sum = 5050
22、 C 语言实例 - 输出九九乘法口诀表 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 #include <stdio.h> int main () { int i = 0 ; int j = 0 ; for (i=1 ;i<=9 ;i++){ for (j=1 ;j<=i;j++){ printf ("%dx%d=%d\t" ,j,i,i*j); } printf ("\n" ); } } 运行结果: 1 x1=1 1 x2=2 2 x2=4 1 x3=3 2 x3=6 3 x3=9 1 x4=4 2 x4=8 3 x4=12 4 x4=16 1 x5=5 2 x5=10 3 x5=15 4 x5=20 5 x5=25 1 x6=6 2 x6=12 3 x6=18 4 x6=24 5 x6=30 6 x6=36 1 x7=7 2 x7=14 3 x7=21 4 x7=28 5 x7=35 6 x7=42 7 x7=49 1 x8=8 2 x8=16 3 x8=24 4 x8=32 5 x8=40 6 x8=48 7 x8=56 8 x8=64 1 x9=9 2 x9=18 3 x9=27 4 x9=36 5 x9=45 6 x9=54 7 x9=63 8 x9=72 9 x9=81
23、 C 语言实例 - 斐波那契数列 提示:斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……..
这个数列从第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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include <stdio.h> int main () { int i, n, t1 = 0 , t2 = 1 , nextTerm; printf ("输出几项: " ); scanf ("%d" , &n); printf ("斐波那契数列: " ); for (i = 1 ; i <= n; ++i) { printf ("%d, " , t1); nextTerm = t1 + t2; t1 = t2; t2 = nextTerm; } return 0 ; } 运行结果: 输出几项: 10 斐波那契数列: 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , #include <stdio.h> int main () { int t1 = 0 , t2 = 1 , nextTerm = 0 , n; printf ("输入一个正数: " ); scanf ("%d" , &n); printf ("斐波那契数列: %d, %d, " , t1, t2); nextTerm = t1 + t2; while (nextTerm <= n) { printf ("%d, " ,nextTerm); t1 = t2; t2 = nextTerm; nextTerm = t1 + t2; } return 0 ; } 运行结果: 输入一个正数: 100 斐波那契数列: 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 ,
24、 C 语言实例 - 求两数的最大公约数 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 #include <stdio.h> int main () { int n1, n2, i, gcd; printf ("输入两个正整数,以空格分隔: " ); scanf ("%d %d" , &n1, &n2); for (i=1 ; i <= n1 && i <= n2; ++i) { if (n1%i==0 && n2%i==0 ) gcd = i; } printf ("%d 和 %d 的最大公约数是 %d" , n1, n2, gcd); return 0 ; } 运行结果: 输入两个正整数,以空格分隔: 81 153 81 和 153 的最大公约数是 9 #include <stdio.h> int main () { int n1, n2; printf ("输入两个数,以空格分隔: " ); scanf ("%d %d" ,&n1,&n2); while (n1!=n2) { if (n1 > n2) n1 -= n2; else n2 -= n1; } printf ("GCD = %d" ,n1); return 0 ; } 运行结果: 输入两个数,以空格分隔: 81 153 GCD = 9 #include <stdio.h> int main(){ int n1, n2; printf ("输入两个数,以空格分隔: " ); scanf ("%d %d" ,&n1,&n2); n1 = ( n1 > 0 ) ? n1 : -n1; n2 = ( n2 > 0 ) ? n2 : -n2; while (n1!=n2) { if (n1 > n2) n1 -= n2; else n2 -= n1; } printf ("GCD = %d" ,n1); return 0 ; } 运行结果: 输入两个数,以空格分隔: 81 -153 GCD = 9 #include <stdio.h> int hcf(int n1, int n2);int main () { int n1, n2; printf ("输入两个正整数: " ); scanf ("%d %d" , &n1, &n2); printf ("%d 和 %d 的最大公约数为 %d" , n1, n2, hcf(n1,n2)); return 0 ; } int hcf (int n1, int n2) { if (n2 != 0 ) return hcf(n2, n1%n2); else return n1; }
25、 C 语言实例 - 求两数最小公倍数 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 #include <stdio.h> int main () { int n1, n2, minMultiple; printf ("输入两个正整数: " ); scanf ("%d %d" , &n1, &n2); minMultiple = (n1>n2) ? n1 : n2; while (1 ) { if ( minMultiple%n1==0 && minMultiple%n2==0 ) { printf ("%d 和 %d 的最小公倍数为 %d" , n1, n2,minMultiple); break ; } ++minMultiple; } return 0 ; } 运行结果: 输入两个正整数: 72 120 72 和 120 的最小公倍数为 360 #include <stdio.h> int main () { int n1, n2, i, gcd, lcm; printf ("输入两个正整数: " ); scanf ("%d %d" ,&n1,&n2); for (i=1 ; i <= n1 && i <= n2; ++i) { if (n1%i==0 && n2%i==0 ) gcd = i; } lcm = (n1*n2)/gcd; printf ("%d 和 %d 的最小公倍数为 %d" , n1, n2, lcm); return 0 ; } 运行结果: 输入两个正整数: 72 120 72 和 120 的最小公倍数为 360
26、 C 语言实例 - 阶乘 提示:一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
n!=1×2×3×…×n 。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n 。
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 #include <stdio.h> int main () { int n, i; unsigned long long factorial = 1 ; printf ("输入一个整数: " ); scanf ("%d" ,&n); if (n < 0 ) printf ("Error! 负数没有阶乘jiechen" ); else { for (i=1 ; i<=n; ++i) { factorial *= i; } printf ("%d! = %llu" , n, factorial); } return 0 ; } 运行结果: 输入一个整数: 10 10 ! = 3628800 #include <stdio.h> long int multiplyNumbers(int n); int main () { int n; printf ("输入一个整数: " ); scanf ("%d" , &n); printf ("%d! = %ld" , n, multiplyNumbers(n)); return 0 ; } long int multiplyNumbers (int n) { if (n >= 1 ) return n*multiplyNumbers(n-1 ); else return 1 ; }
27、 C 语言实例 - 循环输出26个字母 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 #include <stdio.h> int main () { char c; for (c = 'A' ; c <= 'Z' ; ++c) printf ("%c " , c); return 0 ; } 运行结果: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #include <stdio.h> int main () { char c; printf ("输入 u 显示大写字母,输入 l 显示小写字母: " ); scanf ("%c" , &c); if (c== 'U' || c== 'u' ) { for (c = 'A' ; c <= 'Z' ; ++c) printf ("%c " , c); } else if (c == 'L' || c == 'l' ) { for (c = 'a' ; c <= 'z' ; ++c) printf ("%c " , c); } else printf ("Error! 输入非法字符。" ); return 0 ; } 运行结果: 输入 u 显示大写字母,输入 l 显示小写字母: l a b c d e f g h i j k l m n o p q r s t u v w x y z
28、 C 语言实例 - 判断数字为几位数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main () { long long n; int count = 0 ; printf ("输入一个整数: " ); scanf ("%lld" , &n); while (n != 0 ) { n /= 10 ; ++count; } printf ("数字是 %d 位数。" , count); } 运行结果: 输入一个整数: 2345 数字是 4 位数。
29、 C 语言实例 - 计算一个数的 n 次方 提示:计算一个数的 n 次方,例如: 23,其中 2 为基数,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 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 使用 while #include <stdio.h> int main () { int base, exponent; long long result = 1 ; printf ("基数: " ); scanf ("%d" , &base); printf ("指数: " ); scanf ("%d" , &exponent); while (exponent != 0 ) { result *= base; --exponent; } printf ("结果:%lld" , result); return 0 ; } 运行结果: 基数: 2 指数: 3 结果:8 #include <stdio.h> #include <math.h> int main () { double base, exponent, result; printf ("基数: " ); scanf ("%lf" , &base); printf ("指数: " ); scanf ("%lf" , &exponent); result = pow (base, exponent); printf ("%.1lf^%.1lf = %.2lf" , base, exponent, result); return 0 ; } 运行结果: 基数: 2 指数: 3 2.0 ^3.0 = 8.00 #include <stdio.h> int power(int n1, int n2); int main () { int base, powerRaised, result; printf ("基数: " ); scanf ("%d" ,&base); printf ("指数(正整数): " ); scanf ("%d" ,&powerRaised); result = power(base, powerRaised); printf ("%d^%d = %d" , base, powerRaised, result); return 0 ; } int power (int base, int powerRaised) { if (powerRaised != 0 ) return (base*power(base, powerRaised-1 )); else return 1 ; }
30、 C 语言实例 - 判断回文数 提示:判断一个数是否为回文数。
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数
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 #include <stdio.h> int main () { int n, reversedInteger = 0 , remainder, originalInteger; printf ("输入一个整数: " ); scanf ("%d" , &n); originalInteger = n; while ( n!=0 ) { remainder = n%10 ; reversedInteger = reversedInteger*10 + remainder; n /= 10 ; } if (originalInteger == reversedInteger) printf ("%d 是回文数。" , originalInteger); else printf ("%d 不是回文数。" , originalInteger); return 0 ; } 运行结果: 输入一个整数: 12321 12321 是回文数
31、 C 语言实例 - 判断素数 提示:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。
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 #include <stdio.h> int main () { int n, i, flag = 0 ; printf ("输入一个正整数: " ); scanf ("%d" ,&n); for (i=2 ; i<=n/2 ; ++i) { if (n%i==0 ) { flag=1 ; break ; } } if (flag==0 ) printf ("%d 是素数" ,n); else printf ("%d 不是素数" ,n); return 0 ; } 运行结果: 输入一个正整数: 29 29 是素数#include <stdio.h> int main () { int low, high, i, flag; printf ("输入两个整数: " ); scanf ("%d %d" , &low, &high); printf ("%d 与 %d 之间的素数为: " , low, high); while (low < high) { flag = 0 ; for (i = 2 ; i <= low/2 ; ++i) { if (low % i == 0 ) { flag = 1 ; break ; } } if (flag == 0 ) printf ("%d " , low); ++low; } return 0 ; } 运行结果: 输入两个整数: 100 200 100 与 200 之间的素数为: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 #include <stdio.h> int checkPrimeNumber (int n) ;int main () { int n1, n2, i, flag; printf ("输入两个正整数: " ); scanf ("%d %d" , &n1, &n2); printf ("%d 和 %d 间的素数为: " , n1, n2); for (i=n1+1 ; i<n2; ++i) { flag = checkPrimeNumber(i); if (flag == 1 ) printf ("%d " ,i); } return 0 ; } int checkPrimeNumber (int n) { int j, flag = 1 ; for (j=2 ; j <= n/2 ; ++j) { if (n%j == 0 ) { flag =0 ; break ; } } return flag; } 输出结果为: 输入两个正整数: 10 30 10 和 30 间的素数为: 11 13 17 19 23 29
32、 C 语言实例 - 判断Armstrong数(阿姆斯壮数) 提示:Armstrong 数,就是n位数的各位数的n次方之和等于该数,如:
1 2 153=1^3+5^3+3^3 1634=1^4+6^4+3^4+4^4
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 #include <stdio.h> int main () { int number, originalNumber, remainder, result = 0 ; printf ("输入三位数: " ); scanf ("%d" , &number); originalNumber = number; while (originalNumber != 0 ) { remainder = originalNumber%10 ; result += remainder*remainder*remainder; originalNumber /= 10 ; } if (result == number) printf ("%d 是 Armstrong 数" ,number); else printf ("%d 不是 Armstrong 数" ,number); return 0 ; } 运行结果: 输入三位数: 371 371 是 Armstrong #include <stdio.h> #include <math.h> int main () { int low, high, i, temp1, temp2, remainder, n = 0 , result = 0 ; printf ("输入两个整数: " ); scanf ("%d %d" , &low, &high); printf ("%d 和 %d 之间的 Armstrong 数为: " , low, high); for (i = low + 1 ; i < high; ++i) { temp2 = i; temp1 = i; while (temp1 != 0 ) { temp1 /= 10 ; ++n; } while (temp2 != 0 ) { remainder = temp2 % 10 ; result += pow (remainder, n); temp2 /= 10 ; } if (result == i) { printf ("%d " , i); } n = 0 ; result = 0 ; } return 0 ; } 运行结果: 输入两个整数: 100 1000 100 和 1000 之间的 Armstrong 数为: 153 370 371 407 #include <stdio.h> #include <math.h> int checkPrimeNumber (int n) ;int checkArmstrongNumber (int n) ; int main () { int n, flag; printf ("输入正整数: " ); scanf ("%d" , &n); flag = checkPrimeNumber(n); if (flag == 1 ) printf ("%d 是素数。\n" , n); else printf ("%d 不是素数\n" , n); flag = checkArmstrongNumber(n); if (flag == 1 ) printf ("%d 是 Armstrong 数。" , n); else printf ("%d 不是 Armstrong 数。" ,n); return 0 ; } int checkPrimeNumber (int n) { int i, flag = 1 ; for (i=2 ; i<=n/2 ; ++i) { if (n%i == 0 ) { flag = 0 ; break ; } } return flag; } int checkArmstrongNumber (int number) { int originalNumber, remainder, result = 0 , n = 0 , flag; originalNumber = number; while (originalNumber != 0 ) { originalNumber /= 10 ; ++n; } originalNumber = number; while (originalNumber != 0 ) { remainder = originalNumber%10 ; result += pow (remainder, n); originalNumber /= 10 ; } if (result == number) flag = 1 ; else flag = 0 ; return flag; } 输出结果为: 输入正整数: 371 371 不是素数371 是 Armstrong 数。
33、 C 语言实例 – 求一个整数的所有因数 提示:假如a*b=c(a、b、c都是整数),那么我们称a和b就是c的因数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int number, i; printf ("输入一个整数: " ); scanf ("%d" ,&number); printf ("%d 的因数有: " , number); for (i=1 ; i <= number; ++i) { if (number%i == 0 ) { printf ("%d " ,i); } } return 0 ; } 运行结果: 输入一个整数: 60 60 的因数有: 1 2 3 4 5 6 10 12 15 20 30 60
34、 C 语言实例 - 创建各类三角形图案 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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 使用 * 号 #include <stdio.h> int main () { int i, j, rows; printf ("行数: " ); scanf ("%d" ,&rows); for (i=1 ; i<=rows; ++i) { for (j=1 ; j<=i; ++j) { printf ("* " ); } printf ("\n" ); } return 0 ; } * * * * * * * * * * * * * * * #include <stdio.h> int main () { int i, j, rows; printf ("行数: " ); scanf ("%d" ,&rows); for (i=1 ; i<=rows; ++i) { for (j=1 ; j<=i; ++j) { printf ("%d " ,j); } printf ("\n" ); } return 0 ; } 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 #include <stdio.h> int main () { int i, j; char input, alphabet = 'A' ; printf ("输入大写字母: " ); scanf ("%c" ,&input); for (i=1 ; i <= (input-'A' +1 ); ++i) { for (j=1 ;j<=i;++j) { printf ("%c" , alphabet); } ++alphabet; printf ("\n" ); } return 0 ; } A B B C C C D D D D E E E E E #include <stdio.h> int main () { int i, j, rows; printf ("行数: " ); scanf ("%d" ,&rows); for (i=rows; i>=1 ; --i) { for (j=1 ; j<=i; ++j) { printf ("* " ); } printf ("\n" ); } return 0 ; } * * * * * * * * * * * * * * * #include <stdio.h> int main () { int i, j, rows; printf ("行数: " ); scanf ("%d" ,&rows); for (i=rows; i>=1 ; --i) { for (j=1 ; j<=i; ++j) { printf ("%d " ,j); } printf ("\n" ); } return 0 ; } 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 #include <stdio.h> int main () { int i, space, rows, k=0 ; printf ("Enter number of rows: " ); scanf ("%d" ,&rows); for (i=1 ; i<=rows; ++i, k=0 ) { for (space=1 ; space<=rows-i; ++space) { printf (" " ); } while (k != 2 *i-1 ) { printf ("* " ); ++k; } printf ("\n" ); } return 0 ; } * * * * * * * * * * * * * * * * * * * * * * * * * #include <stdio.h> int main () { int i, space, rows, k=0 , count = 0 , count1 = 0 ; printf ("行数: " ); scanf ("%d" ,&rows); for (i=1 ; i<=rows; ++i) { for (space=1 ; space <= rows-i; ++space) { printf (" " ); ++count; } while (k != 2 *i-1 ) { if (count <= rows-1 ) { printf ("%d " , i+k); ++count; } else { ++count1; printf ("%d " , (i+k-2 *count1)); } ++k; } count1 = count = k = 0 ; printf ("\n" ); } return 0 ; } 1 2 3 2 3 4 5 4 3 4 5 6 7 6 5 4 5 6 7 8 9 8 7 6 5 #include <stdio.h> int main () { int rows, i, j, space; printf ("行数: " ); scanf ("%d" ,&rows); for (i=rows; i>=1 ; --i) { for (space=0 ; space < rows-i; ++space) printf (" " ); for (j=i; j <= 2 *i-1 ; ++j) printf ("* " ); for (j=0 ; j < i-1 ; ++j) printf ("* " ); printf ("\n" ); } return 0 ; } * * * * * * * * * * * * * * * * * * * * * * * * * #include <stdio.h> int main () { int rows, coef = 1 , space, i, j; printf ("行数: " ); scanf ("%d" ,&rows); for (i=0 ; i<rows; i++) { for (space=1 ; space <= rows-i; space++) printf (" " ); for (j=0 ; j <= i; j++) { if (j==0 || i==0 ) coef = 1 ; else coef = coef*(i-j+1 )/j; printf ("%4d" , coef); } printf ("\n" ); } return 0 ; } 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include <stdio.h> #define N 10 int main () { int i,j,l; for (i=1 ,j=1 ;i<=N;i++) { for (l=1 ;l<=i;l++,j++) printf ("%5d" ,j); printf ("\n" ); } 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 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
35、 C 语言实例 - 表格形式输出数据 提示:将 1~100 的数据以 10x10 矩阵格式输出。
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 #include <stdio.h> int main () { int i, j, count; for (i = 1 ; i <= 10 ; i++) { for (j = i; j <=100 ; j += 10 ) printf (" %3d" , j); printf ("\n" ); } return 0 ; } 运行结果: 1 11 21 31 41 51 61 71 81 91 2 12 22 32 42 52 62 72 82 92 3 13 23 33 43 53 63 73 83 93 4 14 24 34 44 54 64 74 84 94 5 15 25 35 45 55 65 75 85 95 6 16 26 36 46 56 66 76 86 96 7 17 27 37 47 57 67 77 87 97 8 18 28 38 48 58 68 78 88 98 9 19 29 39 49 59 69 79 89 99 10 20 30 40 50 60 70 80 90 100 #include <stdio.h> int main () { int i, j, count; int start, end; start = 2 , end = 10 ; for (i = start; i <= end; i++) { count = i; for (j = 1 ; j <= 10 ; j++) { printf (" %3d" , count*j); } printf ("\n" ); } return 0 ; } 运行结果: 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 #include <stdio.h> int main () { int i, j, n; n = 3 ; j = 1 ; for (i = n; i <= (n*10 ); i+=n) { printf ("%3d x %2d = %3d\n" , n, j, i); j++; } return 0 ; } 运行结果: 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27 3 x 10 = 30
36、 C 语言实例 - 实现简单的计算器 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 # include <stdio.h> int main () { char operator ; double firstNumber,secondNumber; printf ("输入操作符 (+, -, *,): " ); scanf ("%c" , &operator ); printf ("输入两个数字: " ); scanf ("%lf %lf" ,&firstNumber, &secondNumber); switch (operator ) { case '+' : printf ("%.1lf + %.1lf = %.1lf" ,firstNumber, secondNumber, firstNumber + secondNumber); break ; case '-' : printf ("%.1lf - %.1lf = %.1lf" ,firstNumber, secondNumber, firstNumber - secondNumber); break ; case '*' : printf ("%.1lf * %.1lf = %.1lf" ,firstNumber, secondNumber, firstNumber * secondNumber); break ; case '/' : printf ("%.1lf / %.1lf = %.1lf" ,firstNumber, secondNumber, firstNumber / secondNumber); break ; default : printf ("Error! operator is not correct" ); } return 0 ; } 输出结果为: 输入操作符 (+, -, *,): * 输入两个数字: 4 5 4.0 * 5.0 = 20.0
37、 C 语言实例 - 计算一个数是否可为两个素数之和 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 #include <stdio.h> int checkPrime (int n) ;int main () { int n, i, flag = 0 ; printf ("输入正整数: " ); scanf ("%d" , &n); for (i = 2 ; i <= n/2 ; ++i) { if (checkPrime(i) == 1 ) { if (checkPrime(n-i) == 1 ) { printf ("%d = %d + %d\n" , n, i, n - i); flag = 1 ; } } } if (flag == 0 ) printf ("%d 不能分解为两个素数。" , n); return 0 ; } int checkPrime (int n) { int i, isPrime = 1 ; for (i = 2 ; i <= n/2 ; ++i) { if (n % i == 0 ) { isPrime = 0 ; break ; } } return isPrime; } 输出结果为: 输入正整数: 34 34 = 3 + 31 34 = 5 + 29 34 = 11 + 23 34 = 17 + 17
38、 C 语言实例 - 二进制与十进制相互转换 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 二进制转换为十进制 #include <stdio.h> #include <math.h> int convertBinaryToDecimal (long long n) ; int main () { long long n; printf ("输入一个二进制数: " ); scanf ("%lld" , &n); printf ("二进制数 %lld 转换为十进制为 %d" , n, convertBinaryToDecimal(n)); return 0 ; } int convertBinaryToDecimal (long long n) { int decimalNumber = 0 , i = 0 , remainder; while (n!=0 ) { remainder = n%10 ; n /= 10 ; decimalNumber += remainder*pow (2 ,i); ++i; } return decimalNumber; } 输出结果为: 输入一个二进制数: 110110111 二进制数 110110111 转换为十进制为 439 #include <stdio.h> #include <math.h> long long convertDecimalToBinary (int n) ; int main () { int n; printf ("输入一个十进制数: " ); scanf ("%d" , &n); printf ("十进制数 %d 转换为二进制位 %lld" , n, convertDecimalToBinary(n)); return 0 ; } long long convertDecimalToBinary (int n) { long long binaryNumber = 0 ; int remainder, i = 1 , step = 1 ; while (n!=0 ) { remainder = n%2 ; printf ("Step %d: %d/2, 余数 = %d, 商 = %d\n" , step++, n, remainder, n/2 ); n /= 2 ; binaryNumber += remainder*i; i *= 10 ; } return binaryNumber; } 输出结果为: 输入一个十进制数: 100 Step 1 : 100 /2 , 余数 = 0 , 商 = 50 Step 2 : 50 /2 , 余数 = 0 , 商 = 25 Step 3 : 25 /2 , 余数 = 1 , 商 = 12 Step 4 : 12 /2 , 余数 = 0 , 商 = 6 Step 5 : 6 /2 , 余数 = 0 , 商 = 3 Step 6 : 3 /2 , 余数 = 1 , 商 = 1 Step 7 : 1 /2 , 余数 = 1 , 商 = 0 十进制数 100 转换为二进制位 1100100
39、 C 语言实例 - 八进制与十进制相互转换 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 十进制转换为八进制 #include <stdio.h> #include <math.h> int convertDecimalToOctal (int decimalNumber) ;int main () { int decimalNumber; printf ("输入一个十进制数: " ); scanf ("%d" , &decimalNumber); printf ("十进制数 %d 转换为八进制为 %d" , decimalNumber, convertDecimalToOctal(decimalNumber)); return 0 ; } int convertDecimalToOctal (int decimalNumber) { int octalNumber = 0 , i = 1 ; while (decimalNumber != 0 ) { octalNumber += (decimalNumber % 8 ) * i; decimalNumber /= 8 ; i *= 10 ; } return octalNumber; } 输出结果为: 输入一个十进制数: 78 十进制数 78 转换为八进制为 116 #include <stdio.h> #include <math.h> long long convertOctalToDecimal (int octalNumber) ;int main () { int octalNumber; printf ("输入一个八进制数: " ); scanf ("%d" , &octalNumber); printf ("八进制数 %d 转换为十进制为 %lld" , octalNumber, convertOctalToDecimal(octalNumber)); return 0 ; } long long convertOctalToDecimal (int octalNumber) { int decimalNumber = 0 , i = 0 ; while (octalNumber != 0 ) { decimalNumber += (octalNumber%10 ) * pow (8 ,i); ++i; octalNumber/=10 ; } i = 1 ; return decimalNumber; } 输出结果为: 输入一个八进制数: 116 八进制数 116 转换为十进制为 78
40、 C 语言实例 - 八进制与二进制相互转换 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 二进制转换为八进制 #include <stdio.h> #include <math.h> int convertBinarytoOctal (long long binaryNumber) ;int main () { long long binaryNumber; printf ("输入一个二进制数: " ); scanf ("%lld" , &binaryNumber); printf ("二进制数 %lld 转换为八进制为 %d" , binaryNumber, convertBinarytoOctal(binaryNumber)); return 0 ; } int convertBinarytoOctal (long long binaryNumber) { int octalNumber = 0 , decimalNumber = 0 , i = 0 ; while (binaryNumber != 0 ) { decimalNumber += (binaryNumber%10 ) * pow (2 ,i); ++i; binaryNumber/=10 ; } i = 1 ; while (decimalNumber != 0 ) { octalNumber += (decimalNumber % 8 ) * i; decimalNumber /= 8 ; i *= 10 ; } return octalNumber; } 输出结果为: 输入一个二进制数: 101001 二进制数 101001 转换为八进制为 51 #include <stdio.h> #include <math.h> long long convertOctalToBinary (int octalNumber) ;int main () { int octalNumber; printf ("输入一个八进制数: " ); scanf ("%d" , &octalNumber); printf ("八进制数 %d 转二进制为 %lld" , octalNumber, convertOctalToBinary(octalNumber)); return 0 ; } long long convertOctalToBinary (int octalNumber) { int decimalNumber = 0 , i = 0 ; long long binaryNumber = 0 ; while (octalNumber != 0 ) { decimalNumber += (octalNumber%10 ) * pow (8 ,i); ++i; octalNumber/=10 ; } i = 1 ; while (decimalNumber != 0 ) { binaryNumber += (decimalNumber % 2 ) * i; decimalNumber /= 2 ; i *= 10 ; } return binaryNumber; } 输出结果为: 输入一个八进制数: 51 八进制数 51 转二进制为 101001
41、 C 语言实例 - 字符串翻转 提示:使用递归来翻转字符串。
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> void reverseSentence () ; int main () { printf ("输入一个字符串: " ); reverseSentence(); return 0 ; } void reverseSentence () { char c; scanf ("%c" , &c); if ( c != '\n' ) { reverseSentence(); printf ("%c" ,c); } } 输出结果为: 输入一个字符串: runoob boonur
42、 C 语言实例 - 计算数组元素平均值 使用 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 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 #include <stdio.h> int main () { int array [10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int sum, loop; float avg; sum = avg = 0 ; for (loop = 0 ; loop < 10 ; loop++) { sum = sum + array [loop]; } avg = (float )sum / loop; printf ("平均值为 %.2f" , avg); return 0 ; } 输出结果为: 平均值为 4.50 实例 2 #include <stdio.h> int main () { int n, i; float num[100 ], sum = 0.0 , average; printf ("输入元素个数: " ); scanf ("%d" , &n); while (n > 100 || n <= 0 ) { printf ("Error! 数字需要在1 到 100 之间。\n" ); printf ("再次输入: " ); scanf ("%d" , &n); } for (i = 0 ; i < n; ++i) { printf ("%d. 输入数字: " , i+1 ); scanf ("%f" , &num[i]); sum += num[i]; } average = sum / n; printf ("平均值 = %.2f" , average); return 0 ; } 输出结果为: 输入元素个数: 4 1. 输入数字: 1 2. 输入数字: 2 3. 输入数字: 4 4. 输入数字: 8 平均值 = 3.75
43、 C 语言实例 - 输出数组 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 #include <stdio.h> int main () { int array [10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int loop; for (loop = 0 ; loop < 10 ; loop++) printf ("%d " , array [loop]); return 0 ; } 输出结果为: 1 2 3 4 5 6 7 8 9 0 实例 #include <stdio.h> int main () { int array [10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int loop; for (loop = 9 ; loop >= 0 ; loop--) printf ("%d " , array [loop]); return 0 ; } 输出结果为: 0 9 8 7 6 5 4 3 2 1
44、 C 语言实例 - 计算数组元素之和 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 使用 for 循环迭代出输出元素,并将各个元素相加: #include <stdio.h> int main () { int array [10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int sum, loop; sum = 0 ; for (loop = 9 ; loop >= 0 ; loop--) { sum = sum + array [loop]; } printf ("元素和为:%d" , sum); return 0 ; } 输出结果为: 元素和为:45
45、 C 语言实例 - 查找数组中最大的元素值 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 #include <stdio.h> int main () { int array [10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int loop, largest; largest = array [0 ]; for (loop = 1 ; loop < 10 ; loop++) { if ( largest < array [loop] ) largest = array [loop]; } printf ("最大元素为 %d" , largest); return 0 ; } 输出结果为: 最大元素为 9 实例 2 #include <stdio.h> int main () { int i, n; float arr[100 ]; printf ("输入元素个数(0~100): " ); scanf ("%d" , &n); printf ("\n" ); for (i = 0 ; i < n; ++i) { printf ("输入数字 %d: " , i+1 ); scanf ("%f" , &arr[i]); } for (i = 1 ; i < n; ++i) { if (arr[0 ] < arr[i]) arr[0 ] = arr[i]; } printf ("最大元素为 = %.2f" , arr[0 ]); return 0 ; } 输出结果为: 输入元素个数(0 ~100 ): 4 输入数字 1 : 12 输入数字 2 : 23 输入数字 3 : 1 输入数字 4 : 3 最大元素为 = 23.00
46、 C 语言实例 - 查找数组中最小的元素 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 使用 for 循环迭代出输出元素,并将各个元素相加算出总和,再除于元素个数: 实例 #include <stdio.h> int main () { int array [10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int loop, smallest; smallest = array [0 ]; for (loop = 1 ; loop < 10 ; loop++) { if ( smallest > array [loop] ) smallest = array [loop]; } printf ("最小元素为 %d" , smallest); return 0 ; } 输出结果为: 最小元素为 0
47、 C 语言实例 - 数组拆分与合并 将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组:
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 #include <stdio.h> int main () { int array [10 ] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }; int even[10 ], odd[10 ]; int loop, e, d; e = d = 0 ; for (loop = 0 ; loop < 10 ; loop++) { if (array [loop]%2 == 0 ) { even[e] = array [loop]; e++; }else { odd[d] = array [loop]; d++; } } printf (" 原始数组 -> " ); for (loop = 0 ; loop < 10 ; loop++) printf (" %d" , array [loop]); printf ("\n 偶数 -> " ); for (loop = 0 ; loop < e; loop++) printf (" %d" , even[loop]); printf ("\n 奇数 -> " ); for (loop = 0 ; loop < d; loop++) printf (" %d" , odd[loop]); return 0 ; } 输出结果为: 原始数组 -> 0 1 2 3 4 5 6 7 8 9 偶数 -> 0 2 4 6 8 奇数 -> 1 3 5 7 9 实例 #include <stdio.h> int main () { int array [10 ]; int even[5 ] = {0 , 2 , 4 , 6 , 8 }; int odd[5 ] = {1 , 3 , 5 , 7 , 9 }; int loop, index, e_len, o_len; e_len = o_len = 5 ; index = 0 ; for (loop = 0 ; loop < e_len; loop++) { array [index] = even[loop]; index++; } for (loop = 0 ; loop < o_len; loop++) { array [index] = odd[loop]; index++; } printf ("\n偶数 -> " ); for (loop = 0 ; loop < e_len; loop++) printf (" %d" , even[loop]); printf ("\n奇数 -> " ); for (loop = 0 ; loop < o_len; loop++) printf (" %d" , odd[loop]); printf ("\n合并后 -> " ); for (loop = 0 ; loop < 10 ; loop++) printf (" %d" , array [loop]); return 0 ; } 输出结果为: 偶数 -> 0 2 4 6 8 奇数 -> 1 3 5 7 9 合并后 -> 0 2 4 6 8 1 3 5 7 9
48、 C 语言实例 - 数组拷贝 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 将一个数组复制给另外一个数组: 实例 #include <stdio.h> int main () { int original[10 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 }; int copied[10 ]; int loop; for (loop = 0 ; loop < 10 ; loop++) { copied[loop] = original[loop]; } printf ("元素数组 -> 拷贝后的数组 \n" ); for (loop = 0 ; loop < 10 ; loop++) { printf (" %2d %2d\n" , original[loop], copied[loop]); } return 0 ; } 输出结果为: 元素数组 -> 拷贝后的数组 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 0 0
49、 C 语言实例 - 计算标准偏差 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 #include <stdio.h> #include <math.h> float calculateSD (float data[]) ; int main () { int i; float data[10 ]; printf ("输入10个元素: " ); for (i=0 ; i < 10 ; ++i) scanf ("%f" , &data[i]); printf ("\n标准偏差 = %.6f" , calculateSD(data)); return 0 ; } float calculateSD (float data[]) { float sum = 0.0 , mean, standardDeviation = 0.0 ; int i; for (i=0 ; i<10 ; ++i) { sum += data[i]; } mean = sum/10 ; for (i=0 ; i<10 ; ++i) standardDeviation += pow (data[i] - mean, 2 ); return sqrt (standardDeviation/10 ); } 输出结果为: 输入10 个元素: 1 2 3 4 5 6 7 8 9 10 标准偏差 = 2.872281
59、 C 语言实例 - 两个矩阵相加 使用多维数组将两个矩阵相加。
51、 C 语言实例 – 矩阵转换 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 #include <stdio.h> int main () { int a[10 ][10 ], transpose[10 ][10 ], r, c, i, j; printf ("输入矩阵的行与列: " ); scanf ("%d %d" , &r, &c); printf ("\n输入矩阵元素:\n" ); for (i=0 ; i<r; ++i) for (j=0 ; j<c; ++j) { printf ("输入元素 a%d%d: " ,i+1 , j+1 ); scanf ("%d" , &a[i][j]); } printf ("\n输入矩阵: \n" ); for (i=0 ; i<r; ++i) for (j=0 ; j<c; ++j) { printf ("%d " , a[i][j]); if (j == c-1 ) printf ("\n\n" ); } for (i=0 ; i<r; ++i) for (j=0 ; j<c; ++j) { transpose[j][i] = a[i][j]; } printf ("\n转换后矩阵:\n" ); for (i=0 ; i<c; ++i) for (j=0 ; j<r; ++j) { printf ("%d " ,transpose[i][j]); if (j==r-1 ) printf ("\n\n" ); } return 0 ; } 输出结果为: 输入矩阵的行与列: 2 3 输入矩阵元素: 输入元素 a11: 2 输入元素 a12: 3 输入元素 a13: 4 输入元素 a21: 5 输入元素 a22: 6 输入元素 a23: 4 输入矩阵: 2 3 4 5 6 4 转换后矩阵: 2 5 3 6 4 4
52、 C 语言实例 - 使用指针访问数组元素 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 () { int data[5 ], i; printf ("输入元素: " ); for (i = 0 ; i < 5 ; ++i) scanf ("%d" , data + i); printf ("你输入的是: \n" ); for (i = 0 ; i < 5 ; ++i) printf ("%d\n" , *(data + i)); return 0 ; } 输出结果为: 输入元素: 1 2 3 5 4 你输入的是: 1 2 3 5 4
53、 C 语言实例 - 使用引用循环替换数值 a、b、c 三个变量,通过引用按顺序循环替换他们的值。
54、 C 语言实例 - 判断最大值 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 #include <stdio.h> #include <stdlib.h> int main () { int i, num; float *data; printf ("输入元素个数(1 ~ 100): " ); scanf ("%d" , &num); data = (float *) calloc (num, sizeof (float )); if (data == NULL ) { printf ("Error!!! 内存没有分配。" ); exit (0 ); } printf ("\n" ); for (i = 0 ; i < num; ++i) { printf ("输入数字 %d: " , i + 1 ); scanf ("%f" , data + i); } for (i = 1 ; i < num; ++i) { if (*data < *(data + i)) *data = *(data + i); } printf ("最大元素 = %.2f" , *data); return 0 ; } 输出结果为: 输入元素个数(1 ~ 100 ): 5 输入数字 1 : 12 输入数字 2 : 32 输入数字 3 : 6 输入数字 4 : 56 输入数字 5 : 21 最大元素 = 56.00
55、 C 语言实例 - 删除字符串中的特殊字符 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 #include <stdio.h> int main () { char line[150 ]; int i, j; printf ("输入一个字符串: " ); fgets(line, (sizeof line / sizeof line[0 ]), stdin ); for (i = 0 ; line[i] != '\0' ; ++i) { while (!( (line[i] >= 'a' && line[i] <= 'z' ) || (line[i] >= 'A' && line[i] <= 'Z' ) || line[i] == '\0' ) ) { for (j = i; line[j] != '\0' ; ++j) { line[j] = line[j+1 ]; } line[j] = '\0' ; } } printf ("输出: " ); puts (line); return 0 ; } 输出结果为: 输入一个字符串: run4#$1 oob 输出: runoob
56、 C 语言实例 – 连接字符串 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 () { char s1[100 ], s2[100 ], i, j; printf ("输入第一个字符串: " ); scanf ("%s" , s1); printf ("输入第二个字符串: " ); scanf ("%s" , s2); for (i = 0 ; s1[i] != '\0' ; ++i); for (j = 0 ; s2[j] != '\0' ; ++j, ++i) { s1[i] = s2[j]; } s1[i] = '\0' ; printf ("连接后: %s" , s1); return 0 ; } 输出结果为: 输入第一个字符串: google 输入第二个字符串: runoob 连接后: googlerunoob
57、 C 语言实例 – 计算字符串长度 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 使用 strlen () #include <stdio.h> #include <string.h> int main () { char s[1000 ]; int len; printf ("输入字符串: " ); scanf ("%s" , s); len = strlen (s); printf ("字符串长度: %d" , len); return 0 ; } 输出结果为: 输入字符串: runoob 字符串长度: 6 实例 - 不使用 strlen () #include <stdio.h> int main () { char s[1000 ], i; printf ("输入字符串: " ); scanf ("%s" , s); for (i = 0 ; s[i] != '\0' ; ++i); printf ("字符串长度: %d" , i); return 0 ; } 输出结果为: 输入字符串: runoob 字符串长度: 6
58、 C 语言实例 – 查找字符在字符串中的位置 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 查找字符在字符串中的起始位置(索引值从 0 开始)。 实例 #include <stdio.h> int main () { char str[1000 ], ch; int i, frequency = 0 ; printf ("输入字符串: " ); fgets(str, (sizeof str / sizeof str[0 ]), stdin ); printf ("输入要查找的字符: " ); scanf ("%c" ,&ch); for (i = 0 ; str[i] != '\0' ; ++i) { if (ch == str[i]) ++frequency; } printf ("字符 %c 在字符串中出现的次数为 %d" , ch, frequency); return 0 ; } 输出结果为: 输入字符串: runoob 输入要查找的字符: o 字符 o 在字符串中出现的次数为 2
59、 C 语言实例 – 字符串中各种字符计算 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 计算字符串中的元音、辅音、数字、空白符。 实例 #include <stdio.h> int main () { char line[150 ]; int i, vowels, consonants, digits, spaces; vowels = consonants = digits = spaces = 0 ; printf ("输入一个字符串: " ); scanf ("%[^\n]" , line); for (i=0 ; line[i]!='\0' ; ++i) { if (line[i]=='a' || line[i]=='e' || line[i]=='i' || line[i]=='o' || line[i]=='u' || line[i]=='A' || line[i]=='E' || line[i]=='I' || line[i]=='O' || line[i]=='U' ) { ++vowels; } else if ((line[i]>='a' && line[i]<='z' ) || (line[i]>='A' && line[i]<='Z' )) { ++consonants; } else if (line[i]>='0' && line[i]<='9' ) { ++digits; } else if (line[i]==' ' ) { ++spaces; } } printf ("元音: %d" ,vowels); printf ("\n辅音: %d" ,consonants); printf ("\n数字: %d" ,digits); printf ("\n空白符: %d" , spaces); return 0 ; } 输出结果为: 输入一个字符串: runoob123 erkcomsww dfrunoob 元音: 8 辅音: 15 数字: 3 空白符: 2
60、 C 语言实例 - 字符串复制 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 将一个变量的字符串复制到另外一个变量中。 实例 - 使用 strcpy () #include <stdio.h> #include <string.h> int main () { char src[40 ]; char dest[100 ]; memset (dest, '\0' , sizeof (dest)); strcpy (src, "This is runoob.com" ); strcpy (dest, src); printf ("最终的目标字符串: %s\n" , dest); return (0 ); } 输出结果为: 最终的目标字符串: This is runoob.com 实例 - 不使用 strcpy () #include <stdio.h> int main () { char s1[100 ], s2[100 ], i; printf ("字符串 s1: " ); scanf ("%s" ,s1); for (i = 0 ; s1[i] != '\0' ; ++i) { s2[i] = s1[i]; } s2[i] = '\0' ; printf ("字符串 s2: %s" , s2); return 0 ; } 输出结果为: 字符串 s1: runoob 字符串 s2: runoob
61、 C 语言实例 - 字符串排序 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 按字典顺序排序。 实例 #include <stdio.h> #include <string.h> int main () { int i, j; char str[10 ][50 ], temp[50 ]; printf ("输入10个单词:\n" ); for (i=0 ; i<10 ; ++i) { scanf ("%s[^\n]" ,str[i]); } for (i=0 ; i<9 ; ++i) { for (j=i+1 ; j<10 ; ++j) { if (strcmp (str[i], str[j])>0 ) { strcpy (temp, str[i]); strcpy (str[i], str[j]); strcpy (str[j], temp); } } } printf ("\n排序后: \n" ); for (i=0 ; i<10 ; ++i) { puts (str[i]); } return 0 ; } 输出结果为: 输入10 个单词: C C++ Java PHP Python Perl Ruby R JavaScript PHP 排序后: C C++ Java JavaScript PHP PHP Perl Python R Ruby
62、 C 语言实例 - 使用结构体(struct) 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 使用结构体(struct )存储学生信息。 实例 #include <stdio.h> struct student { char name[50 ]; int roll; float marks; } s; int main () { printf ("输入信息:\n" ); printf ("名字: " ); scanf ("%s" , s.name); printf ("编号: " ); scanf ("%d" , &s.roll); printf ("成绩: " ); scanf ("%f" , &s.marks); printf ("显示信息:\n" ); printf ("名字: " ); puts (s.name); printf ("编号: %d\n" ,s.roll); printf ("成绩: %.1f\n" , s.marks); return 0 ; } 输出结果为: 输入信息: 名字: runoob 编号: 123 成绩: 89 显示信息: 名字: runoob 编号: 123 成绩: 89.0
63、 C 语言实例 - 复数相加 使用结构体(struct)将两个复数相加。
我们把形如 a+bi(a,b均为实数)的数称为复数,其中 a 称为实部,b 称为虚部,i 称为虚数单位。
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 #include <stdio.h> typedef struct complex { float real; float imag; } complex ; complex add (complex n1,complex n2) ; int main () { complex n1, n2, temp; printf ("第一个复数 \n" ); printf ("输入实部和虚部:\n" ); scanf ("%f %f" , &n1.real, &n1.imag); printf ("\n第二个复数 \n" ); printf ("输入实部和虚部:\n" ); scanf ("%f %f" , &n2.real, &n2.imag); temp = add(n1, n2); printf ("Sum = %.1f + %.1fi" , temp.real, temp.imag); return 0 ; } complex add (complex n1, complex n2) { complex temp; temp.real = n1.real + n2.real; temp.imag = n1.imag + n2.imag; return (temp); } 输出结果为: 第一个复数 输入实部和虚部: 2.3 4.5 第二个复数 输入实部和虚部: 3.4 5 Sum = 5.7 + 9.5 i
64、 C 语言实例 - 计算两个时间段的差值 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 #include <stdio.h> struct TIME { int seconds; int minutes; int hours; }; void differenceBetweenTimePeriod (struct TIME t1, struct TIME t2, struct TIME *diff) ; int main () { struct TIME startTime , stopTime , diff ; printf ("输入开始时间: \n" ); printf ("输入小时、分钟、秒:" ); scanf ("%d %d %d" , &startTime.hours, &startTime.minutes, &startTime.seconds); printf ("输入停止时间: \n" ); printf ("输入小时、分钟、秒: " ); scanf ("%d %d %d" , &stopTime.hours, &stopTime.minutes, &stopTime.seconds); differenceBetweenTimePeriod(startTime, stopTime, &diff); printf ("\n差值: %d:%d:%d - " , startTime.hours, startTime.minutes, startTime.seconds); printf ("%d:%d:%d " , stopTime.hours, stopTime.minutes, stopTime.seconds); printf ("= %d:%d:%d\n" , diff.hours, diff.minutes, diff.seconds); return 0 ; } void differenceBetweenTimePeriod (struct TIME start, struct TIME stop, struct TIME *diff) { if (stop.seconds > start.seconds){ --start.minutes; start.seconds += 60 ; } diff->seconds = start.seconds - stop.seconds; if (stop.minutes > start.minutes){ --start.hours; start.minutes += 60 ; } diff->minutes = start.minutes - stop.minutes; diff->hours = start.hours - stop.hours; } 输出结果为: 输入开始时间: 输入小时、分钟、秒:12 34 55 输入停止时间: 输入小时、分钟、秒: 8 12 5 差值: 12 :34 :55 - 8 :12 :5 = 4 :22 :50
65、 C 语言实例 - 将字符串写入文件 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 #include <stdio.h> #include <stdlib.h> /* exit() 函数 */ int main () { char sentence[1000 ]; FILE *fptr; fptr = fopen("runoob.txt" , "w" ); if (fptr == NULL ) { printf ("Error!" ); exit (1 ); } printf ("输入字符串:\n" ); fgets(sentence, (sizeof sentence / sizeof sentence[0 ]), stdin ); fprintf (fptr,"%s" , sentence); fclose(fptr); return 0 ; } 输出结果为: 输入字符串: runoob.com 打开文件 runoob.txt: $ cat runoob.txt runoob.com
66、 C 语言实例 - 从文件中读取一行 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 从文件中读取一行。 文件 runoob.txt 内容: $ cat runoob.txt runoob.com google.com 实例 #include <stdio.h> #include <stdlib.h> // exit() 函数 int main () { char c[1000 ]; FILE *fptr; if ((fptr = fopen("runoob.txt" , "r" )) == NULL ) { printf ("Error! opening file" ); exit (1 ); } fscanf (fptr,"%[^\n]" , c); printf ("读取内容:\n%s" , c); fclose(fptr); return 0 ; } 输出结果为: 读取内容: runoob.com
67、 C 语言实例 - 输出当前文件执行代码 输出当前文件执行代码,FILE 为当前执行的文件常量。
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 #include <stdio.h> int main () { FILE *fp; char c; fp = fopen(__FILE__,"r" ); do { c = getc(fp); putchar (c); } while (c != EOF); fclose(fp); return 0 ; } 输出结果为: #include <stdio.h> int main () { FILE *fp; char c; fp = fopen(__FILE__,"r" ); do { c = getc(fp); putchar (c); } while (c != EOF); fclose(fp); return 0 ; }
68、C 语言实例 - 约瑟夫生者死者小游戏 30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
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 #include <stdio.h> int c = 0 ;int i = 1 ;int j = 0 ;int a[30 ] = { 0 };int b[30 ] = { 0 }; int main () { while (i<=31 ) { if (i == 31 ) { i = 1 ; } else if (c == 15 ) { break ; } else { if (b[i] != 0 ) { i++; continue ; } else { j++; if (j != 9 ) { i++; continue ; } else { b[i] = 1 ; a[i] = j; j = 0 ; printf ("第%d号下船了\n" , i); i++; c++; } } } } } 执行以上实例,输出结果为: 第9 号下船了 第18 号下船了 第27 号下船了 第6 号下船了 第16 号下船了 第26 号下船了 第7 号下船了 第19 号下船了 第30 号下船了 第12 号下船了 第24 号下船了 第8 号下船了 第22 号下船了 第5 号下船了 第23 号下船了
69、C 语言实例 - 五人分鱼 A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。
C、D、E依次醒来,也按同样的方法拿鱼。
问他们台伙至少捕了多少条鱼?以及每个人醒来时见到了多少鱼?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int n,x,j,k,l,m; for (n=5 ;;n++){ j=4 *(n-1 )/5 ; k=4 *(j-1 )/5 ; l=4 *(k-1 )/5 ; m=4 *(l-1 )/5 ; if (n%5 ==1 &&j%5 ==1 &&k%5 ==1 &&l%5 ==1 &&m%5 ==1 ){ printf ("至少合伙捕鱼:%d条\n" ,n); printf ("分别见到鱼的条数:%d %d %d %d\n" ,j,k,l,m); break ; } } return 0 ; } 以上实例输出结果为: 至少合伙捕鱼:3121 条 分别见到鱼的条数:2496 1996 1596 1276