试卷一    试卷二    试卷三

       试卷四    试卷五    试卷六

       试卷七    试卷八    试卷九

       试卷十    试卷十一

 

试卷一

一、判断题:(每小题1分,共6分)

1、若有说明int c;则while(c=getchar());是正确的C语句。

2、int i,*p=&i;是正确的C说明。

3、7&3+12的值是15。

4、while 1 i,j; 一定是错误的C说明。

5、for( ; ; )S中的语句S必执行无穷多次。

6、unsigned 和void 在C中都是保留的。

二、单项选择题(每小题1分,共5分)

1、设有int i;则表达式i=1,++i,++i||++i,i的值为

A.1

B.2

C.3

D.4

2、设有int i;则表达式(i=1,i=10)?i++||++i:++i的值为

A.1

B.2

C.3

D.10

3、设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是

A.10,11,12

B.11,12,12

C.10,12,12

D.11,11,12

4、设有int i, j, k; 则表达式i=1,j=2,k=3, i&&j&k 的值为 ( )

A.1 B.2 C.3 D.0

5、设有说明int s[2]={0,1},*p=s; 则下列错误的C语句是 ( )

A.s+=1; B.p+=1; C.*p++; D.(*P)++;

三、填空题(每小题2分,共10分)

1、char *(*pa)[10];说明pa是______________。

2、表达式98&&8&&31&1的值为________________。

3、printf("%5.3f\n",123456.12345);输出为_____________。

4、表达式~3&(2&3^4)的值为_______________。

5、若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为_______________。

四、程序分析,给出下列各程序的执行结果(输出)

1、#include <stdio.h>

       int f(n)

       int n;

    {static int s=1;

    while(n) s*=n--;

    return s;

      }

    main()

    {int i,j;

    i=f(3); j=f(5);

    printf("\nThe output of 5.1. is:\n\n");

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

    }

2、#include <stdio.h>

    trans(m,n)

    int m,n;

    {int i;

    if (m>n){

    i=m%n;trans(m/n,/);

    }

    else i=m;

    if (i<10) printf("%d",i);

    else printf("%c",'A'+i-10);

    }

    main( )

    {int i;

    printf("\nThe output of 5.3 is:\n\n");

    printf("\n%d->-",-23);

    trans(21,3);

    printf("\n%d->",123);

    trans(123,16);

    }

3、#include <stdio.h>

    #include <malloc.h>

    typedef struct node

    {

    int d;

    struct node *next;

    }t_node;

    create(h)

    t_node **h;

    {

    int i,m=0;t_node *p,*q;

    scanf("%d",&i);

    while(i)

    {

    p=(t_node*)malloc(sizeof(t_node));

    p->d=i>m?i:m;m=i;p->next=NULL;

    if(*h)

    {

    q->next=p;

    q=p;

    }   

    else

    {

    *h=p;

    q=p;

    }

    scanf("%d",&i);

    }

    }

    void main()

    {   

    t_node *h=NULL,*p;

    create(&h);p=h;printf("\nThe output of 4.3 is:\n\n");

    while(p)

    {printf("%d",p->d);

    p=p->next;

    }

    }

4、#include <stdio.h>

    main()

    { int m,n,sign,t;

    scanf("%d%d",&m,&n);

    while(m*n){

    if (m>=0&&n>=0||m<=0&&n<=0) sign=0;

    else sign=1;

    m=m>0?m:-m; n=n>0?n:-n;

    t=0;

    while(n--) t+=m;

    printf("\nThe result is:");

    if (sign) printf("-");

    printf("%d\n",t);

    scanf("%d%d",&m,&n);

    }

    }

5、#include <stdio.h>

    int a[10]={1,2,3,4,5,6,7};

    rev (m,n)

    int *m,n;

    {int t;

    if(n>1)

    {t=*m;*m=*(m+n-1);*(m+n-1)=t;

    rev(m+1,n-2);

    }

    }

    main()

    {int i;

    printf("\nThe output of 5.5 is:\n\n");

    rev(a+2,6);

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

    printf("%d",a[i]);

    printf("\n");

    rev(a,5);

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

    printf("%d",a[i]);

    printf("\n");

    }

五、在下面程序中横线处填上适当字句,使其能正确执行(6分)

[程序说明] 该程序用于计算cos x值,依据公式为:

要求输入X(以角度计)和误差值epsil。当epsil<=0时程序停止执行。

#include <stdio.h>

#define PI 3.141526

double ex(x,epsil)

float x,epsil;

{

double t,s; int n;

s=0.0; t=1.0; n=1;

while ((t>=0.0?t:-t)>epsil){

s+=t;___(1)___;___(2)___;

}

return s;

}

main()

{

float x,epsil;

printf("Input x,epsil:(epsil<=0 to quit)\n");

scanf("%f%f",&x,&epsil);

while(epsil>0.0){

x*=PI/180;

printf("e^%f=%f\n",x,ex(x,epsil));

printf("Input x,epsil:(epsil<=0 to quit)\n");

scanf("%f%f",&x,&epsil);

}

}

六、在下面程序中横线处填上适当字句,使其能正确执行(18分)

[程序说明]该程序能计算两个整数集合A与B的差,其中A与B的元素都以值的递增

次序存放中单链表中,A中的同一元素允许在单链表中出现多次,A与B的差也以值的

递增次序存于单链表内,但是同一元素不允许出现多次。假定调用diff前a,b的值已

创建。

#include <stdio.h>

typedef struct node{

int d;

struct node *next;

}tnode;

void diff(a,b,c)

tnode *a,*b,__(1)__;

{

int last_a; tnode *p;

*c=NULL; last_a=-9999;

while(a&&b){

if(a->d==b->d){

__(2)__;

a=a->next;

__(3)__;

}

else

if (a->d>d->d)

__(4)__;

else {

if (a->d!=last_a){

last_a=a->d;

p=(tnode *)malloc(sizeof(tnode));

p->d=last_a;

p->next=*c;

*c=p;

}

a=a->next;

}

}

while(a){

if(__(5)__){

last_a=a->d;

p->d=last_a;

p->next=*c;

__(6)__;

}

a=a->next;

}

}

void print(h)

tnode *h;

{

while(h){

printf("%d ",h->d);

h=h->next;

}

}

main()

{

tnode *a,*b,*c;

...

diff(a,b,&c);

print(c);

}

 

                       试卷二

一、选择题

1 C语言中最简单的数据类型包括

    A)整型、实型、逻辑型B)整型、实型、字符型

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

2 C语言中,运乍对象必须是整型数的运算符是

   A) %B) 、C) %和、D) **

3 为表示关系x≥y≥z,应使用C语言表达式

   A)(x)=y)&&(y)=z)B(x)=y)AND(y)=z)

   C)(x)=y)=z)D)(x)=y)&(y)=z)

4下述对C语言字符数组的描术中错误的是

    A)字符数组可以存放字符串

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

    C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值

    D)不可以用关系运算符对字符数组中的字符串进行比较

5 设有如下定义:

    int x=10,y=3,z;

    则语句

    printf(“%d、n”,z=(x%y,x/y));

    的输出结果是

    A)1 B)0

    C)4 D)3

6 以下程序的输出结果是

    main()

    {int x=10,y=10;

    printf(“%d %d、n”,x——,——y);

    }

    A)10 10 B)9 9

   C)9 10 D)10 9

7 以下说法中正确的是

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

    B)在C语言程序中,要调用的函数必须在main()函数中定义

    C)C语言程序总是从main()函数开始执行

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

8 执行下面的程序后,a的值为

    main()

    {int a,b;

    for (a=1,b=1;a<=100;a)

    {if(b)=20}break;

    if(b%3==1)

    {b=3;

    continue;

    }b--=5;

    }

    }

    A}7 B}8     C)9 D)10

9 以下程序段的输出结果是

    int x=3;

    do

    {printf(“%3d”,x——=2);}

    while(!(——x));

    A)1 B)3 0   C)1——2 D)死循环

10 定义如下变量:

    int n=10;

    则下列循环的输出结果是

    while(n>7)

    {n——;

    printf(“%d、n”,n);

    }

    A)10B)9 C)10 D)9

    9898

    8787

    76

11 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是

    main()

    {int x;

    scanf(“%d”,&x);

    if(x>)5}printf(“%d”,x);

    else printf(“%d、n”,x ——);

    }

    A)7和5 B)6和3 C)7和4 D)6和4

12 执行以下程序后,y的值是

    main ()

    {int a[]={2,4,6,8,10};

    int y=1,x,*p;

    p=&a[1];

    for(x=0;x<3;x)

    y =*(p+x);

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

}

    A)17 B)18 C)19 D)20

 13 下列程序执行后输出的结果是:

    int d=1;

    fun (int q)

    {int d=5;

    d =p ;

    printf(“%d”,d);

    }

    main()

    {int a=3;

    fun(a);

    d =a ;

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

    }

    A)8 4 B)9 6 C)9 4 D)8 5

14 C语言提供的合法的数据类型关键字是

    A)Double B)short C)integer D)Char

15 在C语言中,合法的长整型常数是

    A)0L B)4962710 C)0.054838743 D)2.1869e10

16 表达式:10!=9的值是

    A)true B)非零值C)0 D)1

