C综合练习题

更新时间:2024-04-18 13:34:01 阅读量: 综合文库 文档下载

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

《C语言程序设计》综合练习题

一、单项选择题

1. 下列( )是字符串比较函数。

A. puts() B. gets() C. strcpy () D. strcmp() 2.构成一个完整的C源程序必须有且只有一个( )。

A. 函数 B. 过程 C. 主函数 D. 程序 3. 设有int i,j,k;则表达式i=1,j=2,k=3,i&&j&&k的值为( )。 A. 1 B. 2 C. 63 D. 0

4.在C语言中,不同类型数据混合运算时,要先转化成同一类型后进行运算。设一表达式中包含有int、long、unsigned、char类型的变量和数据,则表达式最后的运算结果是( )类型数据。

A.int B.char C.unsigned D.long 5.下列( )不是构成标识符的字符。

A.字母 B.数字 C.下划线 D.标点符号 6.表达式:3>5&&-1||6<3-!-1的值是( )。

A. 0 B.1 C. 表达是不合法 D. 均不对 7. 以下标识符中能做为合法的C用户标识符的是( )。 A. A3+B3 B. float C. 3dx D. x3d 8. 以下数据中不正确的数值或字符常量是( )。

A. 0.0 B. 3E2.7 C. 9861 D. 0xabcd 9. fp=fopen(''test.txt\语句中,r对文件处理方式是( )。 A. 只读打开文件 B. 只写打开文件 C. 追加打开文件 D. 读写打开文件 10.表示关系x<=y<=z的C语言表达式为( ) A. (x<=y)&&(y<=z) B. (x<=y)and(y<=z) C. (x<=y)&(y<=z) D. (x<=y<=z)

11.如果要把常量327存入变量a中,a不能定义的类型是( )。 A. int B. char C. long D. float 12. 在变量的存储结构中,( )局部变量的初始化只有一次。

A. 自动 B. 静态 C. 外部 D. 寄存器 13.下列能正确进行字符串赋值操作的语句是( )。

A. char s[5]={ \ B. char s[5]={ 'a', 'b', 'c', 'd', 'e'} C. char *s;s=\ D. char *s; scanf(\

14.语句if(3/4>1/2)a=1;else a=0; 运行后,a的值是( )。

A. 1 B. 0 C. 与机器有关 D. 语法有错 15.下列( )是合法自定义标识符。

A. 3ma B. float C. m3a D. –ab

16.设a,b和c都是int型变量,且a=3,b=4,c=5,则下列表达式中,值为0的表达式是( )

A. 'a' && 'b' B. a<=b

C. c>=b||b+c&&b-c D. a<=b+c&&c>=a+b

17.判断整型变量i,j可同时被2整除的表达式(i,j同时被2整除返回1,否则返回

0)是( )。

A. !(i%2)||!(j%2) B. !(i%2)&&!(j%2) C. (i%2)&&!(j%2) D. (i%2)||(j%2)

18.若x,y均为double型变量,正确的输入函数调用是( )。 A. scanf(\ B. scanf(\ C. scanf(\ D. scanf(\

20.当执行以下程序段时( )。 x= -1;

Do {x=x*x;}while(!x);

A. 循环体将执行一次 B. 循环体将执行两次 C. 循环体将执行无限次 D. 系统将提示有语法错误

21.执行下列程序段后,a值为( )。

a=1;b=0;

if((a++>++b)?a++;b--) a+=b;

A. 2 B. 3 C. 4 D. 5 22.若x为char型变量,y为int型变量,x,y均有值,正确的输出函数调用是( )。 A. printf(\ B. printf(\ C. printf(\ D. printf(\

23.假定a和b为int型变量,则执行以下语句后b的值为( )。 a=1;b=10 do

{b-=a;a++;

}while (b--<0);

A. 9 B. -2 C. -1 D. 8

24.设有说明语句:int x=43,y=0;char ch='A';,则表达式(x>=y && ch<'b' && !y)的值是( )。

A. 0 B. 语法错 C. 1 D. 假

26.下列不正确的转义字符是( )。

A. '\\\\' B. '\\' C. '074' D. '\\0'

27.已知字符'b'的ASCII码为98,语句printf(''%d,%c'','b','b'+1);的输出为( )。

A. 98,b B. 语句不合法 C. 98,99 D. 98,c 28.下列( )说法,是对“int *p;”正确解释。

A. 定义p是整型变量 B. 定义p为指向整型变量的指针变量 C. 定义p为数组名 D. 定义p的内容为整型地址

29.以下各组运算符中,优先级最高的运算符是( )。

A. < = B. / C. ! = D. & & 31.下列程序段执行后s值为( )。 int i=1,s=0;

do{if(!(i%2))continue;s+=i}while(++i<10);

A. 1 B. 45 C. 25 D. 以上均不是

32.若x,y均为int型变量且有值,要输出x,y的值,正确的输出函数调用是( )。 A. printf(\ B. printf(\ C. printf(\ D. printf(\

33.字符串“c program”存放在内存中占用字节数为( )。

A. 10 B. 9 C. 11 D. 8 34.下列程序段运行后x的值是( )。

A. 14 B. 4 C. 15 D. 3

int al=1,a2=2,a3=3,x=15; if (!al) x--;

else if (a3) x=3; else x=4;

35.对于int a,则表达式1<=a<=5值是( )。

A. 0 B. 1 C. 不定 D. 表达式语法有错 36.变量的存储类型有四种。下列( )的存取速度最快。 A. 自动变量 B. 静态变量 C. 外部变量 D. 寄存器变量

38.设有以下程序段:

int x=0,s=0;

while(!x!=0) s+=++x; printf(\

则( )。

A. 运行程序段后输出0 B. 运行程序段后输出1

C. 程序段中的控制表达式是非法的 D. 程序段执行无限次

39.设x和y均为int型变量,则执行以下语句后的输出为( )。

x=15;y=5;printf(\

A. 0 B. 1 C. 6 D. 12

40.已知字母a的码值为十进制97,数字0的码值为十进制48,下面程序的输出是( )。

A. 输出无定值 B. e,4 C. 101,52 D. e,52

#include int main()

{char c1,c2; c1='a'+'6'-'2'; c2='b'-'a'+'3';

printf(\ return 0;

}

42.假设定义数组:float score[10]; 并且其地址为2000,则元素score[5]的地址为( )。

A. 2005 B. 2010 C. 2015 D. 2020

43.假定p所指对象的值为25,P+1所指对象的值为46,则*(++p)的值为( )。

A. 26 B. 25 C. 46 D. 47

44.若i为整型变量,则以下循环执行的次数是( )。 For(i=2;i==0;)printf(''%d'',i--)

A.无限次 B.0次 C.1次 D.2次

45.设C语言中,一个int型数据在内存中占2个字符,则unsigned int型数据的取值范围为( )。

A. 0~255 B. 0~32767 C. 0~65535 D. 0~2147483647 46.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数时,正确的数据输入方式是( )。

int a1,a2;char c1,c2;

scanf(\%d%c%d%c\&a1,&c1,&a2,&c2);

A. 10A 20B B. 10 A 20 B C. 10A20B D. 10A20 B

47.阅读以下程序,当输入数据的形式为25,13,10正确的输出结果为( #include int main()

{int x,y,z;

scanf(\ printf(\ return 0;

}

A. x+y+z= 48 B. x+y+z= 35 C. x+z=35 D.不确定值48.表示图中坐标轴上阴影部分的正确表达式是( )。(其中a

a b c X

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)

二、判断题

1.打开文件的函数是fclose。( )。

2.局部静态变量是在编译时赋初值的,且只赋初值一次。( ) 3.C语言中允许使用字符串变量。( ) 4.外部变量必须定义在文件的开头部分。( ) 5.语句while(!E);中的表达式!E等价于E= =0。( ) 6.实型分类:单精度、双精度和整型。( ) 7.逻辑运算优先级别都低于算术运算。( ) 8.函数的形参在退出该函数后是不可见的。( ) 9.如果在定义函数时省略extern,则隐含为外部函数。( ) 10.定义二维数组时,第一维长度可以省略。( ) 11.字符'\\0'是字符串的结束标记,其ASCII代码为0。( ) 12.若有int i=10,j=0; 则执行完语句if(j=0)i++;else i--; i的值为11。( ) 13.continue语句的作用是提前结束整个循环的执行。( ) 14.Break语句的作用是提前结束整个循环的执行。( ) 15.在定义函数时的参数是“形式参数”,在调用函数时的参数是“实际参数”。( 16.在函数调用时,实参和形参的变量个数可以不一样多。( )

) )

17.在函数调用时,实参和形参的变量个数一定要一样多。 ( ) 18.若有说明:int a[][4]={{0},{0}}则二维数组a的第一维大小为0。( ) 19.字符串\在内存中占据的存储空间是5个字节。( ) 21.打开文件的函数是fopen( )。

22.若有说明:sratic int a[3][4];则数组a中各元素可在程序的编译阶段得到初值0。( )

23.假设定义数组:float score[10];并且其地址为2000,则元素score[5]的地址为2005。( )。

24.C语言的基本单位是函数。( ) 25.已知字符'b'的ASCII码为98,语句printf(''%d,%c'','b','b'+1);的输出为: 98,99。( ) 26.从变量的作用域来分,变量可以分为静态变量和动态变量。( ) 27.若用数组名作为函数调用时的实参,则实际上传递给行参的是数组的第一个元素值。( )

28.结构体和数组一样,它们的成员都是相同类型数的集合。( ) 29.调用strlen(\的返回值为8。( )

三、填空题

1.如果希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,就应该指定它为 ,用 进行声明。

2. 结构化程序设计方法中,程序有三种基本结构,即: , 和 。

3.若int i=8,j=9;float x=123.456;printf(''x=%8.3f,j=%-4d\\n'',x,j);结果为: 。 4.设C环境下一个int型数据占用2个字节,设int a[4]={1,2,3,4},*p=a;其中a=2000;则*p= ,p+1= ,*(p+2)= 。

5.在C语言中,表示逻辑“假”值用 。

6.设C环境下一个int型数据占用2个字节,设int a[5]={5,4,3,2,1},*p=a;其中a=2000;则 *p= ,p+3= ,*(p+2)= 。

7.用户定义函数体部分一般分为 和 两部分。 8.用下列for循环将大写字母逆序输出(即从Z到A),其语句为:

for(i=0;i<26;i++) ;

9.C语言中函数的参数分为 和 。

10.用户自己建立的由不同类型数据组成的组合型的数据结构称为 类型,它的名字是由一个关键字 和 组合而成。

11.建立并运行C 程序的最简步骤为_ , 和 。

12.转义字符“\\n”表示 。

13.直接或间接调用自身的函数称为 函数。

14.int*p和int**p;含义分别是 和 。

15.语句printf(\,123);将输出: 。 16.转义字符“\\n”表示 。

17.C语言中,表示逻辑“真”用: 表示,逻辑“假”用: 表示。 18.表达式12345==12345/3*3的值为__ __。

{if(*p%2==0)printf(\ p++; }

printf(\ }

7. 阅读以下程序

#include \int main() {

char c;

c=getchar(); switch(c) {

case 'b':

case 'B': printf(\ case 'f':

case 'F': printf(\ case 'p':

case 'P': printf(\ default: printf(\ }

return 0; }

请回答:输入p,回车,运行结果为:

输入a,回车,运行结果为:

8. 以下程序的执行结果是 。

#include int main() {

int func(int x);

printf(\ return 0 }

func(int x) {

int p;

if(x==0||x==1) return(3); p=x-func(x-2); return p; }

9. 以下程序的运行结果是:

#include \int main() {

void f(int n); int m=4; f(--m); f(++m); return 0; }

void f(int n) {

int x=5,y=10; if (n>0)

printf(\ }

10. 以下程序的运行结果是: #include \int main()

{int m=10;

printf(\ printf(\ printf(\ return 0;

}

11. 以下程序的该程序运行结果为:

#include \int main() {

void f(int n); int m=1; f(--m); f(++m); return 0; }

void f(int n) {

int x=5,y=10;

if (n>0) printf(\}

12. 以下程序的执行结果是 。

#include int main()

{

int funcl(int a,int b); int func2(int a,int b); int x=7,y=17;

printf(\ return 0 }

int funcl(int a,int b) {

int c; a+=a; b+=b;

c=func2(a,b); return(c*c); }

int func2(int a,int b) {

int c;

c=a*b%3; return(c); }

13. 以下程序的执行结果是 。

#include int x=-8,y=100; int main() {

int func(int a); int m=2; y=func(m);

printf(\ return 0 }

int func(int a) {

int y; y=x+a; x++; a++;

return(x+y+a); }

14. 以下程序的程序运行结果为:

#include \int main() { int n=7;

while (n<=15) {n++;

if(n%2!=0) continue; printf(\ }

printf(\return 0; }

15. 以下程序的运行结果为: #include \int main() {

struct stu_list { int num; char *name; }sl={34, \

printf (\ return 0; }

16. 以下程序的运行结果为:

#include \int main()

{ int x,sum=3;

int a[ ]={70,80,90,65,75,95,60,80}; for (x=1;x<7;x*=2) sum=sum+a[x];

printf(\ return 0; }

17. 以下程序的功能是: #include \int main() {

int a[5]={31,6,31,65,41},i,j,m,k; for (i=0;i<4;i++) {

k=i;

for (j=i+1;j<5;j++) if (a[k]>a[j]) k=j;

if (k!=j) {m=a[k];a[k]=a[i];a[i]=m;} }

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

printf(\ return 0; }

六、程序完整填空

1. 连续向数组输入成绩,当输入负数时停止接收数据,显示数组元素的值。

#include \int main() {int n=0; int c[100]; do

{printf(\ [1] ; n++;

}while( [2] ); for(n=0;c[n]>=0;n++) printf(\ printf(\ return;

2.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。

#include \int main() {

int n=0,c; c=getchar();

while( [1] ) {

if( [2] ) n++; c=getchar(); }

printf(\ printf(\ return 0; }

3. 统计出读入的10个数据中,求出大于0的整数个数和小于0的整数个数。

#include int main()

{int i,j,n=1,a; i=j=0;

scanf (\

while ( [1] )

{if (a>0) i= [2] ; if(a<0) j= [3] ; [4] ; [5] ; }

pintf(\ j=M\\n\return 0; }

4.将一维数组的数据按从大到小排序输出。

#include \int main()

{int i,j,temp;

int a[8]={50,80,70,45,90,65,78,95}; for( [3] ;i<7;i++) for(j= [4] ;j<8;j++) if( [5] ) {temp=a[i];a[i]=a[j];a[j]=temp;} for(i=0;i<8;i++)

printf(\ printf(\ return 0; }

5.以下程序的功能是根据输入的'y' ('Y') 与'n' ('N'),在屏幕上分别显示出''This is YES. ''与''This is YES. ''。请填空。

#include Int main() {

void YesNo(char ch);

char ch;

printf(''\\nEnter a char 'y', 'Y' or 'n', 'N':''); ch = [1] ; printf(''ch:%c\\n'',ch); YesNo(ch); return 0 }

Void YesNo(char ch) {

Switch(ch) {

Case 'y':

Case 'Y':printf(''\\nThis is YES.\\n''); [2] ;

Case 'n':

Case ?N?:printf(''\\nThis is No.\\n''); [3] ; } }

6.三十六个人抬三十六块砖。每个男人挑两块,每个女人搬一块。两个小孩抬一块。问要多少男人,多少女人和多少小孩?

#include int main()

{ [1] ; for (i=0;i<= [2] ;i++) for (j=0;j<= [3] ;j++)

for (k=0;k<= [4] ;k++) if ( [5] ) printf(\ return 0; }

7.从键盘接收三个值,找出最大在MAX中。

#include int main()

{int a,b,c,max;

scanf(\ ); max=(a>b)? [2] : [3] ; max= [4] ? [5] : [6] ; printf(\return 0; } 七、程序改错(每个程序有若干处错误,用注释符号“//”在有错误的语句后面说明如何修改错误)

1.

#include int main ()

{ fo1at a,b,c; a=2,b=4,c=9; int i;

for (i=0;i<=7;i++); print (\ return 0;

} 2.

#include \int main(); {

void f(int x1,int x2);

int a2;a3;i;

int a(5)=[3;5;6;7;5]; for (i=0,i<5,i++)

if ( a(i)=5) printf(\ /*若a数组元素的值等于5,则输出*/ a2=4;a3=6; f(a2;a3); return 0; }

void f(x1,x2) {

int x3;

x3=x1

#include

int main ()

{void f(int x1,float x2); int a2,a3,i;

int a(5)=[3,5,6,7,5]; for (i=0,i<5,i++) if(a(i)= =5)

printf(\ a2=4;a3=6; f(a,a2,a3); return 0;

{

void f(int x1,int x2) {

int x3;

x3=x1

printf( \

return;

}

4.

#include Int main ()

{int a,b;

scanf(\ if a>b printf (\

else

printf (\ return 0;

}

5. 以下main函数程序有错误。请说明错误原因,重新写出正确的main函数。 main() {

int a; a=1; float b; b=2.5 char c; c=?a?; }

6. 以下main函数程序有错误。请说明错误原因,重新写出正确的main函数。 main()

{

Int y; Y=5.75 } 7. 以下的程序功能是求三角形的面积。里面的程序代码有错误。请指出错误的语句,并写出正确的语句。

#include #include main() { }

8. 以下的main函数,要把数组a各元素 七、编程题

1.编写一个函数Fact(),计算整数n的阶乘n!;再编写main()函数,在函数中调用Fact()来计算一个整数的阶乘,并将结果在屏幕上显示出来。

答案:参见教材P149-P150 [例7.1]程序。

float a, b, c, s, area; printf(\

scanf(\s = 1/2(a + b + c) / 2;

area = sqrt(s (s - a)(s - b)(s - c)); printf(\

2.编写程序计算组合数的程序。组合数的计算公式为:

Ckm?m!

k!(m?k)!答案:参见教材P157 [例7.4]程序。 3.从键盘输入某年某月(包括闰年),编程输出该年的该月拥有的天数。恒旭 答案:参见教材P196[例8.4]程序。

4.从键盘输入某班学生某门课程的成绩(该班人数不超过40人),具体人数由键盘输入。试编程计算其平均分。

答案:参见教材P197 [例8.5]程序。

5. 从键盘输入某班学生某门课程的成绩(该班人数不超过40人),具体人数由键盘输入。试编程将分数按从低到高的顺序进行排序输出。

答案:参见教材P204- P205[例8.8]程序。

6.从键盘任意输入两个整数,编程实现将其交换后再重新输出。 答案:参见教材P241- P242[例9.6]程序。

7.请编程实现按奥运会参赛国在字典中的顺序对其入场次序进行排序。假设参赛国不超过150个。

答案:参见教材P267- P269[例10.4]程序。

8. 编写程序,输入一个3行4列的二维整数数组,然后输出这个二维数组的元素值。 答案:参见教材P302- P303[例11.3]程序。

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

Top