. . . .
【分析】a=1,a<8成立 ,所以执行循环体b+=a;a+=2;后,a=3, b=3,再执行 for结构中的a++, 则a=4,b=3.以后同理。
9. B
【分析】当a=1时b=1,执行循环体,b>=20不成立, b%3==1成立,则执行b+=3;continue;则b=4,然后跳出本次行循环,则此时a=2,b=4.以后同理进行判断。
10. A
【分析】对于双重循环,外层循环变化一次,层变化一个循环。本题。当i=1时,j可以为3、2、1,同理当当i=2时,j可以为3、2、1;当i=3时,j可以为3、2、1;而语句if (i*j>3) break; 则表时,如果i*j>3时结束整个for循环。条件不成立时再执行m*=i*j;
3.2.2 填空题
1. hn*2
【分析】sn为第n次落地时共经过的米数,hn为第n次反弹的高度n>=2 ,hn*2才为第n次经过的距离。
2. n!=0 j++
【分析】由输出语句可知,定义的变量i,j 分别用于存放正数和负数的个数。 所以只要输入的数不是0,则进行判断。
3. 0 k/10 count++
【分析】count 作为累计的和所以初值一定为0;而while循环的作用是将指定的数k的各各位上的字数字取出来。k负责实现取出K的个位。则前两位则需通过k/10来实现。if (t==10)成立即是需要的数字,则总数需要自增。所以count++.
4. 50 (i*1.0)
【分析】本题的累加问题中,累加50次,即i<=50,两个相除时如果都为整数则结果一定为整数,为此,需要将分母转化成FLOAT 类型。所以填(i*1.0)。
5. 2*i-1 printf(\【分析】略
3.2.3 编程题
1. 编写一个程序,计算并输出下列分段函数值:
26,356010,2,3153,2,3,10xxxxyxxxxxxxxxxx?+?<=≠?=?+≤<≠≠????=?==
≥?
12
222
.下载可编辑.
. . . .
其中,x从键盘输入。 #include\int main() {
float x,y;
printf(\输入X\scanf(\printf(\if (x<0 &&x!=-3) {
y=x*x+2*x-6; }
else if (0<=x&&x<10&&x!=2&&x!=3) {
y=x*x-5*x+6; } else
y=x*x-x-15;
printf(\}
2. 编写一个程序,从键盘输入年和月,计算并输出该年的该月份共有多少天。 算法分析:要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。
源程序:#include
int year,month,days;
printf(\scanf(\switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12: /*处理\大\月*/ days=31;break;
case 4: case 6: case 9: case 11: /*处理\小\月*/ days=30;break;
case 2: /*处理\平\月*/
if (year%4==0&&year0!=0||year@0==0) days=29; /*如果是闰年*/
13
.下载可编辑.
. . . .
else days=28; /*不是闰年*/ break;
default: printf(\月份输入错误*/ days=0; }
if (days!=0) printf(\
return 0; }
3. 编写一个程序,计算并输出下列级数之和:
23
1...2!3!!nxxxxexn=+++++
其中n与x从键盘输入。 #include\#include \main() { int i,n;
double s=1.0,s1=1.0,x; scanf(\for(i=1;i<=n;i++)
{s1=s1*i; /*各项中的阶乘*/
s=s+pow(x,i)/s1; /*按公式求出*/ }
printf(\}
4. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include\main()
{char c;int i=0,j=0,k=0,l=0; while((c=getchar())!='\\n')
{if(c>=65&&c<=90||c>=97&&c<=122) i++; //i为字符数 else if(c>=48&&c<=57) j++; //j为数字数 else if(c==32) k++; //k为空格数 else l++;} //l为其他字符
printf(\}
5. 编写一个程序,解决猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个;到第10天早上想再吃时,只剩一个桃子了。问猴子第一天共摘了多少桃子?
14
.下载可编辑.
. . . .
#include\main()
{int i=1,sum=0; for(;i<=10;i++) sum=2*sum+1;
printf(\}
4.2 习题解答 4.2.1 选择题
1. D
【分析】 定义一维数组的语法格式为“类型标识符 数组名[整型常量表达式] ;”,其中“整型常量表达式”是用来说明数组元素的个数,可以是整型常量、整型常量表达式或符号常量,但不能包含变量。选项A用圆括号定义数组a,是错误的;而选项B和C中,用变量n来说明数组a长度,是错误的。
2. C 【分析】 一维数组的初始化的语法格式为“类型标识符 数组名[整型常量表达式]={常量1,常量2,...常量n} ;”,所赋初值放在赋值号后的一对花括号中。选项A把初值放在一对圆括号,是错误的;选项B花括号中没有初值,而且语句没有“;”,是错误的;选项D中初值没有用花括号括起来,是错误的。
3. B 【分析】 选项A定义数组art有5个元素,而花括号中只提供2个初值,分别赋值给art[0]和art[1],其余元素自动赋值为0;选项B通过花括号的初值确定数组art有2个元素;选项C和D定义的数组art是等价的,表示含有5个元素,其值分别为“89、-23、0、0、0”。
4. A
【分析】 C语言中,二维数组排列的顺序是“按行存放”的,即先存放第0行的元素,再存放第1行的元素,以此类推。
5. B
【分析】 C语言中,二维数组是“按行存放”的,元素a[i][j]前面存放了i行,共i*m个元素,在第i行的第j列前面有j个元素,因此元素a[i][j]前的元素个数为i*m+j。
6. D
【分析】 选项A定义了a是一个1行4列的二维数组,但初值{1,2,3,4,5}却是1行5列,是错误的;选项B在初始化语句中省略了第二维的长度,是错误的;选项C定义了b是一个2行3列的二维数组,但初值{{1},{1,2},{1,2,3}}却是3行,是错误的;选项D省略了第一维的长度,第二维长度为3,因此选项D等价于“double y[1][3]={0};”。
7. D
【分析】 字符串\占9个字节,其中字符串结束标志'\\0'多占用了1个字节。选项A、B和C都只定义了8个元素的字符数组,是错误的。
15
.下载可编辑.
. . . .
8. D
【分析】 语句“char a[]=\长度,而\使以字符'\\0'为结束标志的一个字符序列,共7个字符,因此数组a长度为7;而语句“char b[]={'A','B','C','D','E','F'};”则定义了长度为6的字符数组,因此a数组比b数组长度长。
9. B
【分析】 格式说明符“%.4s”可以用来输出字符串中前4个字符,因此选项B正确。
10. B
【分析】 字符串输入函数gets(),其语法格式为“gets(字符数组名)”,选项A包含2个字符数组名,是错误的;选项D中gets函数的参数是字符串,也是不正确的; scanf函数使用%s格式说明符进行字符串输入,其输入项为数组名,选项C在数组名a和b前加“&”符号,是错误的。
11. D
【分析】 strcmp(s1,s2)将字符串s1和s2自左向右按字符的ASCII码值逐对进行比较,直到出现不同的字符或遇到'\\0'为止,如果s1等于s2,则strcmp(s1,s2)等于0;如果s1大于s2,则strcmp(s1,s2)大于0;如果s1小于s2,则strcmp(s1,s2)小于0。
12. C 【分析】 字符串复制函数strcpy(str1,str2)将字符串str2同串结束标志'\\0'复制到字符串str1中,函数返回str1的指针。字符串连接函数strcat(str1,str3) 将字符串str3连接到字符串str1之后。因此本题答案为选项C。
13. A
【分析】 结构体变量占存的大小是该结构体各成员所需存量的总和。
14. D
【分析】 程序中定义了一个结构体数组cnum[2],包含2个元素,并将初值{1,3,2,7}依次赋值给cnum[0].x、cnum[0].y、cnum[1].x和cnum[1].y。因此,表达式“cnum[0].y/cnum[0].x*cnum[1].x”的值为6。
15. C
【分析】 将初值{\}分别赋值给c[0].name、c[0].age、c[1].name、c[1].age、c[2].name、c[2].age、c[3].name、c[3].age,因此选项C能够打印出Mary。
16. C 【分析】程序中定义了一个共用体类型的变量u1,共用体各成员共同使用4字节存空间,初值u1.c=’A’,所以u1.n=65,输出是以%c格式符输出的,因此本题答案为选项C。
17. D
【分析】变量a是一个结构体类型,所占存的大小是该结构体各成员所需存量的总和。整型变量c占4字节存,共用体类型变量k占存的大小是该共用体中最大的一个成员j所占用的存量,为4字节,因此本题答案为选项D。
18. A 【分析】变量u是一个共用体类型变量,共用体类型变量u占存的大小是该共用体中最大的一个成员c所占用的存量共4个字节,共用体的所有成员公用一个存储空间,同一时间只能存储一个成员,并且所引用的是最后一次存入成员的值。因此本题答案为4,34,12。
16
.下载可编辑.