17 若有说明和语句:

    int a=5;

    a;

    此处表达式a的值是

    A)A)7 B)6 C)5 D)4

 

18 在下列选项中,不正确的赋值语句是

    A)t;B)n1=(n2=(n3=0));

    C)k=i==j;D)a=bc=1;

19 若有说明:int i,j=7,*p=&i;,则与i=j;等价的语句是

    A)I=*P;B)*P=*&J;C)i=&j;D)i=**p;

20 不能把字符串:Hello!赋给数组b的语句是

    A)char b[10]={'H','e','l','l','o','!'};

    B)char b[10];b=“Hello!”;

    C)char b[10];strcpy(b,“Hello!”);

    D)char b[10]=“Hello!”

21 以下程序的输出结果是

    A)6 B)6789 C)'6'D)789

    main()

    {char a[10]=”6789”,*p;

       p=a;

    printf(“%s\n”,p);

22  以下程序的输出结果是

    A}2 0 B}3 1 C}3 2 1 0 D}2 1 0

    main()

    {int n=4;

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

    }

    

23 以下程序运行后,输出结果是

    A)84 B)99 C)95 D)44

    int d=1l

    fun (int p)

    {int d=5;

    d=p;

    printf(“%d”,d);

    }

    main()

    {itn a=3;

    fun(a);

    d=a;

    printf(“%d、n”,d);

    }

24 在下列选项中,没有构成死循环的程序估是

    A)int i =100;

    whine(1)

    {i=i%3;

    if (i>100)break;

    }

   B)for (;;);

   C)int k=1000;

    do {k;} while(k>1000);

   D)int s=36;

    while (s);--s;

25 阅读以下程序:

main()

{ int x;

scanf("%d",&x);

if(x--<5) printf("%d"'x);

else printf("%d"'x++);

}

程序运行后,如果从键盘上输人5,则输出结果是

A)3 B) 4 C) 5 D) 6

26 以下程序的输出结果是

main()

{ int num= 0;

while(num<=2)

{ num++; printf("%d\n",num);

}

A} 1 B} 1 C}1 D} l

222

33

4

27 以下程序的输出结果是

main()

{ char c='z';

printf("%c",c-25);

}

A) a B) Z C) z-25 D) y

28以下选项中,非法的字符常量是

A) '\t' B) '\17' C)"n" D) '\xaa'

29 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是

A) i=*p; B) p*=*&j; C) i=&j; D) i=**p;

30 以下定义语句中,错误的是

A) int a[]={1,2}; B) char *a[3];

C) char s[10]="test"; D) int n=5,a[n];

31 以下程序的输出结果是

main()

{ int i, a[10];

for(i=9;i>=0;i--) a[i]=10-i;

printf("%d%d%d",a[2],a[5],a[8]);

}

A) 258 B) 741 C) 852 D) 369

32以下数组定义中不正确的是

A) int a[2][3];

B) int b[][3]={0,1,2,3};

C) int c[100][100]={0};

D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};

33以下程序的输出结果是

main()

{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0];

)

A} 0650 B} 1470 C} 5430 D} 输出值不定

34以下选项中,不能正确赋值的是

A) char s1[10];s1="Ctest";

B) char s2[]={'C', 't', 'e', 's', 't'};

C) char s3[20]="Ctest";

D) char *s4="Ctest\n"

35  以下程序的输出结果是

main()

{ int a, b;

for(a=1, b=1; a<=100; a++)

{ if(b>=10) break;

if (b%3= =1)

{ b+=3; continue; }

}

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

}

A) 101 B) 6 C) 5 D) 4

36  有以下程序段

int k=0

while(k=1) k++;

while 循环执行的次数是

A) 无限次 B) 有语法错,不能执行

C) 一次也不执行 D) 执行1次

37 以下程序执行后sum的值是

A)10 B)6 C) 不确定 D)0

min()

{ int i , sum;

for(i=1;i<4;i++) sum+=i;

printf("%d\n",sum);

}

38  以下程序的输出结果是

A) 1,5,9 B) 1,4,7 C) 3,5,7 D)3,6,9

main()

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

for(i=0;i<3;i++) printf("%d,",x[i][2-i]);

}

39 以下程序的输出结果是

A) 18 B) 19 C) 20 D)21

main()

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

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

for(j=0;j<2;j++)s+=a[i][j];

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

}

40 以下程序的输出结果是:

main()

{ int a=1, b=2;

a=a+b; b=a-b; a=a-b;

printf("%d,%d\n", a, b ); 

}

A)1,2 B)3,1 C)3,2 D)2,1

二、填空题

1 以下程序运行后的输出结果是【1】。

main()

{ int i=10, j=0;

do

{ j=j+i; i-;

while(i>2);

printf("%d\n",j);

}

2 设有以下程序:

main()

{ int n1,n2;

scanf("%d",&n2);

while(n2!=0)

{ n1=n2%10;

n2=n2/10;

printf("%d",n1);

}

}

程序运行后,如果从键盘上输入1298;则输出结果为【2】。

3 以下函数的功能是:求x的3次方,请填空。

double fun( double x)

{ int i;

double z;

for(i=1, z=x; i<3;i++) z=z* 【3】;

return z;

}

4 下面的程序是求1+2+…+10的值,请填空:

main()

{int I,s=0;

for(I=1;I<=10;I++)

【4】;

}

5 下面的程序是求1*2*3*…10,请填空:

main()

{int I,s=【5】;

【6】

s=s*I;

}

6 下面的程序是求数组a中的最大值,请填空

main()

{int a[5]={23,4,5,2,32},I,max;

max=【7】;

for(I=1;I<=4;I++)

if(max<a[i]) 【8】;

}

7下面程序的输出结果是【9】:

int abc(int z)

{return z+10;

}

main()

{int x=3,y;

y=abc(x);

printf(“%d”,y);

}

8下面程序的输出结果是【10】:

main()

{int x=11,*p=x;

*p=23;

printf(“%d”,x);

}

答案

选择题

1

2

3

4

5

6

7

8

9

10

B

A

A

C

D

D

C

B

C

B

A

C

A

B

A

D

C

D

B

B

B

C

A

C

B

B

A

C

B

D

C

D

A

A

D

A

B

C

D

D

填空题

1

52

2

8921

3

x

4

S=s+i

5

1

6

For(I=1;I<=10;I++)

7

A[0]

8

Max=a[i]

9

13

10

23

 

试卷三

一、单项选择题 (本大题共10小题,每小题1分,共10分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填在题后的括号内。错选、多选或未选均无分。
1.正确的自定义标识符是 ( )
A.a=2 B.a+b
C.name D.default
2.错误的转义字符是 ( )
A.'\091' B.'\\'
C.'\0' D.'\''
3.设int a,b,c;执行表达式a=b=1,a++,b+1,c=a+b--后,a,b和c的值分别是 ( )
A.2,1,2 B.2,0,3
C.2,2,3 D.2,1,3
4.在C语言中,错误的常数是 ( )
A.1E+0.0 B.5.
C.0xaf D.0L
5.下面运算符优先级最高的是 ( )
A.<= B.=
C.% D.&&
6.若数组名作实参而指针变量作形参,函数调用实参传给形参的是 ( )
A.数组的长度 B.数组第一个元素的值
C.数组所有元素的值 D.数组第一个元素的地址
7.变量的指针含意是指变量的 ( )
A.值 B.地址
C.存储 D.名字
8.设int k;则语句for(k=0;k=1;k++);和语句for(k=0;k==1;k++);执行的次数分别是 ( )
A.无限和0 B.0和无限
C.都是无限 D.都是0
9.某文件中定义的静态全局变量(或称静态外部变量)其作用域是 ( )
A.只限某个函数 B.本文件
C.跨文件 D.不限制作用域
10.设struct {int a; char b; } Q, *p=&Q;错误的表达式是( )
A.Q.a B.(*p),b
C.p->a D.*p.b



二、填空题 (本大题共5小题,每空2分,共20分)
请在每小题的空格上填上正确答案。错填、不填均无分。
11.在C语言中,单目运算符的结合方向(运算方向)是_____________;唯一的一个三目运算符是_____________。
12.字符串"A\\B"的内容是_____________,存储需要的字节数是_____________。
13.设int a[10],b[3][3];数组元素a[5]和b[1][2]分别用指针表示的形式是_____________和_____________。
14.编译预处理的三种形式除宏定义外,还有_____________和_____________。
15.文件操作方式"w"和"rb+"的含义分别是__________________________和__________________________。

三、程序分析题 (本大题共7小题,每小题5分,共35分)
阅读下列程序,将输出结果分别写到各题右侧的空白处。
16.
main()
{int a=3,b=9,c=2;
if(a if(a printf("%5d%5d%5d\n",a,b,c);
17.
void change(int *x,int y)
{int t;
t=*x;*x=y;y=t;
}
main()
{int a=3,b=5;
change(&a,b);
printf("a=%d,b=%d\n",a,b);
}
18.
main()
{int j;
for(j=4;j>=2;j--)
switch(j)
{case 0: printf("%4s","ABC");
case 1: printf("%4s","DEF");
case 2: printf("%4s","GHI");break
case 3: printf("%4s","JKL");
default: printf("%4s","MNO");
}
printf("\n");
}
19.
main()
{int j,a[6]={1,2}};
for(j=3;j<6;j++)
a[j]=a[j/2]+a[j%3]-a[j-2];
for(j=0;j<6;j++)
printf("%5d",a);
printf("\n");
}
20.
int a=10;
int f(int a)
{int b=0;static int c=3;
a++;++c;++b;
return a+b+c;
}
main()
{int i;
for(i=0;i<2;i++)print("%5d",f(a));
printf("\n");
}
21.
#define N 2
#define M N+1
#define NUM 2*M+1
int fib(int n)
{
return n<3?2:fib(n-1)+fib(n-2);
}
main()
{
printf("%5d%5d\n",NUM,fib(5));
}
22.假设在DOS提示符下显示源程序如下(PROG.exe程序也在C盘中):
C>type PROC.c
main(int argc,char * argv[])
{while(--argc>0)
printf("%s",argv[argc]);
printf("\n");
}
写出执行下列命令后的输出结果
C>PROG 2008 OLYMPIC BEIJING <回车>

四、程序填空题 (本大题共2小题,每空3分,共15分)
23.任意输入三条边(a,b,c)后,若能构成三角形且为等腰、等边和直角,则分别输出DY、DB和ZJ,若不能构成三角形则输出NO。
main()
{ float a,b,c,a2,b2,c2
scanf("%f%f%f%,&a,&b,&c);
printf("%5.1f,%5.1f,%5.1f",a,b,c);
if(a+b>c&&b+c>a&&a+c>b)
{
if(____________________________________)printf("DY");
if(____________________________________)printf("DB");
a2=a*a;b2=b*b;c2=c*c;
if(____________________________________)printf("ZJ");
printf("\n");
}
else printf("NO\n");
}
24.输出下列图形。
1 2 3 4 5 6 7 8 9 main()
2 3 4 5 6 7 8 9 int I,J;
3 4 5 6 7 8 9 for(I=1;I<=_________;I++)
4 5 6 7 8 9 for(J=_________;J<=9;J++)printf("%2d",J);
5 6 7 8 9 printf("\n");
6 7 8 9
7 8 9
8 9
9

五、程序设计题 (本大题共2小题,每小题10分,共20分)
写出下列问题的程序。
25.输入十个整数,计算出平均值(aver),找出其中最大者(max)和最小者(min)并将三者输出。
26.将十个实型数输入数组(float n[10];)逆序存放后再输出。

 

试卷四

一.选择题(40%)

1.下列各选项中,()是有效的标识符。

A)abB)3dayC)day-3D)#abc

2.已知有定义:char ch;则如下正确的赋值为()。

A)ch='M'B)ch='55'C)ch="M"D)ch="55"

