学习c语言前言第一个c语言程序谈谈函数
函数的定义:函数的作用域以及函数声明: scanf和printf函数理解
scanf函数printf函数printf函数和scanf函数的一些嵌套问题
学习c语言前言在学习c语言之前会谈到计算机语言的发展。
1、机器语言:也就是一串由0和1构成的二进制代码,可以被计算机直接识
别和接受。
2、符号语言:不能被计算机直接识别和执行,需要将符号语言转换为机器
指令,这个过程叫做汇编
注意:机器指令也就是计算机能够直接识别和接受的二进制代码
3、高级语言:不能够被直接识别和接受,需要编译器将高级语言写的源程序
文件转换为机器能够识别的程序,也就是目标程序
其中机器语言和符号语言是低级语言第一个c语言程序
#include//包含标准输入输出函数的头文件 int main() //程序的入口是main函数 { //打印双引号内的字符串,n是转义字符,用来换行 printf("hello world!n"); return 0; }
分析代码
1、#include
2、main函数是程序执行的入口
3、printf函数是用来打印输出双引号内的内容,其中n是用来换行的
4、return 0(两个作用)
作用1:用来结束程序运行作用2:将返回值0发送到调用main函数的操作系统,告诉操作系统程序是正常结束,如果返回值不是0那么就不是正常结束。 谈谈函数 函数的定义:
函数的返回值类型 函数名 (形参)
例:
#includeint main(){ //定义函数 int a(int a){ return a; } //a(3)为函数的调用 printf(a(3)); return 0; }
上面的int为函数返回值类型,a为函数名,(int a)中int是形参的参数类型,a为形参名
a(3)是调用函数,3为实参,通过函数调用将实参传递给形参。
注意:这个函数返回值类型,可以是void,int ,float,double等等,但void时不用写return 返回值,其他则必须写return.
函数的作用域以及函数声明:从函数的定义或声明处到该.cpp源文件末尾结束
下面一段代码由于函数作用域没有包含main函数,导致报错
#includeint main() { a(); return 0; } void a(){ printf("你好"); }
若想修改,即可在main函数之前添加函数声明即可。
???什么是函数声明,按上面例子,函数声明就是:void a();
我在添加函数声明直接添加到了#include
#includevoid a(); //函数声明 int main() { a(); return 0; } void a(){ printf("你好"); }
当然还有一个方法就是将定义的函数都写在main函数前面,注意函数不能嵌套定义(不能在一个函数中定义函数)
例如:将定义的所有函数都放到main函数之前
#includescanf和printf函数理解 scanf函数void a(){ printf("你好"); } void b(){ printf("世界"); } int main() { a(); b(); return 0; }
用于接收用户输入数据
源代码:
#include#include int main() { int a; scanf("%d",&a); printf("%d",a); return 0; }
输出结果:
5 5 Process returned 0 (0x0) execution time : 2.899 s Press any key to continue.
scanf("%d",&a);中%d是整形格式说明符,&a用于找到定义的变量a
格式说明符:%d,%c,%s,%f等等
- scanf函数按照格式说明符输入数据后,需要按回车来执行,是因为每次按回车会将键盘缓冲区里的内容放到程序区对应的变量中,然后键盘缓冲区中会留下一个换行符(n),而这个换行符被程序区的变量所接收
例如:
#includeint main() { int a; char b; scanf("%d",&a); scanf("%c",&b); //字符用单引号,字符串用双引号 if(b=='n') printf("b的值是换行符"); return 0; }
结果:
6 b的值是换行符 Process returned 0 (0x0) execution time : 2.516 s Press any key to continue.
b变量用来接收键盘缓冲区中的换行符(n)
- 当scanf()函数遇到错误输入时会自动跳过这行scanf代码
例如:
#includeint main() { int a=8; scanf("%d",&a); printf("%d",a); return 0; }
当发生错误输入时,输入一个字符时,将不会执行scanf这行语句
c 8 Process returned 0 (0x0) execution time : 1.512 s Press any key to continue.
- 在scanf函数的格式说明符中不要添加一个或多个空白符,否则程序会一直卡在输入那儿。
空白符:空格,n,tap,t等等
例如:
由于此处scanf("%dn",&a)中有一个n,导致程序一直在输入状态,所以在双引号中不要加空格,tap,n等空白符。
4.注意在使用连续输入多个内容,注意要用空格,或者回车,或者tap 键分隔。(但是输入多个字符时不需要分隔)
代码:
输入连续两个数字:
#includeint main() { int a,b; scanf("%d%d",&a,&b); printf("%d %d",a,b); return 0; }
结果:
3 6 3 6 Process returned 0 (0x0) execution time : 2.627 s Press any key to continue.
此处输入连续两个数字中用到了空格来分隔
输入连续两个字符:
代码:
#includeint main() { char a,b; scanf("%c%c",&a,&b); printf("%c%c",a,b); return 0; }
结果:
a b a Process returned 0 (0x0) execution time : 3.556 s Press any key to continue.
此处由于用空格来分割,导致b的值成为一个空格
所以应该这样输入:
结果:
ab ab Process returned 0 (0x0) execution time : 1.847 s Press any key to continue.
这样就不会出现错误
5、还有一种情况注意这样输入,否则会出现输出的值是一个不确定的数
代码:
#includeint main() { int a; scanf("acv%dl",&a); printf("%d",a); return 0; }
结果(正确输入)
acv5dl 5 Process returned 0 (0x0) execution time : 14.182 s Press any key to continue.
结果(错误输入)
56 0 Process returned 0 (0x0) execution time : 2.899 s Press any key to continue.
☆也就是说在输入内容时一定要和双引号内的内容进行匹配。
printf函数 printf函数和scanf函数的一些嵌套问题1、printf函数里嵌套printf函数
代码:
#includeint main() { printf("%d",printf("xinkain")); return 0; }
结果:
xinkai 7 Process returned 0 (0x0) execution time : 0.041 s Press any key to continue.
注意:结果先输出里面的printf内容,然后外面printf输出里面字符串的个数7
2、printf函数里面嵌套scanf函数
代码:
#includeint main() { int a,b,c; printf("%d",scanf("%d",&a)); printf("%d",scanf("%d%d%d",&a,&b,&c)); return 0; }
结果:
1 1 1 2 c 2 Process returned 0 (0x0) execution time : 6.138 s Press any key to continue.
此处注意:输出的2是按照正确格式输入的内容,三个%d,只输入两个数字,故结果为2



