C语言程序设计试题_练习题

更新时间:2023-04-21 16:42:01 阅读量: 实用文档 文档下载

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

一、选择题:(20分,每题2分)

1.以下不正确的C语言标识符是( )。 A. ABC B. abc C. a_bc D. ab.c 2.C程序是由 构成的。 A. 主程序与子程序 B. 主函数与若干子函数

C. 一个主函数与一个其它函数 D. 主函数与子函数

3.以下说法中正确的是: 。

A. 在C语言中,实参与其对应的形参各占独立的存储单元; B. 在C语言中,实参与其对应的形参共占同一个存储单元;

C. 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元; D. 在C语言中,形参是虚拟的,不占存储单元。 4.设n=3;则n++的结果是( )。 A. 2 B. 3 C. 4 D. 5

5.设整型变量n=10,i=4,则赋值运算n%=i+1执行后,n的值是( )。 A. 0 B. 1 C. 2 D. 3

6.凡是函数中未指定存储类别的局部变量其隐含的存储类别是( )。

A. 自动(auto) B. 静态(static) C. 外部(extern) D. 寄存器(register) 7.在while(x)语句中的x与下面条件表达式等价的是: 。 A. x= =0 B. x= =1 C. x!=1 D. x!=0 8.若有以下说明和语句: struct worker {

int no;

~char *name; }work, *p=&work;

则以下引用方法不正确的是( )。

A. work.no B. (*p).no C. p->no D. work->no 9.以下对二维数组进行正确初始化的是( )。 A. int a[2][3]={{1,2},{3,4},{5,6}}; B. int a[][3]={1,2,3,4,5,6}; C. int a[2][]={1,2,3,4,5,6}; D. int a[2][]={{1,2},{3,4}};

10.二维数组a有m列,则在a[i][j]之前的元素个数为: 。

A) j*m+i B) i*m+j C) i*m+j-1

二、给出下列程序的运行结果:(20分,前四题每题3分,后两题每题4分) 1.#include<stdio.h> main() {

int i=16,j,x=6; j=i+++1; x*=i=j;

printf(“%d,%d\n”,j,x); }

运行结果是:

2.#include<stdio.h> #include<math.h> main() {

int a=1,b=4,c=2;

float x=10.5,y=4.0,z;

z=(a+b)/c+sqrt((double)y)*1.2/c+x; printf(“%f\n”,z);

}

运行结果是:

3.#include<stdio.h> main() {

int a,b,c,d; a=c=0; b=1; d=20;

if(a) d=d-10; else if(!b)

if(!c) d=25; else d=15;

printf(“d=%d\n”,d); }

运行结果:

4. main()

{

int i=10; switch(i){

case 9: i+=1; case 10: i+=1; case 11: i+=1;

}

printf(“%d”,i); }

运行结果:

5.#include<stdio.h>

main() {

int a[]={1,2,3,4},i,j,s=0; j=1;

for(i=3;i>=0;i--) {

s=s+a[i]*j; j=j*10; }

printf("s=%d\n",s);

}

运行结果:

6.func(int x)

{ x=20; } main() {

int x=10; func(x);

printf(“%d”,x); }

运行结果:

三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(20分,每空2分) 1.已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否是润年的程序如下:

main() {

int year,leap;

scanf(“%d”,&year);

if( ) leap=1; else leap=0;

if( ) printf(“是润年”); else printf(“不是润年”); }

2.将100至200间不能被3整除的数输出:

main() {

int n;

{

if(n%3==0) ;

printf(“%d ”,n);

}

}

3.判断m是否是素数

#include <math.h> main() {

int m,i,k;

scanf(“%d”,&m); k=sqrt(m); for(i=2;i<=k;i++)

if(m%i==0) ;

if(i>=k+1) printf(“%d is a prime number\n”,m); else printf(“%d is not a prime number\n”,m); }

4.给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。

main() {

int i,j,row=0,colum=0,max;

static int a[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}}; ;

for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) {

max=a[i][j]; ; ; }

printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); }

5. 下面函数的功能是将两个字符串s和t连接起来。

char *conj(char *s, char *t) {

char *p=s;

while(*s) ; while(*t) {

*s= ; s++; t++; }

*s=’\0’;

}