3.已知int y; float x=-3;执行语句 y=x%2;则变量y的值是()。

A)1B)-1C)0D)语句本身是错误的

4.已知字母b的ASCII码为98,如ch为字符型变量,则表达式ch='b'+'5'-'2'的值为()。

A)eB)dC)102D)100

5.已知int j,i=1;则执行j=-i++; i和j的值为()。

A)1,-1B)1,1C)2,-1D)2,1

6.已知 int a=-1,b=4,k; k=(++a<0&&!(b――<0));则k, a, b的值分别为()。

A)1,0,4B)1,0,3C)0,0,3D)0,0,4

7.C语言程序的基本单位是( )。

A)语句B)程序行C)函数D)字符

8.下列程序的运行结果是()。

main( )

{char s[20]=“China”;

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

 }

A)5B)6C)20D)无显示

9.已知int i,j,k;scanf(“%d%d%d”,&i,&j,&k);若从键盘送入i,j,k的值分别为1,2,3时,则错误的输入方式是()。

A)1,2,3B)1(回车)2(回车)3(回车)

C)123 D)1(回车)23

10.有以下程序段

int k=0;

while(k=1) k++;

while循环执行的次数 ()。

A)无限次B)有语法错,不能执行C)一次也不执行D)执行1次

11.当调用函数时,实参是一个数组名,则向函数传递的是()。

A)数组的长度B)数组每一个元素的地址C)数组的首地址D)数组每个元素中的值 

12.以下程序的输出结果是()。

main( )

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

for(j=0;j<3;j++) printf("%d,",x[j][2-j])) ;

A)1,5,9B)1,4,7C)3,5,7D)3,6,9

13.语句for( i =0;i++<3;) ;执行后,变量i的值为(  )。

A)2B)3C)4D)5

14.以下程序的输出结果是()。

main( )

{int a=0,b=3,k;

printf("%d\n",k=(a%b,a/b));

}

A)0B)1C)2D)4

15.下列叙述中正确的是()。

16.已知说明语句int (*p)( );,则下列叙述正确的是()。

17.若x为整型变量,以下定义指针的正确语句是()。

A)int p=&x;B)intp=x;

C)int *p=&x;D)p=x;

18.若有以下结构变量

struct x

{int a;

char c;

float b;

}x,*p;

p=&x;

则对成员a合适的引用为以下的(  )项。

A)p.x.aB)p->x.aC)(*p).x.aD)(*p).a

19.C语言中文件的存取是以()单位

A)函数B)语句C)字节D)记录

20.当调用函数fputc输出字符时,若操作不成功,则返回的值是()。

A)EOFB)1C)0D)输出的字符

 

二.请给出下列程序的运行结果(40%

 

1.main( )

{int i=3,j=4;

printf(“%d,%d\n”,i++,j++);

printf(“%d,%d\n”,++i,++j);

}

运行结果:

 

 

 

2.#define SQR(x) x*x

main( )

{int a=10,k=2,m=1;

a/=SQR(k+m)/SQR(k+m);

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

}

运行结果:

 

 

 

3.main( )

{char *p="Wednesday";

p=p+6;

printf("%s\n",p);

}

运行结果:

 

 

 

4.long fun(int n)

{long s;

if(n==1||n==2) s=2;

else s=n-fun(n-1);

return s;

}

main( )

{printf("%ld\n",fun(3));

}

运行结果:

 

 

 

5.#include"stdio.h"

main( )

{char b[ ] ="program";

char *a="PROGRAM";

printf("\n%c%s\n",*a,b+1);

printf("%s\n",&b[3]);

}

运行结果:

 

 

 

 

6.main( )

{char ch[2][5]={"6937",,8254"},p[2][5];

int j,k,s=0;

for(j=0;j<2;j++)p[j]=ch[j];

forj=0;j<2;j++)

for(k=0;p[j][j]>'\0';j+=2)

s=10*s+p[j][k]-'0';

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

}

运行结果:

 

 

 

 

7.main( )

{int j;

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

{if(j%2==0) printf("*");

else continue;

printf("#");

}

printf("$\n");

}

运行结果:

 

 

8.main( )

{int j;

for(j=0;j<10;j++)

{if(j%2!=0) continue;

printf("%d",j);

}

}

 运行结果:

 

三.编程题(20%)(四题中任选二题)

试卷五

 

(1) 在C语言中,如果下面的变量都是int类型,则输出的结果是() 。
sum=pad=5; pAd=sum + + ,pAd + + , + + pAd;
printf("%d\n",pad);
A) 7 B) 6 C) 5 D) 4


(2) 以下程序的输出结果是() 。
# include <stdio.h>
main()
{

int i=010 , j = 10;
printf("%d,%d\n",+ +i , j - -);

}
A) 11,10 B) 9,10 C) 010,9 D) 10,9

(3) 已知在ASCII代码中,字母A的序号为65,以下程序的输出的结果是() 。
# include <stdio.h>
main()
{

char c1='A', c2='Y';
printf("%d,%d\n",c1,c2);

}

A) 因输出格式不合法,输出错误信息 B)65,90 C)A,Y D)65,89

 

(4) 语句while(!E);中的条件!E等价于 () 。
A)E = = 0 B)E!=1 C)E!=0 D)~E

(5) 以下程序的输出结果是 ()。
# include <stdio.h>
main()
{

printf("%d\n",NULL);

}
A) 不确定的(因变量无定义) B)0 C)-1 D)1

(6) 以下函数调用语句中含有()个实参。
func((exp1,exp2),(exp3,exp4,exp5));
A) 1 B) 2 C) 4 D) 5

(7) 下面的程序中()有错误(每行程序前面的数字是行号)。
1 #include <stdio.h>
2 main()
3 {
4 float a[3]={0,0};
5 int i;
6 for(i=0;i<3;i + + ) scanf("%d",&a[i]);
7 for(i=1;i<3;i + + ) a[0]=a[0]+a[i];
8 printf("%f\n",a[0]);
9 }

A) 没有 B)第4行 C)第6行 D)第8行


(8) 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是() 。
A)3 B)0 C)9 D)-12

(9) 以下的for循环() 。
for(x=0,y=0; (y!=123)&&(x<4); x + + );


A) 是无限循环 B)循环次数不定 C)执行4次 D)执行3次


(10) 设有语句char a='\72';则变量a () 。
A)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明不合法

 

(11) C语言中 () 。

A)不能使用do-while语句构成的循环
B)do-while语句构成的循环必须用break语句才能退出
C)do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
D)do-while语句构成的循环,当while语句中的表达式值为零时结束循环

