没有合适的资源?快使用搜索试试~ 我知道了~
C语言程序设计基础(第3版)-何钦铭-课后习题答案.pdf
5星 · 超过95%的资源 4 下载量 199 浏览量
2022-11-03
14:14:18
上传
评论 4
收藏 1.99MB PDF 举报
温馨提示
试读
77页
C语言程序设计基础(第3版)_何钦铭_课后习题答案
资源推荐
资源详情
资源评论
习题参考答案
习题一
1. /*在 C 语
言中,下列标识符中哪些是合法的,哪些不合法?”*/
合法:tot
al, _debug, Counter1, begin_
不合法:Large&Tall
2. /*写
出流程图,求 1~100 中能被 6 整除的所有整数之和*/
3. /*写出
源程序,求 1~100 中能被 6 整除的所有整数之和”。*/
#in
clude<stdio.h>
void main()
{
int sum=0, i;
for(i=1;
i<=100; i++)
if( i%6==0) sum =sum+i;
printf(“sum
=%d”, sum);
}
公众号【电气工程狗】免费分享更多资源
1/77
4. /*画流程图,判别整数 n 是否是素数*/
公众号【电气工程狗】免费分享更多资源
2/77
习题参考答案 习题十
1. 选择题
(1) A
(2) C( 由于 p 指向 x, 等式 p≡&x, *p≡x 成立. 故&*p≡&x≡p)
(3) B (int c[]={1, 7, 12}; c[0]=1, c[1]=7, c[2]=12. 而 k=c, 即 k 指向数组 c 的首元素 c[0]。printf(“…”, *++k); 输
出参数*(++k)的值是*(k+1), 即 c[1] )
(4) D (对字符数组只能在定义的同时赋初值,但不能在定义之后再用‘=’赋值 )
(5) D (*p[3]是由 3 个整型指针组成的数组,p 是数组名,代表该数组的基地址,是地址常量,不能对 p 赋值,故
A,C 错。*p 代表 p[0]这个指针,a[0]是普通整型变量,两者不应互相赋值,故 B 错。p[0]=&a[0]或 p[0]=a,都是正确
的,作用是令 p[0]这个指针指向数组 a 的首元素 a[0])
(6) D ( 指针数组元素 p[3] 是一
个指针,指向 a[
3*3]=a[9], 即 *p[3]==a[9] 而二维数组元素 p[3][2]=
*(p[3]+2)=*(&a[9]+2)=*(&a[11])=a[11])
2. /*写输出结果*/
(1) 3,2,5 # 3,3,4 #
注: z 是全局变量,它 在 p()中有效,但在 main()中另有与它同名的局部变量,所以在 main()中无效。 main()和 p()中分
别定义了各自的局部变量 x,y。在 void p( int *x, int y)中 x 是指针形式,表示按地址传递,则 p 中的 *x 就是 main()中的
x;另一形参 y 是普通变量形式,p 对 y 的修改不影响 main()中的 y 的值。
变量 在函数 p()中的取值 在 main()中的取值
x 23 (++*x) 3(受 p()影响)
y 32(y--) 3 (不受 p()影响)
z 45 (z=*x+y=3+2) 4(不受 p()影响)
(2) udent
注:s+2=&s[2], 当作为 printf()中对应“%s”的输出参数时,表示从 s[2]开始输出,直到字符串结束)
(3) HappyNewYear
注: 1. for(s=pa, n=0; *s!='\0'; ++s, ++n); //求字符串 pa 的有效长度 n, 相当于:
n=0;
for( s=pa; *s!=’\0’; ++s)
++n;
// n=12
2. for(s=pa, i=0; i<n; putchar(*s++), ++i); // 逐个输出指针 s 所指向字符串 pa 的各字符,相当于
s=pa;
for( i=0; i<n; i++) {
putchar( *s );
s++; //指针后移一位
}
(4) our
注: char *st[]={"one", "two", "three","four"}; 定义了长度为 4 的字符指针数组,如下:
s[][0] st[][1] st[][2] st[][3] st[][4] s[][5]
st[0]
o n e \0
st[1]
t w o \0
st[2]
t h r e e \0
st[3]
f o u r \0
st[3]+1
公众号【电气工程狗】免费分享更多资源
3/77
表达式:*(st+3)+1= st[3]+1, 这是一个地址值,即指向 st[3]字符串”four”的第 1 号字符’o’
由于输出格式是字符串‘%s’, 所以输出的字符串是从 st[3]+1 这个地址开始,到遇见’\0’为止
(5)<略,不做要求>
3. /*填空题*/
(1) for (i=0; s[i]!=’\0’; i++)
(2) void f( char *s 或 char s[] )
{ int i=0;
while(s[i]) i++; //令 i 指向字符串的最后一个有效字符, 即 while( s[i]!=’\0’) i++;
for( ; i>=0; i- -) printf("%c", s[i]); //逆序输出
}
4. 定义函数 search(int list[], int n, int x), 在长度为 n 的数组 list 中查找元素 x, 并返回 x 在 list 中的下标。如果 x 在 list
中不存在,则返回-1.
解法 1:使用 break 语句
int search( int list[], int n, int x)
{ int i, index=-1; //index: x 在 list 中的下标,目前尚未找到,因此初始化为-1
for ( i=0; i<n; i++) //逐个对比 list[i]与 x, 相等则跳出循环,否则
继续往下比较,直到
整个数组比完
if( list[i]== x ) {
index=i;
break;
}
return index; //返回 x 在 list 中的下标
}
解法 2:使 用 return 语句—当程序执行到 return 语句,将提前结束循环,并结束函数 search(),返回主函数 main()
int search( int list[], int n, int x)
{ int i ;
for ( i=0; i<n; i++) //逐个对比 list[i]与 x, 相等则跳出循环,否则继续往下查找,直到找遍整个数组
if( list[i]== x ) return i;
return -1; //当 for 循环正常结束,说明找遍整个数组都找不到 x, 返回-1
}
5. 定义函数 void sort(int a[], int n), 用选择法对 a 排序(升序)。 自定义主函数 main().
void sort( int a[], int n) //a 数组名,n 数组长度
{ int i, j, index, t;
for ( i=0; i<n-1; i++){
index=i;
for( j=i+1; j<n; j++)
if( a[index] > a[ j] ) index=j;
t=a[i]; a[i]=a[index]; a[index]=t;
}
公众号【电气工程狗】免费分享更多资源
4/77
#include<stdio.h>
void main()
{ int a[10], i;
printf(“Input 10 integers:”);
for( i=0; i<10; i++) scanf(“%d”, &a[i]);
sort(a,10);
printf(“After sorted:”);
for(i=0; i<10; i++) printf(“%d “, a[i]);
putchar(‘\n’);
}
6. 编写程序:输入 5 个字符,输出其中最长的字符串 void sort( int a[], int n) //a 数组名,n 数组长度
#include<stdio.h>
#include<string.h>
void main()
{ int i, len, max_len;
char s[80], max_s[80];
printf(“Input 5 strings:”);
gets( max_s); //输入第 1 个字符串,暂作最长字符串
max_len= strlen(max_s);
for( i=1; i<5; i++) { //输入剩余的 4 个字符串,并与当前的最长字符串做比较
gets( s );
len= strlen( s);
if ( len > max_len ) {
strcpy( max_s, s); //注意:不能写成 max_s =s;
max_len= len;
}
}
printf(“The max_s is:”);
puts( max_s );
}
7. /*编写函数 delchar(s,c). 删除字符串 s 中出现的所有 c 字符。请同时编写主函数*/
实例:s=”welcome!” c=’e’
s 初始值
w e l c o m e ! \0
w e l c o m e ! \0
当 s[i]==c, 它后面的字符从’l’开始到’\0’为止,各前进一位
删 1 次后
w l c o m e ! \0
i 继续前进,直到遇见下一个 c, 将后面的字符各前进 1 位
删 2 次后
w l c o m ! \0
i继续前进,直到遇见结束字符’\0’ ,结束整个循环
i
i
i
分析:
1.循环条件是 s[i]!=’\0’
2.如何将 i 后
面若干字符各前进一位?--利用字符串复制函数和 字符子串
s代表完整的字符串,而 s+i 代表从 s[i]开始、到’\0’结束的子串。
将子串 s+i+1 复制给子串 s+i, 即 实现 i 后各字符前进一位 strcpy( s+i, s+i+1)
#include<stdio.h>
公众号【电气工程狗】免费分享更多资源
5/77
剩余76页未读,继续阅读
小鸭文库
- 粉丝: 141
- 资源: 5901
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页