- 138.00 KB
- 2021-05-13 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
C语言二级考试资料
编著:黄雨晨
目录
一、C语言基础知识 - 1 -
1.标实符,常量,变量 - 1 -
(1)标识符 - 1 -
(2)常量: - 1 -
(3)整型常量与实型常量 - 1 -
2.变量的定义 - 2 -
3.算术表达式 - 2 -
5.赋值表达式 - 3 -
6.复合赋值表达式 - 3 -
7.++ --运算符 - 4 -
8.逗号表达式 - 5 -
9.课后习题; - 5 -
(1)选择题: - 5 -
(2)填空题: - 6 -
二、基本输入、输出语句 - 6 -
1.printf函数的一般调用形式 - 6 -
2.printf中常用的格式说明: - 7 -
3.注意事项 - 7 -
4.输出语句例题: - 7 -
5.输入语句: - 8 -
6.练习题与复合语句、空语句: - 8 -
(1)选择题 - 8 -
(2)编程题 - 9 -
三:c语言的程序结构 - 9 -
1.关系运算与逻辑运算: - 10 -
(1)简介: - 10 -
(2)几个简单的关系运算符: - 10 -
(3)几个简单的逻辑运算符 - 10 -
2.if语句: - 10 -
(1)定义: - 10 -
(2)分类: - 10 -
3.if的嵌套: - 11 -
(1)讲解 - 11 -
(3)例题: - 12 -
4.条件表达式 - 13 -
5.switch语句: - 13 -
6.习题 - 13 -
(1)选择题 - 13 -
(2)填空题 - 14 -
(3)编程题 - 15 -
四、循环结构 - 17 -
1.while语句: - 17 -
(1)格式: - 17 -
(2)注意: - 17 -
(3)例题 - 17 -
2.do while() - 18 -
(1)格式 - 18 -
(2)注意 - 18 -
3.for语句 - 18 -
(1)格式: - 18 -
(2)注意 - 19 -
(3)例题 - 19 -
4.for嵌套 - 20 -
(1)实例1 - 20 -
(2)实例2 - 20 -
(3)实例3 - 21 -
(4)注意 - 21 -
(5)素数的判定 - 21 -
6.break,continue语句 - 22 -
(1)break - 22 -
(2)continue - 22 -
7.程序应用及习题 - 23 -
(1)选择题 - 23 -
(2)填空题 - 26 -
(3)编程题 - 27 -
第六章、字符型数据 - 28 -
1.字符型常量 - 28 -
(1)格式 - 28 -
(2)要求 - 28 -
(3)注意: - 29 -
2.字符串常量 - 29 -
(1)格式 - 29 -
(2)注意: - 29 -
3.字符型变量 - 29 -
(1)格式 - 29 -
(2)输入与输出 - 29 -
(3)程序举例 - 29 -
4.课后习题 - 30 -
(1)选择题 - 30 -
(2)填空题 - 32 -
(3)编程题 - 33 -
一、C语言基础知识
1.标实符,常量,变量
(1)标识符
定义:由字母、数字、下划线组成,并且第一个字母必须为字母或下划线的。这样的组成就是标识符。
注意:在C中大写字母与小写字母被认为是两个不同的字符。
分类:
1)关键字:在C中已经定义好了的。不能用作它的。(if double int)。
2)预定义标识符:如printf scanf.
3)用户标识符:用户根据自己的需要来定义的。
(2)常量:
定义:是指在程序的执行过程中,其指不会被改变的量、
分类:
1)整型常量:没有小数的常量
3 9 123
2)实型常量:有小数点的常量
3.9 3.0
3)字符常量:由单个字符组成的量
'a' 'b' '5'(内存中占1个存储单元)
4)字符串常量:至少有一个字符组成的量
"a" "abc" "fgbrhbg"(内存中以-0结束,占两个存储单元)
5)符号常量:符号常量的值到底是多少,这是由在来定义符号常量时来决定的。
#define pi 3.14(宏定义)
以下选项中,能用作数据常量的是:
A)o115 B)0118 C)1.5e1.5 D)115l
以下选项中不能作为c语言合法常量的是:A
A)'cd' B)0.1e+6 C)"a" D)' 11'
以下选项中不属于字符常量的是:B
A)'C' B)"C" C)'xCC0' D)' 72'
(3)整型常量与实型常量
整型常量的表示方法
***十进制数:0-9
***八进制数:以0开头的数字,由0-7组成。
下列合法的八进制数是:
A)0 B)028 C)-077 D)01.0
***十六进制数:以OX开头,由0-9和A-F组成。
A)oxff B)Oxabc C)Ox11 D)Ox19
实型常量的表示方法:134.2
小数形式:134.2
指数形式:1.342e2
***字母e和E之前必须要偷
***字母e和E之后的数字必须是整数
***字母e和E之间不能有空格
2.90E-1 0.425E 3 -444.5 424E-2 0.1e+6 1.23E1.3
2.变量的定义
1)定义:在程序的运行过程中其值可以被改变的量,就叫变量。
2)原则:变量必须先定义后再使用。(变量定义的过程就是给变量开品存储单元的过程。)
3)分类:
***整型变量:用关键字int来表示
short int 短整型
long int 长整型 (在内存中占4个单元,如123l)
unsigned 无符号 如有-200u这就是错的。(全部是正数)
变量的定义:int a 这是定义了一个整型变量a。
*** float 单精度 在内存中占4个字节。
*** double 双精度 在内存中占8个字节。
3.算术表达式
(1)基本的算术运算符
+、-、*、/、%这些都是双目运算符(有两个操作对象)
注意:
除%外,其他的运算符的运算对象可以是整型也可以是实型。%操作对象只能是整型。
如:10%3=1 10.7%5 54.64%643.3
说明:
1)如果双目运算符两边云算数的类型一致,则所得的结果的类型与运算数的类型一致。如1.0/2.0=0.5 1/2=0
2)双目运算符两边运算数的类型不一致,则系统会自动进行类型转换,使两边的类型一致后,再进行运算。
1.0/2=0.5
3)所有的单精度数据,在运算过程中都以双精度进行计算。(一般定义变量为实型类型的时候,可以直接定义为double型)
(2)优先级
( ) + - * / % + -
由高─────低
如:5+1/2=5
4.强制类型转换
格式:(类型名)(表达式)
***类型名后面的括号内表达式为单个表达式时,可省略括号,当后面的为多个表达式时,括号不可省略。
例如:(int)3.525=3
(double)10%3=?
例如:
表达式:(int)((double)9/2)-(9)%2的值是:
A)0 B)3 C)4 D)5
设变量已正确定义并赋值,以下正确的表达式是:
A)X=Y*5=X+Z
B)int(15.8%5)
C)x=y+z+5,++y
D)x=25%5.0
5.赋值表达式
格式:变量名=表达式
注:
1.不可以颠倒(左边必须是变量名,右边必须是C语言中合法的表达式)
2.功能是先求出右边变大事的值,然后把次赋值给赋值号左边的变量。确切的说是把数据存入以该变量为标识的存储单元中去。a=4 a=b+7
3.结合性的优先级仅高于逗号表达式。顺序是自右向左的。如a=2+7/3
4."="是一个赋值号,不是一个等号。
5.x=y,变量的值也是可以传递和赋值的。它的意思是将变量y中的赋值到x中去。同样N=N+1也成立。
6.赋值运算符左侧只能是变量,不能是常量或表达式 a+b=c是违法的。
7.赋值号的右边也可以是一个赋值表达式。如a=b=7+1.
补充:表达式和语句的区别:
表达式后面加一个分好就是语句。
6.复合赋值表达式
如:
1)a+=3-----a=a+3
同理可得
a*=3 /= -=
a+=a=a+a a的初值为9
a+=a-=18
a+=(a=a-18)
a+=(a=-9)
a+=a
-18
2)若有定义语句:int x=10;则表达式x-=x+x的值为:
A)-20 B)-10 C)0 D)10
3)设有定义:int =2;以下表达式中,值不为6的是:
A)X*=X+1 X=X*(X+1)
B)X++.2*X
C)X*=(1+X)
D)2*X,X+=2
4)若变量均已正确定义并赋值,以下合法的C语言赋值语句是:
A)x=y==5;
B)X=n%2.5;
C)x+n=I
D)x=5=4+1;
7.++ --运算符
++ 自身加1
-- 自身减1
如:
i=3 i++ _______I=i+1 i=4
***单目运算
***i++ ++i
1)#include
int main()
{
int i =3;
printf("%dn",i);
}
结果为:3
2)#include
int main()
{
int i =3;
printf("%dn",++i);
}
结果为:4
***当++在前,先自身加1,然后再干别人干的事
3)#include
int main()
{
int i =3;
printf("%dn",i++);
}
结果为:3
***当++在后,先干别人干的事然后再自身加1
4)int a,i=3;
a=i++;a=3;
a=++1;a=4
8.逗号表达式
(1)定义:用逗号将表达式连接起来的式子称为逗号表达式
(2)格式:表达式1,表达式2,表达式3……,表达式N
(3)说明:
1)逗号运算符的结合性为从左到右进行计算,逗号表达式的值是最后一个表达式的值。
2)在所有运算符中,逗号表达式的优先级最低。
例题:
int i =5;
int a,b,c;
a=(i+8,6,i+7); a=12,i=5
b=(i++,++i); a=7,i=7
c=(i+7,i++); a=5,i=6
9.课后习题;
(1)选择题:
1)以下选项中正确的整型常量是:
A.12. B. -20 C.1,000 D.2 5 6
2)以下选项中正确的实型常量是:
A.0 B.3. 4344 C.0.345*122 D..875
3)以下选项中不正确的实型常量是:
A.2.50E-1 B.0.78646e 2 C.-55.55 D.566E-2
4)以下选项中不正确的用户标识符是:
A.ABC.C B.file C)Main D.PRINTF
5)以下选项中不正确的用户标识符是:
A._123 B.printf C)A $ D.Dim
6)C语言中运算对象必须是整型的运算符是:
A.% B./ C.! D.* *
7)可在C语言中用作用户标识符的一组标识符是:
A.void define WORD
B.as_b3 _123 IF
C.For -abc case
D.2c DO SIG
8)若变量已正确定义并赋值,复合C语言语法的表达式是:
A.a=a+7; B.a=7+b+c,a++ C.int(12.3%3) D.a=a+7=c+b
9)以下叙述中正确的是:
A.a是实型变量,c允许进行赋值a=10,但不可以这样说:实型变量中允许存放整型值。
B.在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式。
C.执行表达式a=b后,在内存中a和b的存储单元中原有值将被改变,a的值已由原来的值变为改变后的值,b的值有原来的改变为0.
D.已有a=3,b=5,当执行了表达式a=b,b=a之后。使a中的值变为5,b中的值变为3.
10)以下叙述正确的是:
A.在C语言中无论是整数还是实数,只要在允许的范围内都能无误的表示。
B.C程序由主函数组成
C.C程序由若干函数组成
D.C程序中只允许包含一个函数
11)VC6.0中int类型变量所占字节数是:
A.1 B.2 C.3 D.4
12)合法的八进制数是:
A.0 B.028 C.-033 D.01.0
13)不合法的十六进制数是:
A.oxff B.0Xabc C.0x11 D.0x19
(2)填空题:
1)若K为INT型变量。请写出运算K++后表达式的值()和变量K的值()
2)若X为DOUBLE型变量,请写出运算X=3.2,++X后表达式的值()和变量X的值()
3)函数体由({)开始,由(})结束。函数体内的前面是(定义说明)部分,后面是(语句)部分。
4)C语言中的标识符可以分为(关键字)、(用户标识符)和预定义标识符。
5)在C语言中,用关键字()定义基本整型变量,用关键字()定义单精度实型变量。用( )定义双精度实型变量
6)把a1,a2定义成双精度实型变量,并赋初值1的定义语句是()
7)C语言程序中定义的变量,代表内存中的一个()
8)表达式3.5+1/2的计算结果是()
二、基本输入、输出语句
1.printf函数的一般调用形式
格式:printf(格式控制,输出项1,输出项2,输出项3……);
在printf函数的最后面加上;号就是输出语句。
1)给输出项白提供输出格式说明
格式说明符:
作用:就是使数据按格式说明符的要求进行输出。
组成:由%号和紧跟在其后的格式描述符组成。
***int————%d
***float或double————%f或%e(科学计数法)
***char————%c
2)提供原样输出的文字或字符
***在“”中除了格式说明符之外的内容要全部原样输出。
***各个输出项之间要用逗号隔开。
***输出项可以使任意合法的常量,变量或表达式。
2.printf中常用的格式说明:
在格式说明符中,每一个格式说明符都必须以%号开头由相应的类型标识字母结束。但在他们之间可以有其他的一个内容:
(1)%c:输出一个字符
(2)%d:输出一个十进制的数据
(3)%o:以八进制格式输出
(4)%x:以十六进制输出
(5)%u:无符号十进制输出
(6)%f:以带小数点的数字输出
(7)%e:以指数形式输出
(8)%s:输出一个字符串
(9)%%:输出一个%
(10)%4d:输出的数据长度是4个长度,当原来的长度大于4时会自动突破。小于4时会自动填充空格。
(11)%x.yf:x代表数制的宽度(包括小数点);y代表小数点后面的小数位数。
3.注意事项
1)输出比较自由一些,输出有的各个数之到底是什么,取决于格式说明符之间的内容。
2)格式说明符要与输出项一一对应。
3)输出语句中还可以有n r t a
4)尽量不要在输出语句中改变输出变量的值。
***int a=2;
printf("%d%d",a++,a);
结果:2,2
5)输出的数据中如果存在变量,一定要是定义过的。
4.输出语句例题:
1)#include
main()
{
int a=1,b=0;
printf("%d,",b=a+b);
printf("%dn",a=2*b);
}
程序运行后的输出结果是:
A.0,0 B.1,0 C.3,2 D.1,2
2)double y=3.141593;printf("%d%8.6f",x,y);输出结果是:
A.123.141593
B.12
3.141593
C.12,3.141593
D.12 3.141593
3)#include
main()
{
double a=123.456;
printf("%6.2f",a);
}
输出结果为:
5.输入语句:
格式:scanf(格式控制,输入项1.输入项2,……);
例如:想通过键盘输入三个是分别给变量a,b,c。并且他们分别为整型,浮点型,双精度型。
输入语句为scanf("%d%f%lf",&k,&a,&y);
说明:
(1)格式说明符与输出语句一样。
(2)在格式串中,必须含有与输入项——对应的格式转换说明符。
(3)在VC6.0的环境下,要收输入的double型数据的格式说明符一定要用%lf,否则数据不能正确的输入。
(4)由于输入时一个字符流,所以当输入的数据少于输入项时,程序会等待用户输入,直到满足要求。当输入得分数据多余输入项时,多余的数据会自动作废。
(5)%*d:跳过输入
6.练习题与复合语句、空语句:
(1)复合语句:多个语句被{}括起来,当成一条语句来执行。
(2)空语句:最后的表示只有一个“;”(用于计数)
练习题:
(1)选择题
1)int x;
x=11/3;
int y = 5;
printf("%%d,%%%dn",x,y);
输出结果为:%d,%3
2)若变量已正确说明为int类型,要给a,b,c输入数据,以下正确的语句是:
A.read(a,b,c); B.scanf("%d%d%d",a,b,c);
C.scanf("%D%D%D",&a,&b,&c); D.scanf("%d%d%d",&a,&b,&c);
3)若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是:B
A.10 B.10.0,22.0,33.0 C.10.0 D.10 22
22 22.0,33.0 33
33
scanf("%f%f%f",&a,&b,&c);
(2)编程题
4)编写一个程序,从键盘上输入两个数字,然后让他们互换一下。
#include
int main()
{
int a,b,c;
printf("请输入两个数:n");
scanf("%d %d",&a,&b);
a=b;b=c;c=a;
printf("两数交换后的结果为:%d %d",a,b);
}
5)编写一个程序,从键盘上输入一个数字,进行四舍五入计算,要求保留两位小数。
#include
int main()
{
double a;
printf("请输入一个要进行四舍五入的数:n");
scanf("%lf",&a);
a=a*100+0.5;
a=(int)(a);
a=a/100;
printf("四舍五入的结果为:%lf",a);
}
6)编写程序,使从键盘上输入的三个数倒着输出:
#include
int main()
{
int a,b,c,d;
scanf("%d",&a);
if(a>=1000)
{
printf("输入有误,请重新输入:n");
scanf("%d",&a);
}
b=a/100;
c=(a%100)/10;
d=a%10;
a=d*100+c*10+b;
printf("%dn",a);
}
三:c语言的程序结构
1.关系运算与逻辑运算:
(1)简介:
关系表达式与逻辑表达式的运算结果都会得到一个逻辑值。就是“真”,“假”
在c语言钟0表示“假”,非0(无论是负数还是正数都是真。更多时候用1来代替)表示“真”。
(2)几个简单的关系运算符:
< <= > >= == !=
注意:
1)由两个字符组成的运算符,中间不能有空格。
2)它们都是双目运算符,具有自左向右的结合型。
3)上面的6个运算符中,前4个的优先级要比后面2个的优先级要高。
4)先计算,后判断,然后进行赋值计算。
(3)几个简单的逻辑运算符
&& 与 一假则假
|| 或 一真则真
! 非 非假则真,非真则假
例:
1)1&&0=1,0&&6=0
2)int a=4,b=7;
a&&b=1;
3)int x=0,y=7;
x++&&y++=? x=? y=?
++x&&y++=? x=? y=?
2.if语句:
(1)定义:
只有两种结果。要么执行这条语句,要么执行那条语句。
if(条件表达式)
上述条件成立执行(花括号【符合语句】、离ifz最近的一条句子、空语句)的句子
else
上述条件不成立执行的句子
(2)分类:
1)不含有else的语句
if(条件)
{
语句
}
2)含有else的语句
if(条件)
语句1;
else
语句2;
语句3;(语句3不受控制)
例:
#include
int main()
{
int a,b,c,t;
printf("input 3 numbers:n");
scanf("a=%d b=%d c=%d",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t};
if(a>c)
{t=c;c=a;a=t};
if(b>c)
{a=b;b=c;c=t};
printf("%d %d %dn",a,b,c);
}
3.if的嵌套:
(1)讲解
#include
int main()
{
int a;
scanf("%d",&a);
if(a>60)
{
if(a>90)
printf("you");
else
printf("liang");
}
else
printf("cha");
}
输入一个学生的成绩,评定他的成绩。每十分一个等级
#include
main()
{
int a;
printf("input a number:n");
scanf("a=%d",&a);
if(a>=90) printf("A");
elseif(a>=80) printf("B");
elseif(a>=70) printf("C");
elseif(a>=60) printf("D")
else printf("E");
}
(3)例题:
1)
设有定义:inta=1,b=2,c=3;以下语句中执行效果与其他三个不同德是:
A.if(a>b) c=a,a=b,b=c;
B.if(a>b) {c=a;a=b;b=c;}
C.if(a>b) c=a;a=b;b=c;
D.if(a>b) {c=a,a=b,b=c;}
2)
有以下程序,程序运行时,输入的值在哪个范围内会有输出结果:
#include
main()
{
int x;
scanf("%d",&x);
if(x<=3) ; else
if(x!=10)
printf("%dn",x);
}
A.不等于10的整数
B.大于3且不等于10的整数
C.大于3或等于10的整数
D.小于3的整数
3)有以下程序,程序的输出结果为:
#include
main()
{
int a=1,b=2,c=3,d=0;
if(a==1&&b++==2) (b++一次,b=3)
if(b!=2||c--!=3) (由于b!=2成立,后面的c--不会执行,因此c的结果不变)
printf("%d,%d,%dn",a,b,c);
else printf("%d,%d,%dn",a,b,c);
else printf("%d,%d,%dn",a,b,c);
}
A.1,2,3 B.1,3,2 C.1,3,3 D.3,2,1
4.条件表达式
1)是c语言中唯一的一个三目运算
2)格式:表达式1?表达式2:表达式3
当表达式1成立(非零时),表达式的值是表达式2的值,否则就是3的值。
如:1)1<2?4:5
2)printf("%d",x<0?(-1)*++x:x++);(假定X的值为-3)
3)x++>3?(x<3?a,b):b
5.switch语句:
switch(表达式)
{
case常量表达式1:语句1;break;
case常量表达式2:语句2;break;
case常量表达式3:语句3;break;
case常量表达式4:语句4;break;
case常量表达式5:语句5;break;
case常量表达式6:语句6;
……
default:语句n;
}
(1)switch后面无分号
(2)通常常量表达式为整型类型
(3)default用于最后系统自动判断的剩余值
(4)break用于返回,退出循环(最后一条语句不用加break,因为执行完后只有最后一个返回值了)
(5)case后面有一定要加一个空格,关键字后面不能与其他字符连在一起。
6.习题
(1)选择题
1)下列运算符中优先级最高的运算符是:
A.! B.% C.-= D.&&
2)下列运算符中优先级最低的运算符是:
A.|| B.!= C.<= D.+
3)设a、b、c都是int型变量,且a=3,b=4,c=5;则以下表达式中,值为0的表达式为:
A.a&&b B.a<=b C.a||b+c&&b-c D!((a4||x<-4
A)a=b或a4
6)请写出以下程序的输出结果:________
main()
{
int a=100;
if(a>100) printf("%dn",a>100);
else printf("%dn",a<=100);
}
7)请写出与以下表达式等价的表达式A)________B)_________
A)!(x>0) A)!0
8)当a=1,b=2,c=3时,以下C语句执行后,a、b、c中的值分别为______、_______、________
if(a>c)
b=a;a=c;c=
3,2,3;
3,2,2;
9)若变量已正确定义,以下语句段的输出结果为:_________________
x=0,y=2,z=3;
switch(x)
{
case 0:switch(y==2)
{
case 1:printf("*");break;
case 2:printf("%");break;
}
case 1:switch(z)
{
case 1:printf("$");
case 2:printf("*");break;
default printf("#");
}
}
***switch(x)=0,执行循环体内的case 0;
***y==2,为比较表达式,若条件成立,则执行为真,即“1”;
***break常用于循环语句中,条出的为离它最近的一层循环;
(3)编程题
1)请将以下的语句改成switch语句。
if(a<30)m=1;
else if(a<40)m=2;
else if(a<50)m=3;
else if(a<60)m=4;
else m=5;
转化为:
switch(a/10)
{
case 3:m=1;break;
case 4:m=2;break;
case 5:m=3;break;
case 6:m=4;break;
default:m=5;
}
2)编写程序,输入一位学生的生日(年:y0、月m0、日d0);并输入当前的日期(年:y1、月:m1、日:d1)
;输出该生的实足年龄。
#include
int main()
{
int a,b,c,x,y,z,n;
printf("请输入你的生日:n");
scanf("%d %d %d",&a,&b,&c);
if(a>2015||b>12||c>31)
{
printf("输入有误,请重新输入:n");
scanf("%d %d %d",&a,&b,&c);
}
printf("请输入现在的时间:n");
scanf("%d %d %d",&x,&y,&z);
if(a>2015||b>12||c>31)
{
printf("输入有误,请重新输入:n");
scanf("%d %d %d",&x,&y,&z);
}
if(x>a)
{
if(y>b)
{
n=x-a+1;
}
else
n=x-a;
}
printf("您现在有%d岁n",n);
}
3)编写程序,输入三个数,打印出最大值
#include
int main()
{
int a,b,c,t;t=a;
if(a>b)
{
if(b>c) t=a;
else t=c
}
else t=b;
printf("%dn",t);
}
四、循环结构
1.while语句:
(1)格式:
while(表达式)
循环体
(2)注意:
1)while是一个关键字
2)括号及括号内的表达式不能丢
3)while控制的是与其相邻的一条语句(以“;”结束),如果有多条语句,则要用{}括起来(复合语句)。
4)while语句多用于控制重复某一操作来实现某种计算。
(3)例题
例:从1加到100求和
#include
int main()
{
int sum=0,i=1;
while(i<=100)
sum+=i++;
printf("%dn",sum);
}
例:从1开始加到哪个数时他们的和超过1000
#include
int main()
{
int i=1,sum=0,j=1;
while(sum<=1000)
sum+=i++;
printf("%dn",--i);
}
***程序中的"--i"是因为当sum的值大于1000时,i累计多加了一次,因此在输出结果时要自身先减1;
例:有以下程序,运行后输出结果为:D
#include
int main()
{
int n=2,k=0;
while(k++&&n++>2);
printf("%d %dn",k,n);
}
A.0 2 B.1 3 C.5 7 D.1 2
1)k++&&n++>2后,由于首先执行k++>2,结果为假,但自身加1,执行完后k=1;n++不会执行,因此n无变化,n=2。
2)while语句后面有一个分号,这里表示while控制的是一条空语句,继续向下执行,输出的结果:1 2
2.do while()
(1)格式
do
循环体
while(表达式)
(2)注意
1)先执行循环,后判断条件。
2)循环体至少执行1次。
3)while后面的分号必须要有。
3.for语句
(1)格式:
for(表达式1;表达式2;表达式3)
循环体
for(k=1;k<10;k++)
printf("*");
||
||
int k=1;
while(k<10)
{
printf("*");
k++;
}
(2)注意
1)表达式1是对变量的初始
2)表达式2为条件表达式,逻辑表达式
3)循环内包含的控制变量
4)表达式的间隔为分号且不能省略,不是逗号
5)一个表达式可以为任何有效的C语言表达式,以“,”为分隔,最后一个为“;”结束
6)表达式可以为空语句(;),但不能少分号
(3)例题
1)从1+……+100求和。
#include
int main()
{
int i=1;sum=0;
for(;i<=100;i++)
{
sum+=i;
}
}
2)从1+……+100中偶数的和。
#include
int main()
{
int i=2;sum=0;
for(;i<=100;i+=2)
{
sum+=i;
}
}
3)以下程序的输出结果为
#include
int main()
{
int c=0,k;
for(k=1;k<3;k++)
switch(k)
{
default:c+=k;
case 2:c++;break;
case 4:c+=2;break;
}
printf("%dn",c);
}
A.3 B.5 C.7 D.9
分析:default:c+=k;这里没有break跳出循环,继续执行case 2:c++后,变为2;执行第二次循环k=2;c变为3;
4)以下程序的输出结果为__0 1 123___
#include
int main()
{
int f,f1,f2,i;
f1=0;f2=1;
printf("%d %d".f1,f2);
for(i=3;i<=5;i++)
{
f=f1+f2;printf("%d",f);
f1=f2;f2=f;
}
}
分析:f用来求f1+f2的和,共求3次,f1=f2用来把f1的值归1;f2=f用来把求得的值赋给下一次循环计算时的变量。
4.for嵌套
(1)实例1
要求:在屏幕上输出如下结果:
11,12,13,14,15,16,17,8,19
22,………………………………………
…………………………………………99
#include
int main()
{
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
printf("%d%d ",i,j);
}
printf("n");
}
}
(2)实例2
要求:在屏幕上输出如下结果:
1*1=1 1*2=2 1*3=3 ……1*9=9
……
……
9*1=9 9*2=18 9*3=27……9*9=81
#include
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
printf("%d*%d=%2d ",i,j,i*j);
}
printf("n");
}
}
(3)实例3
要求:在屏幕上输出倒三角
*******
*****
***
*
#include
int main()
{
int i,j,k;
for(i=0;i<=4;i++)
{
for(k=1;k<=i;k++)
prinf(" ");
for(j=0;j<7-i*2;j++)
printf("*");
printf("n");
}
}
(4)注意
1)for嵌套先执行内循环,执行完一遍后再执行外循环。
2)花括号控制最近的一个for循环体
(5)素数的判定
编写程序,找出2-100以内的所有素数
素数:只能被1和它本身整除的数
#include
int main()
{
int i,k,tag;
for(i=3;i<=100;i+=2)
{
tag=0;
for(k=2;k5000)
break;
}
printf("s=%d,i=%d",s,i);
}
(2)continue
跳过循环体continue所在位置下面的语句,返回程序开始的地方,继续执行下一层循环体
main()
{
int k=1,s=0;
for(;k<=5;k++)
{
s+=k
if(s>5)
{
printf("s=%dn",s);
continue;
}
printf("%dn",s);
}
}
输出结果为:
1
3
S=6
s=10
s=15
7.程序应用及习题
(1)选择题
1)以下程序中的变量已正确定义,输出结果为:
for(i=0;i<4;i++)
for(k=1;k<3;k++) ; printf("*");
A.********
B.****
C.**
D.*
***外层循环与内层循环控制的都是输出空语句,程序最后才执行输出一个*
2)以下程序输出结果为:
A.9 B.1 C.11 D.10
int k,j,s;
for(k=2;k<6;k++,k++)
{
s=1;
for(j=k;j<6;j++) s+=j;
}
printf("%dn",s);
5 7 9 11
***外循环中有两次k++,相当于k+=2;那么当k小于6时,,程序循环两次
***每次执行内层循环之后,s的值都变为1;直接看最后一次的外循环
3)以下程序输出结果为:
A.12 B.15 C.20 D.25
int i,j,m=0;
for(i=1;i<=15;i+=4)
for(j=3;j<=19;j+=4)m++;
printf("%dn",m);
***外层:i=1,5,9,13
***内层:j=3,7,11,15,19
4)以下程序输出结果为:B
A.10 B.9 C.10 D.9
9 8 9 8
8 7 8 7
7 6
int n=10;
while(n>7)
{
n--;
printf("%dn",n);
}
5)以下程序段的输出结果为:
A.1 B.3 0 C.1 -2 D.死循环
int x=3;
do
{printf("%3d",x-=2);}
while(!(--x));
***执行第一次循环之后x为1,--x为0;!0则为真,继续执行循环体
6)以下程序段的输出结果为:
A.15 B.14 C.不确定 D.0
main()
{
int i,sum;
for(i=1;i<6;i++) sum+=sum;
printf("%dn",sum);
}
***sum无确定的值
7)以下程序段的输出结果为:
A.741 B.852 C.963 D.875421
main()
{
int y=10;
for(;y>0;y--)
if(y%3==0)
{printf("%d",--y);continue}
}
***程序输出的是1-10之间3的倍数自减1的结果
8)若x是int型变量,以下程序段输出结果为:
A.**3 B.##3 C.##3 D.**3##4
##4 **4 **4##5 **5
**5 ##5
for(x=3;x<6;x++)
printf((x%2)?("**%d"):("##%dn"),x);
***1,0,1:真,假,真
9)以下程序段的输出结果为:
A.*#*#*#$ B.#*#*#*$
C.*#*#$ D.#*#*$
main()
{
int i;
for(i=1;i<=5;i++)
{
if(i%2)printf("*");
else continue;
printf("#");
}
printf("$n");
}
***循环体:i=1,2,3,4,5;
***奇数时输出*#,偶数什么也不是输出。
10)以下叙述正确的是:
A.do while语句构成的的循环不能用其他语句构成的循环代替
B.do while语句构成的循环只能用break语句退出
C.用do while语句构成循环时,只有在while后的表达式为非零时结束循环
D.用do while语句构成循环时,只有在为了后的表达式为零时结束循环
11)以下程序输出结果为:
A.39 81 B.42 84 C.26 68 D.28 70
main()
{
int x,i;
for(i=1;i<=100;i++)
{
x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%d",x);
}
printf("n");
}
***应满足x%7==0,(x-1)%3==0,(x-2)%2==0
(2)填空题
1)当执行以下程序段后,i的值是_5_、j的值是__4__、k的值是__6__
。
int a,b,c,d,i,j,k;
a=10;b=c=d=5;i=j=k=0;
for(;a>b;++b)i++;
while(a>++c)j++;
do k++;while(a>d++);
2)以下程序段的输出结果为:_______
int k,n,m;
n=10;m=1;k=1;
while(k<=n) m*=2;
printf("%dn",m);
3)以下程序段的输出结果为:___-1____
main()
{int x=2;
while(x--);
printf("%dn",x);
}
***while控制的是空语句,当x=1时条件不成立,输出0--的值,即-1
4)以下程序段的输出结果为:_______
int i=0,sum=1;
do{sum+=i++;}while(i<5);
printf("%dn",sum);
***2 4 7 11
5)以下程序段:
s=1.0;
for(k=1;k<=n;k++)s=s+1.0/(k*(k+1));
printf("%dn",s);
请填空,使下面的程序段的功能完全与之等同。
s=1.0;
___d=1.0___;
k=0;
do
{s=s+d;
____k++____;
d=1.0/(k*(k+1));
}
while(___k<=n____);
printf("%fn",s);
6)以下程序的功能是:从键盘上输入若干学生的成绩,统计出输出最
高成绩和最低成绩,当输出负数时结束输入。
main()
{
float x,amax,amin;
scanf("%f",&x);
while(___x>=0____)
{
if(x>amax) amax=x;
if(___x
main()
{
int i,j,sum=0;
for(i=3;i<=101;i+=4)
sum+=i;
for(i=3;i<=101;i+=4)
sum-=i;
printf("%dn",sum);
}
2)编写程序,输入从公元1000年至2000年所有闰年的年号。每输出三个年号换一行。判断公元年是否为闰年的条件是:
***公元年数能被4整除,而不能被100整数,则是闰年
***公元年数能被400整除也是闰年。
#include
main()
{
int i,k=0;
for(i=1000;i<=2000;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
{printf("%dt",i);
k++;}
if(k%3==0)
printf("n");
}
}
3)从输入的若干个大于零的正整数中选出最大值,用-1结束输入
#include
int main()
{
int k=1,max=0;
printf("ent -1 to endn");
do{
printf("ent x1: ");
scanf("%d",&k);
}
while(k<0&&k!=-1);
max=k;
while(k!=-1)
{
printf("ent x2: ");
scanf("%d",&k);
if(k>0&&k>max)
max=k;
}
if(k!=-1)
{
printf("%dn",max);
}
}
第六章、字符型数据
1.字符型常量
(1)格式
'a'、'c'
(2)要求
1)单引号中的大写字母和小写字母代表不同的常量。
2)单引号中的空格也是一个字符常量,但不能是两个连续的单引号
3)字符常量只能用单引号括起来,不能用双引号
4)注意字符
n:代表回车 '代表一个单引号 \代表一个 "代表一个双引号
(3)注意:
1)转义字符常量,如'131'只代表一个字符
2)反斜线后的8进制数可以不用0开头。131就是一个八进制数
3)反斜线后的16进制数只能以x开头,不能以X开头
2.字符串常量
(1)格式
由双引号括起来的一串字符
(2)注意:
1)“A”和'A'是不一样的
2)一个字符串常量在内存中最少占1个字节,而一个字符常量最少占0个字节(相对而言)
3)ACSLL码中:
A = 65 a = 97
'a' - 'A' = 32
3.字符型变量
(1)格式
char 变量名= '字符常量'
(2)输入与输出
printf和scanf函数输出和输入字符
对于字符型数据的格式说明符是%c
char c='a';
printf("%c",c);
char a,b,c,d;
scanf("%c%c%c",&a,&b,&c);
(3)程序举例
1)写出26个大写字母和他们的ASCLL代码要求每行输出两组数据。
#include
main()
{
int i;
char a;
printf("这是26个大写字母和他们的ASCLL代码n");
for(i=0;i<26;i++)
{
a=i+65;
if(i%2==0)
printf("n");
printf("%ct%dt",a,a);
}
}
在上面的程序中有对于字符的输入与输出,在C语言中也有另外的输入输出的语句。
输入:变量名=getchar();
输出:putchar(变量名);
输入输出只对字符数据有效。
2)编写一个程序,使用户输入的小写字母转化为大写字母,而输入的其他字符不变;
#include
main()
{
char a;
printf("请输入一个字符串n");
while((a=getchar())!='n')
{
if(a>='a'&&a<='z')
a=a-32;
putchar(a);
}
}
3)有以下程序,已知字母A的ASCLL码为65,程序运行后的输出结果是
#include
mainn()
{
char c1,c2;
c1='A'+'8'-'4';
c2='A'+'8'-'5';
printf("%c,%dn",c1,c2);
}
A.E,68 B.D,69 C.E,D D.输出无定值
4.课后习题
(1)选择题
1).C语言中的简单类型有()
A.整型,实型,逻辑型 B.整型,实型,字符型
C.整型,字符型,逻辑型 D.整型,实型,逻辑型,字符型
2)C语言中,字符型(char)数据在微机内存中的存储形式是(D)
A.反码 B.补码 C.EBCDIC码 D.ASCLL码
3)没有语句char a = '72',则变量A()
A.包含一个字符 B.包含两个字符
C.包含三个字符 D.说明不合法
***
转义字符只占一个字符
4)C语言中不合法的字符常量是()
A.' XFF' B.'65' C.'&' D.'28'
***字符常量只能是由单引号括起来的字符
***八进制数不可能包含数字8或以上的数字
5)C语言中不合法的字符串常量是()
A."121" B.'y=' C."nn"D."ABCDX6d"
6)判断char型变量C是否为大写字母的最简单且正确的表达式()
A.'A'<=C='Z' B.(C>='A')&(C<='Z')
C.('A'<=C)AND('Z'>=C) D.(C>='A')&&(C<='Z')
7)以下程序输出结果为()
main()
{
char c1='a',c2='y';
printf("%d,%dn",c1,c2);
}
A.因输出格式不合法,无正确输出 B.65,90
C.A,Y D.65,89
8)以下程序输出结果为()
main()
{
char x='a';
x=(x>='A'&&x<='Z')?(x+32):x;
printf("%cn",x);
}
A.A B.a C.Z D.z
9)以下程序输出结果为()
main()
{
char ch1,ch2;
ch1='A'+'5'-'3';
ch2='a'+'5'-'3';
printf("%d,%cn",ch1,ch2);
}
A.67,C B.B,C C.C,D D.不确定的值
***首先看输出值的类型,为%d,%c,可以看出一个是数字,一个是字母
10)对以下程序,从第一列开始输入数据:2473,代表enter,程序的输出结果为()
A.668977 B.668966 C.66778777 D.6688766
#include
main()
{
char c;
while((c=getchar())!='n')
{
switch(c-'2')
{
case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;
}
}printf("n");
}
***case 0后面没有break,继续执行case 1;
***字符型变量也可以减数字;
11)若变量已正确说明,要求下列语句给C1赋予字符%给C2赋予字符#,给a赋予2.0,给b赋予4.0,则正确的输入形式是(C)
A.2.0% 4.0# B.2.0%4.0#
C.2% 4# D.2% 4
scanf("%f%c%f%c",&a,&c1,&b,&c2);
***第二次输入实型数据的时候要与第一次字符型数据间有明显的间隔,不然系统难以分辨。
(2)填空题
1)C语言中,字符占内存()个字节。
2)调用C语言对字符处理的库函数时,在#include命令中应包含的文件是(ctype.h)。
3)若输入字符A,在以下while语句执行后ch的值是()
while(ch=getchar()=='A');
4)若要通过以下语句给a,b,c,d分别输入字符A,B,C,D,给w,x,y,z,分别输入10,20,30,40,正确的输入形式是(_10A 20B 30C 40D_),请用代表enter键。
scanf("%d%c%d%c%d%c%d%c",&w,&a,&x,&b,&y,&c,&z,&d);
5)若有以下说明和输入语句,要求给c1,c2输入字符A,B,给a1,a2输入7.29和101.298,从键盘正确的输入数据的形式是(7.29 101.298 AB)
char c1,c2;float a1,a2;
scanf("%f%f",&a1,&a2);scanf("%c%c",&c1,&c2);
6)若有以下说明和输入语句,要求给c1,c2输入字符A,B,给a1,a2输入7.29和101.298,从键盘正确的输入数据的形式是( A7.29B 101.298)
char c1,c2;float a1,a2;
scanf("%f%c%f%c",&c1,&a1,&c2,&a2);
7)若有以下说明和输入语句,要求给c1,c2,c3输入字符A,B,C,从键盘上正确输入数据的形式。
char c1,c2,c3;
scanf("%4c",&c1);scanf("%4c",&c2);scanf("%4c",&c3);
A三个空格B三个空格C
***%4d只占4个字符
(3)编程题
1)请编写一个程序,输入一行数字字符(以enter结束),每个数字字符的前后都有空格,把这一行中的数字转换成一个整数。
#inlude
main()
{
int a=0;char x;
while(x=(getchar())!=0)
{
if(x>='0'&&x<='9')
a=a*10+x-'0';
}printf("%dn",a);
}
***'0'为字符型 数据基本的ascll码值。
2)请编写程序统计输入的行数,输入用!结束,但!所在的行不计入行数。
#inlude
main()
{
int a;
char x;
getchar(x);
while(x=(getchar())!='!')
{
if(x=='n')
a++;
}printf("%d",a);
}
***x=(getchar())!='!'的时候程序不会显示出!来,所以不用担心!会占一行。
3)请编写输出如下图案的程序,图案的行数由输入的值确定。
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
#include
main()
{
int a,i,j,k,n;char x;
printf("请输入一个数来确定行数:n");
scanf("%d",&a);
for(i=1;i=i;j--)
printf(" ");
for(k=1;k<=n;k++)
printf("%c",x);
}
}