文档库 最新最全的文档下载
当前位置:文档库 › 哈工大C语言试题

哈工大C语言试题

哈工大C语言试题
哈工大C语言试题

哈尔滨工业大学(威海)2008/2009秋季学期

C 语言程序设计 笔试试题(A 卷)

题号 一

笔试(70%) 平时 (30%) 总分

分数

试卷说明: 1. 卷面总分100分,取卷面成绩的70%计入总分;

2. 选择题、填空题与写运行结果题必须在答题卡内答题;

3. 答题时禁止拆开试卷钉,背面即为草稿纸;

4. 答题时间105分钟。

一、单项选择题(本题16分,每小题2分)

题号 1 2 3 4 5 6 7 8 答案

C

D

C

D

C

C

D

B

1. C 语言源程序文件经过C 编译程序编译连接之后生成一个后缀为______的文件。

A) .c B) .obj C) .exe D) .cpp 2. 表达式 !(x>0||y>0) 等价于_____。

A) !x>0||!y>0 B) !(x>0)||!(y>0) C)!x>0&&!y>0 D) !(x>0)&&!(y>0) 3. 已知函数的调用形式:fread(buffer, size, count, fp); 其中buffer 代表的 是( )。

A) 一个整型变量,代表要读入的数据项总数 B) 一个文件指针,指向要读入的文件

C) 一个指针,指向要存放读入数据的地址 D) 一个存储区,存放要读入的数据项 4. 以下不能正确定义二维数组的选项是

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

C) int a[2][2]={{1},2,3}; D) int a[2][]={{1,2},{3,4}}; 5. 以下程序的输出结果是 _____。

main() {

char ch[3][5]={"AAAA","BBB","CC"};

printf("\"%s\"\n",ch[1]);

}

A) \"AAAA\" B) \"BBB\" C) "BBB" D) "AAAA"

学 名 姓

教研室主任签字: 注意行为规范 遵守考试纪律

6. 对y在[3,23]和[100,200]范围内为真的确表达式为_____。

A) (y>=3)&&(y<=23)&&(y>=100)&&(y<=200)

B) (y>=3)||(y<=23)||(y>=100)||(y<=200)

C) (y>=3)&&(y<=23)||(y>=100)&&(y<=200)

D) (y>=3)||(y<=23)&&(y>=100)||(y<=200)

7. 设有如下结构定义:

struct addr

{

char name[30]; char street[40];

char city[20]; char office[30];

char phone[10]; int age;

} stud;

若用printf(“%s\n”,…)访问该结构中name值的正确方法是____。

A) stud->name B) &https://www.wendangku.net/doc/ce2803608.html, C) stud.&name D) https://www.wendangku.net/doc/ce2803608.html,

8. 若变量已正确定义并赋值,表达式______不符合C语言语法。

A) a*b/c; B) 3.14%2 C) 2, b D) a/b/c

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

1. 设变量定义为:int s[ ]="hello\nworld\n";,则数组s中有______个元素。

2. 设变量定义为:int a[2]={1,3}, *p=&a[0]+1;,则*p的值是_____。

3. 表达式!!8的值是______。

4. 下列程序段的输出结果是_____。

#define MIN(x,y) (x)<(y)?(x) : (y)

printf("%d",10*MIN(10,15));

5. 设a为整型变量,初值为12,执行完语句a+=a-=a*a后,a的值是_____。

6. 下列程序的输出结果是_____。

#include

main()

{

printf("%d",8>7?6:5>4?3:2);

}

7. 下列程序段的输出结果是_____。

char *st[ ]={"abcd","efgh","ijkl","mnop"};

printf("%s", *(st+1)+1);

8. 下列程序段的输出结果是_____。

int *p, *q, k = 1, j=10 ;

p=&j; q = &k ; p = q ; (*p)++;

printf("%d",*q);

9. 下列程序的输出结果是_____。

#include

main()