(12) 以下程序的输出结果是() 。
# include <stdio.h>
# include <string.h>
main()
{

char str[12]={'s','t','r','i','n','g'};
printf("%d\n",strlen(str));

}

A) 6 B) 7 C) 11 D) 12

(13) 以下程序的输出结果是 () 。
# include <stdio.h>
main()
{

int a=2,c=5;
printf("a=%%d,b=%%d\n",a,c);

}

A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d


(14) 以下程序的输出结果是 () 。
# include<stdio.h>
main()
{

int a ,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);

}
A) 6,1 B) 2,1 C) 6,0 D) 2,0

 

(15) 以下for语句构成的循环执行了() 次。
# include <stdio.h>
# define N 2
# define M N+1
# define NUM (M+1)*M/2
main()
{

int i , n=0;
for ( i=1;i<=NUM;i + + );
{

n + + ;

printf("%d",n);

}
printf("\n");

}

A) 5 B) 6 C) 8 D) 9


(16) 设有以下语句,则()不是对a数组元素的正确引用,其中0≤i<10。
int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a;

 

(17) 以下程序的输出结果是() 。
# include<stdio.h>
main()
{

int i=1,j=3;
printf("%d",i + + );
{ int i=0; i+=j*2; printf("%d,%d",i,j); }
printf("%d,%d\n",i,j);

}
A) 1,6,3,1,3 B) 1,6,3,2,3 C) 1,6,3,6,3 D) 1,7,3,2,3

(18) 以下程序的输出结果是() 。
# include <stdio.h>
main()
{

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

}

func(int a,int b)
{

static int m=0,i=2;
i+=m+1; m=i+a+b;

return(m);

}

 

(19) 设有以下语句:
char str1[]="string",str2[8],*str3,*str4="string";
则 () 不是对库函数strcpy的正确调用,此库函数用业复制字符串。
A) strcpy(str1,"HELLO1"); B) strcpy(str2,"HELLO2");
C) strcpy(str3,"HELLO3"); D) strcpy(str4,"HELLO4");

(20) C语言中形参的缺省存储类别是 () 。
A)自动(auto) B)静态(static) C)寄存器(register) D)外部(extern)

(1)以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。
#include <stdio.h>
main()
{

int i,a[10],*p=a,sum=0;
printf("Enter 10 num:\n");
for(i=0;i<10;i + + ) scanf("%d",&a[i]);
for(i=0;i<10;i + + )
if(isprime(*(p+ ____(1)_____ )) = = 1)

{

printf("%d",*(a+i));

sum+=*(a+i);

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

}
isprime(int x)
{

int i;

for(i=2;i<=x/2;i + + )
if(x%i = = 0)

return (0);

______(2)______;

}

(2) 以下程序调用invert函数按逆序重新放置a数组中元素的值。a数组中的值在main函数中读入。
#include <stdio.h>
#define N 10
invert(int *s,int i,int j)
{

int t;

if(i<j)

{

t=*(s+i);

*(s+j)=(s+j);

*(s+j)=t;

invert(s, ___(3)___ ,j-1);

}

}
main()
{

int a[N],i;
for(i=0;i<N;i + + ) scanf("%d",a+ ____(4)___ );
invert(a,0,N-1);
for(i=0;i<N;i + + ) printf("%d",a[i]);
printf("\n");

}

(3)以下程序的功能是将字符串a中下标值为偶数的元素由小到大排序,其他元素不变.

#include <stdio.h>

main()

{
char a[ ]=”labchmfye”,t;

int i,j;

for(i=0;i<7;i+=2)

for(j=i+2;j<9;____(5)___)

if(____(6)____)

{
t=a[i];

a[i]=a[j];

a[j]=t;

j++;

}

puts(a);

printf(“\n”);

}

(1) 阅读下列程序:
#include<stdio.h>
main()
{

int i, j, row, column,m;
static int array[3][3]={{100,200,300},{28,72,-30},{-850,2,6}};
m=array[0][0];
for (i=0; i<3; i++)
for (j=0; j<3; i++)
if (array[i][j]<m)
{

m=array[i][j]; row=i; column=j;

}
printf("%d,%d,%d\n",m,row,column);

}
上述程序的输出结果是_________ 。

(2) 下面程序的输出结果是_______ 。
#include<stdio.h>
main()
{

int a=3, b=2, c=1;
c-=++b;
b*=a+c;
{ int b=5, c=12;
c/=b*2;
a-=c;
printf( '%d,%d,%d,",a,b,c);
a+=--c;
}
printf( '%d,%d,%d,",a,b,c);

}

(10) 请读程序 。
#define PR(ar) printf("%d", ar)
main()
{ int j, a[]={ 1,3,5,7,9,11,13,15}, *p=a+5;
for(j=3; j; j--)
{

switch(j)
{ case 1:
case 2: PR(*p++); break;
case 3: PR(*(--p));

}

}
}上面程序的输出结果是__________.

(4) 下面程序的输出是__________ 。
long fun5(int n)
{

long s;
if((n==1)||(n==2))
s=2;
else
s=n+fun5(n-1);
return(s);

}

main()
{ long x;
x=fun5(4);
printf("%ld\n",x);

}

 

 

试卷六

 

(1) 下列语句中符合C语言语法的赋值语句是
A) a=7+b+c=a+7; B) a=7+b++=a+7; C) a=7+b,b++,a+7 D) a=7+b,c=a+7;

(2) 在C语言中,要求运算数必须是整型的运算符是
A) % B) / C) < D) !

(3) 已知字母A的ASCII码为十进制的65,下面程序的输出是
A) 67,D B) B,C C) C,D D) 不确定的值
main()
{ char ch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);

}

(4) 下面程序的输出是
A) 0 B) 1 C) 3 D) 不确定的值
main()
{ int x=10,y=3;
printf("%d\n",y=x/y);

}

(5) 若执行下面的程序时从键盘上输入3和4,则输出是
A) 14 B) 16 C) 18 D) 20
main()
{

int a,b,s;
scanf("%d %d",&a,&b);
s=a;
if(a<b)s=b;
s=s*s;
printf("%d\n",s);

}
(6) 下面的程序
A) 有语法错误不能通过编译
B) 输出* * * *。
C) 可以通过编译,但是不能通过连接,因而不能运行。
D) 输出# # # #。
main()
{ int x=3,y=0,z=0;
if(x=y+z)printf("* * * *");
else printf("# # # #");

}

(7) 下面的程序
A) 输出的是1 B) 输出的是1和-2 C) 输出的是3和0 D) 是死循环
main()
{ int x=3;
do {
printf("%d\n",X-=2);
}while(!(--x));

}

 

(8) 下面程序的输出是
A) 17 B) 18 C) 23 D) 24
main()
{ int x=023;
printf(%d\n",--x);

}

(9) 若执行下面的程序时从键盘上输入5,则输出是
A) 7 B) 6 C) 5 D) 4
main()
{ int x;
scanf("%d",&x);
if(x++>5) printf("%d\n",x);
else printf("%d\n",x--);

}

(10) 下面程序的输出是
A) 3 B) 4 C) 1 D) 2
main()
{

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));

}

(11) 执行下面程序中的输出语句,a的值是
A) 65 B) 20 C) 15 D) 10
main()
{ int a;
printf("%d\n",(a=3*5,a*4,a+5));

}

(12) 下面程序的输出是
A) 0 0 3 B) 0 1 2 C) 1 0 3 D) 1 1 2
main()
{ int a=-1, b=4,k;
k=(a++<=0)&&(!(b--<=0));
printf("%d %d %d\n",k,a,b);

}

 

(13) 下面程序的输出是
A) xyzabcABC B) zabcABC C) yzabcABC D) xyabcABC
#include<stdio.h>
#include<string.h>
main()
{

char *p1="abc",*p2="ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n", str);

}

(14) 下面程序的输出是
A) 741 B) 852 C) 963 D) 875421
main()
{

int y=9;
for( ; y>0; y--)
{

if(y%3==0)
{

printf("%d", --y);continue;

}

}.
}


(15) 下面程序的输出是
A) 100 B) 160 C) 120 D) 64
main()
{

char x=040;
printf("%d\n",x=x<<1);

}

(16) 以下说法中正确的是
A) C语言程序总是从第一个的函数开始执行
B) 在C语言程序中,要调用的函数必须在main()函数中定义
C) C语言程序总是从main()函数开始执行
D) C语言程序中的main()函数必须放在程序的开始部分

(17) 执行下面的程序后,a的值为
main()
{

int a,b;
for (a=1,b=1;a<=100;a++)
{ if(b>=20) break;
if(b%3==1)

{

b+=3;

continue;

}
b-=5;

}

}
A) 7 B) 8 C) 9 D) 10


(18) 以下程序段的输出结果是
int x=3;
do {

printf("%3d",x-=2);

} while(!(--x));
A) 1 B) 3 0 C) 1-2 D) 死循环

 

(19) 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是
main( )
{

int x;

scanf("%d",&x);

if(x + + >5)

printf("%d",x);

else

printf("%d\n",x - -);

}
A) 7和5 B) 6和3 C) 7和4 D) 6和4


