C程序设计各知识点题集

更新时间:2024-03-08 10:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言知识点及题型集

一、 单项选择题

1. 基础知识

1、以下说法中正确的是( )

A、C语言程序总是从第一个的函数开始执行

B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行

D、C语言程序中的main()函数必须放在程序的开始部分 答案:C

2、下列字符序列中,可用作C标识符的一组字符序列是( )。

A) S.b,sum,average,_above B) class,day,lotus_1,2day C) #md,&12x,month,student_n! D) D56,r_1_2,name,_st_1 答案:D

3、以下标识符中,不能作为合法的C用户定义标识符的是()。 A) a3_b3 B) void C) _123 D) IF 答案:B

4、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是(D) A、 6.500000 B、 6 C、 5.500000 D、 6.000000 5、以下的选择中,正确的赋值语句是()。

A) a=1,b=2 B) j++ C) a=b=5; D) y=int(x) 答案:C

6、在C语言中,能代表逻辑值“真”的是()。

A) True B) 大于0的数 C) 非0整数 D) 非0的数 答案:D

7、下列程序的输出结果是()。 main()

{char c1=97,c2=98; printf(\}

A) 97 98 B) 97 b C) a 98 D) a b 答案:B

8、执行下列语句后变量x和y的值是()。 y=10;x=y++;

A) x=10,y=10 B) x=11,y=11 C) x=10,y=11 D) x=11,y=10 答案:C

9、设a=12,且a定义为整型变量。执行语句a+=a-=a*=a;后a的值为()。 A) 12 B) 144 C) 0 D) 132 答案:C

10、已知year为整型变量,不能使表达式(year%4==0&&year0!=0)||year@0==0的值为“真”的数据是()。

A) 1990 B) 1992 C) 1996 D) 2000 答案:A

11、下列程序的输出结果是()。 main()

{int a=7,b=5;

printf(\}

A) 0 B) 5 C) 1 D) 不确定值 答案:A

12.以下关于运算符优先顺序的描述中正确的是( )。 A) 关系运算符<算术运算符<赋值运算符<逻辑运算符 B) 逻辑运算符<关系运算符<算术运算符<赋值运算符 C) 赋值运算符<逻辑运算符<关系运算符<算术运算符 D) 算术运算符<关系运算符<赋值运算符<逻辑运算符 答案:C