{ int c=35;

printf("%d\n",c&(c+1));

}

10. 下列程序的输出结果是_____。

#include

main()

{ int a[2][3],(*p)[3];

int k=0,j;

p=a;

for(;k<2;k++)

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

*(p[k]+j)=(k+1)*(j+1);

printf("%d\n",*(p[1]+2));

}

三、请写出下列程序运行的输出结果。

用“□”表示空格(本题24分,每小题3分)1.#include

main()

{

int x,y=1,z=10;

x=1;

if(z<0)

if(y>0) x=3;

else x=5;

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

if(z=y<0) x=3;

else if(y==0) x=5;

else x=7;

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

printf("z=%d\n",z);

}

2.#include

int f(int m)

{

static int k=0;

int s=0;

for(;k<=m;k++)

s++;

return s;

}

main( )

{

int s1, s2;

s1=f(5);

s2=f(5);

printf("%d %d\n", s1, s2); }

3.#include

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)); }

4. #include

int i=5;

main()

{

int i=3;

{

int i=10;

i++;

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

}

f1();

i+=1;

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

}

int f1(void)

{

i=i+1;

return(i);

}

5. #include

#include

main()

{

char st[20]= "hello\0\t\\c";

printf("%d %d\n",strlen(st),sizeof(st)); }

6. #include

main()

{

char *s[]={"one","two","three"},*p;

p=s[1];

printf("%c,%s\n",*(p+1),s[1]);

}

7. #include

main( )

{

char s[20]="I like it",t[20]="Are you?";

int i=0;

while(s[++i]!='\0')

t[i]=s[i];

t[i]='\0';

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

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

}

8.#include

main( )

{

int a,b,s=0;

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

{

if(b>=20) break;

if(b%3==1)

{

b+=3; continue;

}

b-=5;

}

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

}

四、请阅读下列给出的程序,并根据程序的功能

改正程序中的错误(本题12分)

注意:不得增行或删行,不得更改程序结构。

请修改以下的简单计算器程序,使得:

(1)能进行浮点数的算术运算;

(2)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:Do you want to continue(Y/N or y/n)?

如果用户输入Y或y时,程序继续进行其它算术运算,否则程序才退出运行状态。

#include

#include

main()

{

int data1, data2; /*将int 修改为float */

char op,reply;

do

{

printf("Please enter the expression:\n");

scanf("%f%c%f", &data1,&op,&data2);

switch (op)

{

case +: /*应为'+'*/

printf("%f+%f=%f\n",data1,data2,data1+data2);

break;

case -: /*应为'-'*/

printf("%f-%f=%f\n",data1,data2,data1-data2);

break;

case *: /*应为'*'*/

printf("%f*%f=%f\n",data1,data2,data1*data2);

break;

case /: /*应为'/'*/

if(fabs(data2)<=1e-7)

printf("Division by zero!\n");

else

printf("%f/%f=%f\n",data1,data2,data1/data2);

break;

default:

printf("Unknown operator! \n");

}

printf("Do you want to continue(Y/N or y/n)?");

scanf("%c", &reply); /*%c应为%1s */

}while(reply='Y'&&reply='y') /*应为(reply == 'Y' || reply == 'y');&&应为||*/

printf("Program is over!\n");

}

五、请用标准程序流程图描述下列问题的算法

(本题8分)

请向计算机输入a,b,c三个值,经过程序处理后,要求输出其中最大的一个。

六、请设计并编写求解下列问题的程序

(本题20分)

注意:非计算机专业做第1、2题,计算机专业做第1、3题。1.输入30个整数,统计出其中正整数个数,负整数个数及0的个数,并分别求出所有负整数与所有正整数的和,最后求出全部数字绝对值之和。(本小题10分)

2. 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索定义一个函数求出车号。(本小题10分)

3.27人围成一个圈,从第1个人开始顺序报号,凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号(用链表方式实现)。(本小题10分)

相关文档