一、 选择题
(1) 若有以下定义:
char a;int b; float c; double d;
则表达式a*b+d-c值的类型为 [ ]
A)float B)int C)char D)double
(2) 表示关系x<=y<=z的c语言表达式为 [ ]
A)(X<=Y)&&(Y<=Z) B)(X<=Y)AND(Y<=Z)
C)(X<=Y<=Z) D)(X<=Y)&(Y<=Z)
(3) 设a=1,b=2,c=3,d=4,则表达式:a>b?a:c>d?a:d的结果为 [ ]
A)4 B)3 C)2 D)1
(4) 设x,y,z,t均为int型变量,则执行以下语句后,x=y=z=2; t=x||y&&z,t的值为 [ ]
A)不定值 B)2 C)1 D)0
(5) 设x和y均为int型变量,则执行下的循环后,y值为 [ ]
for(y=1,x=1;y<=50;y++)
{if(x==10)}break;
f (x%2==1){x+=5;continue;}
x-=3;
}
A)2 B)4 C)6 D)8
(6) 假定a和b为int型变量,则执行以下语句后b的值为 [ ]
a=1;b=10;
do {b-=a; a;} while (b-- >0);
A)9 B)2 C)1 D)-1
(7) 设j为int型变量,则下面for循环语句的执行结果是 [ ]
for(j=10;j>3;j--)
{if(j%4)j--;
--j;--j;
printf("%d ",j);
}
A)6 3 B)7 4 C)6 2 D)7 3
(8) 设有以下宏定义:
#define N 3
#define Y(n) ((N1)*n)
则执行语句:z=2 *(NY(51));后,z的值为 [ ]
A)出错 B)42 C)48 D)54
(9) 设有如下定义:
intarr[]={6,7,8,9,10};
int *ptr;
则下列程序段的输出结果为 [ ]
ptr=arr;
ptr+=2;
printf ("%d,%d\n",*ptr,*(ptr+2));
A)8,10 B)6,8 C)7,9 D)6,10
(10) 以下程序的输出结果是 [ ]
main()
{inti,k,a[10],p[3];
k=5;
for (i=0;i<10;i++)a[i]=i;
for (i=0;i<3;i++)p[i]=a[i*a[i]];
for (i=0;i<3;i)k+=p[i]*2;
printf("%d\n",k);
}
A)20 B)13 C)10 D)12
(11) 执行以下程序段后,m的值为 [ ]
int a[2][3]={{1,2,3},{4,5,6}};int m,*p;
p=&a[0][1]; m=(*p)*(*(p+2))*(*(p+4));
A)45 B)44 C)48 D)46
(12) 有以下程序段
char arr[]="ABCDE";
char *ptr;
for(ptr=arr;ptr<arr+5;ptr++)printf("%s\n",ptr);
输出结果是 [ ]
A)ABCD B)A C)E D)ABCDE
(13) 有以下程序
main()
{intx,i;
for(i=1;i<100;i)
{x=i; if(x%3==0)if(x%5==0)if(x%4==0)printf("%d",i);}
}
输出结果是 [ ]
A)28 B)27 C)60 D)41
(14) 有下列程序
#include<stdio.h>
main()
{union
{int k;
char i[2];
}*s,a;
s=&a;
s->i[0]='9';s->i[1]='8';
printf("%x\n",s->k);
}
输出结果是 [ ]
A)3839 B)3938
C)380039 D)390038
(15)有以下程序
#include <stdio.h>
main()
{inta,b,c=246;
a=c/100%9;
b=(--a)&&(--a);
printf("%d,%d\n",a,b);
}
输出结果是 [ ]
A)2,1 B)0,0 C)4,3 D)2,1
(16)设有如下定义:
int (*ptr)();
则以下叙述中正确的是 [ ]
A)ptr是指向一维组数的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
(17)有以下程序
#include <stdio.h>
structstu
{intnum;
char name[10];
int age;
};
void fun(structstu *p)
{printf("%s\n",(*p).name);}
main()
{
structstu students[3]={{9801,"Zhang",20},
{9802,"Wang",19},
{9803,"Zhao",18}};
fun(students+2);
}
输出结果是 [ ]
A)Zhang B)Zhao C)Wang D)18
(18)设有以下说明和定义:
typedef union
{long i;int k[5];char c;}DATE;
struct date
{intcat;DATEcow;double dog;}too;
DATE max;
则下列语句的执行结果是 [ ]
printf ("%d",sizeof (struct date )+sizeof(max));
A)26 B)30 C)18 D)8
(19)有以下程序
main()
{char a[]="programming",b[]="language";
char *p1,*p2;
int i;
p1=a;p2=b;
for(i=0;i<7;i)
if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));
}
输出结果是 [ ]
A)gm B)rg C)or D)ga
(20)有以下程序
viod fun (int *a,int *b,int *c)
{a=456;b=567;c=678;}
main()
{int x=10,y=20,z=30;
fun (&x,&y,&z);
printf("%d,%d,%d\n",x,y,z);
}
输出结果是 [ ]
A)30,20,10 B)10,20,30
C)456,567,678 D)678,567,456
(21)有以下程序
int fun(intx,inty,int *cp,int *dp)
{*cp=x+y;*dp=x-y;}
main()
{inta,b,c,d;
a=30;b=50;
fun(a,b,&c,&d);
printf("%d,%d\n",c,d);
}
输出结果是 [ ]
A)50,30 B)30,50
C)80,20 D)80,20
(22)有以下程序
main()
{inti,j;
for(j=10;j<11;j++)
{for(i=9;i<j;I++)
if (!(j%i))break;
if(i=j-1)printf("%d",j);
}
}
输出结果是 [ ]
A)11 B)10 C)9 D)10 11
(23)有以下程序
#include "atdio.h"
intabc(intu,intv);
main ()
{int a=24,b=16,c;
c=abc(a,b);
printf('%d\n",c);"
}
intabc(intu,int v)
{int w;
while(v)
{w=u%v;u=v;v=w }
return u;
}
输出结果是 [ ]
A)6 B)7 C)8 D)9
参考答案
(1)D (2)B (3)A (4)C (5)C (6)D (7)D (8)A (9)A (10)C
(11)C (12)D (13)C (14)A (15)B (16)C (17)B (18)C (19)D (20)C
(21)C (22)A (23)C
二、 填空题
(1) 读懂下列程序,并补充完整,符合题意
____1_____
void sort(char (*p)[10],int n)
{inti,j;
char temp[10];
for(i=0; ____2____ ;i++)
for(j=0; ____3____ ;j++)
if( ____4____ >0)
{ strcpy( ____5____ );
strcpy( ____6____ );
strcpy( ____7____ );}}
void main(void)
{int i;
char str[][10]={{"CHINA"},{"AMERICA"},{"FRANCE"},{"RUSSIA"},{"GERMANY"}};
printf("Before sort the strings is:\n");
for(i=0;i<5;i++)
printf("%s\n", ____8____ );
sort(str, ____9____ );
printf("After sort the strings is:\n");
for(i=0;i<5;i++)
printf("%s\n", ____10____ );}
运行结果如下:
Before sort the strings is:
CHINA
AMERICA
FRANCE
RUSSIA
GERMANY
After sort the strings is:
AMERICA
CHINA
FRANCE
GERMANY
RUSSIA
(2)题意:利用筛选法将2到100以内的素数输出
#define M 98
void shax(___①___)
{inti,j;
for(i=0;i<__②__;)
{for(j=i+1;____③____;j++)
if(____④_____)a[j]=0;
i=i+1;
while(a[i]__⑤____)i++;
} }
void main()
{int a[M],*p;
inti,k=0;
for(_____⑥___;i<M;i++)
a[i]=i+2;
shax(a);
____⑦___;
printf("\n");
while(p<a+M)
{while(*p==0)___⑧___;
k++;
if(p<a+M)
if(k%10==0)printf("%5d\n",___⑨___);
else printf("%5d",___⑩____);}}
参考答案
(1)
1、#include <string.h>
2、i<n-1
3、j<n-i-1
4、strcmp(p[j],p[j+1])
5、temp,p[j] 或 5、temp,p[j+1]
6、p[j],p[j+1] 6、p[j+1],p[j]
7、p[j+1],temp 7、p[j],temp
8、str[i] 或 8、str+i
9、5
10、str[i] 或 10、str+i
(2)
1、int a[M]、int *a、int a[]
2、M
3、j<M
4、a[j]%a[I]==0
5、==0
6、i=0
7、p=a
8、p++
9、*p++
10、*p++
三、编程题
用C语言编写一个内旋矩阵。
参考答案
#define N 10
main()
{ int a[N][N];
int n;
inti,j,k,x;
printf("\n Input n:");
scanf("%d",&n);
i=0;j=n-1;k=1;
while (i<=j)
{
for(x=i;x<=j;x++) a[x][i]=k++;
for(x=i+1;x<=j;x++)a[j][x]=k++;
for(x=j-1;x>=i;x--)a[x][j]=k++;
for(x=j-1;x>i;x--)a[i][x]=k++;
i++;
j--;
}
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
}
}