C语言第八章(颜晖)
C语言程序设计第3版何钦铭-颜-晖--循环结构
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结果是pi=0,因为item为0时不满足while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得while循环次数减少,必然影响到n的值。
【练习 4-2】运行例 4-2程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则while循环条件不成立,不执行循环体。
【练习4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数eps, 计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps (保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习4-4】如果将例4-3程序中的do-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10; count ++;}解答:会有影响,因为当输入数据 number 为 0时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
《C语言程序设计》第4版何钦铭、颜晖主编课后习题答案
《C语⾔程序设计》第4版何钦铭、颜晖主编课后习题答案第2章 ⽤C语⾔编写程序Page 0201#include<stdio.h>//练习2-32int main(void)3{4 int i,j,k;5 for(int i=1;i<=4;i++)//第i⾏6 {7 for(int j=1;j<=i-1;j++)//j个空格8 {9 printf(" ");10 }11 for(k=1;k<=5-i;k++)//k个*12 {13 printf("* ");14 }15 printf("\n");16 }1718 return 0;19}Page 0231#include<stdio.h>2int main(void)3{4 int f,c;//练习2-55 f=150;6 c=5*(f-32)/9;//或者是c=5/9.0*(f-32)||c=5.0/9*(f-32),但不可以是5/9,会得到0.因为:两个整型数据做除法运算,结果⼀定是整数。
7 printf("华⽒温度%d对应的摄⽒温度为%d.\n",f,c);89 printf("\n");1011 /*计算物体⾃由下落的距离(练习2-6)*/12 int h,g,t;13 t=3;//下落时间14 g=10;//重⼒加速度 10m/s^215 h=g*t*t/2;16 printf("⼀个物体从100⽶的⾼空⾃由下落,前3秒内下落的距离为:%d⽶.\n",h);1718 return 0;19}20Page 0292#include<math.h>3int main(void)4{5 /*计算摄⽒温度(练习2-8)*/6 double c,f;7 printf("输⼊华⽒温度:");8 scanf("%lf",&f);9 c=5*(f-32)/9.0;10 printf("华⽒温度%.2lf对应的摄⽒温度为%.3lf\n",f,c);1112 printf("\n");1314 /*整数四则运算(练习2-9)*/15 int x,y,z_1,z_2,z_3;16 double z_4;17 printf("输⼊两个正整数x,y:");18 scanf("%d %d",&x,&y);19 z_1=x+y;20 z_2=x-y;21 z_3=x*y;22 z_4=x/y;23 printf("%d和%d的和为%d,差为%d,积为%d,商为%lf\n",x,y,z_1,z_2,z_3,z_4); 2425 printf("\n");2627 /*计算分段函数(判断x是否不为0)(练习2-10)*/28 double x_1,y_1;29 printf("输⼊x_1:");30 scanf("%lf",&x_1);31 if(x_1!=0)32 y_1=1/x_1;33 else y_1=0;34 printf("输⼊%.2lf时,对应的y值为%.1lf\n",x_1,y_1);3536 printf("\n");3738 /*计算分段函数(判断x是否⼩于0)(练习2-11)*/39 double x_2,y_2;40 printf("输⼊x_2:");41 scanf("%lf",&x_2);42 if(x_2<0)43 y_2=pow(1+x_2,2)+2*x_2+1/x_2;44 else y_2=sqrt(x_2);45 printf("输⼊%.2lf时,对应的y值为%.2lf\n",x_2,y_2);464748 printf("\n");4950 return 0;51}Page 0372int main(void)3{4 int i,n,flag;//例2-85 double t,sum;6 printf("输⼊⼀个正整数n:");7 scanf("%d",&n);8 sum=0;9 flag=1;10 for(i=1;i<=n;i++)11 {12 t=flag*(1.0/(2*i-1));13 sum+=t;14 flag=(-1)*flag;1516 }17 printf("sum=%lf\n",sum);1819 printf("\n");2021 /*求1+1/2+···的前n项和(练习2-13)*/22 int n_1,j;23 double sum_1=0;24 printf("Enter n_1(n_1>=0):");25 scanf("%d",&n_1);26 for(j=1;j<=n;j++)27 {28 sum_1+=1.0/j;29 }30 printf("sum_1=%.2lf\n",sum_1);3132 printf("\n");3334 /*求1+1/3+1/5+···的前n项和(练习2-14)*/35 int n_2,k;36 double sum_2;37 printf("Enter n_2:");38 scanf("%d",&n_2);39 for(k=1;k<=n_2;k++)40 {41 sum_2+=1.0/(2*k-1);42 }43 printf("sum_2=%.2lf\n",sum_2);4445 printf("\n");4647 /*求1-1/4+1/7-1/10+···的前n项和(练习2-15)*/48 int n_3,m,flag_1=1;49 double sum_3=0;50 printf("Enter n_3:");51 scanf("%d",&n_3);52 for(m=1;m<=n;m++)53 {54 sum_3+=flag_1*1.0/(3*m-2);55 flag_1=flag_1*(-1);56 }57 printf("sum_3=%.2lf\n",sum_3);5859 return 0;60}Page 0402#include<math.h>3int main(void)4{5 int n,i;6 double power;7 printf("Enter n:");8 scanf("%d",&n);9 printf("2的乘⽅表:\n");10 for(i=0;i<=n;i++)11 {12 power=pow(2,i);13 printf("2的%d次⽅为%.0lf\n",i,power);14 }1516 printf("\n");1718 /*3的乘⽅表(练习2-17)*/19 int m,j;20 double power_1;21 printf("Enter m:");22 scanf("%d",&m);23 for(j=0;j<=m;j++)24 {25 power_1=pow(3,j);26 printf("pow(3,%d)=%.lf\n",j,power_1);27 }2829 return 0;30}1#include<stdio.h>//练习2-182double fact(int n)3{4 int i;5 double product;6 product=1;7 for(i=1;i<=n;i++)8 {9 product*=i;10 }1112 return product;13}14int main(void)15{16 int n,m,i;17 double result_1,result_2,result_3,c;18 printf("输⼊两个正整数m和n(m<=n):");19 scanf("%d %d",&m,&n);20 for(i=0;i<=n;i++)21 {22 result_1=fact(i);23 }24 for(i=0;i<=m;i++)25 {26 result_2=fact(i);27 }28 for(i=0;i<=n-m;i++)29 {30 result_3=fact(i);31 }32 c=result_1/(result_2*result_3);33 printf("c=%.lf",c);3435 return 0;36}。
C语言程序设计(何钦铭_颜晖_主编)课件
区分数字字符和数字
'1'
1
则:'A'+1=66,对应字符 'B'
a
25
转 义 字 符
反斜杠后跟一个字符或数字
字符常量,代表一个字符
'\n' '\101' '\x41' 'A'
所有字符都可以用转义字符表示
a
26
6.2.2 变量
在程序运行过程中,其值可以被改变的量。
变量必须先定义,后使用 定义变量时要指定变量名和数据类型 变量应该先赋值,后引用
a
30
6.3.1 整型数据的输入输出
printf (格式控制, 输出参数1, ... , 输出参数n); scanf (格式控制, 输入参数1, ... , 输入参数n);
格式控制说明 %…
十进制 八进制 十六进制
int
%d
%o
%x
long
%ld
%lo
%lx
unsigned
%u
%o
%x
unsigned long %lu
数据长度 16或32位
16位 32位
a
10
基本数据类型-整型
扩展的整数类型:short long unsigned [int]
有符号整型 无符号整型
数据长度
int
unsigned [int]
16或32位
short [int] unsigned short [int] 16位
long [int] unsigned long [int]
以小数或指数形式输入一个双精度浮点数
输出 printf()
C语言课后习题答案第八章解析
作业八:函数程序设计答案{ double z; z 二x+y; return z; }(重要)3.以下正确的说法是A_°在C 语言中A)B) C) D)4.若调用一个函数,且此函数中没有return 语句,则正确的说法是D_。
没有返回值返回若干个系统默认值 能返回一个用户所希望的函数值 返回一个不确定的值(重要)5. 以下不正确的说法是B_° C 语言规定A) B)C) D)6. C 语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是隹^A) B) C) D)7.以下程序有语法性错误,有关错误原因的正确说法是C_。
main()(一)选择丿 (30分) 1.以下正确的函数定义形式是 A) B)C) D) double double double double fun (int x, int fun (int x;int fun (int x, intfun(int x, y);y) y) y); 2.以下正确的函数形式是D_。
A) B) C) D) double fun (int x, int { z 二x+y; return z; } fun (int x, y){ int z: return z; } fun (x, y){ int x,y; double z;double fun (int x, inty) z 二x+y; return z; } y)实参和与其对应的形参各占用独立的存储单元 实参和与其对应的形参共占用一个存储单元 只有当实参和与其对应的形参同名时才共占用存储单元 形参是虚拟的,不占用存储单元该函数A) B) C) D)实参可以是常量、变量或表达式 形参可以是常量、变量或表达式 实参可以为任意类型形参应与其对应的实参类型一致 地址传递 单向值传递山实参传给形参,再山形参传回给实参 由用户指定传递方式int G=5, k;void Prt.char ();k=Prt_char(G);}A)语句void prt.char ();有错,它是函数调用语句,不能用void 说明B)变量名不能使用大写字母C)函数说明和函数调用语句之间有矛盾D)函数名不能使用下划线8.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是A)float 型B)int 型C)long 型D)double 型9.C语言规定,函数返回值的类型是Lil D_oA)return语句中的表达式类型所决定B)调用该函数时的主调函数类型所决定C)调用该函数时系统临时决定D)在定义该函数时所指定的函数类型所决定10.下面函数调用语句含有实参的个数为」func((expl,exp2), (exp3,exp4,exp5));A) 1 B) 2 C) 4 D) 5 (重要)11.以下程序的功能是计算函数F(x, y, z)二(x+y)/(x-y) + (z+y)/(z-y)的值,请选择填空。
浙江大学颜晖主讲C语言程序设计课件
–普通字符原样输出
普通字母数字及符号
转义字符 \n , \t
输出: X=34,Y=3.14
x=34; y=3.14;
printf(" X = %d, Y = %f ", x, y);
基本最输好入直输接了出当函:数
}
求阶乘函数 例6 输入m, n 计算min!t和fanct!( int k ) /* 函数定义 */
{ int i, y = 1; # include <stdio.h>
void main( )
for(i = 2; i <= k; i++)
{
y = y*i; /* 计算 k! */
int m, n, resm, resn; return y;
• C语言程序设计,何钦铭主编,人民邮电出 版社,2003
• C程序设计(第二版),潭浩强等,清华大 学出版社,1999
上机要求
– 禁做与课程学习无关的事情(如上网聊
天、游戏等)
– 看懂编译信息,逐步学会各种调试方法
Chap 1 用C语言编写程序
程序设计语言的发展 C语言特点 C程序结构 基本的输入输出
int value1, value2, sum;
printf("Input 2 numbers:\n");
输入提示
scanf("%d%d", &value1, &value2); 读入2个数
sum=value1+value2;
printf("%d+%d=%d \n", value1, value2, sum);
《C语言程序设计(何钦铭 颜晖 主编)》习题8答案
intmain(void)
{
inti,j,a,n,sum,average;
int*p;
printf("Enter n:");
scanf("%d",&n);
if((p=(int*)calloc(n,sizeof(int)))==NULL){
printf("Not able to allocate memory.\n");
else if(m==0)
printf("str1=str2\n");
else
printf("str1<str2\n");
return 0;
}
intstrcomp(char s1[80],char s2[80])
{
inta;
if(strcmp(s1,s2)>0)
a=1;
else if(strcmp(s1,s2)==0)
break;
}
}
void swap2(int*px,int*py)
{
intt;
t=*px;
*px=*py;
*py=t;
}
第五题
#include<stdio.h>
#include<string.h>
voidmcopy(char *s,intm);
intmain(void)
{
inti,m,l;
charstr[100];
}
第二题
#include<stdio.h>
intmain(void)
{
inta[10];
《C语言》章节列表
第1章程序设计和C语言1第2章算法——程序的灵魂16第3章最简单的C程序设计——顺序程序设计第4章选择结构程序设计85第5章循环结构程序设计114第6章利用数组处理批量数据1426.1怎样定义和引用一维数组1426.1.1怎样定义一维数组1436.1.2怎样引用一维数组元素1446.1.3一维数组的初始化1456.1.4一维数组程序举例1466.2怎样定义和引用二维数组1486.2.1怎样定义二维数组1496.2.2怎样引用二维数组的元素1506.2.3二维数组的初始化1516.2.4二维数组程序举例1526.3字符数组1546.3.1怎样定义字符数组1546.3.2字符数组的初始化1556.3.3怎样引用字符数组中的元素1556.3.4字符串和字符串结束标志1566.3.5字符数组的输入输出1596.3.6使用字符串处理函数1616.3.7字符数组应用举例165习题168第7章用函数实现模块化程序设计1707.1为什么要用函数1707.2怎样定义函数1727.2.1为什么要定义函数1727.2.2定义函数的方法1737.3调用函数1747.3.1函数调用的形式1747.3.2函数调用时的数据传递1757.3.3函数调用的过程1777.3.4函数的返回值1787.4对被调用函数的声明和函数原型1797.5函数的嵌套调用1827.6函数的递归调用1847.7数组作为函数参数1927.7.1数组元素作函数实参1937.7.2数组名作函数参数1947.7.3多维数组名作函数参数1977.8局部变量和全局变量1997.8.1局部变量1997.8.2全局变量2007.9变量的存储方式和生存期2047.9.1动态存储方式与静态存储方式2047.9.2局部变量的存储类别2057.9.3全局变量的存储类别2087.9.4存储类别小结2127.10关于变量的声明和定义2147.11内部函数和外部函数2157.11.1内部函数2157.11.2外部函数215习题218第8章善于利用指针2208.1指针是什么2208.2指针变量2228.2.1使用指针变量的例子2228.2.2怎样定义指针变量2238.2.3怎样引用指针变量2248.2.4指针变量作为函数参数2268.3通过指针引用数组2308.3.1数组元素的指针2308.3.2在引用数组元素时指针的运算2318.3.3通过指针引用数组元素2338.3.4用数组名作函数参数2378.3.5通过指针引用多维数组2458.4通过指针引用字符串2558.4.1字符串的引用方式 2558.4.2字符指针作函数参数2598.4.3使用字符指针变量和字符数组的比较263 8.5指向函数的指针2668.5.1什么是函数指针2668.5.2用函数指针变量调用函数2668.5.3怎样定义和使用指向函数的指针变量268 8.5.4用指向函数的指针作函数参数2708.6返回指针值的函数2748.7指针数组和多重指针2778.7.1什么是指针数组 2778.7.2指向指针数据的指针2808.7.3指针数组作main函数的形参2828.8动态内存分配与指向它的指针变量2858.8.1什么是内存的动态分配2858.8.2怎样建立内存的动态分配2858.8.3void指针类型 2878.9有关指针的小结288习题291第9章用户自己建立数据类型2939.1定义和使用结构体变量2939.1.1自己建立结构体类型2939.1.2定义结构体类型变量 2959.1.3结构体变量的初始化和引用2979.2使用结构体数组3009.2.1定义结构体数组3009.2.2结构体数组的应用举例3019.3结构体指针3039.3.1指向结构体变量的指针3039.3.2指向结构体数组的指针3049.3.3用结构体变量和结构体变量的指针作函数参数306 9.4用指针处理链表3099.4.1什么是链表 3099.4.2建立简单的静态链表3109.4.3建立动态链表3119.4.4输出链表3159.5共用体类型3179.5.1什么是共用体类型3179.5.2引用共用体变量的方式3189.5.3共用体类型数据的特点3199.6使用枚举类型3239.7用typedef声明新类型名326习题330第10章对文件的输入输出33110.1C文件的有关基本知识33110.1.1什么是文件33110.1.2文件名33210.1.3文件的分类33210.1.4文件缓冲区33310.1.5文件类型指针33310.2打开与关闭文件33510.2.1用fopen函数打开数据文件33510.2.2用fclose函数关闭数据文件33710.3顺序读写数据文件33810.3.1怎样向文件读写字符33810.3.2怎样向文件读写一个字符串34110.3.3用格式化的方式读写文件34410.3.4用二进制方式向文件读写一组数据34510.4随机读写数据文件34910.4.1文件位置标记及其定位34910.4.2随机读写 35210.5文件读写的出错检测353习题354第11章常见错误分析355附录370附录A在Visual C++ 6.0环境下运行C程序的方法370附录B常用字符与ASCII代码对照表377附录CC语言中的关键字378附录D运算符和结合性378附录EC语言常用语法提要380附录FC库函数384参考文献390第4章选择结构程序设计854.1选择结构和条件判断854.2用if语句实现选择结构874.2.1用if语句处理选择结构举例874.2.2if语句的一般形式 894.3关系运算符和关系表达式914.3.1关系运算符及其优先次序914.3.2关系表达式924.4逻辑运算符和逻辑表达式924.4.1逻辑运算符及其优先次序934.4.2逻辑表达式944.4.3逻辑型变量964.5条件运算符和条件表达式974.6选择结构的嵌套1004.7用switch语句实现多分支选择结构1024.8选择结构程序综合举例106习题112第5章循环结构程序设计1155.1为什么需要循环控制1155.2用while语句实现循环1165.3用do…while语句实现循环1185.4用for 语句实现循环1215.5循环的嵌套1255.6几种循环的比较1265.7改变循环执行的状态1265.7.1用break语句提前终止循环1275.7.2用continue语句提前结束本次循环1285.7.3break语句和continue语句的区别1295.8循环程序举例132习题141第6章利用数组处理批量数据1436.1怎样定义和引用一维数组1436.1.1怎样定义一维数组1446.1.2怎样引用一维数组元素1456.1.3一维数组的初始化1466.1.4一维数组程序举例1476.2怎样定义和引用二维数组1496.2.1怎样定义二维数组1506.2.2怎样引用二维数组的元素1516.2.3二维数组的初始化1526.2.4二维数组程序举例1536.3字符数组1556.3.1怎样定义字符数组1556.3.2字符数组的初始化1566.3.3怎样引用字符数组中的元素156 6.3.4字符串和字符串结束标志1576.3.5字符数组的输入输出1606.3.6使用字符串处理函数1626.3.7字符数组应用举例166习题169第7章用函数实现模块化程序设计171 7.1为什么要用函数1717.2怎样定义函数1737.2.1为什么要定义函数1737.2.2定义函数的方法1747.3调用函数1757.3.1函数调用的形式1757.3.2函数调用时的数据传递1767.3.3函数调用的过程1787.3.4函数的返回值1797.4对被调用函数的声明和函数原型181 7.5函数的嵌套调用1837.6函数的递归调用1857.7数组作为函数参数1937.7.1数组元素作函数实参1937.7.2数组名作函数参数1957.7.3多维数组名作函数参数1987.8局部变量和全局变量2007.8.1局部变量2007.8.2全局变量2017.9变量的存储方式和生存期2057.9.1动态存储方式与静态存储方式205 7.9.2局部变量的存储类别2067.9.3全局变量的存储类别2097.9.4存储类别小结2137.10关于变量的声明和定义2157.11内部函数和外部函数2167.11.1内部函数2167.11.2外部函数216习题219第8章善于利用指针2218.1指针是什么2218.2指针变量2238.2.1使用指针变量的例子2238.2.2怎样定义指针变量2248.2.3怎样引用指针变量2258.2.4指针变量作为函数参数2278.3通过指针引用数组2328.3.1数组元素的指针2328.3.2在引用数组元素时指针的运算2338.3.3通过指针引用数组元素2348.3.4用数组名作函数参数2398.3.5通过指针引用多维数组2478.4通过指针引用字符串2578.4.1字符串的引用方式 2578.4.2字符指针作函数参数2618.4.3使用字符指针变量和字符数组的比较265 8.5指向函数的指针2688.5.1什么是函数指针2688.5.2用函数指针变量调用函数2688.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数2728.6返回指针值的函数2768.7指针数组和多重指针2798.7.1什么是指针数组 2798.7.2指向指针数据的指针2828.7.3指针数组作main函数的形参2848.8动态内存分配与指向它的指针变量2878.8.1什么是内存的动态分配2878.8.2怎样建立内存的动态分配2878.8.3void指针类型 2898.9有关指针的小结290习题293第9章用户自己建立数据类型2959.1定义和使用结构体变量2959.1.1自己建立结构体类型2959.1.2定义结构体类型变量 2979.1.3结构体变量的初始化和引用2999.2使用结构体数组3029.2.1定义结构体数组3029.2.2结构体数组的应用举例3049.3结构体指针3059.3.1指向结构体变量的指针3059.3.2指向结构体数组的指针3069.3.3用结构体变量和结构体变量的指针作函数参数3089.4用指针处理链表3119.4.1什么是链表 3119.4.2建立简单的静态链表3129.4.3建立动态链表3139.4.4输出链表3179.5共用体类型3199.5.1什么是共用体类型3199.5.2引用共用体变量的方式3209.5.3共用体类型数据的特点3219.6使用枚举类型3259.7用typedef声明新类型名328习题332第10章对文件的输入输出33310.1C文件的有关基本知识33310.1.1什么是文件33310.1.2文件名33410.1.3文件的分类33410.1.4文件缓冲区33510.1.5文件类型指针33510.2打开与关闭文件33710.2.1用fopen函数打开数据文件33710.2.2用fclose函数关闭数据文件33910.3顺序读写数据文件34010.3.1怎样向文件读写字符34010.3.2怎样向文件读写一个字符串34310.3.3用格式化的方式读写文件34610.3.4用二进制方式向文件读写一组数据34710.4随机读写数据文件35110.4.1文件位置标记及其定位35110.4.2随机读写 35410.5文件读写的出错检测355习题356第11章常见错误分析374附录390附录A在Visual C++ 6.0环境下运行C程序的方法390 附录CC语言中的关键字398附录D运算符和结合性398附录EC语言常用语法提要400附录FC库函数404参考文献410。
C语言实验参考代码——颜晖
P14-2#include <stdio.h>int main(){int fahr,celsius;printf("Enter fahr:");scanf("%d",&fahr);celsius = 5*fahr/9-5*32/9;printf("fahr = %d, celsius = %d\n",fahr,celsius);return 0;}P14-3#include <stdio.h>int main(){int fahr,celsius;printf("Enter celsius:");scanf("%d",&celsius);fahr = 9*celsius/5+32;printf("celsius = %d, fahr= %d\n",celsius,fahr);return 0;}P14-4#include <stdio.h>int main(){int average;average = (87 +72 +93)/3;printf("math = %d, eng= %d, comp = %d, average = %d\n",87,72,93,average);return 0;}P14-5#include <stdio.h>int main(){int n,digit1,digit2,digit3;printf("Enter n:");scanf("%d",&n);digit1 = n % 10;n = n/10;digit2 = n %10;n = n /10;digit3 = n %10;printf("%d,%d,%d\n",digit1,digit2,digit3);return 0;}P19-2#include <stdio.h>int main(){int fahr,celsius;printf("Enter fahr:");scanf("%d",&fahr);celsius = 5*(fahr-32)/9;printf("fahr = %d, celsius = %d\n",fahr,celsius);return 0;}P20-3#include <stdio.h>#include <math.h>int main(){int money,year;double rate,interest;printf("Enter money,year and rate:");scanf("%d%d%lf",&money,&year,&rate);interest = money*pow((1+rate),year)-money;printf("interest = %.2f\n",interest);return 0;}P20-4#include <stdio.h>#include <math.h>int main(){double x,y;printf("Enter x:");scanf("%lf",&x);if (x<0) y = pow((x+1),2)+2*x+1.0/x;else y = sqrt(x);printf("f(%0.2f) = %0.2f\n",x,y);return 0;}P23-6#include <stdio.h>#include <math.h>int main(){int num1,num2;printf("Enter num1:");scanf("%d",&num1);printf("Enter num2:");scanf("%d",&num2);printf("%d + %d = %d\n",num1,num2,num1+num2);printf("%d - %d = %d\n",num1,num2,num1-num2);printf("%d * %d = %d\n",num1,num2,num1*num2);printf("%d / %d = %d\n",num1,num2,num1/num2);printf("%d %% %d = %d\n",num1,num2,num1%num2);return 0;}P23-7#include <stdio.h>#include <math.h>int main()int time1,time2,hour,minute1,minute2,minute;printf("Enter time1:");scanf("%d",&time1);printf("Enter time2:");scanf("%d",&time2);hour = time2 /100 -time1 /100;minute2 = time2%100;minute1 = time1%100;if (minute2 < minute1) {minute2 = minute2 +60;hour = hour -1;}minute = minute2 -minute1;printf("The train journey time is %d hours %d minutes\n",hour,minute);return 0;}P23-8#include <stdio.h>#include <math.h>int main(){int number,n1,n2,n3,n4;printf("Enter a number:");scanf("%d",&number);n1 = ((number % 10)+9) %10;number = number /10;n2 = ((number % 10)+9) %10;number = number /10;n3 = ((number % 10)+9) %10;number = number /10;n4 = ((number % 10)+9) %10;number = n2*1000+n1*100+n4*10+n3;printf("The encrypted number is %d\n",number);return 0;}P27-2#include <stdio.h>int main(){int number,sum,i;printf("Enter a number:");scanf("%d",&number);sum = 0;for (i=number;i<=100;i++) sum = sum+i;printf("sum = %d\n",sum);return 0;}P27-3#include <stdio.h>int main(){int m,n,i;double sum;printf("Enter m:");scanf("%d",&m);printf("Enter n:");scanf("%d",&n);sum = 0;for (i=m;i<=n;i++) sum = sum+1.0/i;printf("sum = %.3f\n",sum);return 0;}P27-4#include <stdio.h>int main(){int number,i,j;double sum;printf("Enter a number:");scanf("%d",&number);sum = 0;j = 1;for (i=1;i<=number;i++,j+=2) sum = sum+1.0/j;printf("sum = %f\n",sum);return 0;}P27-5#include <stdio.h>int main(){int number,i,j,flag;double sum;printf("Enter a number:");scanf("%d",&number);sum = 0;j = 1;flag = 1;for (i=1;i<=number;i++,j+=3){sum = sum+1.0*flag/j;flag = -flag;}printf("sum = %.3f\n",sum);return 0;}P29-7#include <stdio.h>int main(){int m,n,i;int sum,sum1,sum2;printf("Enter m:");scanf("%d",&m);printf("Enter n:");scanf("%d",&n);sum = 0;sum1 = 1;sum2=1;for (i=1;i<=m;i++) sum1 = sum1*i;for (i=1;i<=n;i++) sum2 = sum2*i;sum = sum1 +sum2;printf("%d! + %d! = %d\n",m,n,sum);return 0;}P29-8#include <stdio.h>int main(){double x,sum;int n,i;printf("Enter x:");scanf("%lf",&x);printf("Enter n:");scanf("%d",&n);sum = 1;for (i=1;i<=n;i++) sum = sum*x;printf("%0.3f的%d次方是%0.2f\n",x,n,sum);return 0;}P29-1#include <stdio.h>#include <math.h>int main(){int i,n;double x;printf("Enter n:");scanf("%d",&n);for (i=0;i<=n;i++) { x = pow(3,i); printf("pow(3,%d) = %.0f\n",i,x);} return 0;}P29-2#include <stdio.h>#include <math.h>double fact(int n);int main(){int i,n;double x;printf("Enter n:");scanf("%d",&n);for (i=1;i<=n;i++) { x = fact(i); printf("%d! = %.0f\n",i,x);}return 0;}double fact(int n){int i;double x;x = 1.0;for (i=1;i<=n;i++) x = x*i;return x;}P30-3#include <stdio.h>#include <math.h>double fact(int n);int main(){int i,n,m;double x,x1,x2,x3;printf("Enter m:");scanf("%d",&m);printf("Enter n:");scanf("%d",&n);for (i=1;i<=n-m;i++) x1 = fact(i);for (i=1;i<=m;i++) x2 = fact(i);for (i=1;i<=n;i++) x3 = fact(i);x = x3/(x1*x2);printf("result = %.0f\n",x);return 0;}double fact(int n){int i;double x;x = 1.0;for (i=1;i<=n;i++) x = x*i;return x;}P30-4#include <stdio.h>#include <math.h>int main(){int i;double sum;sum = 0;for (i=100;i<=1000;i++) sum = sum + sqrt(i);printf("sum = %.2f\n",sum);return 0;}P30-5#include <stdio.h>#include <math.h>int main(){double loan,rate,money;int month,i;printf("Enter loan, rate :");scanf("%lf%lf",&loan,&rate);printf("还款年限月还款额\n");for (i=5;i<=30;i++){month = 12*i;money = loan*10000*rate*pow((1+rate),month)/(pow((1+rate),month)-1);printf(" %d %.0f\n",i,money);}return 0;}P32-2#include <stdio.h>int main(void){ int x, y;printf("Enter x: ");scanf ("%d", &x) ;if (x < 0) y = -1;else if (x == 0) y = 0;else y = 1;printf("sign(%d) = %d\n",x,y);return 0;}P33-3#include <stdio.h>int main(void){ int letter,blank,digit,other;int i;char ch;letter = blank = digit = other = 0;printf("Input 10 character: ");for (i=0;i<10;i++){scanf ("%c", &ch) ;if (ch>='0' && ch<='9') digit = digit +1;else if ((ch >= 'a' && ch<='z') || (ch>='A' && ch<='Z')) letter = letter +1;else if (ch == ' ' || ch == '\n') blank = blank +1;else other = other +1;}printf("letter = %d, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other);return 0;}P34-4#include <stdio.h>int main(void){ char grade;printf("Input Grade: ");grade = getchar(); ;switch (grade){case 'A' : printf("A对应的百分制成绩区间是90~100\n");break;case 'B' : printf("B对应的百分制成绩区间是80~89\n");break;case 'C' : printf("C对应的百分制成绩区间是70~79\n");break;case 'D' : printf("D对应的百分制成绩区间是60~69\n");break;case 'E' : printf("E对应的百分制成绩区间是0~59\n");break;default : break;}return 0;}P34-5#include <stdio.h>main(){int i,num;float price;printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");for (i=1;i<=5;i++){printf("input the number:");scanf("%d",&num);if (num==0) break;switch (num){ case 1: price = 3.00; break;case 2: price = 2.50;break;case 3: price = 4.10;break;case 4: price = 10.20;break;default: price = 0;break;}printf("其价格为:%.1f\n",price);}}P35-9#include <stdio.h>int main(void){ int n,score,i;int anum,bnum,cnum,dnum,e_num=0;anum=bnum=cnum=dnum=e_num=0;printf("Enter n: ");scanf("%d",&n);for (i=1;i<=n;i++){printf("Enter grade %d:",i);scanf("%d",&score);if (score<=100 && score >=90) anum= anum+1;else if (score<=89 && score >=80) bnum= bnum+1;else if (score<=79 && score >=70) cnum= cnum+1;else if (score<=69 && score >=60) dnum= dnum+1;else e_num= e_num+1;}printf("The number of A(90~100):%d\n",anum);printf("The number of B(80~89):%d\n",bnum);printf("The number of C(70~79):%d\n",cnum);printf("The number of D(60~69):%d\n",dnum);printf("The number of E(0~59):%d\n",e_num);return 0;}P40-2#include <stdio.h>#include <math.h>int main(void){ int denominator,flag;double eps,s,item;flag = 1;item = 1.0;denominator = 1;s = 0;printf("Enter a eps:");scanf("%lf",&eps);while (fabs(item)>=eps){item = flag*1.0/denominator;s = s + item;flag = -flag;denominator = denominator +3 ;}printf("s = %.6f\n",s);}P41-3#include <stdio.h>#include <math.h>int main(void){ int sum,number;sum = 0;printf("Input integers");scanf("%d",&number);while (number>0){if (number%2 != 0) sum = sum + number;scanf("%d",&number);}printf("The sum of the old numbers is %d\n",sum); }P41-4#include <stdio.h>#include <math.h>int main(void){ int count,number;count = 0;printf("Input an integer:");scanf("%d",&number);do{count = count +1;number = number /10;} while (number !=0);printf("count = %d\n",count); }P41-5#include <stdio.h>int main(){int n,min,i,number;printf("Input n:");scanf("%d",&n);printf("Input numbers:");scanf("%d",&number);min = number;for (i=1;i<n;i++){scanf("%d",&number);if (number<min) min = number;}printf("min = %d\n",min);return 0;}P41-6#include <stdio.h>#include <math.h>int main(void){ int count,number,sum;count = 0;sum = 0;printf("Input an integer:");scanf("%d",&number);do{count = count +1;sum = sum + number %10;number = number /10;} while (number !=0);printf("count = %d, sum = %d\n",count,sum); }P41-7#include <stdio.h>int main(){int n,i;int item1,item2,item;double sum;printf("Input n:");scanf("%d",&n);item1 = 2;item2 = 1;sum = 0;for (i=1;i<=n;i++){sum = sum + item1*1.0/item2;item = item1;item1 = item +item2;item2 = item;}printf("s = %.2f\n",sum);return 0;}P41-8#include <stdio.h>#include <math.h>int main(void){ int a,b,n,sum,i;sum = 0;printf("Input a , n:");scanf("%d%d",&a,&n);b = a;for (i=1;i<=n;i++){sum = sum + a;a= a*10+b;}printf("sum = %d\n",sum);}P41-9#include <stdio.h>int main(){int n,i;double height,distance;printf("Input height:");scanf("%lf",&height);printf("Input n:");scanf("%d",&n);distance = height*1.0;for (i=1;i<=n;i++){height = height /2;distance = distance + 2*height;}printf("distance = %.1f\nheight = %.1f\n",distance,height);return 0;}P43-1#include <stdio.h>int main(){int n,i,fact;double e;printf("Input n:");scanf("%d",&n);e = 1;fact = 1;for (i=1;i<=n;i++){fact = fact *i;e = e + 1.0 / fact;}printf("e = %.4f\n",e);return 0;}#include <stdio.h>int fact(n);int main(){int n,i;double e;printf("Input n:");scanf("%d",&n);e = 1;for (i=1;i<=n;i++){e = e + 1.0 / fact(i);}printf("e = %.4f\n",e);return 0;}int fact(n){int fact,i;fact = 1;for (i=1;i<=n;i++){fact = fact *i;}return fact;}#include <stdio.h>int main(){int n,i,j,fact;double e;printf("Input n:");scanf("%d",&n);e = 1;for (i=1;i<=n;i++){fact = 1;for (j=1;j<=i;j++){fact = fact *j;}e = e + 1.0 / fact;}printf("e = %.4f\n",e);return 0;}P43-2#include <stdio.h>int main(){int m,n,i,j;int num;printf("Input m:");scanf("%d",&m);printf("Input n:");scanf("%d",&n);num = 0;for (i=m;i<=n;i++){for (j=2;j<i;j++)if (i%j == 0) break;if (j == i) {num++;printf("%d ",i);if (num==6) printf("\n");}}printf("\n");return 0;}P43-3#include <stdio.h>int main(){int money,count;int fen5,fen2,fen1;printf("Input money:");scanf("%d",&money);count = 0;for (fen5=1;fen5<=money;fen5++)for (fen2=1;fen2<=money;fen2++)for(fen1=1;fen1<=money;fen1++)if (fen1*1+fen2*2+fen5*5==money){printf("fen5:%d fen2:%d fen1:%d\n",fen5,fen2,fen1);count = count+1;}printf("count = %d\n",count);return 0;}P44-4#include <stdio.h>int main(){int m,n;int s,d,i,d1;printf("Input m:");scanf("%d",&m);printf("Input n:");scanf("%d",&n);for (i=m;i<=n;i++){ d = i;s = 0;while (d != 0){ d1 = d % 10;s = d1*d1*d1 +s;d = d/10;}if (s==i) printf("%d\n",i);}return 0;}P45-6#include <stdio.h>int isPrime(int num);int main(){int number,i,j,s;for (number=6;number<=22;number+=2){for (i=1;i<number;i++)if (isPrime(i))for (j=1;j<number;j++){if (isPrime(j)){s = i+j;if (s==number) printf("%d= %d + %d ",s,i,j);}}printf("\n");}return 0;}int isPrime(int num){int i;for (i=2;i<num;i++)if (num%i==0) return 0;return 1;}P45-7#include <stdio.h>int main(){int number,d,num1,sum;printf("Input an integer:");scanf("%d",&number);sum = 0;num1 = number;do{d = num1 %10;sum = sum*10+d;num1 = num1/10;} while (num1 !=0);num1 = sum;do{d = num1 %10;printf("%d ",d);num1 = num1/10;} while (num1 !=0);printf("\n");return 0;}#include <stdio.h>int main(){int number,d,num1,sum,i,j,fact,sum1;printf("Input an integer:");scanf("%d",&number);sum = 0;num1 = number;do{num1 = num1/10;sum++;} while (num1 !=0);fact = 1;sum1 = sum;for (i=1;i<=sum;i++){for (j=sum1;j>1;j--) fact = fact*10;d = number /fact;printf("%d ",d);number = number - d*fact;fact = 1;sum1--;}printf("\n");return 0;}P49-2#include <stdio.h>int sign(int x);int main(){int x,y;printf("Enter x:");scanf("%d",&x);y = sign(x);printf("sign(%d) = %d\n",x,y);return 0;}int sign(int x){if (x>0) return 1;else if (x==0) return 0;else return -1;}P50-3#include <stdio.h>int even(int x);int main(){int x,sum;sum = 0;printf("Input integers:");scanf("%d",&x);while (x>0){if (!even(x)) sum = sum+x;scanf("%d",&x);}printf("The sum of odd numbers is %d\n",sum);return 0;int even(int x){if (x%2==0) return 1;else return 0;}P50-4#include <stdio.h>#include <math.h>double dist(x1,y1,x2,y2);int main(){int x1,x2,y1,y2;double distance;printf("Input(x1,y1):");scanf("%d%d",&x1,&y1);printf("Input(x2,y2):");scanf("%d%d",&x2,&y2);distance = dist(x1,y1,x2,y2);printf("distance = %.2f\n",distance);return 0;}double dist(x1,y1,x2,y2){return sqrt(pow((x2-x1),2)+pow((y2-y1),2)); }P50-5#include <stdio.h>int Prime(int num);int main()int m,n,i;int count,sum;printf("Input m:");scanf("%d",&m);printf("Input n:");scanf("%d",&n);sum = 0;count = 0;for (i=m;i<=n;i++){if (Prime(i)) {count++;sum = sum+i;}}printf("count = %d,sum = %d\n",count,sum);return 0;}int Prime(int num){int i;if (num==1) return 0;for (i=2;i<num;i++)if (num%i==0) return 0;return 1;}P50-6#include <stdio.h>int main(){int countdigit(int number,int digit);int number;printf("Enter an integer:");scanf("%d",&number);printf("Number of digit 2:%d\n",countdigit(number,2));return 0;}int countdigit(int number,int digit) { int d,count=0;do{d=number%10;if (d==digit) count++;number = number/10;} while (number!=0);return count;}P50-6#include <stdio.h>int is(int number){ int d,s,d1;d = number;s = 0;while (d != 0){ d1 = d % 10;s = d1*d1*d1 +s;d = d/10;}if (s==number) return 1;else return 0;}int main(){int m,n;int i;printf("Input m:");scanf("%d",&m);printf("Input n:");scanf("%d",&n);for (i=m;i<=n;i++)if (is(i)) printf("%d\n",i);return 0;}P56-2#include <stdio.h>int main(){int decimal;printf("Input a decimal:");scanf("%d",&decimal);printf("The octal is %o\n",decimal);printf("The hexadecimal is %x\n",decimal);return 0;}P56-3#include <stdio.h>int main(){char ch;int letter=0,blank=0,digit=0,other=0;while ((ch=getchar())!='\n')if (ch<='9' && ch>='0') digit++;else if ((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')) letter++;else if (ch==' ') blank++;else other++;printf("letter = %d, blank = %d, digit = %d, other =%d\n",letter,blank,digit,other);return 0;}P56-4#include <stdio.h>int fn(int a,int n){int result,i;result =0;for (i=1;i<=n;i++)result = result*10+a;return result;}int main(){int a,n,sum,i;printf("Input a:");scanf("%d",&a);printf("Input n:");scanf("%d",&n);sum = 0;for (i=1;i<=n;i++)sum = sum + fn(a,i);printf("sum = %d\n",sum);}P58-8#include <stdio.h>int fib(int n){int x,x1,x2,i;x1=1;x2=1;for (i=2;i<=n;i++){ x= x1+x2;x1 = x2;x2 = x;}return x;}int main(){int m,n,i;printf("Input m:");scanf("%d",&m);printf("Input n:");scanf("%d",&n);for (i=1;i<=n/2;i++)if (fib(i)>=m &&fib(i)<=n) printf("%d ",fib(i));printf("\n");}7.11.#include <stdio.h>void main(){int n,a[10],i,sum;double average;printf("Input n:");scanf("%d",&n);sum = 0;printf("Input %d integers:",n);for (i=0;i<=n-1;i++){ scanf("%d",&a[i]);sum = sum+a[i];}average = sum*1.0/n;printf("average=%.2f\n",average);}2.#include <stdio.h>void main(){int n,a[10],i;printf("Input n:");scanf("%d",&n);printf("Input %d integers:",n);for (i=0;i<=n-1;i++) scanf("%d",&a[i]);printf("Afer reversed:");for (i=n-1;i>=0;i--) printf("%d ",a[i]);printf("\n");}3.#include <stdio.h>void main(){int n,a[10],i;int max,index;printf("Input n:");scanf("%d",&n);printf("Input %d integers:",n);max = 0; index = 0;for (i=0;i<=n-1;i++) {scanf("%d",&a[i]);if (a[i]>max) {max = a[i]; index =i;} }printf("max=%d,index=%d",max,index);printf("\n");}4.#include <stdio.h>void main(){int n,a[10],i;int max,min,index;printf("Input n:");scanf("%d",&n);printf("Input %d integers:",n);scanf("%d",&a[0]); min = a[0];for (i=1;i<=n-1;i++) {scanf("%d",&a[i]);if (a[i]<min) {min = a[i];index = i;} }a[index] = a[0]; a[0] = min;//for (i=0;i<=n-1;i++) printf("%d ",a[i]);max = a[0];for (i=1;i<=n-1;i++) {if (a[i]>max) {max = a[i];index =i;}}a[index] = a[n-1]; a[n-1] = max;printf("After swapped:");for (i=0;i<=n-1;i++) printf("%d ",a[i]);printf("\n");}5.#include <stdio.h>void main(){int n,a[10],i;int max,j;printf("Input n:");scanf("%d",&n);printf("Input %d integers:",n);scanf("%d",&a[0]); max = a[0];for (i=1;i<=n-1;i++)scanf("%d",&a[i]);//for (i=0;i<=n-1;i++) printf("%d ",a[i]);//max = a[0];for (i=0;i<=n-1;i++) {max=a[i];for (j=i+1;j<=n-1;j++)if (a[j]>max) {max = a[j];a[j]=a[i];a[i]=max;} }printf("After sorted:");for (i=0;i<=n-1;i++) printf("%d ",a[i]);printf("\n");}7.21.#include <stdio.h>void main(){int n,a[6][6],i,j;int sum;printf("Input n:");scanf("%d",&n);sum = 0;printf("Input array:\n");for (i=0;i<=n-1;i++)for (j=0;j<=n-1;j++){scanf("%d",&a[i][j]);if ((i==n-1) || (j==n-1) || (i==n-1-j)) continue;sum = sum+a[i][j];}printf("sum = %d\n",sum);}2.#include <stdio.h>void main(){int n,a[10][10],i,j;printf("Input n:");scanf("%d",&n);for (i=1;i<=n;i++) a[0][i] = i;for (i=1;i<=n;i++) a[i][0] = i;for (i=1;i<=n;i++)for (j=1;j<=n;j++){a[i][j] = a[i][0]*a[0][j];}for (i=0;i<=n;i++){for (j=0;j<=n;j++)if ((i==0) && (j==0)) printf(" *");else printf("%4d",a[i][j]);printf("\n");}}3.#include <stdio.h>void main(){int n,a[6][6],i,j;int sum,flag;printf("Input n:");scanf("%d",&n);flag = 0;sum = 0;printf("Input array:\n");for (i=0;i<=n-1;i++)for (j=0;j<=n-1;j++){scanf("%d",&a[i][j]);if ((i>j) && (a[i][j] !=0)) flag =1;}if (flag==0) printf("YES\n");else printf("NO\n");}4.#include <stdio.h>void main(){int d[12] = {31,29,31,30,31,30,31,31,30,31,30,31};int sum,i;int year,month,day;printf("Input year,month,day:");scanf("%d%d%d",&year,&month,&day);if (((year%4==0) && (year%100 !=0)) || (year%400)) d[1]=28;sum = 0;for (i=1;i<=month-1;i++) sum =sum+d[i];sum = sum+day;printf("Days of year :%d\n",sum);}5.#include <stdio.h>void main(){int n,a[6][6],i,j,k;int sum,flag;int max,row,col;printf("Input n:");scanf("%d",&n);flag = 0;sum = 0;printf("Input array:\n");for (i=0;i<=n-1;i++)for (j=0;j<=n-1;j++){scanf("%d",&a[i][j]);}for (i=0;i<=n-1;i++){max = a[i][0];row=i;col=j;for (j=0;j<=n-1;j++){if (a[i][j]>max) {max = a[i][j]; row = i;col=j;} }for (k=0;k<=n-1;k++)if (a[k][col]>=max) flag=1;else {flag=0;break;}if (flag==1) break;}if (flag==1) printf("a[%d][%d] = %d\n",row,col,max);else printf("NO\n");}7.31.#include <stdio.h>void main(){char letter,ch;char str[80];int i;printf("Input a character:");letter=getchar();while ((ch=getchar()) != '\n');printf("Input a string:");i=0;while ((str[i]=getchar())!='\n') i++;str[i]='\0';i=0;while (str[i]!=letter) i++;printf("index = %d\n",++i);}2.#include <stdio.h>void main(){char ch;//char str[80];int i,count;printf("Input a strung:");count=0;while ((ch=getchar()) != '\n'){if (ch>='A' && ch<='Z')if (ch!='A' && ch!='E' && ch!='I' && ch!='O' && ch!='U') count++;}printf("count=%d\n",count);}3.#include <stdio.h>void main(){//char ch;char ch[80];int i,count;printf("Input a string:");count=0;i=0;while ((ch[i]=getchar()) != '\n'){if (ch[i]>='A' && ch[i]<='Z') ch[i]= 'A'+'Z'-ch[i];i++;}ch[i]='\0';。
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 全部课后习题答案
3. /*输入一个学生的数学成绩,低于 60,输出“Fail” ,否则,输出“Pass” 。*/ #include<stdio.h> void main() { double mark; //输入数序成绩 printf(" Input a mark:\n"); scanf("%lf", &mark);
5. /*输入 4 个整数 n, 输出最小值。*/ #include<stdio.h> void main() { int a,b,c,d, min; //输入 4 整数 printf(" Input number of integers n:\n"); scanf("%d%d%d%d", &a,&b,&c,&d);
s ( s a )( s b)( s c), where s
abc 2
源程序: #include<stdio.h> #include<math.h> void main() { double a, b, c, s, area, perimeter; //输入三条边 a,b,c printf(" Input three edges a b c:"); scanf("%lf%lf%lf", &a,&b,&c); //判断 a b c 是否构成三角形 if(a+b>c || a+c>b || b+c>a) { perimeter =a+b+c; s =perimeter/2; area =sqrt( s*(s-a)*(s-b)*(s-c) ); printf(“ area=%.2f, parameter=%.2f \n”, area, parameter); } else printf("These sides do not correspond to a valid triangle. \n"); }
C语言程序设计(第3版)何钦铭-颜-晖-第8章--指针
第8章指针【练习8-1】如果有定义”int m, n = 5, *p = &m;”与m = n等价的语句是B 。
A.m = *p; B. *p = *&n; C. m = &n; D. m = **p;解答:A:p是指向m的指针变量,所以*p等价于m。
即m=m。
B:&n是n的地址,*&n是n的值,即把n的值赋给p指向的值m。
即m=n。
C:&n是n的地址。
即把n的地址赋给m。
D:**p是指p指向的指针所指向的值,在此无意义。
故选B。
【练习8-2】调用函数求两个数的和与差:计算输入的两个数的和与差,要求自定义一个函数sum_diff(float op1,float op2, float *psum, float *pdiff),其中op1和op2是输入的两个数,*psum 和*pdiff 是计算得出的和与差。
解答:#include<stdio.h>void sum_diff(float op1,float op2,float *psum,float *pdiff);int main(void){float op1,op2,sum,diff;printf("Input op1 and op2: ");scanf("%f%f",&op1,&op2);sum_diff(op1,op2,&sum,&diff);printf("%f+%f=%f;%f-%f=%f \n",op1,op2,sum,op1,op2,diff);return 0;}void sum_diff(float op1,float op2,float *psum,float *pdiff){*psum=op1+op2;*pdiff=op1-op2;}【练习8-3】两个相同类型的指针变量能不能相加?为什么?解答:不能。
C语言学习教程目录
第一章-C语言概论第二章-数据类型、运算符、表达式(一)第二章-数据类型、运算符、表达式(二)第二章-数据类型、运算符、表达式(三)第二章-数据类型、运算符、表达式(四)第二章-数据类型、运算符、表达式(五)第二章-数据类型、运算符、表达式(六)第二章-数据类型、运算符、表达式(七)第二章-数据类型、运算符、表达式(八)第三章-C语言程序设计初步(1)第三章-C语言程序设计初步(2)第三章-C语言程序设计初步(3)第三章-C语言程序设计初步(4)第三章-C语言程序设计初步(5)第三章-C语言程序设计初步(6)第三章-C语言程序设计初步(7)第三章-C语言程序设计初步(8)第三章-C语言程序设计初步(9)第四章-数组(1)第四章-数组(2)第四章-数组(3)第四章-数组(4)第四章-数组(5)第四章-数组(6)第四章-数组(7)第四章-数组(8)第五章-函数(1)第五章-函数(2)第五章-函数(3)第五章-函数(4)第五章-函数(5)第五章-函数(6)第五章-函数(7)第五章-函数(8)第五章-函数(9)第五章-函数(10)第六章-指针(1)第六章-指针(2)第六章-指针(3)第六章-指针(4)第六章-指针(5)第六章-指针(6)第六章-指针(7)第六章-指针(8)第七章-结构与联合(1) 第七章-结构与联合(2) 第七章-结构与联合(3) 第七章-结构与联合(4) 第七章-结构与联合(5) 第七章-结构与联合(6) 第七章-结构与联合(7) 第七章-结构与联合(8) 第八章-枚举、位运算(1) 第八章-枚举、位运算(2) 第八章-枚举、位运算(3) 第八章-枚举、位运算(4) 第八章-枚举、位运算(5) 第九章-预处理(1)第九章-预处理(2)第九章-预处理(3)第九章-预处理(4)第十章-文件(1)第十章-文件(2)第十章-文件(3)第十章-文件(4)第十章-文件(5)第十章-文件(6)第十章-文件(7)第十章-文件(8)。
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 习题5 课后答案
printf("%d \n", result); }
n位 28. /*输入 2 个正整数 a 和 n, 求 a+aa+。 。 。+aa…a,要求定义并调用函数 fn(a,n),它的功能是返回由 n 位 a 组成 的整数 aa…a */ 算法分析:1. 函数分工:主函数 main()负责输入 a 和 n,循环调用 fn(),即 fn(a,1), fn(a,2),…fn(a,n),并求累加和, 输出累加和;函数 fn(a,n)负责计算并返回由 n 位 a 组成的整数 #include<stdio.h> int fn(int a, int n); void main() { int a, n, i, sum=0; //输入正整数 a 和 n do{ printf(" Input a (a>0):"); scanf("%d", &a); printf(" Input n (n>0):"); scanf("%d", &n); }while ( a<=0 || n<=0); //如果输入的 a、n 不都是正数,重新再输入,直到 a 和 n 均为正数为止 //求 a+aa+…+aa…a, 即 fn(a,1)+fn(a,2)+…+fn(a,n) for(i=1; i<=n; i++) sum= sum+ fn(a,i); printf("sum=%d \n", sum); } //定义函数 fn(a,n),求由 n 位 a 组成的整数 aa…a int fn(int a, int n) { int k, result=0; for(k=1;k<=n; k++) result= result*10+a; return result; }
C语言程序设计第版何钦铭颜晖函数
第5章函数练习5-1使用函数求1到n之和:输入一个正整数 n,输出1~n之和.要求自定义和调用函数sum(n)求 1~n 之和.若要计算 m~n(m<n)之和,又该如何定义函数试编写相应程序.解答:include <stdio.h>int sum(int n);int main(void){int n;int sum;printf("Enter n:")scanf("%d", &n);printf("sum = %d\n", sum(n));return 0;}int sum(int n){int result, i;result = 0;for(i = 1; i <= n; i++)result = result + i;return result;}若要计算 m~n(m<n)之和,则需要在 main()中定义 2 个变量 m 和 n: scanf("%d%d", &m, &n);printf("sum = %d\n", sum(m, n));同时在函数定义时需设置 2 个形参:int sum(int m, int n){int result, i;result = 0;for(i = m; i <= n; i++)result = result + i;return result;}练习5-2使用函数找最大值:输入2个数,输出其中较大(de)数.要求定义和调用函数 max(a, b)找出并返回 a、b 中较大(de)数.试编写相应程序.解答:include <stdio.h>double max(double a, double b);int main(void){int a, b;printf(“Input a and b:”);scanf("%lf%lf",&a, &b);printf("max= %lf\n", max(a, b));return 0;}double max(double a, double b){if(a > b)return a;elsereturn b;}练习5-3数字金字塔:输入一个正整数 n,输出n行数字金字塔.试编写相应程序.解答:include <stdio.h>int main(void){int n,i,j;printf(“Enter n:”);scanf("%d", &n);for(i = 1; i <= n; i++){for(j = 1; j <= n - i; j++)printf(" ");for(j = 1; j <= i; j++)printf("%d ", i);putchar('\n');}return 0;}练习5-4 思考:若把例 5-9 中静态变量 f 定义成普通局部变量,还能实现计算 n吗请上机检验.若把 f 换成全局变量又会如何解答:若把例 5-9 中静态变量 f 定义成普通局部变量,无法实现计算 n,因为函数返回后 f 单元被系统回收,不再保存原有数据.若把 f 换成全局变量,则能实现计算 n,因为 f (de)作用范围和生命周期一直存在.习题5一、选择题1.在 C 语言程序中,若对函数类型未加显式说明,则函数(de)隐含类型为D .A.void B.double C.char D.int 2.下列程序(de)输出结果是 D .fun(int a, int b, int c){ c = a b; }int main(void){ int c;fun(2, 3, c);printf(”%d\n”, c);return 0;}A.0 B.1 C.6 D.无法确定3.建立自定义函数(de)目(de)之一是 B(优先)、C .A.提高程序(de)执行效率 B.提高程序(de)可读性C.减少程序(de)篇幅 D.减少程序文件所占内存4.以下正确(de)函数定义形式是 A .A.double fun(int x, int y) B.double fun(int x; int y) C.double fun(int x, int y); D.double fun(int x, y) 5.以下不正确(de)说法是 C .A.实参可以是常量、变量或表达式C.形参可以是常量、变量或表达式B.实参可以是任何类型D.形参应与对应(de)实参类型一致6.以下正确(de)说法是 D .A.实参与其对应(de)形参共同占用一个存储单元B.实参与其对应(de)形参各占用独立(de)存储单元C.只有当实参与其对应(de)形参同名时才占用一个共同(de)存储单元D.形参是虚拟(de),不占用内存单元二、填空题1.下列程序(de)输出结果为 2357 .include <stdio.h>int fun3(int m);int main(void){ int n;for (n = 1; n < 10; n++)if (fun3(n) == 1) printf("%d ", n);return 0;}int fun3(int m){ int i;if (m == 2 || m == 3) return 1;if (m < 2 | |m % 2 == 0) return 0;for (i = 3; i < m; i = i + 2)if (m % i == 0) return 0;return 1;}2.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列,请根据题意,将程序补充完整.include <stdio.h>int fun1( int m );int main(void){ int n;scanf("%d", &n);while (n > 0) {if(fun1(n))printf("%d 中各位数字按从小到大排列\n", n);scanf("%d", &n);}}int fun1( int m ){ int k;k = m % 10;while(m)if( m / 10 % 10 > k)return 0;else { m = m/10 ; k = m % 10; }r eturn 1;}3.下列函数输出一行字符:先输出 kb 个空格,再输出 n 个指定字符(由实参指定).请根据题意,将程序补充完整.include <stdio.h>void print( int kb, int n, char zf ){ int i;for(i = 1; i <= kb; i++)printf(“ ”);for (i = 1; i <= n; i++ )printf(“%c”, zf);}三、程序设计题1.使用函数计算分段函数(de)值:输入 x,计算并输出下列分段函数 f(x) (de)值.要求定义和调用函数 sign(x) 实现该分段函数.试编写相应程序.1 x > 0f(x)= 0 x = 0-1 x < 0解答:include <stdio.h>int main(void){int sign(int x);scanf("%d",&x);y = sign(x);printf("sign(%d) = %d\n", x, y);return 0;}int sign(int x){int y;if(x>0) y=1;else if (x==0) y=0;else y=-1;return y;}2.使用函数求奇数和:输入一批正整数(以零或负数为结束标志),求其中(de)奇数和.要求定义和调用函数 even(n)判断数(de)奇偶性,当 n 为偶数时返回 1,否则返回 0.试编写相应程序.解答:include <stdio.h>int even(int n);int main(void){scanf("%d",&n);sum = 0;while(n > 0){if(even(n) == 0) sum = sum + n;scanf("%d", &n);}printf("The sum of the odd numbers is %d.\n", sum);return 0;}int even(int n){int y;if (n % 2 == 0) y = 1;else y = 0;return y;}3.使用函数计算两点间(de)距离:给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间(de)距离(保留2位小数).要求定义和调用函数dist(x1,y1,x2,y2)计算两点之间(de)距离.试编写相应程序.解答:include<stdio.h>double dist(double x1,double y1,double x2,double y2);int main(void){double x1,y1,x2,y2;printf("Enter x1 and y1:");scanf("%lf%lf",&x1,&y1);printf("Enter x2 and y2:");scanf("%lf%lf",&x2,&y2);printf("Distance=%.2lf",dist(x1,y1,x2,y2));return 0;}double dist(double x1,double y1,double x2,double y2){double distance;distance=sqrt(pow(fabs(x2-x1),2)+pow(fabs(y2-y1),2));return distance;}4.利用函数计算素数个数并求和:输入两个正整数 m 和 n(1<=m, n<=500),统计并输出 m 和 n 之间(de)素数(de)个数以及这些素数(de)和.要求定义并调用函数 prime(m)判断 m 是否为素数.试编写相应程序.解答:include<math.h>int prime(int m);int main(void){int m,n,sum,count;printf("Input m:");scanf("%d",&m);printf("Input n:");scanf("%d",&n);sum=0;count=0;for(;m<=n;m++){if(prime(m)==1){sum=sum+m;count++;}}printf("%d和%d之间素数(de)个数:%d\n",m,n,count);p rintf("%d和%d之间素数(de)和:%d\n",m,n,sum);return 0;}int prime(int m){int i;for(i=2;i<=sqrt(m);i++)if(m%i==0)return 0;if(i>h&&m=1)return 1;}5.使用函数统计指定数字(de)个数:读入一个整数 , 统计并输出该数中“2”(de) 个数 . 要求定义并调用函数countdigit(number,digit),它(de)功能是统计整数number 中数字digit (de)个数.例如,countdigit(12292,2)(de)返回值是 3.试编写相应程序.解答:include<stdio.h>int countdigit(int number,int digit);int main(void){int number,digit;printf("Enter an integer:");scanf("%d",&number);printf("Number of digit ");scanf("%d",&digit);printf(":%d",countdigit(number,digit));return 0;}int countdigit(int number,int digit){int a,count;if(number<0)number=-number;while(number>0){a=number;if(number%10==digit)count++;number=number/10;}return count;}6.使用函数输出水仙花树:输入两个正整数 m 和 n(1<=m,n<=1000),输出 m~n 之间所有满足各位数字(de)立方和等于它本身(de)数.要求定义并调用函数 is(number),判断number(de)各位数字之立方和是否等于它本身.试编写相应程序.解答:include<stdio.h>int is(int number);int main(void){int i, m, n;printf("Input m and n:");scanf("%d%d", &m, &n);printf("result:\n");for(i = m; i <= n; i++)if(is(i) = 0)printf("%d\n", i);return 0;}int is(int number){int digit, sum, temp;temp = number;sum = 0;while(temp = 0){digit = temp % 10;temp = temp / 10;sum = sum + digit digit digit; }return sum == number;}7.使用函数求余弦函数(de)近似值:输入精度e,用下列公式求cos(x)(de)近似值,精确到最后一项(de)绝对值小于 e.要求定义和调用函数funcos(e, x)求余弦函数(de)近似值.试编写相应程序.cosx=x0/0-x2/2+x4/4-x6/6+…解答:include<stdio.h>include<math.h>double funcos(double e, double x);int main(void){double e, sum, x;printf("Input e and x:");scanf("%lf%lf",&e,&x);sum=funcos(e,x);printf("cos%lf=%lf\n",x,sum);return 0;}double funcos(double e,double x){int flag, i;double item, sum, tmp, power;flag=1;power=1;tmp=1;i=0;item=1;sum=0;while(fabs(item)>=e){item=flagpower/tmp; sum=sum+item;power=powerxx;tmp=tmp(i+1)(i+2); flag=-flag;i=i+2;}return sum;}。
C语言程序设计第3版何钦铭颜晖第8章指针
C语言程序设计第3版何钦铭颜晖第8章指针指针作为C语言中的一种数据类型,它存储的是一个变量或者对象的地址。
通过指针,可以直接访问或者修改存储在该地址上的数据。
指针的概念对于理解C语言的内存管理和数据结构至关重要。
本章首先介绍了指针的概念和初始化方式。
指针的声明和初始化方法与变量的声明和初始化类似,但在变量名前需要加上“*”符号,表示该变量是一个指针变量。
指针变量需要与具体的数据类型相匹配,以便正确地访问和修改数据。
其次,本章详细讨论了指针和数组之间的关系。
在C语言中,数组名可以看作是数组首元素的地址,所以可以通过指针对数组进行遍历和操作。
通过指针,可以实现指向数组的指针运算,例如指针的自增操作可以实现数组的遍历。
本章还介绍了指针和函数之间的关系。
在C语言中,可以通过函数参数传递指针来实现对函数外部变量的修改。
这种通过指针传递参数的方法,被称为按引用传递。
通过指针,可以在函数内部直接修改指针所指向的数据,从而实现对外部变量的修改。
本章接着讨论了指针和字符串之间的关系。
在C语言中,字符串实际上是存储在内存中的字符数组。
通过指针变量,可以访问字符串的每一个字符,并可以对字符串进行各种操作。
指针和字符串的关系在C语言的字符串处理中是非常重要的。
最后,本章简要介绍了指针和结构体之间的关系。
结构体是C语言中一种自定义的数据类型,可以包含不同类型的数据。
通过指针变量,可以访问结构体的成员,并实现对结构体的操作。
总之,本章通过详细讨论指针的各种用法,使读者对指针有了深入的理解。
指针作为C语言中的重要概念,对于理解和掌握C语言编程非常重要。
本章通过丰富的例子和深入的讲解,使读者能够掌握指针的基本概念,以及各种指针的用法。
对于初学者来说,指针可能是一个比较难理解的概念,但通过学习本章内容,读者可以逐步掌握指针的基本操作,并能够熟练地运用指针解决实际问题。
C语言程序设计(何钦铭_颜晖_主编)精ppt课件
符号常量 整型常量、实型常量、字符型常量
6.2.2 变量
变量的定义和使用
ppt精选版
16
6.2.1 常量
常量的类型通常由书写格式决定
123 (整型) 4.56 (实型) 'A' (字符型)
符号常量:用一个标识符代表一个常量
:PI :EPS
ppt精选版
17
例5-1 求球的表面积和体积
ppt精选版
6
原码 反码 补码
32767
补码 0 111 1111 1111 1111
-32767
原码 1 111 1111 1111 1111 反码 1 000 0000 0000 0000 补码 1 000 0000 0000 0001
原码取反 反码+1
-32768 = -32767-1
ppt精选版
26
6.2.2 变量
在程序运行过程中,其值可以被改变的量。
变量必须先定义,后使用 定义变量时要指定变量名和数据类型 变量应该先赋值,后引用
ppt精选版
27
变量名:合法的标识符
变量的定义
小写字母;见名知义
变量的类型:在定义时指定
变量定义的一般形式
类型名 变量名表;
int celsius, fahr;
double r, s, v;
scanf("%lf", &r);
scanf("%lf", &r);
s = 4.0*r*r*33.1.144159 ;
s = 4.0*PI*r*r ;
v = 4.0/3.0*r*r*r*33.1.144159 ; ......
v = 4.0/3.0*PI*r*r*r ; ......
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调用前 main :x = 3, y = 5 第1次调用p: *a b 3 5 2 6 调用后 main :x = 2, y = 5
第2次调用p: *a b 5 2 4 3 调用后 main :x = 2, y = 4
例7-9
自定义函数dayofyear(year,month,day), 返回该年的 第几天。 dayofyear(2000,3,1)返回61 dayofyear(1981,3,1)返回60
px 是整型指针,指向整型变量 float *pf; pf 是浮点型指针,指向浮点型变量 char *pc; pc 是字符型指针,指向字符型变量
int *px; 注意:指针变量名是 px,不是*px 类型名 * 指针变量名;
int *p1, *p2; 等价于
int * p1; int * p2;
8.1.2 指针的基本操作
分析: 月 0 1 2 3……11 12 非闰年 0 31 28 31 30 31 闰年 0 31 29 31 30 31
int tab[2][13]={{0, 31, 28, 31, 30,31,30,31,31,30,31, 30,31}
{0, 31, 29, 31, 30,31,30,31,31,30,31, 30,31}}
例7-9
void dayofyear(int year, int month, int day) { int k, leap;
int tab[2][13]={{0, 31, 28, 31, 30,31,30,31,31,30,31, 30,31}
{0, 31, 29, 31, 30,31,30,31,31,30,31, 30,31}}; leap=(year%4==0&&year%100!=0) || year %400==0; for (k=1; k<month; k++) day=day+tab[leap][k];
例8-7
void month_day(int year, int yearday, int *pmonth, int *pday) { int k, leap; int tab[2][13]={ {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; leap=year%4==0 && year%100!=0 || year%400==0; for(k=1; yearday>tab[leap][k]; k++) yearday = yearday - tab[leap][k]; *pmonth=k; *pday=yearday; }
a[9]
int *ap; ap, a ap = &a[0]; a+1 ap 指向数组a的 首元素 或: ap+i, a+i ap = a; &a[i] a[i]的地址 &a[i] a+i 、ap+i a+9 a[i] 相当于 *(a+i) *(ap+i)、ap[i]
a[0] a[1]
a[i]
*(a+i) *(ap+i)
p a 3
&a
*p
2、赋值=
int *p1, *p2, a=3; p1=&a; 把 a 的地址赋给 p1,即 p1 指向 a
p2=p1; p2 也指向 a
p1 a 3 *p1 *p2
&a
p2 &a
例8.3指针赋值
输出: main( ) { int a, b; 10, 100 int *p1, *p2; p1 a a = 100; b = 10; 100 p1 = &a; p2 b p2 = p1; 10 p1 = &b; printf(“%d, %d\n”, *p1, *p2); }
a 3
x 3 x 5
b
5 y 5 y 3
main( ) { int a=3, b=5; swap2(&a, &b);
输出:
5, 3 a 5 3 b
3 5
printf(“%d, %d\n”, a, b);
}
swap2(int *p1, int *p2) p1 { int t; p2 t = *p1; *p1 = *p2; 值传递,地址未变, *p2 = t; 但存放的变量的值改变了 }
1、&和* & 取地址运算符 * 指针运算符(间接访问运算符) int *p, a = 3; p=&a; 把 a 的地址赋给 p,即 p 指向 a
p
&a
a 3
*p
*p: p所指向的变量 a
例8.1指针运算
main( ) { int a = 3, *p; p = &a; printf(“%d,%d\n”, scanf(“%d”, &a); printf(“%d,%d\n”, scanf(“%d”, p); printf(“%d,%d\n”, *p = 10; printf(“%d,%d\n”, } p &a a, *p); 输入 5 7 a, *p); 输出: 3, 3 5, 5 7, 7 10, 10
swap2(int *p1, int *p2) { int t; t = *p1; *p1 = *p2; *p2 = t; }
main( ) { int a=3, b=5; swap2(&a, &b); …… }
Байду номын сангаас
要使某个变量的值通过函数调用发生改变
(1) 在主调函数中,把该变量的地址作为实参
(2) 在被调函数中,用形参(指针)接受地址 (3) 在被调函数中,改变形参(指针)所指向变量的值
px
3000
2001
指针变量
地址
另一变量的地址
变量 x 指向 px
地址 2001
内容 3
int x; x = 3; printf(“%d”, x;)
某个变量的地址
指向
3000
2001
指针变量:存放地址的变量
指针变量
地址
另一变量的地址
8.1.1 指针变量的定义
类型名 *指针变量名;
指针变量所指向变量的类型 int *px;
a[9]
例:输出数组a所有元素
for(i=0; i<10; i++) printf(”%d”, a[i])
ap,a a+1
a[0] a[1]
for(i=0; i<10; i++) printf(”%d”, *(a+i))
for(ap=a; ap<a+10; ap++) printf(”%d”, *ap)
例8.6-3
void p(int *a, int b) { *a = *a -1; b++; } void main( ) { int x = 3, y = 5; p(&x, y); printf("%d,%d\n",x,y); p(&y, x); printf("%d,%d\n",x,y); }
a+i &a[i]
a[i] *(a+i)
a+9
a[9]
注意: 数组名 a 是指针常量 ,不能 a++
8.2.2 数组名作为函数的参数
1、数组元素作为函数实参 函数形参为变量 (与变量作为函数实参相同,值传递) 2、数组名作为函数参数 由于数组名是指针常量,相当于指针作为函 数的参数 数组名做为实参 形参是指针变量(数组)
第八章 指针
指针 指针和数组 指针和字符串 指针数组和二级指针 指针和函数
8.1 指针
变量 x 地址 2001 内容 3
直接访问: 通过变量名直接访问地址 int x; x = 3; printf(“%d”, x;) 间接访问: 把变量的地址放到另一变量 中,使用时先找到后者的地 址,从中取出前者的地址
8.2 指针和数组
8.2.1 指针、数组、地址间的关系
8.2.2 数组名做为函数的参数
8.2.1 指针、数组、地址间的关系
a 指针和数组有密切的关系 任何由数组下标来实现的操作 都能用指针来完成。 int a[10];
a[0] a[1]
a[i]
数组名是一个指针 它的值是数组首元素的地址 即它指向数组的首元素
&b
p1
&a
p2
&b
8.1.4 指针作为函数的参数
例 8.5 main( )
输出:
3, 5
{ int a=3, b=5;
swap1(a, b); printf(“%d, %d\n”, a, b); } swap1(int x, int y) { int t; t = x; x = y; y = t; }
b 10
输出:
*p2
100, 10
100, 10
指针运算注意事项
(1) 当 p=&a 后,*p 与 a 相同。
(2) int *p; 定义
*p =10; p所指向的变量
(3) &*p 与 &a 相同,是地址
*&a 与 a 相同,是变量
p &a a 3 *p
当 p=&a 时 (4) (*p)++ 等价于 a++ 将p所指向的变量值加1 *p++ 等价于 *(p++) 先取 *p,然后 p 自加,此时p不再指向a