C 语言 (C Programming)
一、判断题
- 表达式
(3.6%2)符合 C 语言语法。 (%运算符要求两边均为整型数据) - 在 C 程序中,用整数
0表示逻辑值“假”。 (✅ ) 08是正确的整型常量。 (0开头的整型常量是八进制数 八进制数字为0~7)- 设变量定义为
int a=b=c=5;则变量a,b,c的值都是5。 ( 逗号分割定义) - 若
x是单精度实型变量,表达式(x=10/4)的值是2.5。 ( 整数相除,结果为整数) - 若变量定义语句为
int x,y;则表达式x=y=1符合 C 语言语法。 (赋值运算符=具有右结合性 等价于x=(y=1)) - 表达式
!(x>0||y>0)等价于!(x>0)&&!(y>0)。 (德摩根定律 ) - 表达式
(0x19 <<1) & 0x7的值是3。 ( 十六进制 移码运算) - 在 C 语言中名字为
NUM和num的标识符表示的是同一个变量。 ( 变量名大小写敏感 ) - 用
#define PI 3.1415926定义的符号常量PI的值在程序中是不能被改变的。 (✅ )
二、选择题
( )是构成 C 语言程序的基本单位。A
- (A)函数
- (B)过程
- (C)子程序
- (D)文件
(signed int char)是 C 语言提供的合法的数据类型关键字。
- (A)float
- (B)Signed
- (C)integer
- (D)Char
以下选项中不合法的用户标识符是( 字母、数字、下划线组成)。
- (A)abc.c
- (B)file
- (C)Main
- (D)PRINTF
合法的 C 语言字符常数是(D )。字符常数 允许 8 16 进制转义。
- (A)
'\084'8超出八进制范围 - (B)
"A"字符串 - (C)
'ab'多字符常量 - (D)
'\x43'十六进制转义字符
- (A)
C 语言中,要求运算数必须是整型的运算符是( )。
- (A)
%取模 要求操作数为整型 - (B)
/ - (C)
< - (D)
!
- (A)
以下选项中不正确的实型常量是( )。
- (A)
2.607E-1 - (B)
0.8103e2 - (C)
77.77 - (D)
456.0e-2.
- (A)
合法的 C 语言赋值语句为( )。
- (A)
a=2+b=58 ; - (B)
i+=-5 ; - (C)
a<mark>50+(b</mark>50); - (D)
k =int(a + b);
- (A)
不合法的 C 语言赋值语句为( )。
- (A)
++a; - (B)
n1 =(n2 =(n3= 0)); - (C)
a = b= = c; - (D)
k = a + b=1 ;
- (A)
正确的语句是( )。
- (A)
int x=y=z=0; - (B)
int z=(x+y)++; - (C)
x=+3==2; - (D)
x%=2.5;
- (A)
下述程序的输出是( )。
#include<stdio.h> void main() { int x=023; printf("%d",--x); }- (A)17
- (B)18
- (C)23
- (D)24
设
a,b,c均定义为int型,且已赋于大于1的数,能正确表达1/(abc)的表达式是( )。- (A)
1/a*b*c - (B)
1/(a*b*c) - (C)
1.0/a*b*c - (D)
1.0/a/b/c
- (A)
为表示“
a和b都不等于0”,应使用的 C 语言表达式是( )。- (A)
(a!=0) || (b!=0) - (B)
a || b - (C)
!(a=0)&&(b!=0) - (D)
a && b
- (A)
若
x是单精度实型变量,k是基本整型变量,以下正确的输入语句是( )。- (A)
scanf ("%f%d", &x, &k) ; - (B)
scanf ("%f%d", x, k) ; - (C)
scanf ("%d%f", &x, &k) ; - (D)
scanf ("%d%f", x, k) ;
- (A)
已知字符
'c'的 ASCII 码为99,语句printf ("%d,%c",'c', 'c'+1) ;的输出为( )。- (A)
99,c - (B)
99,100 - (C)
99,d - (D)语句不合法
- (A)
以下选项中不正确的变量名是( )。
- (A)
SUM - (B)
sum - (C)
float - (D)
SuM
- (A)
下列表达式的值为
1的是( )。- (A)
3﹪5 - (B)
3/5.0 - (C)
3/5 - (D)
3<5
- (A)
C 语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。
- (A)必须为字母
- (B)必须为下划线
- (C)必须为字母或下划线
- (D)可以是字母、数字和下划线中任一种字符
下列运算符中优先级最高的是( )。
- (A)
< - (B)
+ - (C)
&& - (D)
!=
- (A)
阅读以下程序:若
x、i、j和k都是int型变量,则执行下面表达式后x的值为( )。
x=(i=4,j=16,k=32)- (A)4
- (B)16
- (C)32
- (D)52
若希望当
A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( )。- (A)
A%2==1 - (B)
!(A%2==0) - (C)
!(A%2) - (D)
A%2
- (A)
表达式
0x13^0x17的值是( )。- (A)
0x04 - (B)
0x13 - (C)
0xE8 - (D)
0x17
- (A)
设有以下语句:
char x=3,y=6,z; z=x^y<<2;则
z的二进制值是( )。- (A)
00010100 - (B)
00011011 - (C)
00011100 - (D)
00011000
- (A)
在位运算中,操作数左移一位,其结果相当于( )。
- (A)操作数乘以
2 - (B)操作数除以
2 - (C)操作数除以
4 - (D)操作数乘以
4
- (A)操作数乘以
在位运算中,操作数右移一位,其结果相当于( )。
- (A)操作数乘以
2 - (B)操作数除以
2 - (C)操作数乘以
4 - (D)操作数除以
4
- (A)操作数乘以
以下程序的输出结果是( )。
#include<stdio.h> main( ) { char x=040; printf("%o\n",x<<1); }- (A)
100 - (B)
80 - (C)
64 - (D)
32
- (A)
三、填空题
- C 程序中定义的一个字符型变量,代表内存中的 __ 字节存储空间。
- 表达式
5.5+1/2+86%10的计算结果是 ______。 - 定义
int a=2,b=3,c=4;则执行完语句a*=16+b++-++c后,a的值是 ______,b的值是 ______,c的值是 ______。 - 决定表达式运算顺序的两个因素是 __ 和 ______。
x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,则表达式x+y*a/x+b/y+c的值是 __ 类型。- 把
k1,k2定义成基本整型变量,并赋初值7的定义语句为 ______。若有语句k1+=k1-=k1+1;,则k1的值为 ______。 - 已知
x=2.5,y=4.5,z=10,则算术表达式x+z%3*(int)(x+y)%2/4的值为 ______,算术表达式x+z/(int)x的值为 ______。 printf("%f",(int)(2.5*3.0)/3);的输出结果是 ______。- 表达式
18/4*3.2/8值的数据类型是 ______。 - 在 C 语言中,
char型数据在内存中的存储形式是 ______。 以下程序输出结果是 ______。
#include<stdio.h> main() { int a,d=241; a=d/100%9; printf("%d\n", a); }- 定义:
int a=5,b=4; float x=5.5,y=3.7;
表达式(float)(a+b)/2+(int)x/(int)y+(int)(x+y)%4/2值为 ______。 - 定义
int a =2,b =3,c =4;
执行完下列语句a*=10+(b++)–(++c);后a=______,b=______,c=______。 - 定义:
int y=0,x=3;
y+=++x*y++;
运行后x,y的值为:x=______,y=______。 定义:
int a=20,n=10;求各式的值。a/= a + a;(a=______)a%=n %=7;(a=______)a + = a - = a * = a ;(a=______)
若
x、y、z均为int型变量,则执行以下语句后的输出为 ______。x=(y=(z=10)+5)–5; printf("x=%d,y=%d,z=%d\n",x,y,z); y=(z=x=0,x+10); printf("x=%d,y=%d,z=%d\n",x,y,z);- 已知
int a=1,b=3则a^b的值为 ______。 下面程序段的输出为 ______。
#include <stdio.h> main() { printf("%d\n",12<<2); }下面程序段的输出为 ______。
#include <stdio.h> main() { int a=8,b; b=a|1; b>>=1; printf("%d,%d\n",a,b); }- 若已知
a=10,b=20,则表达式!a<b的值为 ______。
习题三(顺序结构)
一、单项选择题
对于
int i, j; char c;当输入序列为1dc2 3 4时,执行语句scanf("%dd%c%*d%*d%d", &i, &c, &j);后i,j,c的值分别为( )。- (A)1 2 ‘d’
- (B)1 2 ‘c’
- (C)1 4 ‘d’
- (D)1 4 ‘c’
若
x是单精度实型变量,k是基本整型变量,以下正确的输入语句是( )。- (A)
scanf ("%f%d", &x, &k) ; - (B)
scanf ("%f%d", x, k) ; - (C)
scanf ("%d%f", &x, &k) ; - (D)
scanf ("%d%f", x, k) ;
- (A)
已知字符 ‘c’ 的 ASCII 码为 99 ,语句
printf ("%d,%c", ’c’, ’c’+1 ) ;的输出为( )。- (A)
99,c - (B)
99,100 - (C)
99,d - (D)语句不合法
- (A)
下面程序段的输出结果是( )。
main ( ) { int x=10; printf("%d\n",(x=5*6,x*4,x+5)); }- (A)30
- (B)125
- (C)35
- (D)120
已知
i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中相对应的正确输入语句是( )。- (A)
scanf("%2d%2d%2d",&i,&j,&k); - (B)
scanf(""%d %d %d",&i,&j,&k); - (C)
scanf("%d,%d,%d",&i,&j,&k); - (D)
scanf("i=%d,j=%d,k=%d",&i,&j,&k);
- (A)
设
c是一个字符变量,求解表达式( )后,c的值不是1就是0。- (A)
c=getchar()!='\n' - (B)
(c=getchar())!='\n' - (C)
c = '1' - (D)
c = EOF
- (A)
设有
float类型变量a的值是1.89,执行语句printf("%d,%.1f\n", (int)a, (int)a);后,输出的值是( )。- (A)
1,1.0 - (B)
2,2.0 - (C)
1,2.0 - (D)
1,0.0
- (A)
设有
float类型变量a的值是1.6789,执行语句printf("%.2f ",(float)((int)a));后,输出的值是( )。- (A)
1.00 - (B)
2.00 - (C)
1.67 - (D)
1.68
- (A)
设有
int类型变量a的值是1,执行语句printf("%d\n",a++>1);后,输出的值是( )。- (A)
1 - (B)
2 - (C)
0 - (D)
3
- (A)
下面程序段的输出结果是( )。
main(){ int x=0x10; printf("%d,%d,%d\n", x, x|0, x||0); }- (A)
16,16,1 - (B)
10,10,1 - (C)
16,16,0 - (D)
16,0,0
- (A)
二、阅读下列程序,写出运行结果
下面程序的运行结果是( )。
#include <stdio.h> void main() { int a = 0x12; printf(“%d\n”,a); printf ("%x, %o", 17, 17); }运行时输入数据为:
69 72,则下面程序的运行结果是( )。#include <stdio.h> void main() { unsigned k,n; scanf("%u",&n); k=n%10*10+n/10; printf("n=%d k=%d\n",n,k); }下面程序运行结果是( )。
#include <stdio.h> void main() { int x=40,y=4,z=4; x=y= =z; printf("%d %d %d\n",x,y,z); x=x= =(y=z); printf("%d %d %d\n",x,y,z); }下面程序的运行结果是( )。
#include <stdio.h> void main() { int x,y,z; x=y=2; z=3; y=x++-1; printf("%d\t%d\t%d\t",x,y,z); y=--z+1; printf("%d\t%d\t%d\n",x,y,z); x=y=z=0; ++x&&++y||++z; printf("%d\t%d\t%d\t",x,y,z); --x&&++y&&++z; printf("%d\t%d\t%d\n",x,y,z); }阅读下列程序,运行时输入
3 4 5 6,则输出结果( )。#include<stdio.h> #include<math.h> main() { float a1,a2,a3,s,d; scanf(“%f%*f%f%f”,&a1,&a2,&a3); s=(a1+a2+a3)/2; s=sqrt(s*(s-a1)*(s-a2)*(s-a3)); printf(“%.2f%.2f %-10.3f\\n”,a1,a2,a3,s); }
习题四(选择结构)
一、单项选择题
有以下程序
#include<stdio.h> main( ) { int n; scanf(“%d”,&n); if(n++>5) printf(“%x\n”,n); else printf(“%x\n”,n--); }若执行程序时从键盘上输入
9,则输出结果是( )。- (A)11
- (B)A
- (C)9
- (D)8
下列程序的运行结果是( )。
#include<stdio.h> main( ) { int x=100,a=10,b=20,ok1=5,ok2=0; if(a<b) if(b!=15) if(!ok1) x=1; else if(ok2) x=10; x=-1; printf(“%d\n”,x); }- (A)-1
- (B)0
- (C)1
- (D)不确定的值
下列程序的运行结果是( )。
#include<stdio.h> main( ) { float 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.250000 - (C)
0.500000 - (D)
1.000000
- (A)
以下程序段的输出结果为( )。
x=0;y=2;z=3; switch(x+1) { case 1 : switch(y= =2) { case 1 : printf(“*”);break; case 2 : printf(“%”);break; } case 2 : switch(z) { case 1: printf(“$”); case 2 : printf(“*”);break; default : printf(“#”); } }- (A)
*# - (B)
*$* - (C)
*%$*# - (D)
*
- (A)
为了避免在嵌套的条件语句
if-else中产生二义性,C 语言规定:else子句总是与( )配对。- (A)缩排位置相同的
if - (B)其之前最近的
if - (C)其之后最近的
if - (D)同一行上的
if
- (A)缩排位置相同的
下列程序段的输出结果是( )。
int a = 10, b=0; if ( a > 15 ) b = 1; else if ( a < 2 ) b = 2; else b = 3; printf("%d", b);- (A)3
- (B)2
- (C)1
- (D)0
下列程序段的输出结果是( )。
int k=1; switch(k) { case 1:putchar(‘P’); case 2: case 3: putchar(‘Q’); break; case 4: putchar(‘R’); default: putchar(‘S’); }- (A)
P - (B)
PQ - (C)
PQR - (D)
PQRS
- (A)
二、阅读下列程序,写出运行结果
下列程序的输出结果是( )。
#include<stdio.h> main( ) { if(2*2<mark>5<2*2</mark>4) printf(" T"); else printf(" F"); }若当程序运行输入字母
H,则下面程序运行结果是( )。#include<stdio.h> main( ) { char ch; ch=getchar( ); switch(ch) { case ‘H’: printf(" Hello!\n"); case ‘G’: printf(" Good morning!\n"); default: printf(" Bye-Bye!\n"); } }若当程序运行输入
3和5,则下面程序运行结果是( )。#include<stdio.h> main( ) { int x,y; scanf(“%d,%d”,&x,&y); if(x==y) printf(“x==y”); else if(x>y) printf(“x>y”); else printf(“x<y”); }
三、程序填空题
输入的一个小写字母,将字母循环后移
5个位置后输出,如'a'变成'f','w'变成'b'。#include <stdio.h> main() { char c; c=getchar(); if(______1______) c=c+5; else if (c>='v' && c<='z') ______2______ putchar(c); }输入三个整数
x,y,z,请把这三个数由小到大输出。#include<stdio.h> main() { int x,y,z,t; 1 if (x>y) { t=x;x=y;y=t;} if(x>z) { t=z;z=x;x=t;} if( 2 ) { t=y;y=z;z=t;} printf("small to big: %d %d %d\n",x,y,z); }
习题五(循环结构)
一、单项选择题
设有程序段
int k=10; while(k=0) k=k-1;则下面描述中正确的是( )。
- (A)
while循环执行10次 - (B)循环是无限循环
- (C)循环体语句一次也不执行
- (D)循环体语句执行一次
- (A)
下面程序段的运行结果是( )。
a=1; b=2; c=2; while(a<b<c) { t=a; a=b; b=t; c--; } printf(“%d,%d,%d”,a,b,c);- (A)
1,2,0 - (B)
2,1,0 - (C)
1,2,1 - (D)
2,1,1
- (A)
对
for(表达式1;;表达式3)可理解为( )。- (A)
for(表达式1;0;表达式3) - (B)
for(表达式1;1;表达式3) - (C)
for(表达式1; 表达式1;表达式3) - (D)
for(表达式1; 表达式3;表达式3)
- (A)
下面程序段的运行结果是( )。
for(y=1;y<10;) y=((x=3*y,x+1),x-1); printf(“x=%d,y=%d”,x,y);- (A)
x=27,y=27 - (B)
x=12,y=13 - (C)
x=15,y=14 - (D)
x=y=27
- (A)
执行语句
for(i=1;i++<4;);后变量i的值是( )。- (A)
3 - (B)
4 - (C)
5 - (D)不定
- (A)
若运行以下程序时,从键盘输入
2473<回车>,则下面程序的运行结果是( )。#include <stdio.h> 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); default: putchar(c+2); break; } printf(“\n”); }- (A)
668977 - (B)
668966 - (C)
66778777 - (D)
6688766
- (A)
下面程序的运行结果是( )。
#include <stdio.h> main() { int num=0; while(num<=2) { num++; printf(“%d\n”,num); } }- (A)
1111 - (B)
1222 - (C)
1233 - (D)
1234
- (A)
下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。
#include <stdio.h> main() { int a,b,t; scanf(“%d %d”,&a,&b); while( ) { if(a>b) { t=a; a=b; b=t; } printf(“%d,%d”\n”,a,b); scanf(“%d %d”,&a,&b); } }- (A)
!a=b - (B)
a!=b - (C)
a==b - (D)
a=b
- (A)
二、阅读下列程序,写出运行结果
阅读下列程序,写出运行结果:
#include <stdio.h> main( ) { int x=3; do { printf("%3d",x-=2); }while(!(--x)); }阅读下列程序,写出运行结果:
#include <stdio.h> main( ) { int j=0,k=0,a=0; while(j<2) { j++; a++; k=0; } while(k<=3) { k++; if(k%2!=0) continue; a++; } a++; printf("%d\n",a); }阅读下列程序,指出运行结果:
#include <stdio.h> main( ) { int i; for(i=0;i<5;++i) { if(i==3) { printf("%d\n",++i); break; } printf("%d",++i); } }阅读下列程序,指出运行结果:
#include <stdio.h> main( ) { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1) { b+=3; continue; } b-=5; } printf("a=%d\n",a); }阅读下列程序,指出运行结果:
#include <stdio.h> main( ) { int i,a=0; for(i=1;i<=5;i++) { do { i++; a++; }while(i<3); } i++; printf("a=%d,i=%d",a,i); }输入
4<回车>后,下列程序的输出结果是( )。#include <stdio.h> main( ) { int j,k,n; float f,s; scanf(“%d”,&n); s=0; f=1; for(k=1;k<=n;k++) { for(j=1;j<k;j++) f=f*k; s=s+f; printf(“% .0f#”,s); } }下列程序段的输出是( )。
#include <stdio.h> main() { int k; for(k=1; k<5; k++) { if(k % 2) printf("*"); else continue; printf("#"); } }
三、程序填空题
程序填空,已知有如下计算公式:
π≈4*(1/1-1/3+1/5-1/7+……)
下列程序就是根据这一公式计算圆周率的。其中,精度控制在0.00001;变量s表示当前符号项,item表示当前项,n表示当前项的序号。#include <stdio.h> #include <math.h> main( ) { float pai=0.0,item=1.0,s=1.0; int n=1; while( ) { pai+=item; s=-s; item=s/(2*n+1); } pai=4*pai; printf("pai=%f\n",pai); }程序填空,输入
1个长整型,求各位数字的平方和。
例如:输入–123,输出14。#include <stdio.h> void main( ) { int digit; long in , s; scanf(“%ld”,&in); ; ; while(in>0) { ; s=s+digit*digit; ; } printf(“sum=%ldn”,s); }程序填空,该程序功能:输入
1个整数后,输出该数的位数(若输入3214则输出4,输入-23156则输出5)。#include <stdio.h> void main() { int n,k=0; scanf("%d",&n); while( __________ ) { k++; __________; } printf("%d\n",k); }程序填空,该程序功能:求输入的整数各位数字之和,如输入
234则输出9,输入-312则输出6。#include <stdio.h> #include <math.h> void main() { int n,s=0; scanf("%d",&n); ____________ while(n!=0) { ____________ n=n/10; } printf("%d\n",s); }程序填空,循环输入若干个整数(以输入
Ctrl+z结束循环),输出每个数的位数。例如:#include <stdio.h> void main() { int n,m,k; while(scanf("%d",&n)!= __________) { m=n; __________; while(m!=0){ k++;__________; } printf("%d是%d位整数\n",__________); } }
习题六(数组)
一、单项选择题
在 C 语言中,引用数组元素时,其数组下标可以是( )。
- (A)整型表达式
- (B)整型表达式或整型常量
- (C)整型常量
- (D)任何表达式
以下能对一维数组
a进行正确定义及初始化的语句是( )。- (A)
int a[10]=(1,2,3); - (B)
int a[10];a[10]=(1,2,3); - (C)
int a[10];a[10]={1,2,3}; - (D)
int a[10]={1,2,3};
- (A)
若二维数组
a有m列,则计算任一元素a[i][j]在数组中位置的公式为( )。- (A)
i*m+j - (B)
i*m+j-1 - (C)
j*m+i - (D)
i*m+j+1
- (A)
以下对二维数组
a的正确定义是( )。- (A)
int a[3][]; - (B)
float a(3)(4); - (C)
double a[1][4]; - (D)
float a(3,4);
- (A)
有两个字符数组
a、b,则以下正确的输入语句是( )。- (A)
gets(a,b); - (B)
scanf("%s%s",&a,&b); - (C)
scanf("%s%s",a,b); - (D)
gets("a"),gets("b");
- (A)
下面程序段的运行结果是( )。
char a[7]="abcdef"; char b[4]="ABC"; strcpy(a,b); printf("%c",a[5]);- (A)
\0 - (B)空格
- (C)
e - (D)
f
- (A)
判断字符串
s1是否大于字符串s2,应当使用( )。- (A)
if(s1>s2) - (B)
if(strcmp(s1,s2)) - (C)
if(strcmp(s1,s2)>0) - (D)
if(strcmp(s2,s1)>0)
- (A)
若有说明:
int a[][4]={1,1};则下面不正确的叙述是( )。- (A)二维数组
a的第一维大小为1 - (B)数组
a的每个元素都可得到初值1 - (C)
a[0][0]和a[0][1]可得到初值1,其余元素初值默认为0 - (D)二维数组
a的第一维大小可省略
- (A)二维数组
若有说明:
int a[][3]={1,2,3,4,5,6,7};则数组a第一维大小为( )。- (A)3
- (B)2
- (C)1
- (D)不确定
对两个数组
a和b进行如下初始化char a[ ]=”you”; char b[ ]={‘y’,’o’,’u’};则以下叙述正确的是( )。
- (A)
a与b数组完全相同 - (B)
a与b数组长度相同 - (C)
a和b数组中存放地都是字符串 - (D)
a数组比b数组长度长
- (A)
假设字符数组
a和b中均存有字符串,判断a与b中字符串是否相等,应使用( )。- (A)
if(a=b) - (B)
if(a==b) - (C)
if(strcmp(a,b)==0) - (D)
if(strcpy(a,b))
- (A)
下面程序段运行的结果是( )。
char c[]=”\t\v\\\0will\n”; printf(“%d”,strlen(c));- (A)14
- (B)9
- (C)4
- (D)3
对以下说明语句的正确理解是( )。
int a[10]={1,2,3,4,5};- (A)将
5个初值依次赋给a[1]至a[5] - (B)将
5个初值依次赋给a[6]至a[10] - (C)将
5个初值依次赋给a[0]至a[4] - (D)因为数组长度与初值个数不同,语句有错
- (A)将
下面程序段运行的结果是( )。
int i; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++)printf(“%3d”,a[i][2-i]);- (A)
3 5 7 - (B)
3 6 9 - (C)
1 5 9 - (D)
1 4 7
- (A)
以下正确的数组定义语句是( )。
- (A)
int a[1][4]={1,2,3,4,5}; - (B)
float x[3][]={{1},{2},{3}} - (C)
float x[3][3]={{1},{2},{3},{4}} - (D)
float x[3][3]={{1},2, 3}
- (A)
下面程序段运行的结果是( )。
float x[3][3]={{1},2,3} ; printf("%6.2f",x[1][1]); printf("%6.2f",x[2][0]);- (A)
3.00 0.00 - (B)
2.00 3.00 - (C)
0.00 3.00 - (D)
1.00 3.00
- (A)
二、阅读下列程序,写出运行结果
下面程序的运行结果是( )。
#include <stdio.h> main() { char ch[7]={“12ab56”}; int i,s=0; for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i+=2) s=10*s+ch[i]-‘0’; printf(“%d\n”,s); }下面程序的运行结果是( )。
#include <stdio.h> main( ) { int i=1,n=3,j,k=3; int a[5]={1,4,5}; while(i<=n&&k>a[i])i++; for(j=n-1;j>=i;j--) a[j+i]=a[j]; a[i]=k; for(i=0;i<=n;i++) printf(“%3d”,a[i]); }若当程序运行输入:
hello everybody则下面程序运行结果是( )。#include <stdio.h> main( ) { char str[30]; scanf(“%s”,str); printf(“%s”,str); }若当程序运行输入:
hello everybody则下面程序运行结果是( )。#include <stdio.h> main( ) { char str[30]; gets(str); printf(“%s”,str); }下面程序的运行结果是( )。
#include <stdio.h> main() { int i,k=5,a[10],b[3]; for(i=0;i<10;i++) a[i]=i; for(i=0;i<3;i++) b[i]= a[i*(i+1)]; for(i=0;i<3;i++) k+=b[i]*2; printf(“%d\n”,k); }
三、程序调试题
下面程序可求出矩阵
a的主对角线上的元素之和,请按程序功能填空。#include <stdio.h> main() { int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(_____)sum=sum+_______; printf("sum=%d\n",sum); }下面程序以每行
4个数据的形式输出a数组,请按程序功能完成填空。#include <stdio.h> #define N 20 main() { int a[N],i; for(i=0;i<N;i++)scanf("%d",_______); for(i=0;i<N;i++) { if (_____________) _____________ printf("%3d",a[i]); } printf("\n"); }下面程序的功能是在三个字符串中找出最小的,请按程序功能完成填空。
#include<stdio.h> #include<string.h> main() { char s[20],str[3][20]; int i; for(i=0;i<3;i++)gets(str[i]); strcpy(s,_______); for(i=0;i<3;i++) if(strcmp(str[i],s)<0)strcpy(s,str[i]); printf("%s\n",_______); }判断
100-200之间有多少个素数,并输出所有素数,每行只能输出10个数。#include <stdio.h> ________________ main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=100;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(________________) { leap=0; break; } if(leap) { printf("%-4d",m); h++; if(______________) printf("\n"); } leap=1; } printf("\nThe total is %d",h); }下面程序的功能是将字符串
s中所有的字符'c'删除。请根据程序功能完成程序代码中填空。#include <stdio.h> main() { char s[80]; int i,j; printf(“input a string:”); for(i=0,j=0;s[i]!=‘\0’;i++) if( ) {s[j]=s[i];j++;} puts(s); }求出数组
m中各相邻两个元素的和,并将这些和存放在数组n中,按每行4个元素的形式输出。(例如:n[1]=m[1]+m[0],…………,n[9]=m[9]+m[8]),请根据程序功能完成程序代码中填空。#include <stdio.h> void main() { int m[10],n[10],i; printf("\nInput 10 numbers: "); for (i=0; i<10;i++) /* 数组输入 */ scanf("%d", &m[i]); for (i=1; i<10; i++) n[i]=______1______; /* 计算 n 数组中的元素 */ for (i=1; i<10; i++) { printf("%3d",n[i]); if (______2______) printf("\n"); /* 每行打印 4 个数据 */ } }下面程序功能实现将两个字符串连接起来。下面源程序中 “/ N /” 的下一行中有错误,请改正。注意:不得加行、减行、加句、减句。
#include <stdio.h> void main() { char s1[80],s2[40]; int i=0,j=0; printf("\nInput the first string:"); scanf("%s",s1); printf("\nInput the second string:"); scanf("%s",s2); while (s1[i] !='\0') /****** 1 ******/ i+1; while (s2[j] !='\0') /****** 2 ******/ s1[++i]=s2[++j]; /* 拼接字符到 s1 */ s1[i] ='\0'; printf("\nNew string: %s",s1); }设计程序:将数组
a的每1行均除以该行上绝对值最大的元素,然后将a数组以二维形式输出到屏幕#include <stdio.h> #include <math.h> main() { float a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}}; float x;int i,j; for(i=0;i<3;i++) { ;/*将每行第一个元素暂定为绝对值最大的元素*/ for(j=0;j<3;j++) if(fabs(a[i][j])>fabs(x)) ; for(j=0;j<3;j++) a[i][j]=a[i][j]/x; } for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%10.6f",a[i][j]); ; } }累加
a字符串中所有非大写英文字母字符的 ASCII 码,将累加和存入变量x并显示。#include <stdio.h> void main() { int x, i; char a[]="Windows Office 2010"; /****在以下空白处写入执行语句******/ /****在以上空白处写入执行语句******/ printf("%d\n",x); }在数组
x的10个数中求平均值v,找出与v相差最小的数组元素存入变量y并显示v、y。#include <stdio.h> #include <math.h> void main() { int i; double d,v,y; double x[10]={1.2,-1.4,-4.0,1.1,2.1,-1.1,3.0,-5.3,6.5,-0.9}; /*****在以下空白处写入执行语句 ******/ /****在以上空白处写入执行语句 ******/ printf("%f %f\n",v,y); }
习题七(函数+编译预处理)
一、选择题
以下正确的函数声明语句形式是( )。
- (A)
double f(int a,int b) - (B)
double f(int a, b) - (C)
double f(int a;int b) - (D)
double f(int a,int b);
- (A)
C 语言允许函数定义时缺省函数值类型,此时该函数值类型默认为( )。
- (A)
double型 - (B)
long型 - (C)
void型 - (D)
int型
- (A)
下面函数调用语句中实参的个数为( )。
max(3+5,sqrt(4),(7,8));- (A)3
- (B)5
- (C)4
- (D)2
在函数调用
func((x+2,y),z*2)中的实参个数是( )。- (A)3
- (B)2
- (C)4
- (D)5
C 语言规定,当函数调用中实参为简单变量时,它与对应形参之间的数据传递方式是( )。
- (A)单向传数值
- (B)双向传数值,即由实参将值传给形参,再由形参传回给实参
- (C)可以由用户选择传递方式
- (D)传地址
以下程序的正确运行结果是( )。
#include <stdio.h> main() { int a=2; printf(“%4d”,f(a+1)); } int f(int x) { int a=0; a++;x++; return (x+a); }- (A)
4 - (B)
5 - (C)
6 - (D)
7
- (A)
凡是函数中未指定存储类型的局部变量,其隐含的存储类型为( )。
- (A)外部型(
extern) - (B)自动型(
auto) - (C)静态型(
static) - (D)寄存器型(
register)
- (A)外部型(
以下程序的正确运行结果是( )。
#include <stdio.h> main() { int k=4,m=1,p,i; for(i=0;i<2;i++) p=f(k,m);printf(“%d”,p); } f(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return m; }- (A)
17 - (B)
16 - (C)
20 - (D)
8
- (A)
若用数组名作为函数调用的实参,则传递给形参的是( )。
- (A)数组的首地址
- (B)数组第一个元素的值
- (C)数组中全部元素的值
- (D)数组元素的个数
若调用一个函数,该函数定义中函数值类型缺省,且此函数中没有
return语句,则正确的说法是( )。- (A)没有返回值
- (B)返回若干个系统默认值
- (C)能返回一个用户所希望的函数值
- (D)返回一个不确定的值
已有如下数组定义和
f函数调用语句:int a[3][4]; f(a);则在
f函数的说明中,对形参数组array的正确定义方式为( )。- (A)
f(int array[][]) - (B)
f(int array[3][]) - (C)
f(int array[][4]) - (D)
f(int *array)
- (A)
以下不正确的说法为( )。
- (A)在不同函数中可以使用相同名字的变量
- (B)形式参数是局部变量
- (C)在函数内定义的变量只在本函数范围内有效
- (D)在函数内的复合语句中定义的变量在本函数范围内有效
以下程序的正确运行结果是( )。
#include <stdio.h> void num() { extern int x,y; int a=15,b=10; x=a-b; y=a+b; } int x,y; main() { int a=7,b=5; x=a+b; y=a-b; num(); printf(“%d,%d\n”,x,y); }- (A)
12,2 - (B)不确定
- (C)
5,25 - (D)
1,12
- (A)
在一个 C 源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( )。
- (A)
extern - (B)
register - (C)
auto - (D)
static
- (A)
以下程序的正确运行结果是( )。
#include <stdio.h> main() { int a=2,i; for(i=0;i<3;i++) printf(“%4d”,f(a)); } f(int a) { int b=0; static int c=3; b++; c++; return(a+b+c); }- (A)
7 7 7 - (B)
7 10 13 - (C)
7 9 11 - (D)
7 8 9
- (A)
二、阅读下列程序,写出运行结果
运行结果为:( )。
#include <stdio.h> int a=16,b=7; int max(a,b) { int c; c=a>b?a:b; return c; } main( ) { int a=5; printf(“%d”,max(a,b)); }运行结果为:( )。
#include <stdio.h> int jc(int x) { static int jcx=1; jcx=jcx*x; return jcx; } main( ) { int i; for(i=1;i<=3;i++) printf(“%d!=%d\n”,i,jc(i)); }运行结果为:( )。
#include <stdio.h> #define M 2 main( ) { int x; x=func(M); printf(“%d”,x); } int func(int x) { double a=13; a/=x; return a; }运行结果为:( )。
#include<stdio.h> void sort(int a[ ]) { int i,j,t; for(i=0;i<4;i++) for(j=0;j<4-i;j++) if(a[j]>a[j+1]) t=a[i],a[j]=a[j+1],a[j+1]=t; } main( ) { int a[5]={3,-5,2,7,9},i,t,j; sort(a); for(i=0;i<=4;i++)printf(“%d”,a[i]); }运行结果为:( )。
#include <stdio.h> main( ) { f1( ); f2( ); f1( ); f2( ); } f1( ) { int a=0; printf(“a=%d\n”,++a); } f2( ) { static int b=0; printf(“b=%d\n”,++b); }运行结果为:( )。
#include <stdio.h> int a=5; int b=7; main() { float plus (int ,int); int a=4,b=5,c; c=plus(a,b); printf("A+B=%f\n",c); } float plus(int x,int y) { float z; z=x+y; return z; }运行结果为:( )。
#include <stdio.h> int func(int n) { if(n==1) return 1; else return (n*func(n-1)); } main() { int x; x=func(3); printf(“%6d”,x); }运行结果为:( )。
#include <stdio.h> void swap(int x[]) { x[0]=x[0]+x[1]; x[1]=x[0]-x[1]; x[0]=x[0]-x[1]; } main( ) { int a[2]={5,6}; swap(a); printf(“%d,%d”,a[0],a[1]); }程序运行输出结果为:( )。
#include<stdio.h> int f2(int n) { if(n<mark>1||n</mark>2)return n; else return n*f2(n-2); } void main() { printf(“%d”,f2(6)); }运行结果为:( )。
#include<stdio.h> main() { int p(int ); printf(“%d”,p(3)); } int p(int n) { return ((n<=0)?n:p(n-1)+p(n-2)); }
三、单项选择题(编译预处理)
以下叙述中正确的是( )。
- a) 在程序的一行上可以出现多个有效的预处理命令行
- b) 使用带参的宏时,参数的类型应与宏定义时的一致
- c) 宏替换不占用运行时间,只占用编译时间
- d) 在以下定义中
C R是称为“宏名”的标识符#define C R 045
以下程序的运行结果是( )。
#define MIN(x,y) (x)<(y)?(x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf("%d\n",k); }- a)
10 - b)
15 - c)
100 - d)
150
- a)
以下程序的输出结果是( )。
#define MAX(x,y) (x)>(y)?(x):(y) main() { int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%d\n”,t); }- a)
70 - b)
60 - c)
7 - d)
6
- a)
若有宏定义如下:
#define X 5 #define Y X+1 #define Z Y*X/2则执行以下
printf语句后,输出结果是( )。int a;a=Y; printf("%d ",Z); printf("%d\n",--a);- a)
7 6 - b)
12 6 - c)
12 5 - d)
7 5
- a)
请读程序:
#include <stdio.h> #define MUL(x,y) (x)*y main() { int a=3,b=4,c; c=MUL(a++,b++); printf("%d\n",c); }上面程序的输出结果是( )。
- a)
12 - b)
15 - c)
20 - d)
16
- a)
对下面程序段:
#define A 3 #define B(a) ((A+1)*a) ... x=3*(A+B(7));正确的判断是( )。
- a) 程序错误,不许嵌套宏定义
- b)
x=93 - c)
x=21 - d) 程序错误,宏定义不许有参数
以下正确的描述是( )。
- a) C 语言的预处理功能是指完成宏替换和包含文件的调用
- b) 预处理指令只能位于 C 源程序文件的首部
- c) 凡是 C 源程序中行首以
#标识的控制行都是预处理指令 - d) C 语言的编译预处理就是对源程序进行初步的语法检查
在“文件包含”预处理语句的使用形式中,当
#include后面的文件名用< >(尖括号) 括起时,找寻被包含文件的方式是( )。- a) 仅仅搜索当前目录
- b) 仅仅搜索源程序所在目录
- c) 直接按系统设定的标准方式搜索目录
- d) 先在源程序所在目录搜索,再按照系统设定的标准方式搜索
本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/Programming