赞
踩
目录
头文件:#include <stdio.h>
原型:int getchar(void);
功能:从终端读取一个字符
参数:无
返回值:从终端读取到的字符
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- /*int ch;
- ch = getchar();
- printf("ch = %c %d\n",ch,ch);
- */
- int a,b,c;
- a = getchar();
- b = getchar();
- c = getchar();
- printf("a = %c %d\n",a,a);
- printf("b = %c %d\n",b,b);
- printf("c = %c %d\n",c,c);
-
- return 0;
- }
头文件:#include <stdio.h>
原型:int putchar(int c);
功能:向终端输出一个字符
参数:c:要输出的字符
返回值:输出的字符
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- //参数为一个字符
- putchar('w');
- putchar('\n');
- //参数为一个ascii
- putchar(97);
- putchar(10);
-
- int a = 'h';
- int b = 10;
- putchar(a);
- putchar(b);
- return 0;
- }
头文件:#include <stdio.h>
原型:char *gets(char *s);
功能:从终端读取一个字符串
参数:s:保存读取的数据的内容:一般是一个数组,char buf[32]
返回值:保存的字符串
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- char str[32] = {0};
- gets(str);
- printf("str = %s\n",str);
- return 0;
- }
头文件:#include <stdio.h>
原型:char *puts(const char *s);
功能:向终端输出一个字符串
参数:s:要输出的内容
返回值:输出的字符串的字节数
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- //puts函数自带换行功能
- puts("hellworld");
-
- char s[32] = "helloworld";
- puts(s);
-
- char buf[32] = {0};
- gets(buf);
- puts(buf);
- return 0;
- }
printf函数是一个二行缓冲函数(1024k),先将内容写到缓存区,满足一定条件后,才会将内容写入对应的文件或者流中
1.缓冲区满
2.雪茹的字符中有'\n','\r'
3.调用fflush或者stdout手动刷新缓冲区
4.调用scanf等要从缓冲区读取数据时,也会将缓冲区内的数据刷新
5.程序结束时也会刷新缓冲区
头文件:#include <stdio.h>
原型:int printf(const char *format,……)
功能:向终端按照格式输出字符串
参数:format:带格式要输出的内容
普通字符:原样输出
例如:printf("hello world!\n");
格式说明:%[修饰符]格式字符,用于指定格式输出
例如:printf("a = %d\n",a);
%d:32位有符号十进制数
%u:32位无符号十进制数
%o:输出八进制数
%x:输出十六进制数
%e:输出指数形式数
%c:输出字符
%s:输出字符串
%%:输出%
%p:输出地址
附加格式字符:
#:用于输出八进制或者十六进制的前导符
l:用于输出long类型或者double类型的数据
m:设置输出内容的宽度
如果数据的宽度大于等于m,则没有影响,
如果数据的宽度小于m,则默认右对齐,左缺的位置补空格
0:当设置宽度后,默认右对齐,左边空格的位置补0
-:将右对齐改成左对齐
.n:保留小数点n位
返回值:输出的字节个数
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- int num = 256;
- printf("%d%d%d\n",num,num,num);
- //5:将输出的宽度设置为5
- printf("%5d%5d%5d\n",num,num,num);
- //0:右对齐左边补0
- printf("%05d%05d%05d\n",num,num,num);
- //-:右对齐改成左对齐
- printf("%-5d%-5d%-5d\n",num,num,num);
- //:0不能用于左对齐
- printf("%-05d%-05d%-05d\n",num,num,num);
-
- float f = 45.45678912345;
- printf("f = %f\n",f);
- //.2:保留小数点后2位,并且会四舍五入
- printf("f = %6.3f\n",f);
- printf("f = %p\n",&f);
- return 0;
- }
头文件:#include <stdio.h>
原型:int scanf(const char *format,……);
功能:按照格式向终端输入指定的内容
参数:format:要输入的内容
格式字符:
%d:整形数据
%f:浮点型数据
%c:字符数据
%s:字符串数据
。。。
返回值:成功保存的内容的个数
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- /*
- int num;
- int ret = scanf("%d",&num);
- printf("ret = %d,num = %d\n",ret,num);
- */
- /*
- char ch;
- scanf("%c",&ch);
- printf("ch = %c %d\n",ch,ch);
- */
- /*
- char buf[32] = {0};
- //scanf默认只能保存一个不带空格的字符串
- scanf("%s",buf);
- //找到换行符才结束输入
- scanf("%[^\n]",buf);
- printf("buf = %s\n",buf);
- */
- /*int num;
- scanf("[%d]",&num);
- printf("num = %d\n",num);
- */
-
- int a,b,c;
- scanf("%d,%d,%d",&a,&b,&c);
- printf("a = %d,b = %d,c = %d\n",a,b,c);
- return 0;
- }
m:设置输入的宽度,如果输入的内容超过设置的宽度,只会保存设置宽度的内容
*:抑制符,当带有*的格式的字符输入的内容不会保存到与之对应的变量中,而是将下一个不带*的格式的字符的内容保存在之前的变量中
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- /*
- int year,month,day;
- scanf("%2d%2d%2d",&year,&month,&day);
- printf("%d/%d/%d\n",year,month,day);
-
- char buf[32] = {0};
- scanf("%5s",buf);
- printf("buf = %s\n",buf);
- */
-
- int a,b,c;
- scanf("%d %*d %d %*d %d",&a,&b,&c);
- printf("a = %d,b = %d,c = %d\n",a,b,c);
- return 0;
- }
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- #if 0
- int a,b,c;
- scanf("%d %d %d",&a,&b,&c);
- printf("a = %d,b = %d,c = %d\n",a,b,c);
- #endif
- #if 0
- char a,b,c;
- scanf("%c%c%c",&a,&b,&c);
- printf("a = %c,b = %c,c = %c\n",a,b,c);
- #endif
- /* 一个scanf处理垃圾字符 */
- //方法1:使用抑制符
- /* char a,b,c;
- scanf("%c%*c%c%*c%c",&a,&b,&c);
- printf("a = %c,b = %c,c = %c\n",a,b,c);*/
- //方法2:使用空格隔开
- /*char a,b,c;
- scanf("%c %c %c",&a,&b,&c);
- printf("a = %c,b = %c,c = %c\n",a,b,c);*/
- /*多个scanf处理垃圾字符*/
- int id;
- char name[32];
- char sex;
- int score;
- char bg;
- /*
- printf("请输入学号:");
- scanf("%d",&id);
- printf("请输入姓名:");
- scanf("%s",name);
- printf("请输入性别:");
- scanf("%c",&sex);
- printf("请输入分数:");
- scanf("%d",&score);
- printf("请输入年龄:");
- scanf("%d",&age);
- */
-
- #if 0 //使用抑制符
- printf("请输入学号:");
- scanf("%d",&id);
- printf("请输入姓名:");
- scanf("%s",name);
- printf("请输入性别:");
- scanf("%*c%c",&sex);
- printf("请输入分数:");
- scanf("%d",&score);
- printf("请输入是否有女朋友:");
- scanf("%*c%c",&bg);
- #endif
- #if 0 //使用getchar
- printf("请输入学号:");
- scanf("%d",&id);
- printf("请输入姓名:");
- scanf("%s",name);
- getchar();
- printf("请输入性别:");
- scanf("%c",&sex);
- printf("请输入分数:");
- scanf("%d",&score);
- getchar();
- printf("请输入是否有女朋友:");
- scanf("%c",&bg);
- #endif
- // 使用空格
- printf("请输入学号:");
- scanf("%d",&id);
- printf("请输入姓名:");
- scanf("%s",name);
- printf("请输入性别:");
- scanf(" %c",&sex);
- printf("请输入分数:");
- scanf("%d",&score);
- printf("请输入是否有女朋友:");
- scanf(" %c",&bg);
- return 0;
- }
控制语句主要解决一些代码需要执行,一些代码不执行,或者相同的代码要执行很多次。
分类:
分支语句:
- if...esle
- switch...case...
循环语句:
- goto
- while
- do...while...
- for
辅助控制关键字:
- goto
- break
- continue
- return
- if(表达式)
- {
- 语句块
- }
- 或:
- if(表达式)
- {
- 语句块1
- }
- else
- {
- 语句块2
- }
-
- if(表达式1)
- {语句块1}
- else if(表达式2)
- {语句块2}
- else
- {语句块3}
- 注意事项:
- 1.if的表达式非0即为真
- if(0) //假
- if(1) //真
- if(0.000000001) //真
- if(a) ---->if(a != 0)
- if(!a) ---->if(a == 0)
- if(a = 0) //假
- if(a = 1) //真
- 2.if或者else语句后面只有一条代码,可以不加{},但是一般为了不产生歧义,最好加上
- 3.else后面不能跟表达式
- if和else只能执行一条
- else不能单独使用,而且else默认和与之最近的一个if关联。
- if(表达式1)
- {
- if(表达式2)
- {
-
- }
- }
在终端输入一个字符,如果是大写字母,将其转换为小写字母,如果是小写字母,将其转化为大写字母;并输出,如果是字符数字,将其转化为数字输出。
‘h’---->'H'
'H'---->'h'
'6'----->6
- #include <stdio.h>
-
- int main()
- {
- char a;
- printf("please input :\n");
- scanf("%c",&a);
- if(a >= 'A' && a <= 'Z')
- {
- a = a + 32;
- printf("a = %C\n",a);
- }
- else if(a >= 'a' && a <= 'z')
- {
- a = a - 32;
- printf("a = %c\n",a);
- }
- else if(a >= '0' && a <= '9')
- {
- a = a - 48;
- printf("a = %d\n",a);
- }
- else
- {
- printf("error!\n");
- }
- return 0;
- }
switch语句和if语句一样,也是分支语句,只不过switch语句用于条件过多的情况下使用
- switch(变量或者变量表达式)
- {
- case 常量或者常量表达式1;
- 语句块1;
- break;
- case 常量或者常量表达式2;
- 语句块2;
- break;
- case 常量或者常量表达式3;
- 语句块3;
- break;
- case 常量或者常量表达式4;
- 语句块4;
- break;
- default
- 语句块n;
- break;
- }
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- int num;
- printf("***1.注册 2.登录 3.退出***\n");
- printf(">>>> ");
- scanf("%d",&num);
- switch(num)
- {
- case 1:
- printf("正在执行注册操作\n");
- break;
- case 2:
- printf("正在执行登录操作\n");
- break;
- case 3:
- printf("正在退出,请稍等..\n");
- break;
- default:
- printf("您输入有误,请重新输入\n");
- break;
- }
- return 0;
- }
switch后面的表达式是一个变量或者变量表达式
case只能是一个常量或者常量表达式,二千这个表达式不能是范围
case后面如果有多条语句,不用加{}
switch语句中只能判断整形数据和字符型数据,不能是浮点型或者字符串
default后面可以不加break
break主要是为了结束switch语句,如果不加,从指定case语句之后一直向下执行所有语句块,直到遇到break为止。
我们在写代码中,往往会出现有些代码可能会执行很多次的情况,那么为了简便书写,可以通过循环来实现,这样可读性,逻辑性都会更好
- while(表达式)
- {
- 语句块
- }
- 注意事项:循环条件不能永远为真,必须要有循环结束的条件,如果永远循环,将其称之为死循环,例如while(1)
- #include <stdio.h>
- #include <unistd.h>
- int main(int argc, const char *argv[])
- {
- /*
- while(1)
- {
- printf("helloworld\n");
- sleep(1);
- }*/
- int i = 5;
- while(i--)
- {
- printf("helloworld\n");
- }
- //程序员40W,房价200W,10%,如果不涨工资的情况下,不贷款,问多少年可以买房?
- int year = 1,sum = 40,price = 200;
- while(1)
- {
- year++;
- sum += 40;
- price += price*0.1;
- if(sum >= price)
- {
- printf("第%d年买房\n",year);
- break;
- }
- printf("第%d年买不起房\n",year);
-
- }
- return 0;
- }
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- //do..while循环会先执行一次,然后再判断,所以不管表达式是否为假,都会先执行一次
- do
- {
- printf("hello world!\n");
- }while(0);
- return 0;
- }
3.2.1 格式
- for(表达式1;表达式2;表达式3)
- {
- 语句块
- }
- 执行顺序:先执行表达式1,执行完毕后执行表达式2,如果表达式2为真,则执行语句块,执行完语句块后
注意:for循环和while循环是通用的
- int i = 0;
- while(i < 10)
- {
- i++;
- }
- for(i = 0; i < 10;i++)
- {
- ...
- }
- for(表达式1;表达式2;表达式3)
- {
- 语句块;
- }
- 1.表达式1:主要对要计数的变量赋初值,整个循环只执行一次,也可以省略不写
- 2.不管省略哪个表达式,分号不能丢
- 3.表达式2主要是判断条件,条件为真执行语句块,条件为假循环结束,如果省略表达式2不写,会造成死循环
- for(i = 0;;i++)
- 4.表达式3就是为了改变计数变量的值从而影响循环的次数,如果省略表达式3不写,会造成死循环,当然可以把表达式3放在语句块中农
- 死循环:for(;;);
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- int i;
- /*
- for(i = 0,printf("i = %d\n",i);i < 5,printf("i = %d\n",i);i++,printf("i = %d\n",i))
- {
- printf("hello world!\n");
- }*/
- int j;
- for(j = 0 ;j < 3;j++)
- {
- for(i = 0 ; i < 5;i++)
- {
- if(1 == i)
- {
- continue; //结束本次循环,继续下一次循环
- // break; //结束这一层循环
- }
- printf("hello world! %d\n",i);
- }
- printf("hello nanjing\n");
- }
- return 0;
- }
水仙花数:是指一个三位数的每一位的立方和等于这个数,则这个数称之为水仙花数
num = 个位的立方+十位的立方+百位数的立方
- #include <stdio.h>
-
- int main()
- {
- int i;
- int g, s, b;
- for(i=100;i<1000;i++)
- {
- g = i % 10;
- s = i / 10 % 10;
- b = i / 100;
- if(i == g*g*g + s*s*s + b*b*b)
- {
- printf("the number is:%d\n",i);
- }
- }
- return 0;
-
- }
goto主要用于在一个函数内进行跳转,可以跳转到当前函数的任意位置
注意:不建议过多使用,可读性,逻辑性会变差
- #include <stdio.h>
- int main(int argc, const char *argv[])
- {
- #if 0
- int num = 100;
- printf("111111111111111111111111\n");
- goto NEXT;
- printf("hello world!\n");
- num = 888;
- printf("hello nanjing");
- NEXT:
- printf("hello beijing\n");
- printf("num = %d\n",num);
- printf("222222222222222222222222222");
- #endif
- int i = 0;
- TEMP:
- printf("hello world\n");
- i++;
- if(i <= 9)
- {
- goto TEMP;
- }
- return 0;
- }
break在switch语句中主要用于结束指定的语句块
break主要在循环语句中使用,功能是结束本次循环
注意:break除了在switch语句中以外,其它地方只能在循环中使用
continue只能在循环中使用,表示退出本次循环,下次循环接着运行
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- int i;
- for(i = 1;i <= 10;i++)
- {
- if(i == 5)
- {
- return i;
- }
- printf("i = %d\n",i);
- }
- printf("hello world!\n");
- return 0;
- }
这里会返回i而不会返回0
数组:
保存一组相同类型的数据
不管是几维数组,都是开辟一段连续的内存空间
数组是一种构造数据类型(数组,结构体,共用体)
<存储类型> <数据类型> <数组名> [数组下标]
存储类型:auto,register,static,extern
数据类型:基本数据类型:int,char,float....等
数组名:是一个标识符,满足标识符的命名规则
数组下标:确定数组张元素的个数
例如:
int a[10];
含义:定义一个名为a的数组,一共10个元素,每个元素都是int类型。
- #include <stdio.h>
-
- int main(int argc, const char *argv[])
- {
- int a[4];
- a[0] = 222;
- a[1] = 333;
- a[2] = 444;
- a[3] = 555;
- printf("%d %d %d\n",a[0],a[1],a[2]);
- //数组在定义和使用的时候,数组下表尽量不要使用变量
- //防止后期变量改变会影响对数组的操作,一般数组下标都是常量或者常量表单大师,宏定义本身也是一个常量表达式,所以可以当做数组下标使用
- #if 0
- int num = 10;
- int b[num];
- b[2] = 5;
- int n =3;
- b[n] = 888;
- printf("%d %d\n",b[2],b[n]);
- #endif
- printf("sizeof(a) = %ld %ld\n",sizeof(a),sizeof(int)*4);
-
- printf("%p\n",&a[0]);
- printf("%p\n",&a[0]+1);
- printf("%p\n",a);
- printf("%p\n",a+1);
- printf("%p\n",&a);
- printf("%p\n",&a+1);
- a++; //数组名是常指针,不能修改
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。