C语言同步练习册答案
第1章 概 述
练习
答案
一、单项选择题
1 2 3 4 5 6 7 8 9 10
A B B A D C A C B D
11 12 13 14 15 16
D A B B A D 二、填充题
1. 机器语言 问题的
2. 源程序 解释 编译 目标可执行程序
3. 大小写英文字母(52个) 数字(10个) 键盘符号(33个) 转义字符 4. \
5. 保留字
6. 自定义 字符序列
7. 由字母或下划线开头的字母、数字、下划线组成的一串符号
8. 常量 变量 运算符 函数调用 表达式 保留字
9. 数据定义 赋值 函数调用 表达式 流程控制 复合 空 其他 10. 1 主 主
11. /* */
第2章 基本数据类型和运算
练习题答案
一、单项选择题
1 2 3 4 5 6 7 8 9 10
A B A C B C A D C A
11 12 13 14 15 16 17 18 19 20
C B B C C A D B A C
21 22 23 24 25 26 27 28 29 30
A D A C B C A B D A
31 32 33 34 35 36 37 38 39 40
B C D B D A C B D D
41 42 43 44 45 46
C D B B D C 二、填充题
1( 2 1
2( 非0 0 1 0
3( #define 符号常量 常量
4( 动态 auto
5( unsigned double char
6( 存储类型符 数据类型符 变量名1=初值1………变量名n=初值n ; 7( 内部变量或是外部变量 内部变量或外部变量 存储类型 8( 外部参照型 自动型 寄存器型 静态型 自动型 寄存器型 静态型 9( ++ &&
10(11110000
11(1 0 (a>b>c a>b 为 1 1>c 假为 0 )
12(1 (先求 !a 为 0 0
设计 练习题答案
一、 单项选择题
1 2 3 4 5 6 7 8 9 10
B A C C D B B D D C
11 12 13 14 15 16 17 18 19 20
A A D C A B A A A C
21 22 23 24 25 26 27 28 29 30
B D C D A D 二、填充题
1. 顺序 循环
2. 等价
3. switch 循环
4. 结束本次循环
5. 26, 13, 19
6. if(a>b){y=2;printf(“***y=%d\n”,y);}else{x=1; printf(“***x=%d\n”,x);} 。 7. 10
8. ((k%3==0) || (k%7==0))
9. int (n!=0) i+1 j+1 scanf(“%d”,&n) 10. (x%i==0)
三、程序分析题
1. 10,4,3
2. –1
3. 8 5 2
4. 3 1 -1
5. ABABCDCD
四、程序设计题
1. 解:
mian()
{ float c,f;
printf(“输入华氏温度(F): \n”); scanf(“%f”,&f);
c=5.0*(f-32)/9;
printf(“对应的摄氏温度(C)=%f\n”,c); }
2. 解:
main()
{ int a;
printf(“输入整数: \n”); scanf(“%d”,&a);
if(a>=0) printf(“0\n”);else printf(“-1\n”); }
3. 解:
main()
{ float x,y;
printf(“输入数x: \n”); scanf(“%f”,&x);
if(x<=1) y=x;
else if(1
0) p++;
else if(a<0) n++;
else z++;
}
printf(“正数的个数=%d\n”,p);
printf(“负数的个数=%d\n”,n);
printf(“ 零的个数=%d\n”,z);
}
7. 解:
main()
{ e=x;
while(x>1e-6){
n=1;
for(i=1;i<=m;i++) n=n*i;
m++; x=1.0/n; e=e+x;
}
printf(“e=%f\n”,e);
}
8. 解:
main()
{ int r=1;
double x=1,y=0;
while(x>1e-6){
x=1.0/(r*r+1); printf("x=%f\n",x);
y=y+x; r++;
}
printf("y=%f\n",y);
}
9. 解:
main(0
{ int i;
for(i=0x20;i<=0x6f;i++)
printf(“十进制数值=%d, 对应字符=%c\n”,i,i);
}
10. 解:
main()
{
int i;
for(i=1;i<=100;i++){
if(i%5!=0) printf(“i=%3d i*i=%4d”,i,i*i);
else printf(“i=%3d i*i=%4d\n”,i,i*i);
}
i=1;
while(i<=100) {
if(i%5!=0) printf(“i=%3d i*i=%4d”,i,i*i);
else printf(“i=%3d i*i=%4d\n”,i,i*i);
i++;
}
i=1;
do{
if(i%5!=0) printf(“i=%3d i*i=%4d”,i,i*i);
else printf(“i=%3d i*i=%4d\n”,i,i*i);
i++;
}while(i<=100);
}
9. 解:
“辗转相除法”算法如下:
(1) 将两数放备份a,b。
(2) 将两数中大的那个放在m中,小的放在n中。
(3) 求出m被n除后的余数r。
(4) 若余数r为0则执行步骤(7);否则执行步骤(5) 。
(5) 把除数(n中的)作为新的被除数(放m中),把余数(r中的)作为新的除数(放n
中)。
(6) 重复步骤(3)(4)直到r为0,
(7) 输出 n 即为最大公约数
(8) 原数(在备份a,b中)相乘除最大公约数即为最小公倍数。
#include
void main()
{ int m,n,a,b,r,t;
printf("输入个正整数:");
scanf("%d,%d",&m,&n);
a=m; b=n;
if (m>0 && n>0) {
if(m
void main()
{ int a,n,s,i,t;
printf("输入a和n的值:");
scanf("%d,%d",&a,&n);
printf("a=%d,n=%d:\n",a,n);
t=a;
for(i=1,s=0;i<=n;i++){
s=s+t;
t=t*10+a;
}
printf("a+aa+aaa+....+aa..a=%d\n",s);
return;
}
13. 解:
#include
void main()
{ int i,j,k,a;
printf("水仙花数是:\n");
for (i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++){
a=i*100+j*10+k;
if(a==i*i*i+j*j*j+k*k*k)
printf("%d\n",a);
}
return;
}
14. 解:
#include
void main()
{ int n, s=0;
printf(“输入一个正整数:”); scanf(“%d”,&n);
do{ s+=n%10;
n/=10;
}while (n>0);
printf(“各位数之和是:%d\n”,s);
return;
}
15. 解:设今天的挑子数为y,昨天的挑子数为x
则有:y=x-(x/2+1)
x=2*(y+1)
从第 10 天 y=1 起 求出x,把x又当成今天(y=x)求昨天(x),这样向前推9天,即为第
一天的挑子数。
#include
void main()
{ int i,x, y=1;
for(i=1;i<10;i++)
{ x=2*(y+1);
y=x;
}
printf(第一天共摘下桃子数为:%d\n”,x);
return;
}
第4章 数 组
练习题答案
一、 单项选择题
1 2 3 4 5 6 7 8 9 10
B C D A B D C B A C
11 12 13 14 15
C A D C C 二、填充题
1. 类型 0 越界 整型表达式
2. 连续 数组名 地址
3. 0 6
4. 0 0
5. d „\0?
6. [3][10] a[1]
7. #include #include
8. &a[i] i%9 printf(“%3d\n”,a[i])
9. k=p
10. &x a[i] i-- i!=0
11. k i方法 ,数组c的下标为0到25,当输入为ca=?A?
则ca-65=0,c[0]的值加1,依此类推。而输出时c[i]的下标i + 65正好又是相应的字母。
0 ca!=?#? 1 scanf(“%c”,&ca) 65
14. c[i]中放除16后的余数 把c[i]中的余数作b下标,取相应的字符
如:n=254
n%16 余 14 n=n/16 n=15
n%16 余 15 n=n/16 n=0
b 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0 1 2 3 4 5 6 7 8 9 A B C D E F \0
c 0 1 2 3 .. .. ... ... 63
14 15
d=c[1]=15 取 b[15]=F
d=c[0]=14 取 b[14]=E
结果输出 FE
n%base b[d]
三、程序分析题
1. 该程序从键盘输入一行字符放在字符数组中,然后输出。
2. 该程序从输入的10个字符串中找出最长的那个串并显示长度。
3. 该程序的功能是从键盘输入10个字符串,从小到大排序并输出。
4. 运行结果,输出3x3矩阵的主对角线和辅对角线的元素之和。
18 10
5. 把矩阵a转置放到矩阵b
6. 运行结果输出:
*****
*****
*****
*****
*****
7. 运行结果把3x3矩阵a和b对应元素相加到矩阵c,输出矩阵c。
8. 程序边定义边赋值的方式定义了一个字符数组str。它包括22个字符(注意'\1' 和'\11'分别代表一个特定字符)及末尾由系统自动加入的串结束标志'\0',。程序利用for循环逐个读出str数组中的字符赋给字符变量c,再由内嵌的switch语句根据c的值来控制具体输出的字符。直到读到字符串结束标志'\0'为止。
(1) 循环是从k=2开始,首先读取的是str中的第三个字符S。循环体内除switch语句外,还有一条语句:putchar('*');
(2) continue语句要跳过循环体内尚未执行的语句,结束本次循环;break语句则仅仅跳出switch语句,仍要执行循环体中的语句。
(3)当从str中读取的字符与case中所有常量表达式的值都不相等时,执行default后的语句,原样输出字符,并跳过putchar('*') 结束本次for循环,(如第三个S,第一个W,I,T,C,H,第三个W,M和P均属此)。
(4)当读到字符L时,与case中的‘L’相等,执行continue,结束本次for循环。没有输出。
(5)当读到字符1时,与case中的‘1’相等,执行break语句,跳出switch,输出一个字符*。
(6)当读到字符'\1'(第一次出现的)时,代表一个8进制的1,与case中的1相等,执行while循环。在while循环中,首先执行c=str[++k],取下一个字符'\11',它既不等于'\1'又不等于'\0',while循环继续执行,取出'W'。同理,再次执行while循环,取出字符'\1',从而结束while循环,滑向下一个case,输出字符'#',顺序执行到continue,结束本次for循环。
(7)当读到大写字母A时,与case中的'A'相等,输出一个小写字母a,并结束本次for循环。
经以上分析可知,程序输出结果为:SWITCH*#WaMP*
四、程序设计题
1( 解:
#include