C语言笔试题带答案 下载本文

(10)下面程序执行后输出的结果是 【10】 。

int m=13:

int fun(int x,int y)

{ int m=3;

return(x*y-m);

}

main()

{ int a=7,b=5;

printf(”%d\n”,fun(a,b)/m);

}

答案:【10】2

评析:本题变量m既是外部变量(值是13),又是fun函数的局部变量(值为3)。函数fun(x*y-m)的值为7*5-3=32,在main函数中,ftm(a,b)/m中的m应取外部变量的值13,因此输出2。

(11)下列程序执行后输出的结果是 【11】 。

main()

{ nt arr[10],i,k=0;

for(I=0;i

for(I=1;i<4;i++)k+=arr[i]+i;

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

}

答案:【11】12

评析:本题的第一个fur循环用于给数组arr赋初值,第二个for循环用于求和运算。由于第二个fur循环初始值为1,而循环条件为i<4,所以求的是art[1]到arr[3]及i的和,所以输出结果为12。

(12)下列程序执行后输出的结果是 【12】 。

struct s

{int x,y;}data[2]={10,100,20,200};

main()

{

struct s*p=data;

printf(”%d\\n”,++(p->x));

}

答案:【12】11

评析:程序中结构体数组data首地址(即&data[0])赋值给结构体指针变量p,++(p->x)表示先将p所指向的结构体变量的成员x值加1,然后将此x(即data[01.x]输出。

(13)下面程序有两个printf语句,如果第一个printf语句输出的是194,则第二个print语句的输出结果是 【13】 。

main()

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

p=a;

printf(”%X\n”,p);

printf(”%x\n”,p+9);

}

答案:【13】la6

评析:对于指针变量的运算,就是对地址的运算。本题中由于指针指向的是整型变量,所以,使指针变量移动9个位置也就是移动18个字节。注意,本题是以16进制输出的。

(14)以下函数的功能是计算s=l+l/2!+l/3!+…+l/n!,请填空.

double fun(int n)

{ double s=O.O,fac=1.O;

int i,k=1;

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

{ 【14】 ;

fat=fat/k;

s=s+fac;

}

}

答案:【14】k=k*i

评析:本题中通过for循环求s表达式中每一项的和,表达式“fac=fac/k;”求的是每一项的值,所以k的值应为n!,在求n!的时候,可以用上次循环阶乘的值乘i,就可以直接得此次n!,故本题填k=k*i。

(15)下面程序的运行结果是 【15】 。

main()

{ unsigned a=0112,x;

x=a>>3:

printf(”x=%o”,x);

}

答案:【15】x=11

评析:在对无符号数的右移是高位补0。

(16)函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。

void delete(char s[],int i,int n)