四、编程(40分)

-4

1.计算1-1/2+1/3-1/4+ +1/99-1/100+ ,直到最后一项的绝对值小于10为止。(13分) 2.输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。(13分) 3.任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。(14分)

说明:请将答案写在答题纸的相应题号后面!!!!! 一、填空题:(24分 每空1.5分)

1.已知:int *p,a; 则语句 p=&a;中的运算符&的含义是( 1 )。 2.凡在函数体内没有明显存储类别说明的变量是( 2 )。 3.已知: struct

{ int k;

char c;

float a;}test; 则sizeof(test)的值是(3 )。 4.程序填空:

(1)下面的程序是main函数利用函数abcd来交换main中的两个变量的值。 # include <stdio.h> main()

{float x=10,y=20; abcd( 4 );

printf(“%f,%f”,x,y); }

abcd(x,y) ( 5 );

{float temp; temp=( 6 ); ( 7 ); ( 8 ); }

(2)下面的程序是使用冒泡法对输入的10个数据从小到大排序。排好序的10个数分两行

输出。 #include <stdio.h> main()

{ ( 9 ); int j,k;

printf(“ input 10 numbers please \n”); for(j=0;( 10 );j++) scanf(“%f”,&a[j]); printf(“\n”); for(j=0;( 11 );j++) for(k=0;( 12 );k++) if( 13 ) { x=a[k]; ( 14 ); a[k+1]=x; }

printf(“The sorted 10 numbers:\n”); for(j=0;( 15 );j++) { if( 16 ) printf(“\n”); printf(“%f\t”,a[j]); }

printf(“\n”); }

二、单项选择题:(20分 每题2分)

1.C语言中基本数据类型包括( )。 A. 整型、实型、逻辑型 B. 整型、实型、字符型

C. 整型、字符型、逻辑型 D. 整型、实型、逻辑型、实型

2.已知 int i,a; 执行语句”i=(a=2*3,a*5),a+6;”后,变量a的值是( )。 A. 6 B. 12 C. 30 D. 36

3.C语言中规定函数的返回值的类型是由( )。 A. return语句中的表达式类型所决定

B. 调用该函数时的主调用函数类型所决定 C. 调用该函数时系统临时决定

4.不能进行++和--运算的数据类型是( )。 A. 指针 B. double C. int D. long

5.为了判断两个字符串s1和s2是否相等,应当使用( )。 A. if(s1==s2) B. if(s1=s2)

C. if(strcpy(s1,s2)) D if (strcmp(s1,s2))

6.若有以下说明和语句:

struct stu

{int no;

char *name;

}student, *p=&student; 则以下引用方法不正确的是( )。 A. student.no B. (*p).no C. p->no D. student->no 7.以下不是死循环的语句为( )。

E. for(; ; x+=k); F. while(1){x++};

G. for(k=10; ;k--)sum+=k;

H. for(;(c=getchar())!=’\n’;)printf(“%c”,c);

8.以下错误的描述是( )。

A. 不同的函数中可以使用相同的变量名 B. 形式参数是局部变量

C. 一个函数内部定义的变量只能在本函数范围内有效 D. 在一个函数内部的复合语句中

定义的变量可以在 本函数范围内有效

9.若用数组名作为函数调用时实参,则实际上传递给形参的是( )。 A.数组首地址 B. 数组的第一个元素值

C.数组中全部元素的值 D. 数组元素的个数

10.已知 int a,*p=&a; 则为了得到变量a的值,下列错误的表达式是()。 A. *&p B.*p C. p[0] D.*&a

三、判断下列问题描述及语句正确与否,正确的打“√”。

(16分 每题2分)

1.C的关键字都是小写的。

2.一个复合语句是作为一个语句处理的且在逻辑上相互关联的一组语句。 3.# define PI=3.14159

4.局部变量在进入代码块时生成,退出代码块时消失。 5.int a=123456;

6.函数可以嵌套定义,也可嵌套调用。

7. switch与if不同,switch只能测试是否相等,而if中还能测试关系和逻辑表达式。 8.break和 continue语句都可用于选择结构和循环结构中。 四、读程序,写出运行结果:(20分 每题5分) 1.main()

