一、单项选择题2. 有以下程序( )
main()
{int i,n=0;
for(i=2;i<5;i++)
{do
{if(i%3)continue;
n++;
}while(!i);
n++;
}
printf("n=%d\n",n);
}
程序执行后的输出结果是
A B C D
C
[解析]
main()
{int i,n=0;
for(i=2;i<5;i++)/*i初始值为2,循环执行条件为i<5,步进值为1*/
{do
{if(i%3)continue;/*当i%3的值非0时,跳过下面语句直接执行while判定*/
n++;/*当i%3的值为0时,执行本行语句后再执行while判定。整个运算过程中,本语句仅被执行1次*/
}while(!i);/*当i的值为0时执行第二次do-while循环*/
n++;/*此行为for循环体内语句,被执行3次*/
}
printf("n=%d\n",n);/*本程序段变量n共执行自加1运算4次,故n的值为4*/
}
10. 执行以下程序段后s的值为
int a[]={5,6,4,4,8,9,5,8};
int s=0;
int k;
for(k=0;k<8;k+=2)
s+=*(a+k):
A B C D
B
[解析] int a[]={5,6,4,4,8,9,5,8};
int s=0:
int k;
for(k=0;k<8;k+=2)/*步进值为2,k=8时循环终止*/
s+=*(a+k);/*s的值是a[0]、a[2]、a[4]、a[6]的和*/
12. 以下程序输出的结果是
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。
二、填空题1. 执行语句"int s=0,n=5;while(--n)s+=n;"后,变量s、n值依次为______。
100
[解析] 循环体"while(--n)s+=n;"连续执行直到n等于0时为止。
2. 若已知a=6,b=8,则表达式!a<b的值为______。
3. 数组int arry[5][9];的第二维下标的最大值是______。
4. 指针变量的使用主要有两种,一是______;二是引用所指向的变量。
5. 高级语言编写的程序被称为______,它是不能在计算机上直接运行的,必须将其翻译成二进制程序后才能执行。
6. 若有以下定义:double w[10],则w数组元素下标的上限为______。
7. 设i,j,k均为int型变量,则执行下面的for循环后,k的值为______。
for(i=0,j=10;i<=j;i++,j--)k=i+j;
8. 设int n;,执行for(n=0;n==0;n++)n=0;后,循环体被执行的次数是______。
9. 字符串"A"在内存中占用的字节数是______。
10. 设char s[20]="My";,则执行strcat(s,"Sun!")后s的内容是______。
三、程序分析题1. main()
{ int i=1,j=4,k=7;
do {if(i%j==0)
if(i%k==0)
{printf(“%d\n”,i);
break;}
i++;
}
while(i!=0);
2. main()
{inta=1,b=2,c=3;
if(a<=c )
if(b==c )printf("a=%d\n",a );
else printf("b=%d\n",b );
printf("c=%d\n",c );
}
3. #include<stdio.h>
void fun(int m,int n,int ar[][4],int*bar)
{
int i,j,x;
for(i=0;i<3;i++)
{x=ar[i][0];
for(j=0;j<3;j++)
bar[i]=X;
}
}
main()
{int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1)},b[3],i;
fun(3,4,a,b );
for(i=0;i<3;i++)printf("%4d",b[i]);
printf("\n");
}
12 19 3
[解析]
#include<stdio.h>
void fun(int m,int n,int ar[][4],int*bar)/*定义函数并定义其形参变最,其中数组ar是一个每行只有4个元素的数组*/
{
int i,j,x;
for(i=0;i<m;i++)
{x=ar[i][0];
for(j=0;j<n;j++)
bar[j]=x;
}
}
main()
{int a[3][4]="12,41,36,28},{19,33,15,27},{3,27,19,1}),b[4],i;
fun(3,4,a,b );
for(i=0;i<3;i++)printf("%4d",b[i]);/*采用格式化输出,以4位的宽度输出褴数b[i],左边不是的位数以空格填充*
printf("\n");
}
4. #include<stdio.h>
int fun(int h)
{static int a[3]={1,2,3);
int k;
for(k=0;k<3;k++)a[k]+=a[k]-h;
for(k=1;k<3;k++)printf("%d\t",a[k]);
return(a[h]);
}
main()
{int t=1;fun(fun(t));}
3 5 3 7
[解析]
#include<stdio.h>
int fun(int h)
{static int a[3]={1,2,3};/*定义一个静态数组a。每次使用其元素退出后,值都会被保留*/
int k;
for(k=0;k<3;k++)a[k]+=a[k]-h;
for(k=1;k<3;k++)printf("%d\t",a[k]);
return(a[h]);
}
main()
{int t=1;fun(fun(t));)
}
四、程序填充题1. 以下程序的功能是:从键盘输入若干个学生的成绩,统计出最高成绩和最低成绩,当输入负数时结束输入。
#include<stdio.h>
main()
{float x,amax,amin;
scanf("%f",&x);
amax=x:
amin=x;
while
/*第一空*/
{if(______)amax=x;/*第二空*/
if(x<amin)______;/*第三空*/
scanf("%f",&x);
}
printf("amax=%3.2f,amin=%3.2f\n",amax,amin);
}
x>=0/*第一空。决定输入终止的条件*/
x>amax/*笫二空。比较x与max的大小,并使amax获得最大值*/
amin=x/*第三空。比较x与amin的大小,并使amin获得最小值*/
2. 下列程序的功能是寻找二维数组中的鞍点,找到则输出其行、列下标;找不到则输出“no!”,请填空。提示,鞍点是指行上最大、列上最小的数组元素。
main()
{ int a[3][5],i,j,k,max_j,flag;
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",______);
for(i=0;i<3;i++)
{ max_j=0;
for(j=0;j<5;j++)
if(a[i][max_j]<a[i][j])______;
flag=1;
for(k=0;k<3;k++)
if(a[k][max_j]<a[i][max_j])
{ flag=0;break;}
if(flag==1)______;
}
if (flag==1)
printf("%d,%d\n",i,max_j);
else
printf("no! \n");
}
3. 函数fun用于计算数组各元素值的平方,主函数调用fun并输出各元素的值。
void fun(int num,int a[])
{int i;
for(i=0;i<______;i++)a[i]=a[i]*a[i]; /*第一空*/
}
main()
{
int i,b[5]={1,2,3,4,5);
fun(5,______); /*第二空*/
for(i=0;i<5;i+++)printf("%5d",______); /*第三空*/
printf("\n");
}
五、程序设计题1. 建立一个磁盘文件,文件名由键盘输入,文件内容也由键盘输入。文件内容的输入以"*"作为输入结束标志。
#include<stdio.h>
#include<stdlib.h>
main()
char ch,fname[20];
FILE *fp;
scanf("%s",fname);
if((fp=fopen(fname,"w"))==NULL)/*如果fp为空则创建文件失败*/
{
printf("Can not open the file required.");
exit(0);
}
ch=getchar();
while(ch='*')
{
fputc(ch,fp);
putchar(ch);
eh=getchar();
}/*对文件输入内容*/
fclose(fp);/*关闭文件*/
}
2. 从键盘输入100个整数,计算并输出大于等于零的数的平均值(保留小数点后两位)。
#include<stdio.h>
#define N 100
main0
{int a[N],i.n=0;
float sum=0,aver;
for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N;i++)
if(a[i]>=0)
{
sum=sum+a[i]:
n++;
}
if(n==0)printf("All numbers are negative!\n");
else
{aver=sum/n;
printf("aver=%7.2f\n",aver);
}
}