一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的。2. 以下程序输出的结果是
main()
{ int **k,*a,b=50;
a=&b;k=&a;
printf("%d\n",**k);
}
A B C D
B
[解析] 本题主要考查的知识点为指针变量的赋值。
[要点透析] k为指向指针的变量,k指向指针变量a,a指向变量b。最后输出**k的值等价于*a,等价于b,所以输出50。
8. 下面程序的输出是
void prtv(int *x)
{ printf("%d\n",++ *x);}
main()
{ int a=36;
prtv(&a);}
A B C D
C
[解析] 本题主要考查的知识点为指针变量作为形参时的函数调用。
[要点透析] 题中将变量a的地址值作为参数传给形参int*x,++*x即++a,故输出为37。
11. 阅读程序
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);
}
该程序有两个printf语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是
A B C D
D
[解析] 本题主要考查的知识点为指针变量与一维数组的等价关系及地址值的计算。
[要点透析] 输出p为十六进制地址值,由于p为int型,所以p+9相当于p所对应的地址值加18,也就是十六进制数12,194加12为1a6。
二、填空题2. 设有char *a="ABCD",则printf("%c",*a)的输出是______。
3. 函数间传递数据有四种方式:值传递、地址传递、______和全局变量传递。
4. 值传递方式和地址传递方式都是在形参和实参之间传递数据,其区别在于值传递方式所传递的是______。
5. 当一个变量占用连续的若干个字节时,______的地址就是变量的地址。
6. C语言中规定,在程序中表示一维数组首地址的表达式可以写成______,还可写成数组名。
7. 若函数要求返回一个值,则应在函数体中有一条______语句。
8. C程序中允许定义的寄存器变量一般以______个左右为宜。
9. 表达式“tolower(B)”的值是______。
10. 执行下列程序后,*p等于______。
int a[5]={1,3,5,7,9},*p;
p=a;p++;
三、程序分析题1. void main()
{
int i,a[5],*p;
for(i=4;i>=0;i--):*(a+i)=i;
for(p=a;p<a+5;p++)printf("%d\t",*p);
printf("\n");
}
2. void fot(int *p1,int *p2)
{ printf("%d,%d\n",*(p1++),++*p2);}
int x=371,y=269;
main()
{ fot(&x,&y);
fot(&x,&y);}
3. main()
{ int i,a[5],*P=&a[3];
for(i=0;i<5;i++) scanf("%d,",&a[i]); //输入2,3,4,5,6回车
for(;P>=a;P--) printf("%d\n",*P);
}
4. main()
{ int x[3][6]={{1,2,3},{4,5,6},{7,8,9}},(*P)[6]=x,s=0,k;
for(k=0;k<6;k++)
s=s+*(*(p+1)+k);
printf("%d\n",s);
}
四、程序填充题1. 以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符串存入一个字符数组,然后输出该字符数组中的字符串。
main()
{ char str[51],*sptr;
int i;
for(i=0;i<50;i++)
{ str[i]=getchar();if(str [j]=='\n')______;}
str[i]:______;
sptr=str;
while(*sptr)putchar(*sptr______);
}
2. 以下Check函数的功能是将value中的值四舍五入成整数,若计算后的值与num的值相等,则显示“OK”,否则显示计算后的值。
void Check(int num,float value)
{ int val;
val=______;
printf("计算后的值:%d",val);
if(______) printf("\nOK\n");
______printf("\nSorry,the correct answer is %d\n",val);
}
(int)(value*10+5)/10)
num==val
else
3. 以下程序的功能是将无符号八进制数字构成的字符串转换为十进制整数。
#include <string.h>
main()
{ char s[6],*p______;
int n;
gets(p);
n=*p-______;
while(______p!='\0')
n=n*8+*p-'0':
printf("%d\n",n);
}
五、程序设计题1. 编写程序,要求输入两个数,比较大小,输出大数和小数(用指针实现)。
main()
{ int a,b,*p1,*p2,*p;
scanf("%d,%d",&a,&h);
p1=&a;p2=&b;
if(a<b)
{p=p1;p1=p2;p2=p;}
printf("max=%d,min=%d\n",*p1,*p2);
}
2. 在主函数中输入不同大小的实型数组,计算数组中元素的平均值。
float average(float array[],int n)
{ in i;
float sum=0,av:
for(i=0;i<n;i++)
sum=sum+array[i];
av=sum/n;
return av;}
Main()
{ int i;
float score1[6],score2[10],ave;
printf("please input 6 scores for score1:");
for(i=0;i<6;i++)
scanf("%f",&score1[i]);
ave=average(score1,6);
printf("average score is%5.2f\n",ave);
printf("please input 10 scores for score2:");
for(i=0;i<10;i++)
scanf("%f",&score2[i]);
ave=average(score2,10);
printf("average score is%5.2f\n",ave);}