x=a++*a++*a++;

printf(“a=%d,x=%d\n”,a,x); y=--b*--b*--b;

printf(“b=%d,y=%d\n”,b,y); }

2.#include<stdio.h> main()

{ struct s1

{char c[4],*s;}s1={“abc”,”def”};

struct s2

{char *cp;

struct s1 ss1;}s2={“ghi”,{”jkl”,”mno”}};

printf(“%c%c\n”,s1.c[0],*s1.s);

printf(“%s%s\n”,s1.c,s1.s);

printf(“%s%s\n”,s2.cp,s2.ss1.s);

printf(“%s%s\n”,++s2.cp,++s2.ss1.s); }

3.#include<stdio.h> func(int b[]) { int j;

for(j=0;j<4;j++) b[j]=j; } main()

{int a[4],k;

func(a);

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

printf(“%d\n”,a[k]);

}

6. void fun()

{ static int a=5; a++;

printf(“a=%d\n”,a); }

main() {

int m;

for(m=0;m<=1;m++) fun(); }

五、编程(20分)

1.有一个3 4的矩阵,找出最大值及该值所在位置。(10分) 2.写一个函数,计算x的n次方。(10分)

C语言程序设计 试题

一、判断题:(12分 每题2分)

1、C语言规定:在一个源程序中,main函数的位置必须在最开始。 2、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是8。

3、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为静态存储。 4、C语言中规定函数的返回值的类型是由return语句中的表达式类型所决定。 5、在C语言中对文件操作必须先关闭当前文件,然后再打开一个新文件。 6、C语言程序的基本单位是语句。 二、选择题:(20分 每题2分)

1、假设已定义char a[10]和char *p=a, 下面的赋值语句中,正确的是: A) a[10]=”Turbo C”; B) a=”Turbo C”;

C) *p=”Turbo C”; D) p=”Turbo C”;

2、下面关于运算符优先顺序的描述中正确的是:

A)关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符 B)逻辑 运算符< 关系运算符< 算术运算符< 赋值运算符 C)赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符 D)算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符

3、以下正确的描述是。

A)continue语句的作用是结束整个循环的执行

B)只能在循环体内和switch语句体内使用break语句

C)在循环体内使用break语句或continue语句的作用相同 D)从多层循环嵌套中退出时, 只能使用goto语句

4、用8位无符号二进制数能表示的最大十进制数为

A) 127 B) 128 C) 255 D)256

5、下列叙述中正确的是:

A) C语言中既有逻辑类型也有集合类型 B) C语言中没有逻辑类型但有集合类型

C)C语言中有逻辑类型但没有集合类型

D) C语言中既没有逻辑类型也没有集合类型

(第1页 共8页)

6、以下对C语言函数的有关描述中,正确的是:

A)调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B)函数既可以嵌套定义又可以递归调用 C)函数必须有返回值,否则不能使用函数

D) 程序中有调用关系的所有函数必须放在同一个源程序文件中

7、在C语言中,不正确的int类型的常数是:

A) 32768 B)0 C) 037 D) 0xaf

8、以下叙述中不正确的是: A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量

C)在一个函数内定义的变量只在本函数范围内有效

D)在一个函数内的复合语句中定义的变量在本函数范围内有效

9、以下说法中正确的是:

A)#define和printf都是C语句 B)#define是C语句,而printf不是 C)printf是C语句,但#define不是

D)#define和printf都不是C语句

10、若有以下定义和语句:double r=99,*p=&r; *p=r;则以下正确的叙述是: A)以下两处的*p含义相同,都说明给指针变量p赋值

B)在“double r=99,*p=&r;”中,把r的地址赋值给了p所指的存储单元

D)语句“*p=r;”取变量r的值放回r中 三、填空题:(24分 每空2分)

1、下面程序的功能是:输入一行字符,统计其中有多少个单词,单词之间

用空格分开。请填空完成。 # include <stdio.h> main()

{char str[81];

int I,( 【1】 ); char c; gats(str);

for(I=0;( 【2】 )!=’\0’;I++) if(c==’ ’)word=0; else if( 【3】 ) {word=1;

( 【4】 )}

printf(“There are %d word in line. \n”,num); }

