C语言总结(一)scanf(), printf()

时间:2022-09-05 22:00:54

      C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。(来自百度百科)

首先为大家简单介绍一些C语言常用的函数:

1、printf()函数:

printf()函数是格式化输出函数,例如输出一个整数d, 就是printf("%d\n", d); 一个程序如果没有输出,我们就看不到结果,那就失去了我们做这个程序的意义,只是计算机在自娱自乐了......, 下面看一个最简单的程序"Hello world!"

#include<stdio.h>
int main() {
    printf("Hello world!");
    return 0;
}

 大家都知道会输出"Hello world!", 那请大家接下来请看下面的一个例子:

#include<stdio.h>
int main() {
    printf("\n%d\n", printf("Hello world!"));  // "\n",是换行的意思
    return 0;
}

你知道会输出什么吗?可能你已经猜对了……,将会输出两行,结果如下:

Hello world!

12

为什么呢?细心观察的同学会发现"Hello world!",刚好是12个字符,这说明了什么呢?说明"printf("Hello world!")"的值是12,即printf()函数有返回值,但它的返回值是什么呢?

如果你有兴趣可以再写几个例子在你的编译器上试一试下面的语句,比如:

printf("%d\n", printf("%d\n", 123);
printf("%d\n", printf("%d\n", 1234);
printf("%d\n", printf("%d\n", 12345);

 看到了输出结果,也许你就会知道它的返回值是什么了,这里我就不多说了,相信大家可以举一反三的。

printf()函数的形式有:printf("输出格式", 输出的变量或常量);或者printf("Hello world"); 直接输出一个字符串。下来给大家出几道题目:

"%3d", "%03d", "%i", "%.3lf", "%10.5lf", 这些输出格式分别是什么呢?

当然输出格式不止这些,大家可以下去多试试其它格式的输入输出,多加练习总结就可以了。 下面来学习一下scanf()函数吧……

 

2、scanf()函数:

 scanf()函数是格式化输入函数,与printf()函数相对应,它的输入形式就不用说了吧,和printf()基本一致。那就说一些大家可能会犯的错误吧,请看下面的程序:

#include<stdio.h>
int main() {
    int d;   char c;
    scanf("%d", &d);
    scanf("%c", &c);
    printf("%d\t%c\n", d, c);
    return 0;
}

如果输入:1 a     那么它会输出什么?

会输出:1  a     会是这样么?答案是否定的,不信你可以试一试, 它会输出一个1和一个空格,为什么呢?我们来分析一下:你输入的数据一共有3个,第一个是1,被d接收,第二个是空格,被c接收,所以才会输出:1  空格; 那输入的另一个'a'跑哪儿了?它还在缓冲区里边,直到碰到下一个scanf()语句才会被接收,那怎么解决这个问题呢?我们想要的是让c接收字符'a', 怎么办呢?很明显我们可以把那个空格字符给接收了就OK了,

1、可以在两个scanf()语句中间加个getchar();语句把空格字符给接收了,

2、或者把第一条语句改为scanf("%d ", &d);

3、或者把第二条语句改为scanf(" %c", &c); 当然还有其它办法,这里就只写出来这么多……

 

这两个函数都很简单,但是想要灵活应用也是有难度的,下面给大家出一道题目:

来源:http://ayit.acmclub.com/index.php?app=problem_title&id=233&problem_id=4149

题目大意是:给出一个将八进制或十六进制数字转换成十进制,并输出。其中如果以"0x"(零x)开头的则表示是十六进制,如果以"0"(零)开头,则表示是八进制。有多组测试数据。

这道题我们当然可以用进制转换的方法来解决,但是还有更好的方法,请看代码:

#include <stdio.h>
int main() {
    int t, d;
    while( ~scanf("%d", &t) ) {
        while( t-- ) {
            scanf("%i", &d),
            printf("%i\n", d);
        }
    }
}

 这里就巧用了scanf()函数,"%i", 可以格式化输入八进制,十进制和十六进制的数字,然后转化为十进制输出。当然还有很多,有兴趣的可以研究一下。

 

如有错误,欢迎大家指出。谢谢!