资源描述
高级语言程序设计(C语言)知识串讲
CH1 C语言概述
掌握:C程序的结构,C语言的特点
1、C程序的执行点,例:
以下说法中正确的是________3。
①C语言程序总是从第一个的函数开始执行
②在C语言程序中,要调用的函数必须在main()函数中定义
③C语言程序总是从main()函数开始执行
④C语言程序中的main()函数必须放在程序的开始部分
2、Turbo C的上机步骤:启动TC,编辑源文件、编译源程序、执行程序
3、一个C程序的执行是从 ( A )
A)本程序的main函数开始,到main函数结束。
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。
C)本程序的main函数开始,到本程序文件的最后一个函数结束。
D)本程序文件的第一个函数开始,到本程序main函数结束。
4、 一个C语言程序是由_______。B
A) 一个主程序和若干子程序组成 B) 函数组成
C) 若干过程组成 D) 若干子程序组成
5、以下叙述中正确的是(A)
A)C程序中注释部分可以出现在程序中任意合适的地方
B)花括号"{"和"}"只能作为函数体的定界符
C)构成C程序的基本单位是函数,所有函数名都可以由用户命名
D)分号是C语句之间的分隔符,不是语句的一部分
6、要把高级语言编写的源程序转换为目标程序,需要使用( D )
A) 编辑程序 B) 驱动程序 C) 诊断程序 D) 编译程序
7.以下不是C语言的特点的是( B )
A.C语言简洁、紧凑
B.能够编制出功能复杂的程序
C. C语言可以直接对硬件进行操作
D.C语言移植性好
8 以下四项中属于C语言关键字的是【C 】。
A) CHAR B) define C) unsigned D) retrun
9. 在C语言中,一个函数由两部分组成,分别是函数的说明部分 和 函数体
CH2 数据类型、运算符与表达式
掌握:
1,C的基本数据类型
2,常量与变量:常量和符号常量、变量。
3,整型数据:整型常量、整型变量。
4,实型数据:实型常量、实型变量。
5,字符型数据:字符常量、字符变量,字符串常量,字符数据在内存中的存储形式及其使用方法。
6,变量赋初值。
7,各类数值型数据间的混合运算,算术运算符和算术表达式,赋值运算符和赋值表达式,逗号运算符和逗号表达式。
1、C语言的标识符,例:
以下不正确的C语言标识符是________4。
① abc_123 ② _123abc
③ a_bc123 ④ 123abc
2、2进制、8进制、10进制、16进制的表示方法及其转换,如何识别某个数可能是几进制,例:
以下整数值中,不正确的八进制或十六进制数是________3。
①0x16 ②016 ③-16 ④0xaaaa
以下程序的输出结果是 261 。
main()
{ int a=177;
printf("%o\n",a);
}
3、 合法的字符常量是_________。B
A) ‘\084’ B) ‘\x43 ’ C) ‘ab’ D) “\0”
4、 在C语言类型说明中,int、char等类型数据的长度是(D)。
A. 固定的 B. 由用户自己指定
C. 任意的 D. 与机器字的长度有关
5.简单的数据类型有哪些?例如:
C语言中最简单的数据类型包括___②___。
①整型、实型、逻辑型 ②整型、实型、字符型
③整型、字符型、逻辑型 ④整型、实型、逻辑型、字符型
6、 若有以下定义:
char a;int b;
float c;double d;
则表达式a*b-d-c值的类型为(D)
A)float B)int C)char D)double
7、若t为double型,则表达式t=1,t+5,t++的值为____D___。
A)1 B) 6.0 C) 2.0 D) 1.0
8、如何表示double类型的常量
以下能正确表示C语言中double类型常量的选项是___②____。
①0.314´10 ②0.314e10 ③0.0314´102 ④3.14L
9、数据类型的自动转换和强制转换
若a为float型变量,且已赋值3.46932,能正确使a中的值保持两位小数,删去此后小数的语句是___③___。
①a=a*100/100; ②a=int(a*100)/100.0;
③a=(int)(a*100)/100.0; ④a=(int)a*100/100.0;
10、设a=1,b=2,c=3,d=4,则表达式“a<b?a:c<d?a:d”的结果为__D____
A) 4 B)3
C) 2 D)1
11、赋值语句的使用,如i/=a a=b+c等等
若变量已正确定义并赋值,以下不能构成赋值语句的是__________4。
①s/=i; ②k++; ③a=b+c; ④i+j;
12、运算符的运算对象的类型
C语言中,运算对象必须是整型数的运算符是________1。
①% ②/ ③%和/ ④*
以下一组运算符中,优先级最低的运算符是(D)。
A. * B. = = C. + D. =
13、不同数据类型的混合运算规则
设变量a是整型,f是实型,i是双精度型,则表达式100%9+'a'+i*f值的数据类型是________3。
①int ②float ③double ④不确定
14、逗号表达式的运算规则
设有如下定义:
int x=10,y=3,z;
则语句
printf("%d\n",z=(x%y,x/y));
的输出结果是________4。
①1 ②0 ③4 ④3
15、字符串的长度函数,转义字符,如strlen("abcd\n00a\01\\")的值是多少?
以下语句的字符串中没有空格,则输出结果是__________2。
printf("%d\n",strlen("std\n007\1\\"));
①8 ②9 ③ 10 ④11
16、 若有定义:int a=8,b=5,C;,执行语句C=a/b+0.4;后,c的值为( B )
A) 1.4 B) 1 C) 2.0 D) 2
17、若变量已正确定义,语句“if(a>b) k=0; else k=1;”和(C)等价。
A. k=(a>b)?1: 0; B. k=a>b;
C. k=a<=b; D. a<=b ? 0 : 1;
18、若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是( D )
A) a的值是字符C B) a的值是浮点型
C) 不允许字符型和浮点型相加 D) a的值是字符‘A’的ASCII值加上1。
19、在C语言中,5种基本数据类型的存储空间长度的排列顺序为 ( A )
A) char < int < long int <= float < double
B) char = int < long int <= float < double
C) char < int < long int = float = double
D) char = int = long int <= float < double
21、若 int a=3,则执行完表达式a+=a-=a*a后a的值为( C )
A) -3 B) 9 C) -12 D) 6
22、有以下程序
main()
{ int a; char c=10;
float f=100.0; double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是b
A)1 65 1 6.5 B)1 65 1.5 6.5 C)1 65 1.0 6.5 D)2 65 1.5 6.5
23、设x.y.z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为(C)
A) 4 B) 16 C) 32 D) 52
24、有以下程序
main()
{ char a='a',b;
printf("%c,",++a);
printf("%c\n",b=a++);
}
程序运行后的输出结果是(A)
A)b,b B)b,c C)a,b D)a,c
25.以下使i的运算结果为4的表达式是(D)。
A.int i=0,j=0;
(i=3,(j十十)十i);
B.int i=1,j=0;
j=i=((i=3)*2);
C.int i=0,j=1;
(j==1)?(i=1);(i=3);
D.int i=1,j=1;
i+=j十=2;
26.下列四组选项中,均不是C语言关键字的选项是(A).
A)define B)getc C)include D)while
if char sanf go
type printf case pow
27.设n=10,i=4、则赋值运算n%=i+1执行后,n的值是(A).
A.0 B.3 C.2 D.1
28.逗号表达式(a=3*5,a*4),a十15的值为( C ),a的值为( C )。
①A.15 B.60 C.30 D.不确定
②A.60 B.30 C.15 D.90
29. 若有代数式,则正确的C语言表达式是(A)。
A)sqrt (fabs(pow(y,x)+log(y)))
B) sqrt (abs(pow(y,x)+long(y)))
C) sqrt (fabs(pow(x,y)+log(y)))
D) sqrt (abs(pow(x,y)+long(y)))
30.下面叙述不正确的是( B)。
A) C语句末尾必须有分号
B) C语言中无论是整数还是实数都能准确的表示
C) 运算符“%”只能用于整数运算
D) 乘除运算符优先级高于加减运算符
31. ’\60’在内存中占 一 个字节,”\60”在内存中占 两 个字节。
CH3 最简单的C程序设计
掌握:
1,数据输出:putchar函数,printf函数。
2,数据输入:getchar函数,scanf函数。
1、结构化程序设计的几种基本结构,几种语句的使用
结构化程序设计所规定的三种基本控制结构是( 顺序、选择、循环 )
2、键盘输入数据时的格式
有如下输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为2,b的值3,c的值为4,从键盘输入数据的正确形式应是____3____。
①234↙ ②2,3,4↙
③a=2,b=3,c=4↙ ④a=2 b=3 c=4↙
3、若有程序
main()
{ int i,j;
scanf("i=%d,j=%d", &i,&j);
printf("i=%d,j=%d\n",i,j);
}
要求给i赋10,给j赋20,则应该从键盘输入:i=20,j=30 。
4、以下程序段的输出结果是( C )
int a=1234;
printf("%2d\n",a);
A) 12 B) 34 C) 1234 D) 提示出错、无结果
5、若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为( D )
A) 无确定值 B) a的地址 C) 512 D) 511
6、若x和y都是int型变量,x=100,y=200,且有下面的程序片段:
printf("%d",(x,y));
上面程序片段的输出结果是(A)
A)200 B)100 C)100 200 D)输出格式符不够,输出不确定的值
7、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:
scanf("i=%d,f=%f",&i,&f);
为了把100和765.12分别赋给i和f,则正确的输入为b
A)100765.12 B)i=100,f=765.12 C)100765.12 D)x=100y=765.12
8、若有int a,b,c; 则正确的输入语句是(D)。
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);
9、有以下程序
main( )
{ int m=0256,n=256;
printf("%o %o\n",m,n);
}
程序运行后的输出结果是c
A)0256 0400 B)0256 256 C)256 400 D)400 400
10、有以下程序
main()
{ int a=666,b=888;
printf("%d\n",a,b);
}
程序运行后的输出结果是(B)
A)错误信息 B)666 C)888 D)666,888
11、若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是(D).
A) scanf(“%d%d1x,%1e”,&x,&y,&z);
B) scanf(“%2d*%d%1f”,&x,&y,&z);
C) scanf(“%x%*d%o”,&x,&Y);
D) scanf(“%x%o%6.2f”, &x,&y,&z);
12、 表示“x≥y≥z”的C语言表达式是___ x>=y && y>=z ____。
13、下面程序段的执行结果是x=【3】,y=【4】。
int a=3,b=5,x,y;
x=a+1,b+6;
y=(a+1,b+6);
printf("x=%d,y=%d",x,y);
CH4 选择结构程序设计
1,关系运算符和关系表达式:关系运算符及其优先次序,关系表达式。
2,逻辑运算符和逻辑表达式:逻辑运算符及其优先次序,逻辑表达式。
3,条件运算符和条件表达式。
4,条件语句:if语句的三种形式,if语句的嵌套。switch开关语句。
1、逻辑表达式的计算规则
语句if(!E);中的表达式!E等价于________3。
① E!=0 ②E!=1 ③E==0 ④ E==1
2、表达式:10!=9的值是________2。
①true ②1 ③0 ④非零值
3、下列条件语句中,功能与其他语句不同的是 d
A) if(a) printf("%d\n",x); else printf("%d\n",y);
B) if(a==0) printf("%d\n",y); else printf("%d\n",x);
C) if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D) if(a==0) printf("%d\n",x); else printf("%d\n",y);
4、条件表达式的运算:例int a=3,b=2 求 (--a!=b++)?--a:++b值
如果变量定义有:int a=9,c=8;则表达式(――a!=c++)?――a:++c的值为________2。
①9 ②10 ③7 ④8
5、若a=3,b=4,c=5,则表达式a+b>c&&b==c 的值是 ( 0 ) 。
6、CASE语句的执行
执行下列程序,当输入为1时,输出结果是①:__________4。
输入为3时,输出结果是
②:__________3。
#include <stdio.h>
main()
{ scanf("%d",&k);
switch(k)
{
case 1:printf("%d\n",k++);
case 2:printf("%d\n",k++);
case 3:printf("%d\n",++k);
case 4:printf("%d\n",k++);break;
default:printf("Full!\n")
}
}
①
①1
②2
③2
3
4
5
④ 1
2
4
4
②
①3
②4
5
③4
4
④4
Full!
设有程序片段,若grade的值为‘A’
1. 。则输出结果是 ___。
switch(grade)
{case ‘A’: printf(“85~100\n”);
case ‘B’: printf(“70~84\n”);
case ‘C’: printf(“60~69\n”);
case ‘D’: printf(“< 60\n”);
default : printf(“error!\n”);
}
提示:注意有无break.
设有声明语句int b=0;,则执行以下语句后输出结果为**0**。
switch (b)
{
case 0: printf("**0**");break;
case 1: printf("**1**");break;
}
7、判断语句的形式
设定义int x,a,b,c;以下合法的if语句是____________1。
①if(a=b)x++; ②if(a=<b)x++;
③if(a<>b)x++; ④if(a=>b)x++;
8、表示图中坐标轴上阴影部分的正确表达式是( C )
X
a b c
A) (x<=a)&&(x>=b)&&(x<=c)
B) (x<=a)||(b<=x<=c)
C) (x<=a)||(x>=b)&&(x<=c)
D) (x<=a)&&(b<=x<=c)
9、 以下程序的输出结果是( C )
main()
{ int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}
A) 5 B) 4 C) 6 D) 不确定
10、 以下程序的输出结果是( A )
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}
A) 1 B) 0 C) 非0的数 D) –1
11、设a=1,b=2,c=3,d=4,则表达式“a<b?a:c<d?a:d”的结果为__D____
A) 4 B)3
C) 2 D)1
12、若变量a, i已正确定义,且i已正确赋值,合法的语句是( B )
A) a==1 B) ++i; C) a=a++=5; D) a=int(i);
13、若从键盘输入58,则以下程序输出的结果是 585858 。
main()
{ int a;
scanf("%d",&a);
if(a>50) printf("%d",a);
if(a>40) printf("%d",a);
if(a>30) printf("%d",a);
}
14. 以下程序的输出结果是 16 。
main()
{ int a=0
a+=(a=8);
printf("%d\n",a);
}
15. 以下程序输出的结果是 0 。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
16、 有下列运算符<<、+、++、〈=,其中优先级最高的是 ++
17、设x,y,z,t均为int型变量,则执行以下语句后,t的值为c
x=y=z=1;
t=x||y&&z;
A)不定值 B)2 C)1 D)0
18、以下错误的if语句是【 C】。
A) if(x>y) z=x;
B) if(x==y) z=0;
C) if(x!=y) printf("%d",x) else printf("%d",y);
D) if(x<y) { x++;y--;}
19、多重if_else语句嵌套使用时,寻找与else配套的if方法是【B 】。
A) 缩排位置相同的if
B) 其上最近的未配对的if
C) 下面最近的if
D) 同行上的if
20. 以下关于运算符优先顺序的描述中正确的是(C).
A)关系运算符<算术运算符<赋值运算符<逻辑与运算符
B)逻辑与运算符<关系运算符<算术运算符<赋值运算符
C)以赋值运算符<逻辑与运算符<关系运算符<算术运算符
D)算术运算符<关系运算符<赋值运算符<逻辑与运算符
21.判断char型变量ch是否为大写字母的正确表达式是(C).
A)’A’<=ch<=’Z’ B)(cb>=’A’)&(ch<=’Z’)
C)(ch>=’A’)&&(ch<=’Z’) D)(‘A’<=ch)AND(‘Z’>=ch)
22.以下程序的输出为【 A】。
main( )
{ int a=20,b=30,c=40;
if(a>b) a=b,
b=c;c=a;
printf("a=%d,b=%d,c=%d",a,b,c);
}
A) a=20,b=30,c=20
B) a=20,b=40,c=20
C) a=30,b=40,c=20
D) a=30,b=40,c=30
23. 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是(B).
if(x>y)
z=x;x=y; y=z;
A)x=l0,y=20,z=30 B)x=20,y=30,z=20
C)x=20,y=30,z=10 D)x=20,y=30,z=20
24.阅读以下程序
main()
{int a=5,b=0,c=0;
if(a=b+c) printf(“***\n”);
else printf(“$$$\n”);
}
以上程序 (D).
A)语法有错不能通过编译 B)可以通过编译但不能通过连接 C)输出*** D)输出$$$
25、对下面的程序,正确的说法是【A 】。
main( )
{ int a,b=1,c=2;
a=b+c,a+b,c+3;
c=(c)?a++:b--;
printf("c=%d/n",(a+b,c)); }
A) 无错误 B) 第三行有错误 C) 第四行有错误 D) 第五行有错误
26、执行下面程序时输出为1,请填空。
main( )
{ int a=4,b=3,c=2,d=1;
printf("%d\\n",(a<b?a:d<c?【3】:b));
}
分析:因为a<b的值为假,此题相当于求a<b?a:(d<c?【3】:b),即先算出d<c?___:b的值1后,再和左半部的a<b?a:___组成新的条件运算。
本题正确答案为 【3】d或1。
27、执行下面程序时,若从键盘上输入8,则输出为9,请填空。
main( )
{ int x;
scanf("%d",&x);
if(【2】>8)
printf("%d\\n",++x);
else printf("%d\\n",x--);
}
答案 x++。
28、对下述程序,正确的判断是【 A】。
main( )
{ int a,b;
scanf ("%d,%d",&a,&b);
if(a>b)a=b; b=a;
else a++; b++;
printf("%d,%d",a,b); }
A) 有语法错误不能通过编译
B) 若输入4,5则输出5,6
C) 若输入5,4则输出4,5
D) 若输入5,4则输出5,5
编程题 会用if-else语句、if……else if……else if……else 语句编程
CH5 循环控制
掌握:while语句。do—while语句。for语句。循环的嵌套。break和continue语句。
了解:goto语句以及用goto语句构成的循环
1、循环控制语句的使用
定义如下变量:
int n=10;
则下列循环的输出结果是________4。
while(n>7)
{n——;
printf("%d\n",n);
}
①10
②9
③10
④9
9
8
9
8
8
7
8
7
7
6
2、循环结构中的循环次数
有以下程序段:
int k=0;
while(k=1)k++;
while循环执行的次数是________1。
①无限次 ②有语法错,不能执行
③一次也不执行 ④执行1次
3、当执行以下程序时( A )
x=1;
do
{x=x*x;}
while(!x);
A) 循环体将执行一次 B)循环体将执行两次
C) 循环体将执行无限次 D)系统提示有语法错误
4、有如下程序
main()
{int x=23;
do{
printf("%d",x--);
}
while(!x);
}
该程序的执行结果是( B )
A)22 B) 23 C) 不输出任何内容 D) 陷入死循环
7、 有以下程序,输出结果是( B )
main()
{ int i , j ;
for(j=10;j<11;j++)
{for (i=9;i<j;i++)
if(!(j%i))break;
if(i>=j-1) printf(“%d”,j);
}
}
A) 11 B) 10 C) 9 D) 10 11
8. 以下程序的输出结果是 5 。
main()
{int s,i;
for(s=0,i=1;i<3;i++,s+=i);
printf("%d\n",s);
}
9、有以下程序
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{
case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);
}
}
程序运行后的输出结果是 c
A)022111 B)021021 C)000122 D)012
10、#include <stdio.h>
void main( )
{
int digit,number;
scanf(“%d”,&number);
while(number)
{ digit=number%10;
number/=10;
printf(“%d”,digit);
}
}
运行结果为:4321
11.以下for循环是( C )。
for(x=0,y=0;(y!=123)&&(x<4);x++);
A)无限循环 B)循环次数不定 C)执行4次 D)执行3次
12.下面有关for循环的正确描述是( D )
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判定表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环体语句中,可以包含多条语句,但要用花括号括起来
13. C语言中while和do-while循环的主要区别是(A).
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比的循环控制条件严格
C)do-while允许从外部转到循环体内
D)do-while的循环体不能是复合语句
14.执行循环语句:for(x=0, y=0; y!=250 || x<4; x++) y+=50;
其循环体共执行 ____A_______ 次。
A)5 B)4 C)3 D)2
15. break语句 ______C_____ 。
A 用在能出现语句的任何地方
B 只能用在循环体内
C 只能用在循环体内或switch语句中
D 可用作函数内的任一语句
16.下面程序段的运行结果是(D)
x=y=0;
while(x<15) y++, x+=++y;
printf(“%d,%d”’y’x);
A)20,7 B)6,12 C)20,8 D)8,20
17.下面程序的运行结果是(C).
#include<stdio.h>
main()
{int num=0;
while(num<=2)
{num++;
printf(“%d\n”,num);
}
}
A)1
B)1 2
C)1 2 3
D)1 2 3 4
18.下面程序段的运行结果是(C).
for(y=1;y<10;) y=((x=3*y,x+1),x-1);
printf(“x=%d,y=%d”,x,y);
A)x=27,y=27
B)x=12,y=13
C)x=15,y=14
D)x=y=27
19. 下面程序的运行结果是【x=1,y=20】。
#include<stdio.h>
main()
{ int i,x,y;
i=x=y=0;
do {++i;
if(i%2!=0) {x=x+i;i++;}
y=y+i++;
} while (i<=7);
printf(“x=%d,y=%d\n”,x,y);
}
20、main()
{ int k, i , j;
for(i=0;i<=2;i++)
{ for(k=1;k<=i;k++) printf(“ ”);
for( j=0;j<=3;j++) printf(“ * ”);
printf(“\n”);
}
}
21.下面程序的功能是计算S= k! 。
long fun(int n)
{ int i;
long s;
for(i=1;i<=n ;i++)
s*=i;
return( s);
}
编程题
“水仙花数”是指一个三位数,它的三个数位数字的立方和这个数的数值相等,编程打印所有的水仙花数。
解:本题适于使用穷举法求解,注意穷举范围为三位数100~999,穷举条件为:三位数的三个数位数字的立方和等于这个数的数值。需要使用循环结构。程序如下:
#include <stdio.h>
main()
{
int d0,d1,d2,n;
printf("The numbers are :");
for (n=100;n<=999;n++)
{ d0=n%10;
d1=n%100/10;
d2=n/100;
if (n==d0*d0*d0+d1*d1*d1+d2*d2*d2)
printf("%5d",n);
}
printf("\n");
}
编程实现:求数列的前20项的和。
CH6 数组
1,一维数组的定义和引用,一维数组的初始化及程序。
2,二维数组的定义和使用:二维数组的定义、引用,二维数组的初始化及程序。
3,字符数组:字符数组的定义、引用及初始化,字符串和字符串结束标志,字符数组的输入输出,字符数组编程应用。
1、合法的数组定义是d
A)int a[]=“string” B)int a[5]={0,1,2,3,4,5}
C)vhst s=“string”
展开阅读全文