2、下面程序的功能是:用选择排序法对数组中10个数据按由小到大排序。请填空完成。 void sort(int a[],int n) {( 【5】 ) for(I=0;I<n-1;I++)

{ ( 【6】 ) for(j=I+1;j<n;j++) if(a[j]<a[k])k=j;

if( ( 【7】 )){t=a[k];a[k]=a[I];a[I]=t;} } }

main()

{int b[10],I;

printf(“enter the array\n”); for(I=0;I<10;I++) scanf(“%d”.&b[I]); ( 【8】 )

printf(“the sorted array: \n”); for(I=0;I<10;I++)

printf(“%d “,b[I]); printf(“\n”); }

3、判断m是否是素数 #include <math.h> main() {

int m,i,k;

scanf(“%d”,&m); ( 【9】 ) for(i=2;i<=k;i++)

if(i>=k+1) printf(“%d is a prime number\n”,m); else printf(“%d is not a prime number\n”,m); }

4、假设当年产值为100,工业产值的增长率分别为6%、8%、10%、12%时, 求工业产值分别经过多少年可实现翻番。请填空完成。 main()

{int y[4],i;

float s[4]={100,100,100,100},c[4]={.06,.08,.10,.12}; clrscr();

for(i=0;i<4;i++) {y[i]=0;

while( 【11】 ) {s[i]=s[i]*(1+c[i]); ( 【12】 )}

printf("\ny=%d\ts=%.2f\tc=%.2f",y[i],s[i],c[i]); } }

四、读程序,写出程序运行结果。(24分 每题4分)

1、 main()

{int x=10,y=10,I; for(I=0;I>8;y=++I)

printf(“%d %d”,x--,y); }

2、main()

{int m=37,n=13;

while(m!=n) {while(m>n)

m=m-n;

while(n>m) n-=m;

}

printf(“m=%d\n”,m); } 3、main()

{ int x=9;

for(;x>0;x--) {if(x%3==0) {printf(“%d”,--x); continue; }

} }

4、 main()

{ int a=7,b=2;

float x=2.5,y=4.7,z; z=x+a%3*(int)(x+y)%2/4;

z= (a+b)/2+(int)x%(int)y; printf(“%f”,z);

} 5、main()

{int x[]={0,1,2,3,4,5,6,7,8,9};

int s,I,*p; s=0; p=&x[0];

for(I=1;I<10;I+=2) s+=*(p+I);

printf(“sum=%d”,s); } 6、main()

{int k=4,m=1,p; p=func(k,m); printf("%d",p); p=func(k,m); printf("%d",p); }

func(int a,int b) {static int m=0,i=2; i+=m+1; m=i+a+b; return(m);

} 五、编程题:(20分 每题10分)

1、利用指针完成。输入两个整数,按先大后小的顺序输出。 2、编程完成两个字符串的连接。(不使用strcat( )函数)。

一、判断题:(12分)

1、 2、 3、 4、 5、 6、 二、选择题:(共20分,每题2分)

1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 三、填空题:(共24分,每空2分)

1、 2、 3 、 4、 5、 6、 7、 8、 9、 10、 11、 12、 四、读程序,写出程序的运行结果(共24分,每题4分) 1、 2、 3、 4、 5、 6、

1、

2、

分,满分为100分。本试卷为卷面笔试部分,卷面满分为45分。 一、填空题(6分,每题2分)

2.已知能被4整除而不能被100整除的或者能被400整除的年份是闰年,则判断某一年year是否是闰年的表达式为:

姓名用name表示, 性别用sex表示, 出生年月用birthDay表示, 年用year表示,月用month表示,日用date表示,家庭收入状况用salary表示,低收入用low表示,中等收入用middle表示,高收入用high表示,家庭收入状况标记用mark表示。

二、判断下列问题描述正确与否,正确的打“√”,错误的打“×”。(3分 ,每题1分) 1.#define PI=3.14159;不是C语句。( ) 2.在C语言中,可以用typedef定义一种新的类型。( )

3.共用体所占的内存空间大小取决于占空间最多的那个成员变量。( ) 三、选择题:(10分,每题1分)

1.以下不正确的C语言标识符是( )。

