资源描述
《C次序 方案 》期末复习练习 题及参考答案 (4)
一、单项选择 题
1.有如下次序 片断 :
#include <stdio.h>
main( )
{
int a = 5, b = 4, x, y;
x = 2 * a++;
printf("a=%d, x=%d\n", a, x);
y = --b * 2;
printf("b=%d, y=%d\n", b, y);
}
那么精确 的实行 结果是 。
A) a=6, x=10
b=3, y=8
√B) a=6, x=10
b=3, y=6
C) a=6, x=12
b=3, y=6
D) 以上均差错
2.有以下次序 片断 :
typedef struct
{ int b;
int p;
}TYPEA;
void f(TYPEA c)
{ c.b += 1;
c.p += 2;
}
main()
{ TYPEA a ={1, 2};
f(a);
printf("%d,%d\n", a.b, a.p);
}
那么次序 运行 后的输出结果是 。
A) 2,3 B)2,4 C)1,4 √D)1,2
3.对于 以下次序 片断 ,描画精确 的选项是 。
int x= -1;
do
{x=x*x;}while(!x);
A)是去世 循环 B)循环 实行 两次 √C)循环 实行 一次 D)有语法差错
4. 一个指针数组的定义 为 。
A) int (*ptr)[5]; √B) int *ptr[5];
C) int *(ptr[5]); D) int ptr[5];
5. 以下选项中不是合理 用户标识符的是〔 〕。
A) Double √B) unsigned C) intege D) Char
6. 已经清楚 ch是字符型变量,以下不精确 的赋值语句是〔 〕。
√A) ch="a"; B) ch='a'; C) ch='\x61'+3; D) ch='\141';
7. 经过下述赋值后,变量x的数据典范 是〔 〕。
int x=3;
double y;
y = (double) x;
√A) int B) char C) float D) double
8. 假设 以下次序 运行 时给变量x输出12,那么次序 实行 后的输出结果是〔 〕。
int main()
{ int x, y;
scanf("%d",&x);
y = x > 12? x + 10: x – 12;
printf("%d\n",y);
}
√A) 0 B) 10 C) 12 D) 22
9. 假设 有定义 :int a=7; float x=2.5,y=4.7; 那么表达 式x+a%3*(int)(x+y) %2/4的值是〔 〕。
A) 0.000000 √B)2.500000 C) 2.750000 D) 3.500000
10. 假设 有以下代码,那么以下表达 精确 的选项是〔 〕。
int t = 0;
while(t = 1)
{...}
A) 循环 把持 表达 式的值为0 √B) 循环 把持 表达 式的值为1
C) 循环 把持 表达 式不合 法 D) 以上说法都差错
11. 已有定义 :char a[]="xyz", b[] = {'x','y','z'};, 以下表达 精确 的选项是〔 〕。
A) 数组a跟 b的长度一样。 B) a数组长度小于b数组长度。
√C) a数组长度大年夜 于b数组长度。D) 上陈说 法都差错 。
12. 设有定义 :int n1 = 0, n2, *p = &n2, *q = &n1;,那么以下赋值语句中与 n2 = n1;语句等价的是〔 〕。
√A) *p = *q; B) p = q; C) *p = &n1; D) p = *q;
13. 已经清楚 函数的调用 方法 :fread(buf, SIZE, count, fp);,其中 参数buf的含义 是〔 〕。
A) 一个整型变量,代表要读入的数据项总跟 。
B) 一个文件指针,指向要读的文件。
√C) 一个指针,指向要读入数据的存放所在 。
D) 一个存储区,存放待读的数据项。
14. 假设 有定义 :char *p = "abcd"; char c[]="abcd";,那么以下语句中差错 的选项是〔 〕。
A) printf("%c\n", *(p++) ); B) printf("%s\n", p );
√C) printf("%c\n", *(c++) ); D) printf("%s\n", c );
15. 有以下次序
#include <stdio.h>
int f(int x)
{ int y;
if(x==0||x==1) return(3);
y=x*x-f(x-2);
return y;
}
main()
{ int z;
z=f(3); printf("%d\n",z);
}
次序 的运行 结果是〔 〕。
A)0 B)9 √C)6 D)8
16. 〔T3-39〕阅读 以下次序 ,那么运行 结果为〔 〕。
#include "stdio.h"
fun()
{ static int x=5;
x++;
return x;}
main()
{ int i,x;
for(i=0;i<3;i++)
x=fun();
printf("%d\n",x);}
A)5 B)6 C)7 √D)8
17. 下面次序 段的运行 结果是〔 〕。
char str[]="ABC",*p=str;
printf("%d\n",*(p+3));
A)67 √B)0 C)字符′C′的所在 D)字符′C′
18. 下面的次序 段运行 后,输出结果是〔 〕。
int i,j,x=0;
static int a[8][8];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
for(i=0;i<8;i++)
x+=a[i][j];
printf("%d",x);
A)9 B)不判定 值 √C)0 D)18
19. 以下次序 实行 后的输出结果是〔 〕。
void func(int *a,int b[])
{ b[0]=*a+6; }
main()
{ int a,b[5];
a=0; b[0]=3;
func(&a,b); printf("%d\n",b[0]);}
√A)6 B)7 C)8 D)9
20. 〔T3-28〕阅读 以下次序 段,那么次序 的输出结果为〔 〕。
#include "stdio.h"
#define M(X,Y)(X)*(Y)
#define N(X,Y)(X)/(Y)
main()
{ int a=5,b=6,c=8,k;
k=N(M(a,b),c);
printf("%d\n",k); }
√A)3 B)5 C)6 D)8
21. 对于 for(表达 式1; ;表达 式3)可理解为〔 〕。
A) for(表达 式1;0;表达 式3)
√B) for(表达 式1;1;表达 式3)
C) for(表达 式1;表达 式1;表达 式3)
D) for(表达 式1;表达 式3;表达 式3)
22. 合理 的数组定义 是〔 〕。
A) int a[6]={"string"}; B) int a[5]={0,1,2,3,4,5};
C) char a={"string"}; √D) char a[]={0,1,2,3,4,5};
23. 给出以下定义 :
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
那么精确 的表达 为〔 〕。
A) 数组x跟 数组y等价
B) 数组x跟 数组y的长度一样
√C) 数组x的长度大年夜 于数组y的长度
D) 数组x的长度小于数组y的长度
24. 定义 如下变量跟 数组:
int i;
int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
那么下面语句的输出结果是〔 〕。
for(i=0;i<4;i++) printf("%3d",x[i][3-i]);
A) 1 5 9 13 B) 1 6 11 16
√C) 4 7 10 13 D) 4 8 12 16
25. 有定义 语句: char s[10];
假设 要从终端给s输出5个字符, 差错 的输出语句是〔 〕。
A)gets(&s[0]); B) scanf("%s",s+1); C)gets(s); √D)scanf("%s", s[1]);
26. 以下次序 的运行 结果是〔 〕。
#include <stdio.h>
char fun(char *s)
{ if( *s >='a'&& *s <='z' )
*s=*s-32;
return *s;
}
void main()
{ char a[20]="Welcome",*p,ch;
for(p=a;*p!='\0';p++)
{ ch=fun(p);
putchar(ch);
}
}
√A) WELCOME B) Welcome C) COME D) WEL
27. 以下次序 的运行 结果是〔 〕。
#include <stdio.h>
int fun(int x)
{ int y=1;
static int z=4; z+=1;++y;
return x+y+z ;
}
void main()
{ int i;
for(i=1;i<=3;i++)printf("%3d",fun(i));
}
√A) 8 10 12 B)8 10 12 C) 4 6 8 D) 4 6 8
28. 以下次序 的运行 结果是〔 〕。
#include <stdio.h>
void main()
{ int a[3][4]={{1,2,3,4},{9,7,10,6},{-1,8,-5,5}};
int i,j,row=0,colum=0,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{ max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d,colum=%d",max,row,colum);
}
A) max=8,row=0,colum=2 B) max=4 ,row=2,colum=1
√C) max=10 ,row=1,colum=2 D) max=1 ,row=1,colum=2
29. 以下次序 的运行 结果是〔 〕。
#include <stdio.h>
void swap(int b[])
{ int *p,*p1,*p2;
p1=&b[0]; p2=&b[1];
p=p1; p1=p1+1; p2=p;
}
void main()
{ int a[]={9,3};
swap(a);
printf("%d,%d\n",a[0],a[1]);
}
A)3,9 B) 10,4 C) 10,3 √D) 9,3
30. 以下次序 的运行 结果是〔 〕。
#include <stdio.h>
int b=3;
int fun(int *a)
{ b+=*a;
return(b);
}
void main()
{ int a=2, b=2;
b+=fun(&a);
printf("%d\n",b);
}
A)4 √B)7 C)5 D)8
二、填空题
1.C语言 源次序 文 件的扩大年夜 名是.C ,经过编译后,生成 文件的扩大年夜 名是.OBJ ,经过连接 后,生成 文件的扩大年夜 名是.EXE 。(小写也精确 )
2.把a,b定义 成长 整型变量的定义 语句是long a,b;或者 long int a,b;
3.设x跟 y均为整型变量,且x=3,y=2,那么1.0*x/y表达 式的值为1.5
4.已有定义 :float x=5.5; x=(int)x+2; 那么printf("%f", x);的输出值为7.000000
5.已有定义 :int x=0,y=0;那么表达 式:(x+=2,y=x+3/2,y+5)后,变量x的值为 2 ,变量y的值为 3,表达 式的值为 8 。
6.实行 以下语句for(i=1;i++<=5;); 后,变量i的值为 7 。
7. 当有 char *a[5];其语义为定义 了一个名字为a的数组,有5个字符型指针的元素。对以下定义 式停顿说明:
int (*b)[5];语义为: 定义 了一个名字为b的指针变量,它只能指向包含 5个int型元素的一维数组;
int (*c)(char *),语义为: 定义 了一个名字为c的指针变量,它只能指向带有char *典范 形参, 前去 值典范 为int型的函数 ;
8. C语言 从源次序 的抄写 到上机运行 输出结果要经过:
编辑 、 编译 、 连接 、 运行 四个步伐 。
9. 设有命题:b介于a,c之间且a,b,c互不相当 ,写出对应的逻辑表达 式:
a<b&&b<c || c<b&&b<a 。
10. 设有定义 :int n=123; float x=95.123; 写出语句
printf("%d,%05d,%4.1f,%1.2f",n,n,x,x);的运行 结果 123,00123,95.1,95.12 。
三、次序 运行 结果分析题
1.
#include <stdio.h>
main()
{ int n = 0;
char c;
while((c=getchar( )) != '\n')
{ if (c>='0' && c<='9')
n = n * 10 + c - '0';
}
printf("value=%d\n", n);
}
次序 运行 时输出为:2020<回车> 时,那么次序 运行 结果是:2020
2.
#include<stdio.h>
main()
{ int a = 1, b = 0;
switch (a)
{ case 1:
switch (b)
{
case 0: a++;
b++;
printf("a=%d, b=%d\n", a, b);
break;
case 1: a++;
b++;
printf("a=%d, b=%d\n", a, b);
break;
}
case 2: a++;
b++;
printf("a=%d, b=%d\n", a, b);
break;
}
}
运行 结果是:
a=2, b=1
a=3, b=2
3.
#include<stdio.h>
#include<string.h>
main()
{ printf("%d\n", strlen("IBM\n012\1\\"));}
次序 运行 结果是:9
4.
#include<stdio.h>
main()
{ int i, a[10];
int *p;
p = a;
for (i=0; i<10; i++) { scanf("%d", p+i); }
for (p=a; p<a+10; p++) { printf("%d\t", *p); }
printf("\n");
for (p=a; p<a+10; p++) { if (*p % 2) printf("%d\t", *p); }
}
次序 运行 时输出为:1<回车>2<回车>3<回车>4<回车>5<回车>6<回车>7<回车>8<回车>9<回车>10<回车> 时,那么次序 运行 结果为:
1 2 3 4 5 6 7 8 9 10
1 3 5 7 9
5.
#include <stdio.h>
int mod(int x, int y)
{ return (x % y);}
main()
{ int m, n, r;
scanf("%d %d", &m, &n);
r = mod(m, n);
while (r != 0)
{ m = n;
n = r;
r = mod(m, n);
}
printf("The Result is :%d\n", n);
}
次序 运行 时输出:81<空格>18 <回车>,那么运行 结果是:
The Result is : 9
6. 当运行 以下次序 时,运行 结果是__ Shanghai __。
#include <stdio.h>
#include <string.h>
#define MaxLen 20
void fun(char (*p)[MaxLen], int n)
{ char t[MaxLen];
int i,j;
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++)
if(strcmp(p[i],p[j]) > 0)
{strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}
}
int main()
{ char city[][MaxLen]={"Guangzhou","Beijing","Shenzhen","Shanghai"};
fun(city,4);
printf("%s\n",city[2]);
return 0;
}
7.以下次序 的输出结果是______________。
#include <stdio.h>
int main()
{ int i,j;
for(i = 0; i < 3; i++)
{ for(j = 0; j < 3; j++)
{ if(i <= j) printf("%-2d", j + 1);
else { putchar('#'); putchar('*'); }
}
printf("\n");
}
return 0;
}
8. 当运行 以下次序 时,从键盘输出如下内容后回车:2673 ,那么下面次序 的运行 结果是___66977_________。
#include <stdio.h>
int main()
{ int c;
while( (c = getchar()) != '\n')
{ switch(c-'2')
{ case 0:
case 1: putchar(c+4);
case 2: putchar(c+4); break;
case 3: putchar(c+3);
case 4: putchar(c+3);break;
}
}
printf("\n");
return 0;
}
9. 有以下次序 D
#include <stdio.h>
void fun(char *t,char *s)
{ while(*t!=0) t++;
while((*t++=*s++)!=0);
}
main()
{ char ss[10]="acc",aa[10]="bbxxyy";
fun(ss,aa); printf("%s,%s\n",ss,aa);
}
次序 的运行 结果是__accbbxxyy,bbxxyy _____。
四、次序 填空题
阅读 次序 ,在标有下划线的空白 处填入适当 的表达 式或语句,使次序 残缺并符合 题目 恳求 。
1. 以下次序 将输出的十进制数以十六进制的方法 输出。
#include <stdio.h>
main()
{ char b[17]= {"0123456789ABCDEF"};
int c[64],d, i=0, base = 16;
long number;
printf("请输出一个十进制数\n");
scanf("%ld", &number);
do {
c[i] = number % base;
number = number / base;
i++;
}while (number != 0);
printf("对应的十六进制数为: \n");
for(--i; i>=0; --i)
{ d = c[i];
printf("%c", b[d]);
}
printf("\n");
}
用户从键盘任意 输出一个数字表示 月份值n,次序 表示 该月份对应的英文表示 ,假设 n不在1~12之间,那么输出“Illegal month〞。
#include <stdio.h>
main()
{ int n;
static char monthName[][20]={
"Illegal month", "January","February","March",
"April", "May", "June", "July", "August",
"September", "October", "November", "December"
};
printf("Input month number:");
scanf("%d", &n);
if ((n <= 12) && (n >= 1))
{printf("month %d is %s\n", n, monthName[n]); }
else {printf("%s\n", monthName[0]); }
}
3.设有一元二次方程Ax2+Bx+C=0,以下次序 揣摸 方程根的情况,并打算 现实上 根,次序 中定义 变量a,b,c分差错 应方程的系数A、B、C,请补齐代码使次序 能够 精确 运行 。
#include <stdio.h>
#include <math.h>
int main()
{ ___ void fd(double, double, double); ____
double a,b,c;
printf("请输出一元二次方程的系数:a=?,b=?,c=?\n");
scanf("a=%lf,b=%lf,c=%lf", ____&a, &b, &c _);
fd(a,b,c);
return 0;
}
void fd(double a, double b, double c)
{ double disc,x1,x2;
if( fabs(a) <= 1e-6) { printf("不是一元二次方程\n" ); }
disc = b * b - 4 * a * c;
if(______fabs(disc)<=1e-6 _______)
{printf("有2个相当 的实根:x1 = x2 = %8.4f\n",-b/(2 * a) );}
else if( disc > 1e-6)
{ x1 = (-b + sqrt(disc) ) / ( 2 * a );
x2 = (-b - sqrt(disc) ) / ( 2 * a );
printf("有2个不相当 的实根:x1 = %8.4f, x2 = %8.4f\n", x1, x2 );
}
else {printf("无实根\n" ); }
}
精选可编辑
展开阅读全文