选择题1. 有以下程序:
#include <stdio.h>
main()
{ ┋
while(getchar()!='\n');
┋
}
以下叙述中正确的是______。
- A.此while语句将无限循环
- B.getchar()不可以出现在while语句的条件表达式中
- C.当执行此while语句时,只有按回车键程序才能继续执行
- D.当执行此while语句时,按任意键程序就能继续执行
A B C D
C
[解析] 根据程序顺序执行的次序,当程序执行到while这条语句,根据while语句中的结束循环的条件是“输入回车键时,结束循环”,所以当按回车键后,程序才执行while语句的下一条语句。
3. 有以下程序:
#include<stdio.h>
main()
{ int a,b;
for(a=0;a<3;a++)
{ scanf("%d",&b);
switch(b)
{ default:printf("%d,",b+1);continue;
case 1:printf("%d,",b+1);
case 2:pfintf("%d,",b+1);continue;
}
}
}
执行时输入:1 2 3<回车>,则输出结果是______。
- A.2,2,3,4,4,4,
- B.2,3,4,
- C.2,2,3,4,
- D.2,3,3,4,5,6,
A B C D
C
[解析] continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。在switch...case语句中,如果没有break会导致多个分支重叠。因此,输入1,2,3,则1执行case 1:printf("%d,",b+1);case 2:printf("%d,",b+1);continue;后结束。2则执行case 2:printf("%d,",b+1);continue;3则执行default:printf("%d,",b+1);continue;得到的结果是2,2,3,4。故答案为C选项。
10. 下列能正确定义一维数组的选项是
。
- A.int a[5]={0,1,2,3,4,5};
- B.char a[]={0,1,2,3,4,5};
- C.char a={'A','B','C'};
- D.int a[5]="0123";
A B C D
B
[解析] 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项A)错误;选项 C中定义的是一个字符变量C;选项D)中整型数组a中只能存储整型数据,而不能存储字符串常量“0123”。
15. 有以下程序:
#include <stdio.h>
main()
{ char w[20],a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz"};
int i,j;
for(i=0;i<5;i++)
{ j=0;
while(a[i][j]!='\0') j++;
w[i]=a[i][j/2+1];
}
w[5]='\0';
puts(w);
}
程序运行后的输出结果是______。
- A.ekpuz
- B.agmrw
- C.flqvz
- D.djoty
A B C D
A
[解析] 在for循环中,执行完while语句,j值为字符串数组a的每行字符串的长度,因此w[i]=a[i][j/2+1]是将数组a的元素a[i][j/2+1]的值赋给一维数组w[i],比如i=0;j=6;a[i][j/2+1]=a[0][4]='e',将此值赋给w[0]。循环依次给数组w赋值,最后输出w,答案为选项A。
17. 有以下程序:
#include<stdio.h>
void main()
{ double x=2.0,y;
if(x<0.0) y=0.0;
else if(x<10.0)y=1.0/x;
else y=1.0;
printf("%f\n",y);
}
程序运行后的输出结果是______。
- A.0.000000
- B.0.500000
- C.0.250000
- D.1.000000
A B C D
B
[考点] C基础知识和顺序结构
[解析] 本题考查的是if…else语句的使用。x=2.0,符合第二个if语句的条件x<10.0,所以执行y=1.0/x语句,即y=1.0/2.0(0.500000)。
18. 有以下程序
#include <stdio.h>
main()
{ int x;
scanf("%d",&x);
if(x<=3);else
if(x!=10) printf("%d\n",x);
}
程序运行时,输入的值在哪个范围才会有输出结果______。
- A.大于3且不等于10的整数
- B.不等于10的整数
- C.大于3或等于10的整数
- D.小于3的整数
A B C D
A
[解析] 大于3执行else语句,不等于10,就会输出x的值,所以选择A。
19. 有以下程序:
#include <stdio.h>
int fun(int n)
{ static int t=1; int i=1;
for(;i<=n;i++) t*=i;
return t;
}
main()
{ int t=1,i;
for(i=2;i<4;i++)
t+=fun(i);
printf("%d\n",t);
}
程序的运行结果是______。
A B C D
C
[解析] static变量又称为静态变量,编译时将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。程序执行过程为:主程序中执行for循环,i=2,t=1,调用函数fun(2),定义静态存储类别的局部变量t=1,此变量的作用域为函数fun中,定义局部变量i=1,for循环实现t=1*1*2=2,返回2,主函数中t=1+2=3。i=3,t=3,调用函数fun(3),静态存储类别的局部变量上次调用后结果t=2,局部变量i=l,for循环实现t=2*1*2*3=12,返回12,t=3+12=15。最后输出t为15,选项C正确。
25. 执行以下程序时输入1234567<CR>,则输出结果是______
#include <stdio.h>
main()
{ int a=1,b;
scanf("%3d%2d",&a,&b);
printf("%d%d\n",a,b);
}
- A.12367
- B.12346
- C.12312
- D.12345
A B C D
D
[解析] scanf函数中的格式控制说明为“%3d%2d”,分别选中输入中的3位和2位,因此a=123,b=45。因此正确答案为D)。
27. 有以下程序:
#include<stdio.h>
main()
{struct node{int n; struct node*next; } *p;
struct node x[3]={{2, x+1}, {4, x+2}, {6, NULL}};
p=x;
printf("%d, ", p->n);
printf("%d\n", p->next->n );
}
程序运行后的输出结果是______。
A B C D
B
[解析] 由题干中的函数可知,程序运行后的输出结果为2,4。
28. 有以下结构体说明、变量定义和赋值语句:
struct STD
{ char name[10];
int age;
char sex;
}s[5],*ps;
ps=&s[0];
则以下scanf函数调用语句有错误的是______。
- A.scanf("%s",s[0].name);
- B.scallf("%d",&s[0].age);
- C.scanf("%c",&(ps->sex));
- D.scanf("%d",ps->age);
A B C D
D
[解析] 本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。
32. 有以下程序:
#include <stdio.h>
main()
{ FILE *fp;
int i,a[6]={1,2,3,4,5,6},k;
fp = fopen("data.dat","w+");
fprintf(fp, "%d\n", a[0]);
for (i=1; i<6; i++)
{ fseek(fp, 0L, 0);
fscanf(fp, "%d", &k);
fseek(fp, 0L, 0);
fprintf(fp, "%din", a[i]+k);
}
rewind(fp);
fseanf(fp, "%d", &k);
fclose(fp);
printf("%d\n", k);
}
程序的运行结果是______。
A B C D
A
[解析] fopen函数以一定方式打开指定文件,返回一个指向文件的文件指针。如果不能实现打开指定文件的操作,则返回一个空指针NULL。fscanf函数从文本文件中按格式输入。fprintf函数按照格式向文本文件中输出数据。文件定位函数fseek,将指针由文件开头0、当前位置1、末尾2移动指定字节。rewind函数功能使文件的位置指针返回到文件头。本例中,循环实现的功能是求数组的和。程序执行过程为:以读/写方式建立一个新的文本文件data.dat,将1写入文件;执行for循环,将文件指针移到文件开头,将文件第一个数值1赋给k,再将指针移动到开头,向文件内输入a[i]+k=3。for循环实现将a数组中元素累加,结果21存放在文件中。调用rewind将文件指针移动到开头,调用fscanf函数从文件中读出数值赋予k=21,调用fclose函数关闭文件,打印k值,故A选项正确。
33. 有以下程序:
#include<stdio.h>
main()
{int i,j;
for(i=3;i>=1;i--)
{for(j=1;j<=2;j++)printf("%d",i+j);
printf("\n");
}
}
程序运行后的输出结果是______。
- A.4 3
2 5
4 3 - B.4 5
3 4
2 3 - C.2 3
3 4
4 5 - D.2 3
3 4
2 3
A B C D
B
[解析] 第一次执行外循环,i的值为3,第一次执行内循环j的值为1,j<=2条件成立,打印i+j的值,即4;第二次执行内循环j的值为2,j<=2条件成立,打印i+j的值,即5;再判断条件不成立,打印回车换行符,跳出内循环。第二次执行外循环,i的值为2,内循环的执行同第一次一样,所以打印3和4,打印回车换行,结束内循环。第三次执行外循环i的值为1,同理内循环中打印2和3,打印回车换行符,结束内循环。
34. 有以下程序:
#include <stdio.h>
main()
{ char c;
do {
c=getchar();
putchar(c);
} while(c !='#');
printf("\n");
}
执行时如输入:abcdefg##<回车>,则输出结果是______。
- A.abcdefg#
- B.abcdefg
- C.abcdefg##
- D.##
A B C D
A
[解析] 程序执行过程为:读入一个字符存入缓存区,判断字符是否为“#”,如不是,继续读入字符,直到读入的字符是“#”,存入缓存区,退出循环,将缓冲区字符一个个输出,结果为abcdefg#,故A选项正确。
36. 以下程序的输出结果是______。
point(char*pt);
main()
{char b[4]={'m','n','o','p'},*pt=b;
point(pt);
printf("%c\a",*pt);
}
point(char*p)
{p+=3;}
A B C D
39. 有以下程序
#include<stdio.h>
void fun(int n, int*s)
{
int f;
it(n==1)*s=n+1;
else
{
fun(n-1, &f);
*s=f;
}
}
main()
{
int x=0;
fun(4, &x);
printf("%d\n", x);
}
程序运行后的输出结果是______。
A B C D
C
[解析] fun函数是递归函数,调用到n为0时*s=1+1为2,返回主函数,x为2。