(20) 设有如下定义: char *aa[2]={"abcd","ABCD"}; 则以下就法中正确的是
A) aa数组成元素的值分别是"abcd"和ABCD"
B) aa是指针变量,它指向含有两个数组元素的字符型一维数组
C) aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D) aa数组的两个元素中各自存放了字符'a'和'A'的地址

 

(1) 以下程序的功能是:人键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入.请填空.
main()
{

float x,amax,amin;
scanf("%f",&x);
amax=x; amin=x;
while(___(1)____)
{

if(x>amax) amax=x;
if(____(2)____) amin=x;
scanf("%f",&x);

}
printf("\namax=%f\namin=%f\n",amax,amin);

}

(2) 下面程序通过函数average计算数组中各元素的平均值,请填空.
float average(int * pa,int n)
{ int i;
float avg=0.0;
for(i=0;i<n;i++) avg=avg+___(3)___;
avg=___(4)___;
return avg;

}
main()
{

int i,a[5]={2,4,6,8,10};
float mean;
mean=average(a,5);

printf("mean=%f\n",mean);

}

 

(3) 以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。
#include"ctype.h"
#include"stdio.h"
main()
{

char str[81],*sptr;
int i;
for(i=0;i<80;i++)
{

str[i]=getchar();
if(str[i]=='\n')

break;

}
str[i]=___(5)___;
sptr=str;
while(*sptr) putchar(*sptr___(6)____);
}

 

(1) 下面程序的输出是_______。
#define MAX 5
int a[MAX],k;
main()
{ fun1();fun3(); fun2(); fun3();
printf("\n");

}
fun1()
{

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

a[k]=k+k;

}
fun2()
{

int a[MAX],k;
for(k=0;k<5;k++)

a[k]=k;

}
fun3()
{

int k;
for(k=0;k<MAX;k++)

printf("%d",*(a+k)):

}

 

(2)以下程序运行后,输出结果是________
main ()
{

int y=18,i=0,j,a[8];
do
{

a[i]=y%2;i++;
y=y/2;

} while(y>=1);
for(j=i-1>0;j--)

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

}

 

(3)以下程序的输出结果是________
main()
{

int i,j,x=0;
for (i=0;i<2;i++)
{ x++;
for(j=0;j<3;j++)
{

if (j%2)

continue;
x++;

}
x++;

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

}

 

(4) 以下程序的输出结果是_______
main( )
{

char *s="12134211";

int v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{

switch(s[k])
{

case '1':i=0;
case '2':i=1;
case '3':i=2;
case '4':i=3;

}
v[i]++;

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

printf("%d ",v[k]);

}

 

1.从键盘输入一个字符串a,并在a串中的最大元素后边插入字符串b(b[ ]=”ab”). 试编程.

 

 

 

试卷七

 

(1) 以下选项中属于C语言的数据类型是
A) 复数型 B) 逻辑型 C) 双精度型 D) 集合型

(2) 在C语言中,不正确的int类型的常数是
A) 32768 B) 0 C) 037 D) 0xAF

(3) 语句:printf("%d",(a=2)&&(b= -2);的输出结果是
A) 无输出 B) 结果不确定 C) -1 D) 1

(4) 下列描述中不正确的是
A) 字符型数组中可以存放字符串
B) 可以对字符型数组进行整体输入、输出
C) 可以对整型数组进行整体输入、输出
D) 不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值

(5) 设有如下定义:int x=l,y=-1;,则语句:printf("%d\n",(x--&++y));的输出结果是
A) 1 B) 0 C) -1 D) 2

(6) 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是
A) c=b=a; B) (a=c) ‖(b=c) ;
C) (a=c) &&(b=c); C) a=c=b;

(7) 以下程序的输出结果是
A) 10 1 9 2 B) 9 8 7 6 C) 10 9 9 0 D) 10 10 9 1
main( )
{

int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d,%d ",x--,y);

}
(8) 以下程序的输出结果是
A) 5 2 B) 5 1 C) 5 3 D) 9 7
main( )
{

int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];
for(i=0;i<4;i+=2)

printf("%d ",p[i]);

}

(9) 以下程序的输出结果是
A)6 B) 6789 C) '6' D) 789
main( )
{

char a[10]={'1','2','3','4','5','6','7','8','9',0},*p;
int i;
i=8;
p=a+I;
printf("%s\n",p-3);

}


(10) 以下程序的运行结果是
A) 运行后报错 B) 6 6 C) 6 12 D) 5 5
#include "stdio.h"
main( )
{
int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12,};
int *p=a+5, *q=NULL;
* q=*(p+5);
printf("%d %d \n",*p,*q);
}


(11) 以下说法中正确的是
A) #define和printf都是C语句 B) #define是C语句,而printf不是
C) printf是C语句,但#define不是 D) #define和printf都不是C语句

(12) 语句:printf("%d \n",12 &012);的输出结果是
A) 12 B) 8 C) 6 D) 012

(13) 能正确表示a和b同时为正或同时为负的逻辑表达式是
A) (a>=0‖b>=0)&&(a<0‖b<0)
B) (a>=0&&b>=0)&&(a<0&&b<0)
C) (a+b>0)&&(a+b<=0)
D) a*b>0

(14) 以下程序的输出结果是
A) 2 0 B) 3 1 C) 3 2 1 D) 2 1 0
main( )
{

int n=4;
while(n--)

printf("%d ",--n);

}
(15) 若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是
A) p+1 B) a+1 C) a++ D) ++p

(16) 以下程序的输出结果是
A) 17,021,0x11 B) 17,17,17 B) 17,0x11,021 D) 17,21,11
main( )
{

int k=17;
printf("%d,%o,%x \n",k,k,k);

}

(17) 以下程序的输出结果是
A) -1 1 B) 0 1 C) 1 0 D) 0 0
main( )
{ int a= -1,b=1,k;
if((++a<0)&& ! (b-- <=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);
}


(18) 若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是
A) *p=&a; scanf("%ld",p);
B) p=(long *)malloc(8); scanf("%ld",p);
C) scanf("%ld",p=&a);
D) scanf("%ld",&a);

(19) 若有以下定义和语句:
double r=99, *p=&r;
*p=r;
则以下正确的叙述是
A) 以下两处的*p含义相同,都说明给指针变量p赋值
B) 在"double r=99, *p=&r;"中,把r的地址赋值给了p所指的存储单元
C) 语句"*p=r;"把变量r的值赋给指针变量p
D) 语句"*p=r;"取变量r的值放回r中

(20) 以下程序的输出结果是
A) 编译不通过,无输出 B) acegC) acegi D) abcdefghi
main( )
{

int i;
for(i='A';i<'I';i++,i++)

printf("%c",i+32);
printf(" \n");

}

 

(1) 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。
main( )
{

float x[1000], sum=0.0, ave, a;
int n=0, i;
printf("Enter mark:\n");scanf("%f",&a);
while(a>=0.0&& n<1000)
{

sum+ ___(1)___ ;

x[n]= _____(2)_____ ;
n++;

scanf("%f",&a);

}
ave= ____(3)____ ;
printf("Output:\n");
printf("ave=%f\n",ave);
for (I=0;I<n;I++)
if (_____(4)_____)

printf ("%f\n",x[I]);

}

(2) 以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。

#define N 3
#define M 4
void LineMax(int x[N][M])
{

int i,j,p;
for(i=0; i<N;i++)
{

p=0;
for(j=1; j<M;j++)
if(x[i][p]<x[i][j]) ____(5)____ ;
printf("The max value in line %d is %d\n", i, _____(6)_____ );

}
}
main()
{

int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
______(7)______;
}

#include "stdio.h"

#include"string.h"
main( )
{

char b[30],*chp;
strcpy(&b[0],"CH");
strcpy(&b[1],"DEF");
strcpy(&b[2],"ABC");
printf("%s \n",b);

}
(2) 下列程序的输出结果是___________ 。
int t(int x,int y,int cp,int dp)
{

cp=x*x+y*y;
dp=x*x-y*y;

}
main( )
{

int a=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d %d \n",c,d);

}
(3) 下列程序中字符串中各单词之间有一个空格,则程序的输出结果是______________ 。
#include "string.h"

#include"stdio.h"
main( )
{

char strl[]="How do you do", *p1=strl;
strcpy(strl+strlen(strl)/2,"es she");
printf("%s \n",pl);

}

(4) 以下程序的运行结果是__________
#include <stdio.h>
main( )
{

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

}

func(int a, int b)
{

static int m=0, i=2;
i+=m+1;
m=i+a+b;
return m;

}

 

 

 

试卷八

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

1、设有说明语句:char a= '\72abc';则变量a ()

A) 包含6个字符B) 包含5个字符C) 包含4个字符D) 说明不合法

 

2、在C语言中,数字029是一个()

A)八进制数B)十六进制数C)十进制数D)非法数

 

3、有如下程序

main( )

{ int y=3,x=3,z=1;

printf("%d %d\n",(++x,y++),z+2);}

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

A)3 4B)4 2C)4 3D)3 3

 

4、有如下程序段

int a=14,b=15,x;

char c='A';

x=(a&&b)&&(c<'B');

执行该程序段后,x的值为( )

