1.getchar()函数
getchar函数的功能是接收用户从键盘上输入的一个字符。其一般调用形式为:
getchar();
getchar会以返回值的形式返回接收到的字符.
getchar()函数执行一次会从键盘缓冲区(如果有内容就读取,没有内容就等待用户输入并以回车结束,回车相当于加上一个换行符\n)顺序读取一个字符并返回此ASCII码。
scanf()在读取输入时会在缓冲区中留下一个字符’\n’。getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)
回车键顶替了输入字符的第一个字符,如果不添加getchar();就会输出错误。
例题:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h> #include <stdlib.h>
int main() { char a; printf("Input a lowercase letter:"); a=getchar(); printf("Output:\n"); printf("%c(%d)\n",a,a); printf("%c(%d)",a-32,a-32); return 0; }
|
Tips:
ASCII码中:大写字母+32=小写字母。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main(void) { char ch;
printf("Input a lowercase letter:"); ch = getchar();
printf("Output:\n"); printf("%c(%d)\n", ch, ch); printf("%c(%d)\n", ch - 32, ch - 32); return 0; }
|
2.puts()函数
在输出字符串时都使用printf,通过“%s”输出字符串。其实还有更简单的方法,就是使用 puts() 函数。使用 puts() 显示字符串时,系统会自动在其后添加一个换行符。
1 2 3
| printf("%s\n", name); \*等价于*\ puts(name);
|
3.%8d %-8d
%8d表示显示长度最小为8个字符,不足的话左边补空格,比如 123456,显示的是“空格空格123456”。
%-8d表示显示长度最小为8个字符,不足的话右边补空格,比如 123456,显示的是“123456空格空格”。
4.常用占位符
| int |
%d |
| char |
%c |
| double |
%lf |
| float |
%f |
| 使用十六进制数字0f的无符号十六进制整数 |
%x |
| 使用十六进制数字0F的无符号十六进制整数 |
%X |
| 字符串 |
%s |
5.If判断用双等于“==”(为什么总记不住!!!= ^ =)
6.打印图形问题
Method:
用两层循环
外层循环 控制行(行数、换行)
内层循环 控制列( 列数、列的符号 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i++){ for(j=0;j<=i;j++){ printf("@"); } printf("\n"); } return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i++){ for(j=n;j>i;j--){ printf("@"); } 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
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i++){ for(j=0;j<i;j++){ printf(" "); } for(j=n;j>i;j--){ printf("@"); } 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
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i++){ for(j=n;j>i;j--){ printf(" "); } for(j=0;j<=i;j++){ printf("@"); } 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
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i++){ for(j=n;j>i;j--){ printf(" "); } for(j=0;j<=i;j++){ printf(" @"); } 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
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j,k; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i=i+2){ for(j=0;j<=i;j++){ printf("@ "); } printf("\n"); } for(i=0;i<n;i=i+2){ for(k=n;k>i;k--){ printf("@ "); } 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
| #include <stdio.h> #include <stdlib.h>
int main() { int n,i,j; printf("Please input n:"); scanf("%d",&n); printf("Output:\n"); for(i=0;i<n;i++){ for(j=0;j<i;j++){ printf(" "); } for(j=n;j>i;j--){ printf("@ "); } printf("\n"); } return 0; }
|

7.打印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
| #include <stdio.h> #include <stdlib.h>
int main(void) { int i, j, n;
printf("Please input n: "); scanf("%d", &n);
printf("Output:\n"); for (i = 1; i <= n; i++) { for (j = 1; j < i; j++) { printf(" "); } if (i == n) { printf("@\n"); continue; } printf("@"); for (j = 1; j <= 2 * (n - i) - 1; j++) { printf(" "); } printf("@"); printf("\n"); } for (i = 1; i <= n - 1 ; i++) { for (j = 1; j < n - i; j++) { printf(" "); } printf("@"); for (j = 1; j <= 2 * i - 1; j++) { printf(" "); } printf("@"); printf("\n"); } return 0; }
|
8.四舍五入
输入:数字双精度num和n。 num是被四舍五入的数,n是保留的小数位数(n>=0)输出:保留的结果
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h>
int main() { double num; int n; printf("Please input num and n: \n"); scanf("%lf,%d",&num,&n); printf("Output:\n"); printf("%.*f\n",n,num); return 0; }
|
这里用到了%.f的表达,其中.是printf函数的格式附加字符。*表示不确定的变量,可以用变量的值代替。
这里是制定宽度的数值的输出,如果制定宽度值为*号,参数列表中需要用一个整型参数值提供。
9.while((c=getchar())!=’\n’)
意思是:一直循环,等到用户输入回车为止,结束循环。
10.最大公约数 最小公倍数——辗转相除法
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
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> #include <stdlib.h> int main() { int m=0,n=0,t=0,r=0,p=0; printf("n,m:"); scanf("%d,%d",&n,&m); if(n<m){ t=n; n=m; m=t; } p=n*m; while(m!=0){ r=n%m; n=m; m=r; } printf("zuidagongyueshu:%d\n",n); printf("zuixiaogongbeishu:%d",p/n); return 0; }
|
11.绝对值 abs()
12.’\0’是判定字符数组结束的标识,表示这串字符到结尾了;
13.while(*x&&y)等价于while(x!=0&&*y!=0)
14.ceil() 函数:向上取整
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() { double v,d,s; int i,t; printf("Please input the VUL and d: "); scanf("%lf%lf",&v,&d); printf("Output:\n"); while(v!=0&&d!=0) { s=v/d; t=ceil(v/d); for(i=1;;i++) { s-=i; if(s<=0) break; t++; } printf("%d\n",t); printf("continue input: "); scanf("%lf%lf",&v,&d); } return 0; }
|
Author:
Yannis
Permalink:
http://yoursite.com/2019/12/21/C%E8%AF%AD%E8%A8%80%E6%80%BB%E7%BB%93/
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE
Slogan:
生活就是这样一半惊喜,一半遗憾。