C语言程设计题目及解答
一、判断题?(14分)
1. 指针就是地址,因此一个变量的指针就是该变量的地址。2分
2. 在语句int *p;和语句printf("%d",*p);中的*p含义相同。2分
3. 指针变量不可以为函数的参数。2分
4. 若指针变量指向一维数组的第一个元素,将指针变量加整数3,即指针后移3个元素。
5. b是一维数组名,数组元素b[1]还可写成*(b++)。2分
6. 在二维数组中,行指针是指向一维数组的指针变量.2分
7. 取地址运算符&与指针运算符*的优先级相同,结合方向为自右向左。2分
二、选择题?(18分)
1.下列程序执行后的输出结果是( )。???[A] 2分
#include
void func(int *a,int b[])
{
b[0]=*a+6;
}
int main()
{
int a,b[5];
a=0; b[0]=3;
func(&a,b);
printf("%d",b[0]);
}
A. 6?????B. 7?????C. 8?????D. 9
2.有如下程序段
int *p,a=10,b=1;
p=&a; a=*p+b;
执行该程序段后,a的值为( )。???[C] 2分
A. 编译出错?????B. 12?????C. 11?????D. 10
3.表达式“c=*p++”的执行过程是()???[A] 2分
A. 复制*p的值给c后再执行p++B. 复制*p的值给c后再执行(*p)++C. 复制p的值给c后再执行p++D. 执行p++后再复制*p的值给c
4.若有float a=2.5,b=6.3, *pa=&a; *pa*=3;pa=&b; 则正确的是( )。???[B] 2分
A. pa的值是2.5 ;?????B. *pa的值是6.3?????C. *pa的值是7.5?????D. pa的值是6.3;
5.下列语句定义p为指向float型变量d的指针,其中正确的是()???[C] 2分
A. float d,*p=d;?????B. float *p=&d,d;?????C. float d,*p=&d;?????D. float d,p=d;
6.若有“float a=1.5,b=3.5,*pa=&a;*pa*=3;pa=&b;”,则正确的是()???[C] 2分
A. pa的值是1.5?????B. *pa的值是4.5?????C. *pa的值是3.5?????D. pa的值是3.5
7.指针变量p1、p2类型相同,要使p2、p1指向同一变量,哪一个语句是正确的()。A] 2分
A. p2=*&p1;?????B. p2=**p1;?????C. p2=&p1;?????D. p2=*p1
8.指出下列语句中正确的是()。??[B] 2分
A. char *p; char s[80]; p=s[0];B. double x,y,*p; x=3.45;p=&x; y=*p;C. int x,*p; *p=x;D. int *p=&a; int a;
9.下面程序的输出是( )。[B] 2分
#include
void ast(int x, int y, int *cp, int *dp)
{ *cp=x+y;
*dp=x-y;
x=*cp+*dp;
y=*cp-*dp;
}
void main()
{ int x,y,c,d;
x=5;y=2,c=8,d=4;
ast(x,y,&c,&d);
printf("%d,%d,%d,%d\n",x,y,c,d);
}
A. 5,2,8,4?????B. 5,2,7,3?????C. 12,4,7,3?????D. 12,4,8,4
三、程序填空题?(38分)
1. 功能:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 10分
#include
int length(char *p)
{
int n;
n=0;
while(*p!='\0')
{
__(1)__;
p++;
}
return n;
}
int main()
{
int length(__(2)__);
int len;
char str[1000];
printf("please input a string:\n");
scanf("%s",str);
len=length(__(3)__);
printf("the string has %d characters.",le