本着尽可能全跟简单的原则,总结了一些知识点,希望对大家有用。
C语言基础复习笔记第四课
一、C语句分类
C语句以分号为结束标志。
1. 说明语句:用于定义变量、声明函数原型的语句。
例如: int a,b;
2. 表达式语句:即表达式之后加分号。
例如: a=3;(赋值语句)、i++;
3. 函数调用语句:即函数调用之后加分号。
例如: printf(“Hello!”);
4. 空语句:即只有一个分号。(这个一般用不到)
5. 控制语句:是用于控制程序执行流程的语句。(学习重点)
例如: if-else、 while等 。
6. 复合语句:是由一对花括号括起来的一组语句。
例如:{t=a; a=b; b=t;}(典型的借助中间变量交换)
注意:复合语句在语法上视为一条语句。
复合语句你就可以理解为
要完成对a赋值的功能
int a=3;
复合语句
{
int a;
a=3;
}
因为C语言是顺序执行语句
一般分号就是语句结束
上面的可能int a结束以后就会因为某些原因
后面的a=3没有机会执行
为了避免这种情况
才出现了复合语句
t=a;
a=b;
b=t;
这三条分开的话很明显是三条语句
可能由于某些原因
只执行完t=a,后面语句的就没机会了
{t=a; a=b; b=t;}
就是在意义上{}是一条语句
然后在这一条大语句里面执行一堆小语句
复合语句用的最多的一个地方就是在一些语句中
如选择和循环语句,if,for,while中
本来只能后面跟随一条语句
利用复合语句可以达到多条语句变成一条语句的效果。
拿例题加深理解一下吧
输入三个整数,按照由小到大的顺序输出,最后换行。
输入格式:
输入三个整数,中间用空格分隔。
输出格式:
输出三个整数,中间用英文逗号,分隔,最后换行。
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b){t=a; a=b; b=t;}
if(a>c){t=a; a=c; c=t;}
if(b>c){t=b; b=c; c=t; }
printf("%d,%d,%d\n",a,b,c);
return 0;
}
二、赋值运算符:=
格式:变量=表达式
功能:求出表达式的值,并存入左侧变量中。(注意顺序)
注意点:
- 赋值表达式的值就是左侧变量的值。
b=3;
printf("%d" ,a=b+l);
结果就是4
这里呢%d所指的就是a=b+1(这个式子)的值
计算一下
b+1=3+1=4
a=4
- 赋值运算符右侧的表达式也可以是赋值表达式,赋值运算符具有右结合性。
最熟悉的
int a,b,c;
a=b=c=1;
因为右结合性
所以先进行c=1;
再b=c;
再a=b;
这就是可以连续赋值的原理
- 赋值表达式加分号(属于表达式语句)。
例如:
a=a+1 赋值表达式
a=a+1 ; 赋值语句 - 在定义变量的同时,给变量赋值,称为变量的初始化。
例如:
int a=3;
相当于
int a;
a=3; - 错误用法
int a=b=c=1;
原因就是b,c未定义就使用
所以请看第二条,应该先定义了
在进行赋值
借助赋值运算符的右结合性实现连续赋值
三、类型转换
在C语言中若赋值运算符两侧类型不一致,则以左侧变量的类型为准对右边的进行类型转换。
- 实数赋给整型(字符型)变量时,将会截断取整。
int a;
b=1.234;
a=b;
结果:a=1
- 整数(字符常量)赋给实型变量时,将会转换为 实数格式并存入到实型变量中。
float a;
a=1;
结果a=1.000000
这里我记得double还是float来着
可能会有改变数字的现象
就是把你输入的数改成近似值
很偶然的情况碰到过
具体的也记不太清了
3. 当整型数据赋给类型不同但内存位数相同的整型变量时,将会按该数据的内部形式原样传送。(这条看着没啥用处。。。。)
4. 若两种类型的数据之间可以直接相互赋值,则称之为赋值兼容。
例如整型、实型及字符型之间是赋值兼容的。(ASCII码表类型转换啊啥的题目会有)
例题:
从键盘输入一个字符,编程序输出该字符的ASCII码。
输入格式:
键盘上输入任意一个西文字符。
输出格式:
输出该该字符的十进制ASCII码,并换行。
#include <stdio.h>
int main()
{
char a;
int b;
scanf("%c",&a);
b=(int)a;
printf("%c的ASCII码为%d\n",a,b);
return 0;
}
四、格式输出函数printf函数
- C语言中输入输出均由库函数实现。(常用printf、getchar、putchar、scanf、puts等等)
在C程序中调用库函数时,要用include命令包含相应的头文件。
如#include <stdio.h>或#include “stdio.h” (这两种格式都OK) - printf(格式控制字符串,输出项表)
其中的输出项表是若干个要输出的数据项(可以是常量、变量或表达式)
格式控制字符串则用于规定输出项的输出格式。
就是后面的按照前面限定的格式输出
#include <stdio.h>
int main()
{
int a=100;
float x=1.234 ;
printf("a=%d,x=%f\n",a,x);
return 0;
}
格式控制串中的字符分为两类:
格式说明
由“%”和格式说明字符组成,如%d、%f等,用于规定与之对应的数据项的
输出格式。
如上例中的%d对应于变量a, %f对应于变量X。
类型搞错了的话,在输出的时候就可能出现错误,或许不会报错,结果出问题,这个排查的时候也不好看出来
- 普通字符是格式说明以外的字符,普通字符将原样输出。
如上例中的“a=”、“,”、“x=”、“\n”等都是普通字符。
故上例的运行结果为:a=100,x=1.234000
五、常见格式说明符
- d(或i)格式符
用于输出有符号十进制整数。
%d ( 或%i)
按实际位数输出有符号十进制整数。
%ld ( 或%li)
按实际位数输出有符号十进制长整数。
%hd (或%hi)
按实际位数输出有符号十进制短整数。
%md、%mld、%mhd
按指定位数输出有符号十进制整数。
其中的m为正整数,用于指定输出位数。
当你限定长度以后,如果位数不足,那么会在左边补空格
当实际位数大的时候,指定的位数就不起作用了,按照实际位数输出(避免数据丢失)。
当指定位数小于实际位数时,将按实际位数输出避免数据丢失,指定位数不起作用。
如果指定位数大于实际位数时,则在输出的数据左侧用空格补齐不足的位数。
- f格式符
用于以十进制小数形式输出实数。
包括以下几种用法:
%f
用于输出float型或double型数据。
整数部分按实际长度输出,并固定输出6位小数(可以观察一下以前的)。
%m.nf
其中的m、n均为正整数。m指定输出实数的总位数,n指定小数位数。
规则同上:
当指定总位数小于实际位数时,将按实际位数输出,指定的总位数不起作用;
如果指定位数大于实际位数时,则在输出的数据左侧用空格补齐不足的位数。从而避免造成整数部分的有效数据丢失。 - c格式符
用于输出字符型数据 - printf函数输出字符串的
格式字符是 “%s"。
不过在输出字符串常量时,也可以不使用格式说明“%s",而直接输出字符串常量。
printf ("%s ","How are you?\n") ;
printf ("How are you?\n") ;
- 神图
六、格式输入scanf函数(类比printf函数,两者差别不大)
- scanf(格式控制字符串,变量地址表)
例如:
scanf( “%d%d” ,&a,&b);
其中的格式控制字符串,用于规定变量的输入格式。
变量地址表,是若干个存储数据的变量的地址。
&为取地址运算符。 - 神图
- d (或i) 格式符
用于输入有符号十进制整数。
包括%d、%ld、 %hd (或%i、%li、 %hi),分别用于输入有符号十进制整数、长整数、短整数。
int a;
scanf("%d",&a);
printf( "%d\n",a);
- f格式符
用于以十进制小数形式输入实数。
包括以下几种用法:
%f
用于输入float型实数。
%lf
用于输入double型实数。
这个地方是个与printf函数区别的地方
float x;
double y;
scanf("%f",&x);
scanf("%1f",&y);
printf("%f\n",x);
printf( "%f\n",y);
输入double型数据时,必须使用“%lf”
- c格式符
用于输入字符型数据。
char ch;
scanf("%c",&ch);
printf("ch=%c\n", ch);
注意事项:
- 可以指定输入数据所占的宽度,但是不能指定输入数据的精度。
float x,y;
scanf( "%6f",&x); //正确
scanf( "%6.2f",&y); //错误
一般来说用不到这种限定输入宽度的形式,知道是个啥意思就OK了,选择填空可能会考到。
- 格式控制字符串中的普通字符,必须原样输入。
(1)
int x,y;
scanf("%d%d",&x,&y);
无内容的话两个数之间空格啊、tab啊、回车啊都可以作为间隔
BUT
(2)
scanf("%d,%d",&x, &y);
就必须
1,2
这种格式输入,还要注意中英文符号
(3)
scanf("x=%d,y=%d",&x,&y);
输入时候
x=1,y=2
这属实是麻烦人
(4)
scanf("%d %d",&x,&y);
不建议在%d %d之间加空格,何必去找那个麻烦呢
- 用%c格式符输入字符型数据时,每个字符之前不需要分隔符。
int a;
char b,c;
scanf("%d%c%c",&a,&b,&c);
输入的时候
1ab
结果a=1,b=b;c=c
10000yz
结果a=10000,b=y,c=z
这样子输入就OK
输入的时候不要随便加空格,空格会被字符b取到
1 ab
结果a=1,b= ,c=a;
填空选择可能会考这种细节吧,我也不太清楚。
- 在scanf函数的格式控制字符串的末尾,不能添加"\n",否则运行时不能正常退出。(跟空格那个差不多,别给自己挖坑很重要)
scanf("%d%d\n",&x,&y);