C程序试题及答案

更新时间:2024-01-24 09:23:01 阅读量: 教育文库 文档下载

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

一、选择题(本题30分,每小题2分) 1.C语言中的简单数据类型包括( B )。

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

B.整型、实型、字符型

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

9.已知:char s[20]= “programming”,*ps=s; 则不能引用字母o的表达式是 ( A )。

A.ps+2

B.s[2] C.ps[2]

D.*(ps+2)

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

A.使用while和do-while循环时,循环变量初始化的操作应在循环语句之前

完成。

2.有定义语句:int b; char c[10]; 则正确的输入语句是( B )。

A.scanf(“%d%s”,&b,&c); C.scanf(“%d%s”,b,c);

B.scanf(“%d%s”,&b,c); D.scanf(“%d%s”, b,&c);

B.while循环是先判断表达式,后执行循环体语句。

C.do-while和for循环均是先执行循环体语句,后判断表达式。 D.for,while和do-while循环中的循环体均可以由空语句构成。 11.已知:struct sk

{ int a; float b; }stutype;

则下面叙述中错误的是( C )。

A.struct 是结构体类型的关键字 B.struct sk 是用户定义的结构体类型 C.stutype 是用户定义的结构体类型名 D.a和b都是结构体成员名 12.执行如下程序段后,a的值为( B )。 int *p, a=10,b=1; p=&a; a=*p+b;

A.12

B.11 C.10

D.编译出错

3.已有定义:char a[]=“xyz”,b[]={?x?,?y?,?z?}; 以下叙述中正确的是( C )。

A.数组a和数组b的长度相同 B.a数组长度小于b数组长度 C.a数组长度大于b数组长度 D.以上说法都不对 4.以下对C语言函数的有关描述中正确的是( A )。

A.在C语言中调用函数时,只能把实参的值传给形参,形参的值不能

传递给实参。

B.C函数既可以嵌套定义,又可以递归调用。 C.函数必须有返回值,否则不能使用函数。 D.函数必须有返回值,返回值类型不定。 5.以下各标识符中,合法的用户标识符是( D )。

A.28p

线

B.aaam.h C.for D.a23f

6.若已定义x和y为double类型,则表达式x=1,y=x+3/2的结果是( C )。

A.1

B.2

C.2.0

D.2.5

7.设int a=5,b=6,c=7,d=8,m=2,n=2; 则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为( C )。

A.0

B.1

C.2

D.3

8.若int a[ ][4]={1,2,3,4,5,6,7,8,9}; 则此数组的第一维的大小是( B )。

A. 2

B.3 C.5 D.4

13.以下程序段的输出结果为( B )。

#define M(x,y,z) x*y+z main( )

{ int a=1,b=2,c=3; printf(“%d\\n”,M(a,b,c));}

A.6

B.5 C.7

D.4

count++; }}

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

错误所在行: 2 ,应该为: int i,a[20],s,count; 错误所在行: 5 ,应该为: scanf(“%d”,&a[i]); 错误所在行: 7 ,应该为: if(a[i]<0) continue; 2. 下面的函数add为求两个整数之和。 main( )

① { int add( ); ② int a=3,b=5,c; ③

c=add(a,b);

14.已知: struct sk

{ int a; float b;} data,*p;

若有p=&data,则对data中的成员a的正确引用是( B )。 A.(*p).data B.(*p).a C.p->data.a D.p.data.a 15.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时,函数 feof(fp)的值是( A )。

A.0

B.1 C.-1

D.一个非0值

printf(“%d”,c);}

④ ⑤ ⑥ ⑦

int add(int x,int y); { int z; z=x-y; return z;}

二、程序改错题,每道题有三处错误,指出错误所在行号,并改正。(本题12分,每小题6分)

1. 程序读入20个整数,统计非负数个数,并计算非负数之和。 ① main()

错误所在行: 1 ,应该为: int add(int,int); 错误所在行: 4 ,应该为: int add(int x,int y) 错误所在行: 6 ,应该为: z=x+y;

三、阅读程序题(本题26分,每小题2分)

1.以下程序输出的结果是 9,8 (对一个,给一分)

