2012级信息学院《C语言程序设计》试卷(闭卷)
一、判断下列语句或程序的对错。(“×”表示错,“√”表示对)(10分) ( 1) char ch=’55’; ( ) ( 2 ) unsinged int a=b=c=5; ( ) ( 3) int a=2,*p; p=&a;
printf(”%d”, *&a); ( ) (4) int a[5][5], (*p)[5]; p=&a[0][0];
(5) char a=’a’,c; c=a++;
(6) int n; scanf(”%d”,&n); int a[n];
(7) int a[10],*p; p=a+2;
(8) int a,b; scanf(”%d,%f”,a,b);
(9) float a=1,*b=&a,*c=&b; (10) char str[]={”World”}; printf(”%c”,*(str+2));
二、计算下列表达式的值(10分) 设 int x=3,y=-4,z=4; float k=3.5;
(1)x++-y+++z (2)y>z||z>2&&x++ (3)x|z&x^z (4)x-y+!z-1&&x+y/2 (5)y+(x/3*(int)(x+k)/2)%4 ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ( ( ( ( ) ) ) ) )
三、改错,根据题意改正下列程序的错误和漏掉的部分(10分) (1)输入球体半径r,求其体积. #include “stdio.h”; define pi=3.1415926; float volume(int r); void mian() { float r,v;
scanf(“%d”, r); v= volume(r);
printf(“%d”,v); }
float volume(int r); {
v=4/3*pi*r*r*r; return v; }
(2)利用指针数组对字符数组中的5个姓名字符串排序,字符数组内容不变。. #include ; void main() {
char name[5][20]; char* p[5];
int i; char temp[20]; for(i=0;i<=5;i++) {
gets(name+i);
p=name[i];
}
for(i=0;i<5;i++) for(j=0;j<5;j++) {
if(p[i]>p[j]) {
temp=p[i]; p[i]=p[j]; p[j]=p[i]; } }
for(i=0;i<5;i++)
printf(“%c”,p[i]); }
四、程序填空(10分)
(1)给出年月日,计算出该日是该年的第几天。 #include void main( ) {int year, month, day, days, i, d; printf(“请输入年,月,日:”); scanf(“%d%d%d”, &year, &month, &day); days=0;
for( i=1; ; i++) {
switch ( ) { case 1: case 3:
case 5: case 7: case 8: case 10: case 12: d=31;
; case 4: case 6: case 9:
case 11: d=30; break; case 2:
if (year%4==0&&year %100 !=0 || year%400==0) d=29; else d=28; break; } }
printf(“%d年%d月%d日是该年的第%d天\\n”,year, month ,day, ;) }
(2)将一个指字符串的正序和反序进行连接,形成一个新串放在另一个字符数组 中。例如:当字符串为\"ABCD\"时,则新字符数组的内容应为\"ABCDDCBA\"。
#include #include void fun (char *s, char *t); void main() {char S[100], T[100];
printf(\"\\nPlease enter string S:\"); scanf(\"%s\ ); fun(S, T);
printf(\"\\nThe result is: %s\\n\}
void fun (char *s, char *t) { int i, d; d = ; for (i = 0; i五、写程序输出结果(25分) (1)#include int a = 1;void func() { }
void main() {
{ int a ; a= x+y;
printf(\"main:x=%d,y=%d, a=%d\\n\" ,x, y ,a); }
}
printf(\"main:x=%d,y=%d, a=%d\\n\" ,x, y ,a); func(); y=a;
printf(\"main: x=%d, y=%d, a=%d\\n\func();
static int x = 2; int y;
static int x=1; int y=2; x = x+1; a = a+2; y = y+a;
printf(\"func: x=%d, y=%d, a=%d\\n\
(2)
#include \"stdio.h\" #define M 10 void main( ) {
int a[M+1]={10,20,30,40,50,60,70,80,90,100}; int i,n,*p,*q; n = 45;
a[M]=n;
for(p=a,i=0;i<=M;i++) {
if(n<=*(p+i))
{
p=p+i; break; } }
for(q=a+M-1; q>=p; q--) {
*(q+1)=*q;
}
*p=n;
for(p=a,i=0;iprintf(\"%d,\} } (3)
#include #include void main() {char ch;
unsigned int i,j,bit,dit,n; long int a[20];
char *str = \"a123x456__7\";
for (i=0,j=0,a[0]=0,bit=1,dit=0; ich=*(str+i);if(ch>='0'&&ch<='9') {
a[j]*=bit; a[j]+=(ch-48); bit=10; dit=1; n=j;
}
else
{
if (dit==1)
{
j++; a[j]=0 ;
} dit=0;
bit=1;
} }
for (i=0;i<=n;i++)
{ } (4)
#includestruct Key {
char *keyword; int keyno; };
void main( )
}
printf(\"a[%d]=%d,\
{
struct Key kd[3] = {{\"are\ struct Key *p; int a; char *str;
p = kd;
str = p->keyword;
printf(\"str = %s\\n\
a = p++->keyno; printf(\"a = %d\\n\
a = p->keyno; printf(\"a = %d\\n\ } (5)
#include #include struct person {char name[20]; int count; }; void main() {
struct person leader[3]={{\"liu\ char name[20] = \"wang\
for(n=0;n<3;n++)
{
if(!strcmp(name,leader[n].name)) {
m = leader[n].count; break; } }
printf(\"count=%d\\n\ for(n=0;n<3;n++)
printf(\"%s:%d\\n\}
六、编写程序(35分)
(1)已知四位数a2b3能被23整除,编程求此四位数。(8分)
(2)一球从100米高度自由落下,每次落地后反弹调回原高度的一半,再落下;求它在第10次落地时,共经过多少米?第10次反弹多高?(8分)
(3)一个公司,有若干名员工,每名员工有姓名,性别,工龄,工资等信息。编程输入并建立员工档案信息,并要求输出工龄大于10年,工资少于3000元的所有男员工信息。(输入和输出过程用不同函数实现)(9分)
(4)输入一行包含若干单词的字符串,单词之间用空格分开,要求按单词长短从小到大的次序排序后形成新的字符串输出。(假定字符串中单词个数不超过10个,字符串输入并形成单词序列,单词排序,形成新串并输出要求用不同的函数实现)(10分)