A. AB1 B. a2_b C. _ab3 D. 4ab 2.若有定义int (*p)[4],则标识符p是一个 。

A、指向整型变量的指针变量 B、指向函数的指针变量

C、指向有四个整型元素的一维数组的指针变量

D、指针数组名,有四个元素,每个元素均为一个指向整型变量的指针

3.若用数组名作为函数调用时实参,则实际上传递给形参的是( )。 A.数组首地址 B. 数组的第一个元素值

C.数组中全部元素的值 D. 数组元素的个数 4.C语言中规定函数的返回值的类型是由( )。 E. return语句中的表达式类型所决定

F. 在定义该函数时所指定的函数类型所决定 G. 调用该函数时系统临时决定

H. 调用该函数时的主调用函数类型所决定 5.以下错误的描述是( )。 A. 不同的函数中可以使用相同的变量名 B. 形式参数是局部变量

C. 一个函数内部定义的变量只能在本函数范围内有效

D. 在一个函数内部的复合语句中定义的变量可以在本函数范围内有效

6.为了判断两个字符串s1和s2是否相等,应当使用( )。A. if(s1 == s2) B. if(s1 = s2)

C. if(strcpy(s1,s2)) D.if(strcmp(s1,s2)==0)

A. x!=0 B. x==1 C. x!=1 D. x==0 8.若有以下说明和语句:

struct stu {

int no; char *name;

}student, *p=&student;

则以下引用方法不正确的是( )。 A. student.no B. (*p).no C. p->no D. student->no 9.以下对二维数组进行正确初始化的是( )。 I. int a[2][3]={{1,2},{3,4},{5,6}}; J. int a[2][3]={{1,2},{},{4,5}}; K. int a[][3]={1,2,3,4,5,6}; L. int a[2][]={{1,2},{3,4}};

10.二维数组a有m行n列,则在a[i][j]之前的元素个数为( )。 A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+1

四、写出下列程序的运行结果。(4分,每题1分) 1.#include<stdio.h>

void fun(int x) {

x=20; }

main() {

int x = 10; fun(x);

printf("x = %d\n", x); }

运行结果是:

2.#include<stdio.h>

void fun(int b[4]) {

int j;

for(j=0; j<4; j++) b[j]=j; } main() {

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

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

printf("%d\n", a[k]);

运行结果是:

3.#include<stdio.h> main()

{

int i = 10; switch(i) {

case 9: i+=10; case 10: i+=10; case 11: i+=10; break; default : i+=10; }

printf("i = %d\n", i); }

运行结果是:

4. #include<stdio.h>

void fun() {

static int a=5;

a++;

printf("a=%d\n", a); }

main() {

int m;

for(m=0; m<=1; m++)

fun();

}

运行结果是:

五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(3分,每空1分)

从键盘输入10个整型数据,放入数组a 中,求其最大值及其所在元素的下标位置,并输出。 main() {

int a[10], n, pos, max; for (n=0; n<10; n++)

scanf("%d", &a[n]); max = ; pos = ;

{

if (a[n] > max)

{

max = a[n]; pos = ; } }

printf("max=%d, pos=%d\n", max, pos); }

六、下面程序是有错误的程序,请找出其中的错误,并将正确的语句写在相应错误语句的右方空白处。(5分) #include <stdio.h> #include <math.h>

int isprime(int m)

main() {

int n, flag;

printf("Input n:"); scanf("%d", n); flag = isprime(n); if(flag)

printf(Yes!\n") else

printf("No!\n"); }

/* 函数功能:判断m是否为素数 函数参数:整型变量m

返回值: 返回1时,表示m是素数;返回0时,表示m不是素数 */

int isprime(int *m) {

int i;

for (i=2; i<=sqrt(m); i++) {

if(m%i = 0) return 0; }

return 1; }

七、在下面任意选择2道题编程(14分,每题7分) 1. 从键盘任意输入某班30个学生的成绩,将成绩按照由高到低顺序打印。 2. 自己定义一个函数,以实现和函数strlen相同的功能,即任意输入一个字符串,调用该函数可以计算输入

字符串的实际长度,然后打印

3. 编程计算1! + 2! + 3! + 4! + . + 10!的值

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

Top