C程序设计题库(含答案)

更新时间:2024-04-02 17:24:02 阅读量: 综合文库 文档下载

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

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)

D.a=2,b=2

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

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

B. 单向值传递

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

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

B. 数组第一个元素的值

D. 由用户指定传递方式

C. 数组中全部元素的值 A. 没有返回值

D. 数组元素的个数

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

5. 若调用一个函数,且此函数中没有return语句,则正确的说法是( )。 C. 能返回一个用户所希望的函数值

D. 返回一个不确定的值

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

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

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

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

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

D. 如果形参和实参的类型不一致,以形参类型为准 9.C语言规定,函数返回值的类型是由( )决定的。 A. return语句中的表达式类型 B. 调用该函数时的主调函数类型 C. 调用该函数时由系统临时 D. 在定义函数时所指定的函数类型 10. 以下正确的函数定义是( )。 A. double fun(int x, int y) { z=x+y; return z; }

B.double fun(int x,y)

{ int z; return z }

C. fun (x,y) D. double fun (int x, int y) { int x, y; double z; z=x+y return z }

4.数组

1. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(C) A 整型常量 B 整型表达式 C 整型常量或整型表达式 D 任何类型的表达式 2.对以下说明语句的正确理解是(B) int a[10]={6,7,8,9,10};

A 将5个初值依次赋给a[1]至a[5]

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

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 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;

D) 21 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)

二、 读程序写结果

2.三大结构

3.函数

1.下列程序的执行结果为 ( )。 float f1(float x) { int k=2; k=k*x;

return k;

} void main() { float b=4.3; printf(\

}

2.下面程序的输出是 ( )。 #include void main() { char ss[10]=\ strcat(ss,\

printf(\ }

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(\

}

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. 运行程序时,若从键盘输入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(\

}

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(\}

4.数组

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(\ } }

5.结构体

6. 指针

7. 文件

三、 程序填空

1. 基础知识

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

2.三大结构

3.函数

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(\}

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=func(c); putchar(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】); }

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

age(n-1)+2

(n>1)

10

(n=1)

c=c+3; 【2】;

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

{

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; }

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】; }

4.数组

5.结构体

6. 指针

7. 文件

四、 编程

2.三大结构

1.【顺序】

(1) 从键盘输入一个3位整数,输出它的个位数字、十位数字和百位数字。

例如,输入是: 365,输出是: 个位数字是5,十位数字是6,百位数字是3。 (2) 从键盘输入一个英文大写字母,输出其对应的小写字母以及小写字母对应的ASCII码值。

(3) 编写程序,求梯形面积,梯形的上底、下底以及高均从键盘输入。 (4) 编写程序,从键盘输入圆柱体的高,底面圆的半径,求圆柱体的体积。

2.【分支】

(1) 根据输入的月份(1到12之间的数),输出对应的季节(1-3月为春天,4-6月为夏天,7-9月为秋天,10-12月为冬天)。

(2) 将百分制成绩转化成等级制输出(60分以下为不及格,60-70为及格,70-80为中等,80-90为良好,90-100为优秀)。

(3) 根据输入的数字如1-7,输出星期几。

(4) 用户输入运算数和四则运算符,输出计算结果。 (5) x的值由键盘输入,求函数y的值如下: { x - 1 -5

(6) x的值由键盘输入,求函数y的值如下: { x x<1

y = { 2x - 1 1<= x < 10 { 3x - 11 x>= 10 3.【循环】(本题不允许使用数组)。

(1) 使用循环语句,编程求1 + 2/3 + 3/4 + ... + (n-1)/n的值(n是从键盘输入的正整数)(本题不允许使用数组)。

(2) 使用循环语句, 编程求1 + 1/2 + 1/3 + ... + 1/n的值(n是从键盘输入的正整数)(本题不允许使用数组)。

(3) 使用循环语句,编程输出下面图案(本题不允许使用数组)。

* *** ***** ******* *********

(4) 使用循环语句,编程输出下面图案(本题不允许使用数组)。 ********* ******* ***** *** *

(5) 输入一个100到999之间的3位数,判断是否为一个“水仙花数”.

水仙花数是指这个3位数的各位数字的立方和等于这个数本身。 例如, 153 = 1*1*1 + 5*5*5 + 3*3*3 (本题不允许使用数组) (6) 输出100到999之间所有的完数.

一个整数若等于其所有因子之和,则称该数为完数。 例如, 28 = 1 + 2 + 4 + 7 + 14 (本题不允许使用数组)

(7) 编写程序,输出100-999之间的所有素数。(本题不允许使用数组)

3.函数

1. 请用自定义函数的形式编程实现,求s=m!+n!+k!,m、n、k从键盘输入(值均小于7)。

2. 请编写两个自定义函数,分别实现求两个整数的最大公约数和最小公倍数,并用主函数调用这两个函数,输出结果(两个整数由键盘输入得到)。

3. 编写函数判断用户输入的3个整型值是否组成三角形,并计算三角形面积。 4. 写一个判断素数的函数,在主函数输入一个整数,输出示范素数的信息。 5. 已知Fibonacci数列:

Fib(n)0 若n=0 1 若n=1 Fib(n-1)+Fib(n-2) 其他情况 请编写一个递归函数,实现求Fib(n)。

6. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 7. 通过函数调用,求一组数中的最大值。

8. 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串 9. 写一个函数,将两个字符串连接。 10. 写几个函数: (1)

输入10个职工的姓名和职工号(整数);

(2) 按职工号由小到大排序,姓名顺序也随之调整; (3) 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

4.数组

1. 从键盘输入10个数到数组,实现数组的逆序存放。

2.从键盘输入10个数到数组,实现求数组的最大值、最小值和平均值。 3. 从键盘输入10个数到数组,实现数组排序。

4. 已知数组中保存着9个从小到大排列的数,向其中插入一个新数,使得插入后的数组元素依然保持有序。

5. 把十进制数转换为二进制数。 6.编程实现二维数组的转置。

7. 编程实现求二维数组的对角线的和。

8. 编程求二维数组的最大最小值。

9. 不用库函数strcat,实现把字符串a连接到字符串b的后面。 10.从键盘输入若干整数(整数个数少于50),其值在0至4的范围内,用-1作为结束标志,统计每个整数的个数。

11.从键盘输入一行字符,统计其中单词的个数。

5.结构体

1. 设有n个学生(包括学号、姓名和数学、英语、计算机三门课程的成绩),编程计算并输出总分最高的学生的姓名和总分。 6. 指针

1.写一通用函数slength,求出一个字符串的长度,并用main()函数调用slength 函数规范:int slength(char *ps)

#include void main()

{ int slength(char *ps); char string[80],*p; int l;

printf(\gets(string); p=string; l=slength(p);

printf(\puts(p);

printf(\getchar(); }

int slength(char *ps) { int n=0; while(*ps!='\\0') { n++;ps++; } return (n); }

2. 写出一通用函数,该函数从一个一维整型数组中寻找一个数,若找到,返回该数组中的下标值,否则返回-1。

函数规范:Found(int * pi,int num,int n) #include main() {

int Found(int * pi,int num,int n);

int Int_arr[10]={2,12,3,4,14,6,8,10,17,1},num,*p,flag=0; printf(\请输入一个要查找的数:\\n\

scanf(\flag=Found(Int_arr,num,10); if ( flag!=-1)

printf(\找到!下标是:%d\\n\else

printf(\没找到\\n\}

Found(int * pi,int num,int n) { int i;

for(i=0;i

if(*(pi+i)==num) return (i); } return (-1); }

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

Top