A)tureB)falseC)0D)1

 

5、如下程序

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\n",a,b);

}

该程序的输出结果是()

A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2

 

6、

main( )

{ int i,j;

for(i=0,j=1; i<=j+1; i+=2, j--)printf("%d \n",i);

}

以上循环体的执行次数是( )

A)3 B)2 C)1D)0

 

7、设有数组定义:char array [ ]="China";则数组 array所占的空间为( )

A)4个字节B)5个字节C)6个字节D)7个字节

 

8、C语言的编译系统对宏命令是()

A)在程序运行时进行代换处理的

B)在程序连接时进行代换处理的

C)和源程序中其它C语句同时进行编译的

D)在对源程序中其它成份正式编译之前进行处理的

 

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

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

B)在C语言程序中,要调用的函数必须在main( )中有定义

C)C语言程序的执行既可以采用解释方式,也可以采用编译方式

D)C语言程序中的main( )函数可以不放在程序的开始部分

 

10、下面程序的输出是( )

#define SUB(X,Y)(X)*Y

main( )

{int a=3,b=4;

printf("%d\n",SUB(a++,b++));

}

A)12B)15C)16D)20

 

11、设有如下定义:

char*aa[2]={“abcd”,”ABCD”};则以下说法中正确的是()

A)aa数组元素的值分别是“abcd”,”ABCD”

B)aa是指针变量,它指向含有两个数组元素的字符型一维数组

C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

D)aa数组的两个元素中各自存放了字符’a’,’A’的地址

 

12、若变量已正确说明为float类型,要通过语句scanf("%f %f %f ",&a,&b,&c);给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<回车>

13、当调用函数时,实参是一个数组名,则向函数传送的是()
A) 数组的长度B) 数组的首地址C) 数组每一个元素的地址D) 数组每个元素中的值

 

14、有以下函数
char *fun(char *p)
{ return p; }
该函数的返回值是( )

A) 无确切的值 B) 形参p中存放的地址值
B) 一个临时存储单元的地址 D) 形参p自身的地址值

 

15、若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是()
A) &t[3][2] B) t[3][2] C) t[1][0] D) t[2]+1

 

16、以下程序的输出结果是()

A)#*#*# B)##### C)***** D)*#*#*
main( )

{ int i;

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

{ if(i%2){printf("#");continue;}

printf("*");

}

printf("\n");

}

17、已知有声明语句char s1[10]= "abcde",s3[10];以下语句中能将s1中存储的字符串和s2中存储的字符串正确交换的是。

A.s3=s1,s1=s2,s2=s3;

B.s3[0]=s1[0],s1[0]=s2[0],s2[0]=3[0];

C.strcpy(s3[0],s1[0]),strcpy(s1[0],s2[0]),strcpy(s2[0],s3[0]);

D.strcpy(s3,s1),strcpy(s1,s2),strcpy(s2,s3);

 

18、若有声明语句int a[10],b[3][3];则以下对数组元素赋值的操作中,不会出现越界访问的是___。

A.a[-1]=1B.a[10]=0C.b[3][0]=0D.b[0][0]=0

 

19、以下是一个自定义函数的头部,其中正确的是。

A.int fun(int a[ ],b)B.int fun(int a[ ],int a)

C.int fun(int *a,int b)D.int fun(char a[ ][ ],int b)

 

20、下列4个函数中,()能实现交换变量值的功能。

A)void fun_a(int x,int y)B)void fun_b(int *x,int *y)

{int *p;{int *p;

*p=x;x=y;y=*p;}*x=*y;*y=*x;}

C)void fun_c(int *x,int *y)D)void fun_d(int x,int y)

{*x=*x+*y;{int p;

*y=*x-*y;p=x;x=y;y=p;

*x=*x-*y;}}

二、填空题(每空2分,共26分)

1、已知:int x=3;则

printf(x%2?"**%d":"##%d\n",x);

printf("00000\n");

输出结果为:

 

2、若有以下定义和语句,则通过指针p对值为8的数组元素的引用表达式是

inta[10]={1,2,3,4,5,6,7,8,9},*p;
p=&a[1];

 

#include "stdio.h"

main()

{char a[11]="0123456789",*p;

p=&a[4];

puts(p);}

 

4、求两数中的较大

main()

{ float a,b,max;

scanf(“%f%f”,&a,&b);

;

printf(“the max is %f\n”,max);

}

 

5、下列程序用于将从键盘输入的整数逆序输出

main( )

{ int n1,n2;

scanf("%d",&n2);

while()

{ n1=n2%10;

n2=;

printf("%d",n1);}

}

 

6、下面的程序输出3到1000之间的所有素数,且每5个一行。

main( )

{int i,j;

int b=0,c=0;

for(i=3;i<=1000;i++)

{ for(j=2;j<=i-1;j++)

if ( ){b=1;break;}

if (!b)

{ c++;printf("%4d",i);

if () printf(“\n”);

}

}

}

 

7、利用插入排序法将十个字符从小到大排序

#include <stdio.h>

void insert(char s[])

{

int i,j,t;

for (i=1;i<=9;i++)

{t=s[i];j=i-1;

while ((j>=0)&&())

{ s[j+1]=s[j];;}

s[j+1]=t;

}

}

 

main()

{

char a[11];int i;

for (i=0;i<10;i++)a[i]=getchar();

insert(a);

puts)a);

}

 

8、用递归法将一个整数n转换成字符串。如输入整数483,则输出字符串“483”。

void convert(n)

int n;

{ int k;

if ((k/10)!=0) convert();

putchar(n%10+'0');

}

main()

{ int num;

printf("\n输入整数:”);

scanf("%d",&num);

printf("\n输出是:");

if (num<0) {putchar('-');num=-num;}

;

}

 

三、判断题(每题2分,共20分)

()1、在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。

()2、在C语言的复合语句中,只能包含可执行语句。

()3、自动变量属于局部变量。

()4、一个函数利用return只能返回一个函数值。

()5、在程序运行过程中,系统分配给实参和形参的内存单元是不同的。

()6、用scanf输入字符时,字符串中不能包含空格。

()7、Continue 和break都可用来实现循环体的中止。

()8、若将C源程序经过编译、连接后生成可执行文件,则可直接在DOS系统下输入可执行文件名执行。

()9、字符常量的长度肯定为1。

()10、已知:char c=48;int i=1,j=10;执行语句j=!(c>j)&&i++;则i和j的值分别是1和0。

 

四、编程题:(14分)

编写程序,求1!+2!+……n!,要求从主函数输入n的值,用函数实现阶乘的计算,并通过函数值返回(请注意合理的类型选取)。

 

答案

 

一、选择题

1、c2、d3、D4、D5、A

6、C7、C8、D9、D10、A

11、C12.B13.B14.B15.D

16.A17.D18.D19.C20.C

 

二、填空题:

1、**300000

2.*(p+6)

3. 456789

4.max=a>b?a:b

5、n2!=0

n2/10

 

6、 i%j= =0;c%5==0;

7、t<s[j]

j—

a[i]=’\0’;

8.n/10convert(num)

 

三、判断题

对,错,对,对,对,对,错,对,对,对

 

四、编程题

试卷九

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

1、有以下定义:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}

int (*ptr)[3]=a,*p=a[0];

则下列能够正确表示数组元素a[1][2]的表达式是()。

A)*((*ptr+1)[2])B)*(*(p+5))

C)(*ptr+1)+2D)*(*(a+1)+2)

 

2、# include <stdio.h>

void main ( )

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

int s=0,i;

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

s+=(*(a+i))[i];

printf("%d",s);

}

A)9 B)12 C)14D)15

3、设有说明语句:char a= '\123abc';则变量a ()

A) 包含7个字符B) 包含6个字符C) 包含5个字符D) 包含4个字符

 

4、有以下程序段
int k=0
while(k=1)k++;
while 循环执行的次数是()
A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次

 

5、在C语言中,()。

A)函数定义可以嵌套,但函数调用不能嵌套

B)函数定义不可以嵌套,但函数调用可以嵌套

C)函数定义和调用均不能嵌套

D)函数定义和调用均可以嵌套

6、以下叙述正确的是(  )

A)do-while语句构成的循环不能用其它语句构成的循环代替。

B)do-while语句构成的循环只能用break语句退出。

C)用do-while语句构成的循环,在while后的表达式为非零时结束循环。

D)用do-while语句构成的循环,在while后的表达式为零时结束循环。

7、若有声明语句char ch=’a’,*pc=&ch;以下语句中,有语法错误的是。

A.(*pc)++B.ch+=-‘a’+’A’;C.toupper(ch)=ch;D.ch++;

8、以下关于函数叙述中,正确的是。

A.在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值

B.在函数体中至少必须有一个return 语句

C.在函数体中可以定义另一个函数

D.在函数体中可以调用函数自身

9、以下数组声明语句中正确的是。

A.int a,a[n];B.int a[ ];

C. int a[2][3]={{1},{2},{3}};D.int a[ ][3]={{1},{2},{3}};

10、以下程序执行后的结果是()

A)9B)程序出错C)死机D)15

#include <stdio.h>

#defineAREA(x,y)x*y;

main()

{int i;

i=AREA(3+2,3)

printf(“%d”,i);}

 