13、已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( ) A、scanf(\

B、scanf(\、scanf(\ D、scanf(\答案:C

14 有以下程序 #include main()

{ char c1,c2;

c1=?A?+?8?-?4?; c2=?A?+?8?-?5?;

printf(“%c,%d\\n”,c1,c2); }

已知字母A的ASCII码为65,程序运行后的输出结果是( ) (A) E,68 (B) D,69 (C) E,D (D)输出无定值 答案:A

15、若有以下类型说明语句:char w; int x; float y; double z;则表达式 w*x+z-y 的结果类型是( )

A、float B、char C、int D、double 答案:D

16、关于局部变量,下列说法正确的是 ( )。 A、 定义该变量的程序文件中的函数都可以访问。

B、 定义该变量的函数中的定义处以下的任何语句都可以访问。 C、 定义该变量的复合语句的定义处以下的任何语句都可以访问。 D、 局部变量可用于函数之间传递数据。 答案:D

17.若变量已正确说明为float类型,要通过语句scanf(\%f %f \给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:( )

A) 10<回车> B) 10.0,22.0,33.0<回车> 22<回车> 33<回车>

C) 10.0<回车> D) 10 22<回车> 22.0 33.0<回车> 33<回车> 答案:B 2.三大结构

(1) 下列程序的运行结果是( ) #include void main() {

char c1 = '6', c2 = '0';

printf(\}

A.因程序格式不合法,提示出错信息 B.6,0,6 C.6,0,7 D.6,0,5

(2) 下列程序的运行结果是( ) #include void main() {

double x = 2.0, y; if(x<0.0) y = 0.0;

else if(x<10.0) y = 1.0/x; else y = 1.0; printf(\ }

A.0.000000 B.0.250000 C.0.500000 D.1.000000

(3) 下列程序的运行结果是( ) #include void main() {

int a = 2, b = -1, c = 2; if( b < 0) c = 0; else c = c + 1; printf(\}

A.0 B.1 C.2 D.有语法错误

(4) 下列程序的运行结果是( ) #include void main()

{

int a = 100;

if( a > 0) printf(\ else printf(\ }

A.0 B.1 C.100 D.-1

(5) 下列程序的运行结果是( ) #include void main() {

int x = 1, a = 0, b = 0;

switch(x) { case 0: b = b + 1; case 1: a = a + 1; case 2: a = a + 1; b = b + 1; }

printf(\ }

A.a=2,b=1B.a=1,b=1 C.a=1,b=0 3.函数

A. double fun(int x,int y) B. double fun(int x; int y) C. double fun(int x, int y); D. double fun(int x,y) 答案:A

D.a=2,b=2

1.以下正确的函数定义形式是( )。

2. C语言中,简单变量作为实参时,它和对应形参之间的数据传递方式是( )。 A. 地址传递 答案:B

3. 在C语言程序中以下正确的描述是( )。 A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用均不可以嵌套 D. 函数的定义和函数的调用均可以嵌套

B. 单向值传递

C. 由实参传递给形参,再由形参传递给实参 D. 由用户指定传递方式

答案:B

4. 若数组名作为函数调用的参数,则传递给形参的是( )。 A. 数组的首地址 答案:A

5. 若调用一个函数,且此函数中没有return语句,则正确的说法是( )。 A. 没有返回值 答案:D

6. 在C语言中,以下说法正确的是( )。 A. 实参和与其对应的形参各占用独立的存储单元 B. 实参和与其对应的形参共占用一个存储单元 C. 只有当实参与其对应的形参同名时才共占用存储单元 D. 形参是虚拟的,不占用存储单元 答案:A

7. 以下正确的说法是( )。

A.用户若需要调用标准库函数,调用前必须重新定义

B.用户可以重新定义标准库函数,如若此,该函数将失去原有定义 C. 系统不允许用户重新定义标准库函数

D. 用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。

答案:B

8. 以下不正确的说法是( )。 A. 实参可以是常量,变量或表达式 B. 形参可以是常量,变量或表达式 C. 实参可以为任意类型

D. 如果形参和实参的类型不一致,以形参类型为准 答案:B

9.C语言规定,函数返回值的类型是由( )决定的。 A. return语句中的表达式类型 B. 调用该函数时的主调函数类型 C. 调用该函数时由系统临时 D. 在定义函数时所指定的函数类型 答案:D

10. 以下正确的函数定义是( )。 A. double fun(int x, int y) { z=x+y; return z; }

B.double fun(int x,y)

{ int z; return z }

B.返回若干个系统默认值

C. 能返回一个用户所希望的函数值

D. 返回一个不确定的值

B. 数组第一个元素的值

D. 数组元素的个数

C. 数组中全部元素的值

C. fun (x,y) D. double fun (int x, int y)

{ int x, y; double z; z=x+y return z } 答案:D 4.数组

{ double z; z=x+y; return z }

1. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(C) A 整型常量 B 整型表达式

C 整型常量或整型表达式 D 任何类型的表达式 2.对以下说明语句的正确理解是(B) int a[10]={6,7,8,9,10};

A 将5个初值依次赋给a[1]至a[5] B 将5个初值依次赋给a[0]至a[4] C 将5个初值依次赋给a[6]至a[10]

D 因为数组长度与数组个数不相同,所以此语句不正确 3.若有说明:int a[3][4];则对a数组元素的非法引用是(D) A a[0][2*1] B a[1][3] C a[4-2][0] D a[0][4] 4.若:int a[3][4]={0};则下面正确的叙述是(D) A 只有元素a[0][0]可得到初值0 B 此说明语句不正确

C 数组a中各元素都可得到初值,但其值不一定为0 D 数组a中每个元素均可得到初值0

5.已有定义:char a[]=\以下叙述中正确的是( C )

A.数组a和b的长度相同 B.a数组长度小于b数组长度 C.a数组长度大于b数组长度

D.上述说法都不对

6.若有定义语句:char s[10]=\,则strlen(s)的值是(A)。 A.7 B. 8 C. 9 D. 10 7.如下代码: int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for(k=0;k<3;k++)

printf(“%d ”,a[k][2-k]); 输出结果为(A)

A 3 5 7 B 3 6 9 C 1 5 9 D 1 4 7 8.判断字符串a和b是否相等,应当使用(D)

A if(a==b) B if(a=b) C if(strcpy(a,b)) D if(strcmp(a,b)==0) 9.有两个字符数组a、b,则以下正确的输入语句是(B) A gets(a,b) B scanf(“%s%s”,a,b); C scanf(“%s%s”,&a,&b); D gets(“a”),gets(“b”); 10.下述描述中错误的是(C) A 字符数组可以存放字符串

B 字符数组的字符串可以整体输入、输出

C 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D 不可以用关系运算符对字符数组中的字符串进行比较 5.结构体

1.在说明一个结构体变量时系统分配给它的存储空间是( D )

A) 该结构体中第一个成员所需存储空间 B) 该结构体中最后一个成员所需存储空间

C) 该结构体中占用最大存储空间的成员所需存储空间 D) 该结构体中所有成员所需存储空间的总和

