一、单项选择题2. 下面程序输出的结果是
main()
{ struct cmplx
{ int x;int y;} cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
A B C D
D
[解析] 本题主要考查的知识点为结构型变量的赋值。
[要点透析] cnum[0].y为3,cnum[0].x为1,cnum[1].x为2,故3/1*2=6。
8. 现有下列程序语句,执行后的结果是
#include<stdio.h>
void main()
{char s1[100]="123",s2[100]="qwer";
puts(s1);puts(s2);
printf("%s%s",s1,s2);
}
- A.123 qwer
123 qwer - B.123
qwer
123qwer - C.123qwerl23qwer
- D.123qwer
123qwer
A B C D
B
[解析] puts()函数的作用是输出字符数组中存放的字符串,并在输出完成后回车换行。
9. 以下程序的输出结果是(已知字母a的ASCⅡ值比字母A的ASCⅡ值大32)
main()
{int i;
for(i='A';i<'I';i++,i++)
printf("%c",i+36);
}
- A.DEGIK
- B.egik
- C.EGIK
- D.degik
A B C D
B
[解析]
main()
{int i;
for(i='A';i<'I';i++,i++)/*i的初始值为字母A的ASCⅡ值,循环条件为i<'I',步进值为2*/
printf("%c",i+36);/*ASCⅡ值加36后已进入小写字母区域*/
}
14. 阅读程序
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。
二、填空题1. 一个字符型变量所占内存的字节数是______。
2. 若全局整型变量未初始化,则默认的初始值是______。
3. 按文件中数据存放的格式,可以把磁盘文件分为______和文本文件。
4. C语言程序的注释可以出现在程序中的任何地方,它总是以______符号作为开始标记。
5. 可以将被调函数中获得的值返回给主调函数的语句是______。
6. 表示条件"10<x<100或x<0"的c语言表达式是______。
7. 设int a=10;,则执行语句a+=a-=a+a;后a的值是______。
8. 若函数内定义变量的存储类别是static,该变量被称为______静态变量。
9. 文件包含命令是以______为开头的编译预处理命令。
10. 在执行循环结构或switch结构时,能够立即退出该结构的语句是______。
三、程序分析题1. 若输入3个整数3,2,1<回车>则下面程序的输出结果是
#include<stdio.h>
main()
{int i,n,aa[10]={0,0,0,0,0,0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);
for(i=0;i<=n;i++)
printf("%d",aa[i]);
}
0000
[解析]
#include<stdio.h>
main()
{int i,n,aa[10]={0,0,0,0,0,0};
scanf("%d%d%d",8n,&aa[0],&aa[1]);/*输入时因格式不匹配而导致n,aa[0],aa[1]三个变量只有n获得值3*/
for(i=0;i<=n;i++)
printf("%d",aa[i]);
}
2. 请在该程序段右侧写出其输出结果。
int aa[3][3]={{2},{4},{6}};
main()
{int j,*p=&aa[0][0];
for(j=0;j<2;j++)
{if(j==0)
aa[j][j+1]=*p+1;
else++P;
print(("%d",*p);}
}
23
[解析]
int aa[3][3]={{2},{4),{6}};
main()
{int j,*p=&aa[0][0];
for(j=0;j<2;j++)
/*限定循环只有两次,j=0一次、j=1一次*/
{if(j==0)
/*第一次执行循环时,j==0成立*/
aa[j][j+1]=*p+1;
/*将"3"赋给"a[0][1]"*/
else++P;
/*第二次执行循环时,j==0不成立,执行这个语句*/
printf("%d",*p);}
/*两次循环都执行,第一次打印a[0][0]第二次打印a[0][1]。*/
}
3. #inclucde<stdio.h>
void prly(int*x)
{prinlf("%d\n",++*x);}
main()
{int a=25;
prty(&a ):
printf("%d\n",a ):
}
26
[解析]
#include<stdio.h>
void prty(int*x)
{printf("%d",++*x);}/*打印输出指针变量x所指向的内存单元的数据自增1后的值*/
main()
{int a=25;
prty(&a ):
printf("%d\n",a );/*打印输出此时变量a的值。注意main()函数对函数prty()的调用所采用的参数传递方式是地址传递方式;即a的值会被函数prty()改变*/
}
4. 在C盘中有一个名为temp.txt的文本文件。
#include <stdio.h>
#include <stdlib.h>
main()
{ int i,n;
FILE*fp;
if((fp=fopen("c:\\temp.txt","w+"))==NULL)
{ printf("can not set the temp file\n");exit(0);}
for(i=1;i<=10;i++)fprintf(fp,"%3d",i);
for(i=0;i<5;i++)
{ fseek(fp,*6L,SEEK_SET);
fscanf(fp,"%d",&n);
printf("%3d",n);
}
fclose(fp);
}
四、程序填充题1. 将一个十进制整数转变成一个二进制整数。
#include<stdio.h>
main()
{int i=0.j,n,num[20];
scanf("%d",______);/*第一空*/
while(n!=0)
{num[i++]=______;/*第二空*/
n=______;)/*第三空*/
for(j=i-1;j>=0;j--)
printf("Ha",num[j]);
printf("\n");
}
&n/*第一空。从键盘上输入十制数n*/
n%2/*第二空。取余数填补低位*/
n/2/*第三空*。为下一次循环进行更高的一位运算做准备/
2. 求数组a的所有元素之和。
#define N 3
void main()
{
int i,j,sum=0;
int a[N][N]={2,4,6,8,10,12,14,16,18};
for(i=0;i<N;______) /*第一空*/
for(j=0;______;j++) /*第二空*/
sum=sum+______; /*第三空*/
printf("sum=%d\n",sum);
}
第一空:i++
第二空:j<N(或j<3)
第三空:a[i][j]
3. 将10个数输入数组中,求出其中最大数和最小数并输出。
#include<stdio.h>
main()
{
int i,max,min,a[10];
for(i=0;i<10;i++)
seanf("%d",______);/*第一空*/
max=a[0]:
min=a[0];
for(i=1;______;i++)/*第二空*/
if(a[i]>max)
max=a[i];
else if(a[i]<min)
______;/*第三空*/
printf("max=%d,min=%d",max,min);
}
&a[i]/*第一空。给数组的元素输入内容*/
i<10/*第二空。循环并逐项比较*/
min=a[i]/*第三空。min获得相对较小值*/
五、程序设计题1. 求出10到500之内能同时被3、7整除的数,并输出;然后求出其和值。
[解析]
#include<stdio.h>
main()
{int i,sum=0;
for(i=10;i<=500;i++)/*限定处理范围为10~500*/
if((i%3)==0&&(i%7)==0)/*判断是否能同时被3、7整除*/
printf("%d\t",i),sum+=i;/*输出该数并累加*/
printf("\nsum=%d\n",sum);/*输出和值*/
}
2. 在一个二维数组(定义为int a[5][5];)中形成并按下列形式输出矩阵各元素的值。
1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
main()
{
int i,j,a[5][5]
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i<j)a[i][j]=0;
else a[i][j]=i-j+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)printf("%5d",a[i][j]);
printf("\n")
}
}