11、以下程序的输出结果是()

main( )

{int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;

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

for(j=i;j<=i;j++)

t=t+b[j][j]];

printf("%d\n",t);

}

A)3B)4C)1D)9

12、以下不能正确进行字符串赋初值的语句是()

A)char str[5]="good!";B)char str[ ]= "good!";

C)char *str="good!";D)char str[5]={ 'g','o','o','d'};

13、以下关于switch语句和break语句的描述中,只有()是正确的。

A)在switch语句中必须使用break语句

B)在switch语句中,可以根据需要使用或不使用break语句

C)break语句只能用于switch语句中

D)break语句是switch语句的一部分

14、判断变量ch中的字符是否为数字字符,最简单的正确表达式是()。

A)ch>=0&&ch<=9B)’0’<=ch<=’9’

C)ch>=’0’||ch<=’9’D)ch>=’0’&&ch<=’9’

15、若执行以下程序时从键盘上输入9,则输出结果是()

A)11B)10C)9D)8

main()

{ int n;

scanf("%d",&n);

if(n++<10) printf("%d\n",n);

else printf("%d\n",n--);

}

16、若w=1,x=2,y=3,z=4;则条件表达式w>x?w:y<z?y:z的结果是()

A)4B)3C)2D)1

17、设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后y的值为()

A)不定值B)4C)3D)1

18、以下程序的输出结果是()

main( )

{int x=023;

printf("%d\n",--x);

}

A)18B)22C)23D)19

19、下列4个函数中,()能实现交换变量值的功能。

A)void fun_a(int x,int y)B)void fun_b(int *x,int *y)

{int *p;{int *p;

*p=x;x=y;y=*p;*x=*y;*y=*x;

}}

C)void fun_c(int *x,int *y)D)void fun_d(int x,int y)

{*x=*x+*y;{int p;

*y=*x-*y;p=x;x=y;y=p;

*x=*x-*y;}

}

20、以下所列的各函数首部中,正确的是()
A) void play(var :integer,var b:integer)
B) void play(int a,b)
C) void play(int a,int b)
D) Sub play(a as integer,b as integer)

 

二、填空题(每空2分,共26分)

1、判断n是否是素数,若是,则返加1,否则返回0

int prim(int n)

{ int m;

for (m=2;m<=n/2;m++)

if

return 0;

;

}

2、下述程序段是要实现在数组中查找最大元素和最小元素的下标,

# include <stdio.h>

void find(int *a,int n,int *max,int *min)

{int i;

*max=*min=0;

for(i=1;i<n;i++)

if(a[i]>a[*max])

;

else

if(a[i]<a[*min])

;

return;

}

void main( )

{int a [ ]={5,8,7,6,2,7,3};

int max,min;

find();

printf("\nmax=%d,min=%d",max,min);

}

3、下面的程序当输入为字符串”qwert?”时的输出结果是

Main()

{ char c;

while((c=getchar())!=’?’) putchar(++c);

}

 

4、假设有如下语句:

int a;float b,c;

scanf("%2d%3d%4f",&a,&b,&c);

printf("\na=%d,b=%f,c=%f\n",a,b,c);

若从键盘输入:9876543210

 则输出应为: 

 

5、下面的函数用于实现将一个字符串按逆序存放。

Void convert(char s[])

{ char m;int i,j;

for (i=0,j=strlen(s);i<;i++,j++)

{

m=s[i];

s[i]=;

s[j-1]=m;

}

printf(“%s\n”,s);

}

6、以下函数fun的功能是用选择排序法对数组的数据按从小到大的顺序排列。

void fun(int a[ ],int n)

{int i,j,k,temp;

for(i=0;i<n-1;i++)

{ k=i;

for(j=i+1;;j++)

if(a[j]<a[k])k=j;

if()

{temp=a[k];

a[k]=a[i];

a[i]=temp;

}

}

}

7、函数fun,其功能是求两个整数的最大公约数

fun(int x,int y)

{int a,b,t,r;

a=x;

b=y;

while()

{a=b;

}

return (b);

}

#define N 3

#define M 4

void LineMax(int x[N][M])

{ int i,j,p;

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

{ p=0;

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

if(x[i][p]<x[i][j]);  

printf("The max value in line %d is %d\n", i,x[i][p]);

}}

main()

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

}

 

三、判断题(每题2,共20分)

()1、C语言允许在复合语句内定义自动变量。

()2、全局变量可以和局部变量重名,且全局变量优先。

()3、若一个函数的返回类型为void,则表示其没有返回值。

()4、在程序运行过程中,系统分配给实参和形参的内存单元是相同的。

()5、对于Continue 和break这两条语句,只有break可用来实现循环体的中止。

()6、已知:char c='A';int i=1,j;执行语句j=!c&&i++;则i和j的值分别是0,1

()7、所有定义在主函数之前的函数无需进行声明。

()8、&既可以用作单目运算符也可以用作双目运算符

()9、宏定义和文件包含都是C语言中的编译预处理命令,对它们的处理是在编译前完成的。

()10、一个函数利用return不可能同时返回多个值。

 

 

四、编程题:(14分)

编程打印如下的杨辉三角形,具体要求如下:

(1)从主函数中输入欲打印的杨辉三角形行数;

(2)用子函数实现杨辉三角形的显示;

 

1

121

1 331

1464 1

1 5101051

1615201561

……

 

答案:

 

一、选择题

1、D2、D3.D4,A5.B

6.D7.C8.D9.C10.A

11.B12.A13.B14.D15.B

16.B17.C18.A19.A20.C

 

二、填空题 

1. n%m==0;return 1;

 

2、

*max=i

*min=i

a,7,&max,&min

3.rxfsu

4.a=98,b=765.000000,c=4321.000000

6.j<n;a[k]!=a[i]

7.(r=a%b)!=0b=r

8.x[i][p]=x[i][j];LineMax(x)

 

三、判断题

对,错,对,错,对,对,对,错,对,对

四、略

 

试卷十

 

一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。

 

1.属于C语言基本数据类型的是(     )

  A.指针型               B.无符号整型

  C.数组型               D.结构型

2.C语言的长整型数值在计算机中占用的字节个数是(     )

  A.1               B.2

  C.3               D.4

3.C语言中,″\x3d″在内存中占用的字节数是(     )

  A.1               B.2

  C.4               D.5

4.设int  x;则执行printf(″%x\n″,~x^x);的结果是(     )

  A.0               B.1

  C.ff              D.ffff

5.对于while语句,错误的说法是(     )

  A.用条件控制循环体的执行次数

  B.循环体至少要执行一次

  C.循环体有可能一次也不执行

  D.循环体中可以包含若干条语句

6.设int a=9,b=20;则printf(″%d,%d\n″,a--,--b);的输出结果是(     )

  A.9,19               B.9,20

  C.10,19              D.10,20

7.执行下列语句

  int a=8,b=7,c=6;

  if(a<b)if(b>c){a=c;c=b;}

  printf(″%d,%d,%d\n″,a,b,c);

  后输出的结果是(     )

  A.6,7,7               B.6,7,8

  C.8,7,6               D.8,7,8

8.设static char x[ ]=″12345″,y[ ]={′1′,′2′,′3′,′4′,′5′,′\0′};那么(     )

  A.x数组的长度等于y数组的长度

  B.x数组的长度大于y数组的长度

  C.x数组的长度少于y数组的长度

  D.x数组与y数组的存储区域相同

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

  则下面语句

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

  printf(″%d″,x[i][2-i]);

  的输出结果是(     )

  A.147                   B.159

  C.357                   D.369

10.设int b[ ]={1,2,3,4},y,*p=b;

   则执行语句y=*p++;之后,变量y的值为(     )

  A.1                             B.2

  C.3                             D.4

 

 

二、填空题(本大题共10小题,每小题2分,共20分)

11.设int y;执行表达式(y=4)||(y=5)||(y=6)后,y的值是______。

12.设char ch=′A′;则printf(″%c″,(ch>=′A′ && ch<=′Z′)?ch+32:ch);的值是_____。

13.结构化程序设计的三种基本结构是:选择结构、循环结构和______。

14.下列程序

    int x=3;

    do{printf(″%d″,--x);}while(!x);

    循环执行的次数是______。

15.在C语言中,一个二维数组可以看成若干个______数组。

16.设int a[3][4]={{1,3,5,7},{2,4,6,8}};则*(*a+1)的值为______。

17.若函数定义为

   int data(     )

   {  float x=9.9;

      return(x);

   }

  则函数返回的值是______。

