诚信保证
本人知晓我校考场规则和违纪处分条例的有关规定,保证遵守考场
规则,诚实做人。
本人签字:
编号:
西北工业大学考试试题(卷)
2007-2008 学年第 2 学期
成
绩
开课学院 计算机学院
课程
C 程序设计语言
考试日期
考试时间 2 小时
考试形式(
学时 48
开
A
B
)(
)卷
闭
考生班级
学 号
姓 名
注意:所有答案必须写在答题纸上,否则不予计分!
一、选择题(每小题 2 分,共 20 分)
1. 若 int a[2][3]={0,2,4,6,8,10};以下描述不正确的是(
)。
A、*(a+1)为元素 6 的地址
B、*(a[1]+1)的值为 2
C、**(a+1)+2 的值为 8
D、a[0]与 a 相同
2. 下列描述不正确的是(
)。
A、由 main 函数及其参数 argc 和* argv[]可以实现命令行方式
B、使用 fclose 时,先写缓冲区数据到文件,再释放文件指针
C、字符数组并不要求它的最后一个字符是‘\0’
D、‘A’和“A”都是字符串常量
3. 关于 c 表达式 5||(a=b+c)==3 的值,正确的说法为(
)。
A、值为 1
C、值为 0
B、值为 5
D、不能确定
4. 若整型变量 a 的值为 50,则 c 表达式 a>>2 的值为(
)。
A、50
C、12.5
5. 以下程序的输出结果是(
B、25
D、12
)。
main( ){ int a=011;printf(“%d\n”,++a);}
A、12
B、11
C、10
D、9
注:1. 命题纸上一般不留答题位置,试题请用小四、宋体打印且不出框。
2. 命题教师和审题教师姓名应在试卷存档时填写。
共 9 页
第 1 页
西北工业大学命题专用纸
6. 以下程序的输出结果是(
)。
#define ADD(x) (x)+(x)
main(){int a=4,b=6,c=7,d=ADD(a+b)*c;printf(“d=%d”,d);}
A、d=70
B、d=140
C、d=280
D、d=80
7. 如果有 char a[5],*p=a;则下面正确的赋值语句是(
)。
A、p=“abcd”;
C、*p=“abcd”;
B、a=“abcd”;
D、*a=“abcd”;
8. 若有以下程序段,则值为 6 的表达式是(
)。
struct st{ int n;struct st *next;};
static struct st a[3]={5,&a[1],7,&a[2],9,‘\0’},*p;
p=&a[0];
A、p++->n
B、p->n++
C、(*p).n++
D、++p->n
9. 下列对字符串的定义中,错误的是(
)。
A、char str[]="FORTRAN";
B、char str[7]="FORTRAN";
C、char *str="FORTRAN";
D、char str[]={’F’,’O’,’R’,’T’,’R’,’A’,’N’,0};
10. 在下面的语句中:只有一个在功能上与其他三个语句不等价(其中 s1 和 s2 表示某个
C 语句),这个不等价的语句是(
)。
A、if (a) s1; else s2;
B、if (!a) s2; else s1;
C、if (a==0) s1; else s2;
D、if (a!=0) s1; else s2;
二、写出下列表达运算后 a 的值,设 a,b 均为 int ,每个表达式运算前均有 a=2,b=3。
(10 分)
(1) a+=b*5
(2) a=b++
(3) a%=(a%=b)
(4) a=a>b&&b>a||a
(5) a=!b<a&&!a<b
三、阅读程序,并完成题目要求(共 20 分,每题 5 分)。
1. 写出下列程序的运行结果。
教务处印制
共 9 页
第 2 页
西北工业大学命题专用纸
#include
void invert(int *s,int i,int j);
void main( )
{
int a[6]={10,6,23,-90,0,3},i;
invert(a,0,5);
for(i=0;i<6;i++) printf("%d,",a[i]);
printf("\n");
}
void invert(int *s,int i,int j)
{
int t;
if(i
#include
int f1(int a)
{
int b=0;
static int c=3;
b+=1;
c++;
return(a+b+c);
}
void main()
{
int a=1,i;
char s1[10]="java",s2[10]="basic",s[10];
for(i=0;i<3;i++) printf("%d ",f1(a));
printf("\n");
if(strcmp(s1,s2))
{
strcpy(s,s1);
puts(s);
}
教务处印制
共 9 页
第 3 页
printf("%d,%s\n",strlen(s2),strcat(s2,s1));
西北工业大学命题专用纸
}
3.写出下列程序的运行结果。
#include
#define MAX 100
void main()
for(i=0;i<=m;i++)
for(i=k;i<=m;i++)
for(j=i-k;j<=i-1;j++) f[i]+=f[j];
printf("%d%5d%5d\n",k,m,f[m]);
{ int f[MAX],i,j,k=2,m=5;
f[i]=1; f[k-1]=2;
}
4、下面的程序构造一个有向图,请画出其示意图。
#include
struct node
{
int key;
struct node *left,*right,*up,*down;
};
int main (int argc ,char * argv [])
{
int i;
struct node nodes[5];
for( i=0;i<5;i++)
{
nodes[i].key=i;
nodes[i].left=NULL;
nodes[i].right=NULL;
nodes[i].up=NULL;
nodes[i].down=NULL;
}
nodes[0].left=nodes+1;
nodes[1].left=nodes;
nodes[1].up=nodes+2;
nodes[2].down=nodes+3;
nodes[3].right=nodes+4;
nodes[4].up=nodes;
nodes[4].down=nodes+1;
return 0;
}
四、在下面 4 个程序中,共有 16 处错误(包括语法错误和逻辑错误),只要找出其
中的 15 处错误并改正之即可,多找不多加分。(30 分,每找对 1 个错误,加 1 分,
每修改正确 1 个错误,再加 1 分。)
1.下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分
开。[提示:判断是否有新单词出现的方法是------当前被检验的字符不是空格,而前一被检验
字符是空格,则表示有新单词出现。]
教务处印制
共 9 页
第 4 页
西北工业大学命题专用纸
#include
#define ARR_SIZE 80;
void main()
{
char str[ARR_SIZE];
int i, num;
gets(str);
if (str[0] != ' ')
else
for(i = 1 ; str[i] != '\0'; i++)
num = 0;
num = 1;
if(str[i]!=' ' && str[i-1]=' ')
num++;
printf("num=%d\n", num);
}
2.在一个 3x4 矩阵中找出最大数及最大数所在元素的下标。
#include
#define M 3
#define N 4
int FindMax(int (*)[N], int, int,int *, int *)
void main()
{
int score[M][N], i, j, maxScore, row, col;
for ( i=0; i max ) {
max = *(*(p+i)+j) ;
*pRow = i;
教务处印制
共 9 页
第 5 页
西北工业大学命题专用纸
*pCol = j;
}
}
}
}
3.以下程序用于打印输出结构体数组的所有元素。
#include
struct s
{
char name[10];
int age;
}
void main()
{
struct s a[3] = {"John",19,"Paul",17,"Marry",18};
int *p;
for(p = a; p < 3; p++)
printf("%s,%d\n", p->name, p->age );
}
4.该程序的作用是将一个字符串 str2 连接到字符串 str1 后,然后输出连接后的字符串 str1。
#include
void Link(char s[],char c[]);
void main()
{
char str1[80], str2[80];
gets(str1);
gets(str2);
Link(str1, str2);
printf("输出连接后的字符串:");
puts(str1);
}
void Link(char s[], char c[]);
{
int i, j;
for(i = 0; s[i] !='\0'; i++);
while(c[j] != '\0' );
{
s[ j ] = c[ i ];
i++;
j++;
}
}
教务处印制
共 9 页
第 6 页
西北工业大学命题专用纸
五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符
合题目要求。(20 分,每空 2 分)
1.求 100~200 间的全部素数。
#include
(1)
void main()
{
int m,k,i,n=0;
for(m=101;m<=200;m+=2)
{
if(n%10==0) printf("\n");
k=sqrt(m);
for(i=2;i<=k;i++)
if(i==
{
if(m%i==0)
(2) ;
(3)
)
printf("%d ",m);
n++;
}
}
}
2. 从键盘输入任一学生的学号,查找该学号是否存在,存在就打印其学号,否则打印没找
到。(注:学号是按升序排列的,班级最多 30 人)
#include
#define ARR_SIZE 30
void Input(long num[], int n );
int Binsearch( long a[ ], int n, long x );
void main()
{
long num[ARR_SIZE], x;
int n, pos;
printf("输入班级实际人数:");
scanf("%d", &n);
Input(num, n);
printf("输入待查找学号:");
scanf("%ld", &x );
pos = Binsearch(num, n, x);
if(pos + 1)
else
printf("NUM=%ld\n ", num[ pos ] );
printf(" Not find!\n ");
}
教务处印制
共 9 页
第 7 页
西北工业大学命题专用纸
void Input(long num[], int n )
{
int i;
for(i=0; i a[mid] ) low = mid + 1;
else if (
(4)
else return mid;
);
(5)
)
}while(
return -1;
high = mid - 1;
}
3. 下面的程序完成字符串的解码处理。解码规则说明如下:
特殊字符串由 A,C,G,U 四个字符组成,如 ACUGCCCAUGAAAAACUUUUGACAC
其有效信息子串从第一次出现“AUG”后开始,遇到“UGA”结束(不包括“AUG”和“UGA”。)
如上面的编码串需解码的有效子串为:AAAAACUUU
有效子串中每 3 个字符(如“AAA”,“CGA”)作为一个密码子(可以保证,有效子串的
长度一定为 3 的整数倍。)可能的密码子(62 种)及相应码值以如下形式放在编码文件 code.txt
中(按密码子字典序排列);
AAA K
AAC N
…………
UUU F
程序对存放在文件中的特殊字符串解码,在屏幕输出解码串。假定:
1、编码文件 code.txt 放在 c 盘根目录下;
2、要解码的特殊字符串以文件形式存放,其串长不超过 1024 字符。
#include
#include
struct
{
char name[4];
char code;
}table[62];
教务处印制
共 9 页
第 8 页