1.getchar()函数

getchar函数的功能是接收用户从键盘上输入的一个字符。其一般调用形式为:
getchar();
getchar会以返回值的形式返回接收到的字符.

1
2
char c;  /*定义字符变量c*/
c=getchar(); /*将读取的字符赋值给字符变量c*/

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;
}