18.设struct student

   {int no;char name[12];

    float score[3];

   {s1,*p=&s1;.

   用指针变量p给s1的成员no赋值1234的方法是______。

19.判断文本文件是否结束时使用的符号常量EOF的值是______。

20.设有一个名为″myfile.c″的C程序,

   其主函数为mian(int argc,char *argv[ ])。如果在执行时,输入的命令行为

   myfile aa bb ↙

   则形式参数argc的值是______。

 

三、程序分析题(本大题共5小题,每小题5分,共25分)

    阅读下列程序,将输出结果写到各题右侧的空白处

21.fun(int x)

   {

    int y=0;

    static int z=3;

    z++;++y;

    return(x+y+z);

   }

   main( )

   {

    int I,x=2;

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

    printf(″%5d″,fun(x++));

   }

22.main( )

   {

     int s=0,i;

     for(i=1;;i++)

     {

       if(s>50)break;

       if(i%2==0) s+=i;

     }

     printf(″i=%d,s=%d\n″,i,s);

   }

23.gcd(int m,int n)

   { if(m==n)return m;

     else if(m>n) return gcd(m-n,n);

     else return gcd(m,n-m);

   }

   main( )

   {

     printf(″Gcd=%d\n″,gcd(24,36));

   }

24.# include<stdio.h>

   main( )

   {  int i=0;

      char c,s[]=″SABC″;

      while(c=s[i])

    {

     switch(c)

     {

     case ′A′:i++;break;

     case ′B′:++i;

     default:putchar(c);i++;

     }

      putchar(′*′);

    }

   }

25.int a1=300,a2=400;

   main( )

   {int a3=100,a4=200;

    sub1(a3,a4);

    sub1(a1,a2);

    printf(″%d,%d,%d,%d\n″,a1,a2,a3,a4);

   }

   sub1(int x,int y)

   { a1=x;

     x=y;

     y=a1;

   }

 

四、程序填充题(本大题共3小题,每小题6分,共18分)

    给出下列程序,将横线处缺少的部分补上,使其能正确运行。

26.将十个整数输入数组,求出其平均值并输出。

   main( )

   {int i,a[10],sum=0,*p=_________________;   /*第一空*/

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

    { scanf(″%d″,p);sum+=________________;   /*第二空*/

    printf(″%8.2f\n″,_____________________);   /*第三空*/

   }

27.输入一个无符号整数后求出它的各位数之和并输出。

   例如若输入123,则将各位之和6(即1+2+3)输出。

   __________f(num)   /*第一空*/

   unsigned int num;

   { unsigned int k=0;

     do

     { k+=__________;   /*第二空*/

          num/=10;

     } while(num);

   __________;  /*第三空*/

   }

   main( )

   {unsigned int n;

    scanf(″%d″,&n);

    printf(″%u\n″,f(n));

   }

28.为数组输入数据,逆序置换后输出。(逆序置换是指:数组的首元素和末元素置换,第二个元素和倒数第二个元素置换,………)

   # define N  8

   main(     )

   {  int i,j,t,a[N];

      for(i=0;i<N,i++)scanf(″%d″,a+i);

      i=0;j=N-1;

      while(i<j)

      { t=*(a+i);__ __________;  /*第一空*/

         __________=t;   /*第二空*/

        i++;__________;   /*第三空*/

      }

      for(i=0;i<N;i++)printf(″%5d″,*(a+i));

   }

 

五、程序设计题(第29小题7分,第30小题各10分,共17分)。

 

29.将100个整数输入数组后按每行10个数输出。

30.计算e=1+的值并输出(设n=20)。

 

试卷十一

 

一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。

 

1.有以下语句:int a=6;a+=a-=a*a;printf(“%d”,a);输出结果

A.–132B.–60C.-24D.0

 

2.字符a的ASCII码为97,在C程序中可用下列方法表示,除了

A. ‘a’B. ‘97’C.‘\141’D. ‘\x61’

 

3.设int a,*p;则语句p=&a;中的运算符“&”的含义是(     )

  A.位与运算                 B.逻辑与运算

  C.取指针内容               D.取变量地址

 

4.下面函数定义有错误的是(     )

  A.f1(x1,x2)                 B.f1(x1,x2)

    int x1,x2;                 int x1;int x2;

     {函数体}                  {函数体}

  C.f1(int x1,x2)             D.f1(int x1,int x2)

    {函数体}                    {函数体}

 

5.下列定义正确的是(     )

  A.anum t={a,b}x;               B.enum t{1,2}x;

  C.anum {′+′,′-′}x;         D.enum t{a,b}x;

6.设有定义:

union u{int a[4];float b[3]};

                     char c[16];}aa;

   则printf(″%d\n″,sizeof(aa));的输出是(     )

  A.32                  B.16

  C.12                  D.8

7.数据-35.78在文本文件中占用的字节个数是(     )

  A.4                B.5

  C.6                D.8

8.在下列有关宏替换的叙述中,正确的说法是(     )

  A.宏替换占用运行时间

  B.宏名有类型

  C.带参数的宏替换和函数等价

  D.宏替换只是字符替换

9.下列程序的运行结果是(     )

     # define  A  5

     # define  B  A+1

     main( )

     {int a;

      a=B;

      printf(″%d\n″a--);

     }

  A.6               B.5

  C.4               D.出错

10.为了向二进制文件尾部增加数据,打开文件的方式应采用(     )

  A.″ab″                     B.″rb+″

  C.″wb″                    D.″wb+″

  

二、填空题(本大题共10小题,每小题2分,共20分)

11.设int y;执行表达式(y=4)||(y=5)||(y=6)后,y的值是______。

12.设char ch=′A′;则printf(″%c″,(ch>=′A′ && ch<=′Z′)?ch+32:ch);的值是_____。

13.结构化程序设计的三种基本结构是:选择结构、循环结构和______。

14.下列程序

    int x=3;

    do{printf(″%d″,--x);}while(!x);

    循环执行的次数是______。

15.在C语言中,一个二维数组可以看成若干个______数组。

16.设int a[3][4]={{1,3,5,7},{2,4,6,8}};则*(*a+1)的值为______。

17.若函数定义为

   int data(     )

   {  float x=9.9;

      return(x);

   }

  则函数返回的值是______。

18.设struct student

   {int no;char name[12];

    float score[3];

   {s1,*p=&s1;.

   用指针变量p给s1的成员no赋值1234的方法是______。

19.判断文本文件是否结束时使用的符号常量EOF的值是______。

20.设有一个名为″myfile.c″的C程序,

   其主函数为mian(int argc,char *argv[ ])。如果在执行时,输入的命令行为

   myfile aa bb ↙

   则形式参数argc的值是______。

 

三、程序分析题(本大题共5小题,每小题6分,共30分)

阅读下列程序,将输出结果写到各题右侧的空白处

 

21 . 以下程序的输出结果为

main( )

{ int x=12;

float a=3.14159;

printf("%5d##\n",x);

printf("%-5d##\n",x);

printf("%10.6f##\n",a);

printf("%-10.6f##\n",a);

}

 

22. 以下程序输入一个字母,并将它转换为密码。转换规则:将 ‘a’变成‘z’, 将 ‘b’变成‘y’......, 将 ‘Z’变成‘A’, 将‘Y’变成‘B’......。

#include "stdio.h"

main( )

{

char c;

c=;

 

if(c>=‘A’&&c<=‘Z’)

c=;

else if(c>=‘a’&&c<=‘z’)

c=;

 

putchar(c);

}

 

23. 以下函数应用折半查找法从有序(由小到大)数组a中对m进行查找,若找到返回其下标值,否则返回-1。

int binary(int a[10],int m)

{

int low = 0, high = 9, mid;

while(low <= high);

{

mid= ;

if(m ==a[mid]) return (mid);

else if(m < a[mid]) ;

else ;

}

return(-1);

}

 

24. 以下程序对一个3×3的矩阵进行行列互换。

main( )

{

int i,j,temp;

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

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

for( ; j<3; j++)

temp=a[i][j],,;

 

printf("\n the rusult array is:\n");

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

{

printf("\n");

for(j=0;j<3;j++)

printf("%5d",a[i][j]); }

}

}

 

25. 以下程序使用递归的方法求两个数的最大公约数。

int GYS(int m,int n)

{ if(n==0)return m ;

elsereturn );

}

 

void main()

{ int m,n;

printf("Please enter Number m and n:(m、n>0))\n");

scanf("%d,%d",&m,&n);

printf("GYS(%d,%d)=%d\n",m,n,);

}

 

四、程序填充题(本大题共3小题,每小题6分,共18分)

26.将十个整数输入数组,求出其平均值并输出。

   main( )

   {

int i,a[10],sum=0,*p=_________________;   /*第一空*/

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

    {

scanf(″%d″,p);

sum+=________________;   /*第二空*/

}

    printf(″%8.2f\n″,_____________________);   /*第三空*/

}

27. 以下程序输入一行字符,并将其转换为密码。转换规则:将字母A变成字母E,即变成其后的第4个字母;W变成A,z变成d。所有字母按上述规律转换,非字母字符不变。

#include "stdio.h"

main( )

{

char c;

while( !=’\n’)//第1空

{

if()//第2空

c+=4;

else if(c>=‘W’&&c<=‘Z’|| c>=‘w’&&c<=‘z’)

;//第3空

putchar(c);

}

}

28. 以下函数copy将字符数组p1中的元音字母复制到字符数组p2中。。

void copy(char p1[],char p2[])

{

int i=0,j=0;

char c;

 

while((c=)//第1空

if(c=='a' || c=='A' || c=='e' || c=='E' || c=='i' || c=='I'

|| c=='o' || c=='O' || c=='u' || c=='U' )

;//第2空

 

;//第3空

}

 

五、  程序设计题(第26小题10分,共12分)。

26.生成Fibonacci数列的前20项并输出,其中

fi=