2. 以下对结构体类型变量的定义中不正确的是( D ) A) #define STU struct student B) struct student STU { int num;

{ int num; float age; float age; }std1; }; std1; C) struct D) struct { int num; { int num;

float age; float age; } student; }std1; struct student std1; 3. 设有以下说明语句

struct stu

{ int a; float b; }stutype; 则下面的叙述不正确的是( C )。

A) struct是结构体类型的关键字 B)struct stu是用户定义的结构体类型 C) stutype是用户定义的结构体类型名 D) a和b都是结构体成员名

4. 定义以下结构体数组 struct c { int x; int y;

}s[2]={1,3,2,7};

语句printf(\的输出结果为( C ) A) 14 B) 6 C) 2 D) 21 5. 根据下面的定义,能输出Mary的语句是( B ) struct person {

char name[9]; int age; };

struct person class[5]={\A) printf(\B) printf(\C) printf(\D) printf(\6. 定义以下结构体数组 struct {

int num;

char name[10];

}x[3]={1,\

语句printf(\的输出结果为(D) A)2,USA B)3,England C)1,china D)2,England

7.执行下面的程序后,输出的结果是( B ) struct abc {int a,b,c;}; void main()

{struct abc s[2]={{1,2,3},{4,5,6}}; int t;

t=s[0].a+s[1].b; printf(\,t); }

A) 5 B) 6 C) 7 D) 8 C 6. 指针

1. 有以下程序

#include main()

{ int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r;

printf(“%d,%d,%d,%d\\n”,m,n,*p,*q); }

程序运行后的输出结果是(B)

A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 2.以下选项中正确的语句组是(d)

A)char s[];s=”BOOK!”; B) char *s;s={”BOOK!”}; C)char s[10];s=”BOOK!”; D) char *s;s=”BOOK!”; 3. 以下选项中正确的语句组是 若有以下定义 int x[10],*pt=x;

则对x数组元素的正确应用是(C)

A)*&x[10] B)*(x+10) C)*(pt+3) D)pt+3

4.若有定义语句:double x,y,*px,*py,执行了px=&x, py=&y;之后,正确的输入语句是(C) A)scanf(“%f%f”,x,y); B) scanf(“%f%f”,&x,&y); C) scanf(“%lf%le”,px,py); D) scanf(“%lf%lf”,x,y); 7. 文件

(1)下列关于C语言数据文件的叙述中正确的是(D)

A) 文件由ASCII码字符序列组成,C语言只能读写文本文件 B) 文件由二进制数据序列组成,C语言只能读写二进制文件

C) 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D) 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 (2)有如下程序

#include

main()

{FILE *fp1;

fp1=fopen(\ fprintf(fp1,\ fclose(fp1); }

若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为(C) A) goodabc B) abcd C) abc D) abcgood (3)以下叙述中错误的是(D)

A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B) 在程序结束时,应当用fclose函数关闭已打开的文件

C) 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据

D) 不可以用FILE定义指向二进制文件的文件指针

(4)若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是(B)

