1、习题第 1 部分 表达式及三种基本结构1、单项选择题1)在语言中,int、char 和 float 三种类型数据所占用的内存 。A、均为 2 个字节 B、分别为 1、2、4 个字节C、分别为 2、1、4 个字节 D、由变量的大小决定2)在语言中,错误的 int 类型的常数是 。A、32768 B、 -32766 C、 037 D、 0xAF3)下列可以表示字符型常数的是 。A、 “a“ B、 t C、 “n“ D、 2974)下列错误的转义字符是 。A、 B、 “ C、 81 D、 05)已知 char a; int b; float c; double d; 执行语句 c=a+b+c+d;后
2、,变量 c 的数据类型是 。A、 int B、 char C、 float D、 double 6)已知 int i=5;执行语句 i+=+i;后,i 的值是 。A、6 B、 10 C、 12 D、 117)若 w=1,x=2,y=3,z=4;则条件表达式 wx?w:y0 B、 !a C、a=0 D、 a11)C 语言对嵌套 if 语句的规定是:else 总是和 配对。A、其之前最近的 if B、第一个 ifC、缩进位置相同的 if D、其前面最近的且尚未配对的 if12)已知 x、a、b 均为整型变量,则下列选项中错误的 if 语句是 。A、if(a=b) x+; B、if(a=b) m=a
3、; B、if(a=b) m=b; C、if(a=b)=0) m=a; D、if(a=b;)=0) m=a;16)程序 main() int x=5; if(x+10) printf(“%d“,x);else printf(“%d“,x-);的输出是 。A、4 B、5 C、6 D、717)在下面的条件语句中(其中 s1 和 s2 表示是 C 语言的语句) ,只有一个在功能上与其它三条语句不等价,它是 。A、if (a) s1; else s2; B、if (a=0) s2; else s1;C、if (a!=0) s1; else s2; D、 if (a=0) s1; else s2;18)在
4、循环语句的循环体中使用 break 和 continue 语句的作用分别是 。A、都是结束循环 B、结束本次循环和结束循环C、都是结束本次循环 D、结束循环和结束本次循环19)设 i 和 s 是整型变量,执行如下的语句,则输出的 i 和 s 的值为 。for (i=0,s=0;ivoid main()int i,j ,m ,n;i=8;j=10;m=+i;n=j+;printf (“%d,%d,%d,%d“ ,i,j ,m,n);5)若 int x=600; 则执行下列程序后,变量 y 的值是 。if (x400)if (xb)if (ac) printf(“%d“,a); else prin
5、tf(“%d“,b);printf(“end“); 8)完善程序:企业根据月销售额为销售人员发奖金。销售额小于 1 万元,奖金为销售额的 20%;销售额大于或等于 1 万元而小于 2 万元,低于 1 万元的部分按 20%,高于1 万元的部分按 15%发奖金;销售额大于 2 万元而小于 4 万元的,低于 2 万元的部分仍按上述方法发奖金,高于 2 万元的部分按 10%发奖金;销售额大于 4 万元而低于 6万元时,高于 4 万元的部分按 6%发奖金;销售额大于 6 万元而低于 10 万元时,高于6 万元的部分按 3%发奖金;当销售额大于 10 万元时,高于 10 万元的部分按 2%发奖金。#inc
6、lude void main() float sales;double price;int n;printf(“请输入月销售额:n“);scanf(“%f“ ,if (sales=100000)n=10;else;switch( n ) case 0: price= sales*0.2; break;case 1: price= 2000+(sales-10000)*0.15; break;case 2: case 3: price= 3500+(sales-20000)*0.1; break;case 4: case 5: price= 5500+(sales-40000)*0.06; br
7、eak;case 6:case 7:case 8:case 9: price= 6700+(sales-60000)*0.03;break;case 10: price= 7900+(sales-100000)*0.02; break;printf(“奖金是:%fn“,price );9)执行下列程序段后,x 和 i 的值分别是 10 和 。int x,i;for(i=1,x=1;i=10) break; if(x%2=1) x+=5;continue; x-=3;10)完善程序:程序用于求 100200 之间的全部素数。程序中 n 的作用是累计素数的个数,该程序要求控制每行输出 10 个数据
8、。#include “math.h“ void main()int m,k,i,n=0 ;for (m= 101 ;m=k+1) printf(“%d “,m); n=n+1;11)完善程序:已知任意一个正整数的立方都可以写成一串连续奇数的和。例如:131313=2197=157+159+ +177+179+181,下列程序可以验证上述定理。void main() long int n,i,k,j,sum;printf(“Enter n=“);scanf(“%ld“,k=n*n*n;for(i=1;ivoid main() int k=1; char c=A;do switch(c+) cas
9、e A: k+; break;case B: k-;case C: k+=2; break;case D: k=k%2; continue;case E: k=k*2; break;default: k=k/3;k+; while(cvoid main() int i=1;while (i=15)if (+i%3 !=2)continue;elseprintf(“%d “,i); /*该语句是否在循环中?*/printf(“n“); /*该语句是否在循环中?*/15)编程将一个键盘输入的正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。16)猴子吃桃问题:几个猴子第一天摘下若干
10、个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第 10 天早上想再吃时,见只剩下一个桃子了。编程求第一天共摘了多少桃子。(提示:采取逆向思维的方法,从后往前推断。)/*有 1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?*/main()int day=0,x1=1020,x2;while(x1)x2=x1/2-2;x1=x2;day+;printf(“day=%dn“,day);system(“pause“); 第 2 部分 数组1、单项选择题1)以下对数组的初始化方
11、法中,正确的是 。A、int a =A,B,C; B、int a5=0,1,2,3,4,5;C、char a=A,B,C; D、int a = 0,1,2,3,4,5;2)若要判断两个字符串 str1 和 str2 是否相等,应选用的函数是 。A、strcat(str1,str2) B、strcpy(str1,str2)C、strcmp(str1,str2) D、strstr(str1,str2)3)以下对字符数组初始化的方法中,错误的是 。A、 char str =“Hello“; B、 char str =“Hello“;C、 char str =Hello; D、 char str =H
12、,e,l,l,o,0;4)若给出以下定义,则正确的叙述为 。char x =“abcdefg“;char y =a,b,c,d,e,f,g; A、数组 x 和数组 y 等价 B、数组 x 和数组 y 的长度相同C、数组 x 的长度大于数组 y 的长度 D、数组 x 的长度小于数组 y 的长度5)若二维数组 a 有 m 列,则在 aij前的元素个数为 。A、 j*m+i; B、 i*m+j; C、 i*m+j-1; D、 i*m+j+1;6)若已定义:int w10;则在下面表达式中不能表示 w2的地址的是 。A、w+2 B、 B、char str7=s, t, r, i, n, g;C、cha
13、r str110; str1=“string“; D、char str1 =“string“,str2 =“12345678“;9)若有以下说明和语句,则输出结果是 。p51char s12“a book! “; printf(“.4s“,s); A、a book! B、a boC、a book!(代表空格) D、因格式描述不正确,没有确定的输出10)若有以下说明和语句,则输出的结果是 。char sp =“x69082n“;printf(“%d“,strlen(sp);A、3 B、1 C、2 D、411)若两个静态数组 A 和数组 B 进行如下初始化,则 。static char A =“A
14、BCDEF“;static char B =A,B,C,D,E,F;A、A 和 B 完全相同 B、A 和 B 只是长度相等C、A 和 B 不相同, A 是字符串,不是数组 D、A 数组长度比 B 数组长12)下列程序的输出结果是 。void main()int k=3,a2;a0=k;k=a1*10;printf(“%dn“,k);A、10 B、30 C、33 D、不定值13)要定义一个连续 10 个字节的存储空间,以下定义正确的是 。A、char ss10; B、int ss10; C、float ss10; D、double ss10;14)有一数组 int num4=11,12,13,1
15、4,15,16,17,9,8,7,6,5,执行语句 scanf(“%d“, 时键盘输入值为 0,则数组中的值应为 。A、11,12,13,14,0,0,0,0,0,0,0,0 B、11,12,13,14,15,16, 17,9,8,7,6,0C、11,12,13,14,15,16, 17,0,8,7,6,5 D、11,12,13,14,15,16, 17,9,8,7,6,515)有一数组如下定义int a6=1,2,3,4,5;执行 for (i=0; i6;i+)printf (“%d “,ai); 输出的结果是 。A、1 2 3 4 5 6 B、1 2 3 4 5 随机值 C、1 2 3
16、4 5 0 D、1 2 3 4 5 516)执行以下程序,若输入数据为:abcd1234 efgh,则程序的输出结果是 。void main() char str 13;scanf(“%s“,str);printf(“%sn“,str);A、abcd B、abcd1234 C、efgh D、abcd1234efgh17)若有声明语句“int M10,N33;” ,则以下对数组元素赋值的操作中,未出现越界访问的是 。A、N03=0 B、M10=0 C、N30=0 D、M-1=018)已定义一个数组 str 存放字符串,要从键盘上接收一串字符到 str 中,正确的方法是 。A、gets(str);
17、 B、gets( C、scanf(“%c“ ,str); D、scanf(“%s“ ,19)有一数组 char str60,要将 windows 存放到此数组的正确语句是 。A、get(str); B、scanf(“%s “, str); C、scanf(“%s“, D、puts(str);20)C 语言中,存储字符串“ABC“占用的字节数(即函数 sizeof(a)的值)和字符串长度(即函数 strlen(“ABC“)的值)分别是 。A、3、4 B、4、3 C、3、3 D、4、421)设有说明:“char str 100;” ,并假设已输入一个字符串至 str 数组中,则输出该字符串的 pr
18、intf 函数调用语句的格式为 。A、printf( “%dn“, B、printf(“%cn“ ,str);C、printf(“%sn“,str); D、printf(“%sn“ ,22)下列描述正确的是 。A、数组名就是本数组在存储空间中的起始地址B、数组名就是一个符号,在程序中没有实际的意义C、数组名就是存放数组中的第一个元素的存储单元D、在程序中数组不能单独使用,必须带 使用23)命题“当两个字符串 s1 和 s2 相等时为真,否则为假”的 C 语言表达式为 。A、s1=s2 B、s1=s2 C、!strcmp(s1,s2) D、strcmp(s1,s2)24)有一数组 int a8=
19、1,2,3,4,5,6,7,8,在执行 scanf(“%d“,时键盘输入值为 0,则数组中的值为 。A、1 2 0 4 5 6 7 8 B、1 2 3 0 5 6 7 8C、1 2 3 4 0 6 7 8 D、1 0 3 4 5 6 7 825)若有以下说明和语句,则输出结果是 。char str =“c:abc.dat“;printf(“%s“,str);A、符串中有非法字符 B、“c:abc.dat“ C、“c:abc.dat“ D、“c:abc.dat26)有以下语句:int b;char c10;则正确的输入语句是 。A、scanf(“%d%s“, B、scanf( “%d%s“,C、scanf(“%d%s“,b,c); D、scanf(“%d%s“,b,27)以下程序运行后的输出结果是 。void main()int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+7)