main( ) { int i=8, j;

j=i++ ; printf(\ }

线

② { int i,a[ ],s,count; ③ s=count=0; ④ ⑤ ⑥ ⑦ ⑧

for(i=0;i<20;i++) scanf(“%d”,a[i]); for(i=0;i<20;i++) { if(a[i]<0) break; s+=a[i];

2.以下程序输出的结果是 3 main()

{ int a=1,b=2,c=3,x;

if( c

8.下面程序的输出结果是 a=2,b=1 (或2,1. 对一个,给一分) main()

{int x=1,a=0,b=0; switch(x) { case 0: b++;

case 1: a++; case 2: a++;b++;} printf(“a=%d,b=%d”,a,b);} 9.下面程序的输出结果是 b main() { char m;

m='B'+32;

}

else x=3 ; printf(“%d”,x);}

3.下面程序的输出结果是 3 main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p=a; printf(“%d\\n”,*(p+2)); } 4.下面程序的输出结果是 13 printf(\

int fun(int n) {int s ;

if(n==0) s=7 ; else s=n+fun(n-1) ; return s ; }

main() { printf(“%d\\n”,fun(3)); }

5.在16位IBM-PC机上使用C语言,若有如下定义:

10.下面程序的输出结果是 876 (不完整给一分)

main() {int n=9;

while(n>6){ n--; printf(“%d”,n); } }

11.定义如下变量和数组:int k; int a[3][3]={9,8,7,6,5,4,3,2,1};

则下面语句的输出结果是 951 for(k=0 ;k<3 ;k++) printf(“ %d ”,a[k][k]) ; 12.下列程序段的输出结果是 rld 线

struct data { int i; char ch; double f; }b;

则结构体变量b占用内存的字节数是 11 6.若有定义:int a=511, *b=&a; 则printf(“%d\\n”,*b); 的输出结果为 511 main( ) { char *s=“bigworld”; printf(“%s”, s+5); } 7.下面程序的输出结果是 7,0 (对一个,给一分) main()

{ int a[3][4]={{2,4,6},{4,4,7},{8,4,9}}; printf(“%d,%d”,a[1][2],a[2][3]);}

13.在对文件进行操作的过程中,若要求文件的位置指针回到文件的开头,应当

调用的函数是 rewind 函数。

四、完善程序题,在横线上填写相应的语句,将程序补充完整(本题16分,每空

2分)

1.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。 int mystrlen(char * str) { int i;

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

if((fp=fopen(“text.txt”, “w” ))==NULL) (写成”wb”, { printf(\ 给一分)

printf(“input a string:\\n”); gets(str); while( str[i])

{ if( str[i]>=?a?&&str[i]<=?z?) str[i]= str[i]-32 ; fputc(str[i],fp); i++; } fclose(fp);

fp=fopen(“text.txt”, “r” ) (写成”r b”, 给一分) fgets(str,100,fp); printf(“%s\\n”,str); fclose(fp); }

五、编程题(本题16分)

1.从键盘输入一正整数m,并判断其是否为素数。(5分) #include”stdio.h” void main( ) { int m,I;

scanf(“%d”,&m); ???????????2 for(i=2;i

if(m%i==0) break; ???????????3 if(i>=m)

printf(“%d is a prime\\n”,m); else

printf(“%d is not a prime\\n”,m); } ???????????5

2.以下程序表示:冒泡法对10个数从小到大排序。 #include main() { int a[10],i,j,t;

printf(\ for(i=0;i<10;i++) scanf (\ printf(\ for(j=0;j<9;j++)

for(i=0; i<9-j ;i++ ) if( a[i]>a[i+1] )

{t=a[i]; a[i]=a[i+1] ;a[i+1]=t;} printf(\ for(i=0;i<10;i++) printf(\ }

线

3.以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文本文件test.txt中,然后从该文件中读出字符串并显示出来。 #include main()

{ FILE * fp; char str[100]; int i=0;

2.有一个3?4的矩阵,要求编写程序求出其中值最大的那个元素的值,以及其所在的行号和列号,其中,矩阵的元素值由键盘输入。(6分) #include”stdio.h” void main()

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

3.以下程序是对输入的两个整数按大小顺序输出,编一函数swap,其功能是交换两个变量的值.(5分)

void swap( int *p1,int *p2 ) ????????????2 {

int temp ; temp=*p1; *p1=*p2;

*p2=temp; ????????????5

max=a[0][0]; ????????????3 for(i=0;i<3;i++) for(j=0;j<4;j++)

} main() { int a,b;

int *pointer_1,*pointer_2; scanf(“%d,%d”,&a,&b);

pointer_1=&a; pointer_2=&b;

if(a

int a[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++)

scanf(\ a[i][j]); ????????????2

if(a[i][j]>max) {max=a[i][j]; row=i; colum=j;

} ????????????5 printf(\);

线

} ????????????6

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

Top