A) fopen(\ B) fopen(\ C) fopen(\ C) fopen(\(5)

二、 读程序写结果

1.函数

1.下列程序的执行结果为 ( )。 float f1(float x) {

int k=2; k=k*x; return k;

} void main() {

float b=4.3; printf(\

} 答案:8.6

2.下面程序的输出是 ( )。 #include void main() {

char ss[10]=\ strcat(ss,\

printf(\

}

答案:123456789

3. 程序执行时,若输入10,程序的输出结果是( )。 int fun(int n) { if(n==1) return 1; else

return(n+fun(n-1));

} main() { int x,y; scanf(\ y=fun(x);

printf(\ } 答案:55

4. 下面程序的输出是 ( #include void fun(int *s, int m, int n) { int t; while(m

}

} void main() { int a[5]={1,2,3,4,5},k; fun(a,0,4);

for(k=0;k<5;k++)

)。

printf(\ \

}

答案:5 4 3 2 1

5. 运行程序时,若从键盘输入asd af aa z67(回车),分析以下程序的输出结果( )。 #include int fun(char *str) { int i,j=0;

for(i=0;str[i]!=?\\0?;i++) if(str[i]!=? ?)

str[j++]=str[i];

str[j]=?\\0?;

} void main() { char str[81]; int n;

printf(\ gets(str); fun(str);

printf(\

}

答案:asdafaaz67

6 . 程序运行后的输出结果是( 64 #include int fun() {

static int x=1; x*=2; return x; }

void main() {

int i,s=1;

for(i=1;i<=3;i++) s*=fun(); printf(\}

7. 以下程序的输出结果是(4) #include int m=13;

int fun(int x,int y)

)。

{ int m=2; return(x*y-m); }

main() { int a=7,b=6; printf(\}

8.以下程序输出结果为(6) #include fun(int x) { static int a=3; a+=x; return(a); }

main() { int k=2,m=1,n; n=fun(k); n=fun(m); printf(\}

2.数组

1.下面程序的运行结果是_____________ void main() {

int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++)

a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) {

for(j=1;j<6;j++)

printf(\ printf(\ } }

2. 下面程序的运行结果是_____________ void main()

{

int f[10]={1,1},i; for(i=2;i<10;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<10;i++) {

if(i%4==0)

printf(\ printf(\ } }

三、 程序填空

1. 基础知识

1. 表达式(int)((double)(5/2)+2.5)的值是【4】 2.函数

1.以下程序实现了求两个数的最大公约数,请将程序填写完整。

int divisor(int a,int b) { int r; r=a%b; while(【1】) { a=b;b=r;r=a%b;} return b; }

void main() { int a,b,d,t;

scanf(\if (a

{ t=a; a=b; b=t; } d=【2】;

printf(\}

答案:【1】r!=0 【2】divisor(a,b)

2.以下函数fun的功能是:将输入的大写字母,先转换为与其对应的小写字母,然后再转换成该小写字母后的第3个字母,返回后输出。例如,若输入的字母为E,输出的字母则为h;若输入的字母为Y,输出的字母则为b。

#include

#include char func(char c) { c=【1】;

if(c>='a' && c<'w') }

void main() { char c; c=getchar(); c=【3】; putchar(c); }

答案:【1】c+32 【2】?a?+(c-?a?)& 【3】func(c)

3. 以下程序的功能是用递归方法计算5位同学的年龄,已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。

递归公式如下:

#include int age(int i) { int c; if(n==1) c=10; else c=【1】; return c; }

void main() { int n=5;

printf(\【2】);

age(n)=

age(n-1)+2

(n>1)

10

(n=1)

c=c+3; 【2】;

else if(c>='x' && c<='z') return c;

}

答案:【1】age(n-1)+2 【2】age(n)

4. 编写函数,求数组的最大值,请将程序补充完整。 #include void main() {

int i,d,a[10]; for(i=0; i<10; i++) scanf(\ d=zmax(【1】); printf(\}

int zmax(int x[ ],int n) { int i,d; d=x[0]; for(i=1; id) 【2】; return d; }

答案:【1】a,10 【2】d=x[i]

5. 以下函数my_cmp( )的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,s

my_cmp(char *s,char *t) {

while(*s == *t) {

if (【1】) return 0; ++s; ++t; }

return 【2】; }

答案:【1】*s>*t 【2】*s-*t

3.数组

本文来源:https://www.bwwdw.com/article/qw7a.html

Top