C语言程序设计答案(黄保和编)第9章

合集下载

《C语言程序设计》课后习题答案(第四版)

《C语言程序设计》课后习题答案(第四版)

第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。

C语言习题及答案(第九章)

C语言习题及答案(第九章)

9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。

解:#include "stdio.h"struct date{char month[10] ;int daynumber ;}main(){int i ;struct datea[12]={{"January",31},{"February",29},{"March",31},{"Aprial",30},{ "May",31},{"June",30},{"july",31},{"August",31},{"September",30}, {"October",31},{"November",30},{"December",31}} ;for(i=0;i<12;i++);printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ;}思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用?9-4 编写程序求空间任一点到原点的距离,点用结构体描述。

并请考虑求空间中任意两点的距离的程序。

解:#include "stdio.h"#include "math.h"struct point{float x ;float y ;float z ;} main(){double d1,d2,d ;struct point p1,p2 ;printf("请输入第一个点的坐标:");scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z);printf("请输入第二个点的坐标:");scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z);d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z);d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*( p2.z-p1.z));printf("第一个点到原点的距离:%f\n",d1);printf("第二个点到原点的距离:%f\n",d2);printf("两点间的距离:%f\n",d);}9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。

《精通C程序设计教程》二~九章习题答案

《精通C程序设计教程》二~九章习题答案

《精通C程序设计教程》部分习题答案2005年4月说明:本答案没有仔细校对,如果发现错误,请自行更正;蓝色的程序经过了上机验证.第二章 C源程序基本语法与顺序结构简单程序设计2.10 ABEFG2.11 A CFHJMNPQRT2.12 (1)3 (2)0 (3)0 (4)1 (5)–1 (6)160 (7)4 (8)4 (9)8 (10)8(11)1 (12)2 (13)1 (14)0 (15)6 (16)0 (17)29(18)3 (19)1 (20)12.13 2.52.143.52.15(1) 4 3 1 1 (2) 4 2 2 2 (3) 3 2 1 22.16(1) 0 0 (2) 100 100 (3) 2 2 (4) 1 1(5) 20 20 (6) 114 1152.17(1) –y*y*y*y*(a*a-b*b) (2) sin(y/sqrt(x*x+y*y))(3) sqrt(1+3.14/2*tan(48.5/180*3.14))(4) a/x/(a/(a+y)+b/(a+b/(a+b/z)))(5) p*q*(r+1)*(r+1)/((r+1)*(r+1)-1)(6) fabs(3-exp(-x)*log(fabs(1+x)))2.20 #include “stdio.h”void main(){long a;int b; double x;float y;scanf(“%l d%d%l f%f”,&a,&b,&x,&y);printf(“a=%l o,b=%.0f,x=%0G,y=%Lg\n”,a,(float)b,x,(long double)y);}2.22#include “stdio.h”#inclu de “math.h”void main(){ double a,b,c,p,s;printf(“Input a b c:”);scanf(“%lf%lf%lf”,&a,&b,&c);p=0.5*(a+b+c);s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%.4f\n”,s);}2.23解:第1月开始: a(尚未还清的借款本金)第2月开始: a(1+p)-x第3月开始: (a(1+p)-x)(1+p)-x=a(1+p)2-x(1+p)-x第4月开始: (a(1+p)2-x(1+p)-x)(1+p)-x=a(1+p)3-x(1+p)2-x(1+p)-x…第n+1月开始:a(1+p)n -x((1+p)n-1+(1+p)n-2+…+1)=0 于是()1)1(1)1(1))1(1(1)1(1)1()1()1(21-++=+-+-+=+⋅⋅⋅+++++=--nnnn n n n p pp a p p p a p p p a x#include "stdio.h" #include "math.h" void main(){ double a,p,x;int n;printf("Input a n p:");scanf("%lf%d%lf",&a,&n,&p); x=a*p*pow(1+p,n)/(pow(1+p,n)-1); printf("x=%.2f\n",x); }输入a n p 为100000 120 0.004,输出为1050.91第三章 选择结构与循环结构3.3 a=2, b=1, c=2 3.4 x=10, y=6 3.5 BCD153.6 循环体共执行了3次,输出为: 12 9 3.7 abcd43.8 解:a 的值就是循环体被执行的次数 先分析内两层循环: 最内层循环次数 j=1 1 j=2 2 ... ... j=i i 总计: 1+2+ (i)2)1(+i i由于i 从1循环到n-1,因此,总的循环次数是4)1(12)12)(1(21212)1(1111112nn n n n i i i i n i n i n i -+++=+=+∑∑∑-=-=-=3.9 BF3.10#include <stdio.h> main(){ char c,i , ;long s =0; for(i=1;i<=10;i++) ; { c=getchar();if(…1‟<=c<=‟9‟ c>=‟1‟&&c<=‟9‟) putchar(c);else if(c= =‟0‟) putchar(…*‟);else s+=(long)c*c;printf(“\ns=%d\n”,s);}printf(“\ns=%l d\n”,s);}3.12 解:/* if 语句求解*/#include “stdio.h”void main(){ double I,p=0;printf(“Input I=”);scanf(“%lf”,&I);if(I>100) { p+=(I-100)*0.01; I=100; } if(I>60) { p+=(I-60)*0.015;I=60; }if(I>40) { p+=(I-40)*0.03;I=40; }if(I>20) { p+=(I-20)*0.05;I=20; }if(I>10) { p+=(I-10)*0.075;I=10; }p+=I*0.1;printf(“p=%f\n”,p);}/* switch语句求解*/#include “stdio.h”void main(){ double I, p=0;printf(“Input I=”);scanf(“%lf”,&I);if(I>=100) { p+=(I-100)*0.01;I=100; } swith((int)(I/10)){ case 10: case 9:case 8:case 7:case 6: p+=(I-60)*0.015;I=60;case 5:case 4:p+=(I-40)*0.03;I=40;case 3:case 2:p+=(I-20)*0.05; I=20;case 1:p+=(I-10)*0.075;I=10;default:p+=I*0.1;}printf(“p=%f\n”,p);}3.19 解:#include “stdio.h”void main(){ int s1,s2,s3; float av; char level;while(1){ printf(“Input three scores of one student:\n”); scanf(“%d%d%d”,&s1,&s2,&s3); if(s1<0||s2<0||s3<0) break; av=(s1+s2+s3)/3.0F; switch((int)(av/10)){ case 9:case 10: level=‟A ‟;break; case 8:level=‟B‟;break; case 7:level=‟C‟;break; case 6:level=‟D‟;break; default:level=‟F‟; }printf(“level=%c \n”,leve l); } }第四章 基本程序设计技术4.3 解:#include “stdio.h” void main(){ double s,a;int k,n;printf(“Input n=”);scanf(“%d”,&n); s=0;a=1;for(k=0;k<=n;k++) { s+=a;a=(n+1)*a;} printf(“s=%.0f \n”,s); }4.4 根据本章打印杨辉三角形例题中组合数的递推计算方法计算组合数:m n C ,要求输入n 、m 值,输出组合数。

c语言黄保和第三版答案

c语言黄保和第三版答案

c语言黄保和第三版答案【篇一:c语言程序设计答案(黄保和编)第9章】“struct stu {int a, b;} student;”,则下列输入语句中正确的是d)scanf(“%d”,student.a);若已有以下结构体定义,则值为2的表达式是a)c[0].y;struct cmplx{int x;int y;}c[]={1,2,3,4};设有如下程序段,则vu.a的值为d)a、b、c都不是union u{int a;int b;float c;}vu;vu.a=1; vu.b=2; vu.c=3;设已经定义“union u{char a; int b;}vu;”在vc中存储char型数据需要1个字节,存储int型数据需要4个字节,则存储变量vu需要b)4个字节设已经定义“union u{int a; int b}vu={1,2};”,则d)该定义错误设有定义“enum date{year,month,day}d;”则下列叙述中正确的是a)date是类型、d是变量、year是常量设有定义“enum date{year,month,day}d;”则正确的表达式是b)d=year若已经定义了“typedef struct stu{int a,b}student;”则下列叙述中正确的是c)student是结构体类型下列有关typedef语句的叙述中,正确的是c)typedef语句用于给已定义类型取别名编程题设计一个通讯录的结构体类型,并画出该结构体变量在内存中的存储形式struct {name 占10个字节telephone 占20个字节address 占100个字节name char[10];telephone char[20];address char[100];};用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离 #include stdio.h#include math.hvoid main(){struct point{float x;float y;}a,b;printf(输入点a的横坐标:\n); scanf(%f, a.x); printf(输入点a的纵坐标:\n); scanf(%f, a.y); printf(输入点b的横坐标:\n); scanf(%f, b.x); printf(输入点b的纵坐标:\n); scanf(%f, b.y);printf(a、b两点之间的距离为:%f\n, sqrt( (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) )); }用结构体变量表示日期(年、月、日),任意输入两个日期,求它们之间相差的天数 #include iostream#include stdio.husing namespace std;#define day_of_year 365 //一年的天数,当为闰年时需要另外操作 //日期结构体typedef struct date{int year;int month;int day;int day_of_year; //该日为该年的第几天}date, *date_p;//函数声明bool compear(date_p max, date_p min);int titoal(date_p date);bool leap_year(const int year);int funtion(date_p max , date_p min);//主函数void main(){date date_1, date_2;//输入的两个日期date_p max, min; //max指向大日期,min指向小日期 int result; //数据输入printf(请输入日期1的数据项,年月日间用空格阁开:\n);scanf(%d%d%d, date_1.year, date_1.month, date_1.day);printf(请输入日期2的数据项,年月日间用空格阁开:\n);scanf(%d%d%d, date_2.year, date_2.month, date_2.day);//数据处理if( !compear(max=date_1, min=date_2) ) //比较日期大小,不需要交换result = funtion(max, min);else //需要交换result = funtion(min, max);//结果printf(两日期间相差的天数为:%d\n, result);}//比较两日期的大小bool compear(date_p max, date_p min){//max的日期小于min的日期,日期对调if((max-year min-year)) //max的年份小于minreturn 1;else if((max-year == min-year)) //max和min的年份相同{if((max-month min-month)) //max的月份小于min return 1;else if((max-month == min-month)) //max和min的月份相同if((max-day min-day)) //max的日小于minreturn 1;}//其他情况满足max的日期大于(等于)min,日期保持不变return 0;}//计算相差天数int funtion(date_p max , date_p min){//年份相同,相差天数为大日期减小日期if(max-year == min-year){//计算大日期 max-day_of_year = titoal(max);//计算日期函数if( leap_year(max-year) ) //如果为闰年 if( (max-month==2 max-day==29) || max-month2)max-day_of_year ++; //计算小日期 min-day_of_year = titoal(min); if( leap_year(min-year) ) //如果为闰年if( (min-month==2 min-day==29) || min-month2)min-day_of_year ++;} //返回相差天数 return max-day_of_year - min-day_of_year;//年份不同,相差天数为max、min剩余天数和之间年的天数总和 int max_year, min_year, other_year=0;//计算大日期max-day_of_year= titoal(max);if( leap_year(max-year) )//如果为闰年if( (max-month==2 max-day==29) || max-month2)max-day_of_year ++;max_year = max-day_of_year;//计算小日期 min-day_of_year = titoal(min); if( leap_year(min-year) )//如果为闰年 if( (min-month==2 min-day==29) || min-month2)min-day_of_year ++;min_year = day_of_year - min-day_of_year; //剩余的天数if( leap_year(min-year) )//如果为闰年天数加1min_year ++;//计算之间的日期int year;for(year=min-year+1 ; year max-year ; year++)other_year+=day_of_year+leap_year(year);//一年的天数, 并考虑是否为闰年 //返回总天数return max_year + min_year + other_year;}//计算某日该年的第几天, 闰年也按平年处理int titoal(date_p date){int result=0; //最后结果int i; //标记月份for(i=1 ; i date-month ; i++) //计算以过月份的天数{switch(i){case 1:case 3:case 5:case 7:case 8:case 10:result += 31;break;//大月31天,注:12月不会出现,所以忽略不写 case 4:case 6:case 9:case 11:result += 30;break;//小月31天default:result += 28;//2月28天}}return result += date-day; //加上本月天数既为最后结果}//判断某年是否为闰年,若是返回1,否则返回0bool leap_year(const int year){if( (!(year%4) year%100) || !(year%400) )return 1;return 0;}用结构体变量表示复数(实部和虚部),输入两个复数,求两复数之积#include stdio.hstruct com{int real;int im;};void main(){struct com a,b,c;struct com cmult(struct com creal,struct com cim);int i,j;} printf(输入两个复数的实部和虚部:);scanf(%d%d%d%d,a.real,a.im,b.real,b.im); c=cmult(a,b);printf(乘积为:%d+%di,c.real,c.im);struct com cmult(struct com creal,struct com cim)/*求乘积的函数*/{struct com a;a.real=creal.real*cim.real-creal.im*cim.im;a.im=creal.real*cim.im+creal.im*cim.real;return(a);}/* 设复数为 a+bi 和 c+di ,那么和为:(a+c)+(b+d)i,乘积为:(ac-bd)+(ad+bc)i 。

C语言程序设计第九-十一章习题参考答案

C语言程序设计第九-十一章习题参考答案

C语言第九章参考答案1.选择题:12345 67890 12ADCDB BCDDC BB2.填空题:(1)指针或者地址(2)110(3)①char *p; ②p=&ch; ③scanf("%c",p); ④*p='a'; ⑤printf("%c",*p);(4)10 (5)0、7 (6)ab (7)abcdcd (8) 7ㄩ1(9)void (*p)(int * ,int*); (10)r+b[k] (11) '\0' 、n++; (12)aegi 3.改错题:(1) 第一处改正:* sub=x-y第二处改正:scanf("%f%f",&x,&y);第三处改正:calc(x,y,&add,&sub);(2)第一处:char swap (char *p1,char*p2)改为void swap (char *p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2="\0"改为*p2='\0'(4)第一处:char *fun(char *str,char t)改为char *fun(char *str,char *t)第二处:s=NuLL改为s=NULL;第三处:if(r==p)改为if(*r==*p)(5)第一处:fun(int **b,int n)改为fun(int (*b)[N],int n)第二处:b[j][k]=k*j 改为b[j][k]=(k+1)*(j+1)4编程题(1)/*习题9-4-1 */void move(int array[20],int n,int m) ;main(){ int number[20],n,m,i;printf("How many numbers?"); /*共有多少个数*/scanf("%d",&n);printf("Input %d numbers:\n",n); /*输入n个数*/for(i=0;i<n;i++)scanf("%d",&number[i]);printf("How many place you want to move?"); /*后移多少个位置*/scanf("%d",&m);move(number,n,m); /*调用move函数*/ printf("Now,they are:\n");for(i=0;i<n;i++)printf("%d ",number[i]);}void move(int array[20],int n,int m) /*循环后移函数*/{ int *p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/}(2)/*习题9-4-2 */#include<stdio.h>#include<string.h>#define TOTAL 6int mseek(char*str[],char xstr[],int n){ int i;for(i=0; i<n; i++){ if(strcmp(str[i],xstr)==0)return 1;}return 0;}main(){ char*name[TOTAL]={"Lining","Linshan","Tianyuan","Zhangqiang","Haipo","Fangbing"};char xname[20];printf("enter a name:");gets(xname);if(mseek(name,xname,TOTAL))printf("Found!\n");elseprintf("Not found!\n");}(3)/*习题9-4-3 */#include <stdio.h>#include <string.h>void fun(char *str,int num[4]){ int i;for(i=0; i<4; i++) num[i]=0;while(*str!='\0'){ if(*str>='a' && *str<='z' || *str>='A' && *str<='Z')num[0]++;else if(*str==' ')num[1]++;else if(*str>='0' && *str<='9')num[2]++;elsenum[3]++;str++;}}#define N 80main(){ int string[N];int n[4],i;gets(string);fun(string,n);for(i=0; i<4; i++)printf("%d\t",n[i]);}(4)/*习题9-4-4 *//* 调试时,可这样输入数据:*//*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include <stdio.h>main(){ int a[5][5],*p,i,j;void change(int *p);printf("Input matrix:\n");for(i=0;i<5;i++) /*输入矩阵*/for(j=0;j<5;j++)scanf("%d",&a[i][j]);p=&a[0][0]; /*使p指向0行0列元素*/ change(p); /*调用函数, 实现交换*/ printf("Now, matrix: \n");for(i=0;i<5;i++) /*输出已交换的矩阵*/{ for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\n");}}void change(int *p) /*交换函数*/{ int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;j<5;j++){ if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}temp=*(p+12); /*将最大值换给中心元素*/*(p+12)=*pmax;*pmax=temp;temp=*p; /*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i<5;i++) /*找第二最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第三最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; /*将第三最小值换给左下角元素*/ temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第四最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;}(5)/*习题9-4-5 *//*可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/#include <stdio.h>void avcour1(float score[][5]);void fali2(int num[4],float score[4][5]);void good(int num[4],float score[4][5]);main(){int i,j,num[4];//数组num代表学号float score[4][5];printf("Input NO. and scores: \n");for(i=0;i<4;i++){ printf("NO.");scanf("%d",&num[i]);printf("scores:");for(j=0;j<5;j++)scanf("%f",&score[i][j]);}printf("\n\n");avcour1(score); /*求出第一门课的平均成绩*/ printf("\n\n");fali2(num,score); /*找出2门课不及格的学生*/printf("\n\n");good(num,score); /*找出成绩好的学生*/}void avcour1(float score[][5]) /*第一门课的平均成绩的函数*/{ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+score[0][i]; /*累计每个学生的得分*/ average1=sum/4; /*计算平均成绩*/printf("course 1 average score: %6.2f. \n",average1);}void fali2(int num[4],float score[4][5])/*找两门以上课程不及格的学生的函数*/{ int i,j,k,label;float sum=0;printf("= = = = = = = =Student who is fail = = = = = = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ label=0;for(j=0;j<5;j++)if((score[i][j])<60.0) label++;if(label>=2){ printf("%5d",num[i]);for(k=0;k<5;k++){ printf("%10.2f",score[i][k]);sum+=score[i][k];}printf("%10.2f\n",sum/5);}}}void good(int num[4],float score[4][5])/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/ { int i,j,k,n;float sum=0,aver[4];printf("= = = = = = = =Student whose score is good= = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ n=0;sum=0;for(j=0;j<5;j++){if((score[i][j])>85.0) n++;sum+=score[i][j];}aver[i]=sum/5;if((n==5)||(aver[i]>=90)){ printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}(6)/*习题9-4-6*/#include <math.h>double sigma(double (*fn)(double),double l,double u){ double sum=0,d;for(d=l; d<u; d+=0.1)sum+=fn(d);return sum;}void main(){ double sum;sum=sigma(sin,0.1,1.0);printf("sum of sin from 0.1 to 1.0 is: %f\n",sum);sum=sigma(cos,0.5,3.0);printf("sum of cos from 0.5 to 3.0 is: %f\n",sum);}(7)/*习题9-4-7 */main(){ int i;char *month_name(int n);printf("input Month No.:\n");scanf("%d",&i);printf("Month No.:%2d --> %s\n",i,month_name(i)); /*调用指针函数month_name()*/ }char *month_name(int n)/*定义一个指针函数month_name(),返回一个指向字符串的指针*/{ static char *name[]={"Illegal Month","January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};return((n<1||n>12)?name[0]:name[n]);}(8)/*习题9-4-8 */#include <stdio.h>#include <string.h>#define N 10main(){ void sort(char *p[]);int i;char *p[N],str[N][20];for(i=0;i<N;i++)p[i]=str[i]; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf("Input strings:\n");for(i=0;i<N;i++)scanf("%s",p[i]);sort(p);printf("Now, the sequence is:\n");for(i=0;i<N;i++)printf("%s\n",p[i]);}void sort(char *p[]){ int i,j;char *temp;for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){ temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}(9)/*习题9-4-9 */#include <stdio.h>#define LINEMAX 20 /*定义字符串的最大长度*/main(){ void sort(char **p);int i;char **p,*pstr[5],str[5][LINEMAX];for(i=0;i<5;i++)pstr[i]=str[i]; /*将第i个字符串的首地址赋予指针数组pstr的第i 个元素*/printf("Input 5 strings:\n");for(i=0;i<5;i++)scanf("%s",pstr[i]);p=pstr;sort(p);printf("strings sorted:\n");for(i=0;i<5;i++)printf("%s\n",pstr[i]);}void sort(char **p) /*冒泡法对5个字符串排序的函数*/ { int i,j;char *temp;for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(*(p+i),*(p+j))>0) /*比较后交换字符串地址*/{ temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}}}(10)void StrOR(char xx[][80],int maxline){ int i,righto,j,s,k;char temp[80];for(i=0; i<maxline; i++)for(j=strlen(xx[i])-1; j>=0; j--){ k=0; memset(temp,0,80);if(xx[i][j]=='o'){ righto=j;for(s=righto+1; s<strlen(xx[i]); s++)temp[k++]=xx[i][s];for(s=0;s<righto;s++)if(xx[i][s]!='o') temp[k++]=xx[i][s];strcpy(xx[i],temp);}else continue;}}C语言第十章参考答案1. 选择dccda cab2..填空(1)struct studentstrcmp(str,stu[i].name)==0break;(2)p=personp-person<3old=p->age;q->name,q->age(3)p!=NULLc++p->next(4)&per[i].body.eye&per[i].body.f.height&per[i].body.f.weight3.编程题(1)#include <stdio.h>struct data{ int year;int month;int day;};main(){ struct data a;int monthnum[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,sum=0;scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=0;i<a.month-1;i++)sum+=monthnum[i];sum+=a.day;if(a.year%4==0 && a.year%100!=0 ||a.year%400==0)sum+=1;printf("%d年%d月%d日is the %d day",a.year,a.month,a.day,sum); }(2)#include <stdio.h>#include <stdlib.h>struct study{ float chinese;float maths;float english;float avg;};main(){ struct study student;scanf("%f%f%f",&student.chinese,&student.maths,&student.english);student.avg=(student.chinese+student.maths+student.english)/3;printf("average score is %f\n",student.avg);}(3)#include <stdio.h>#include <stdlib.h>struct study{ int num;float chinese;float maths;float english;float avg;};main(){ struct study s[3];struct study *p;for(p=s;p<s+3;p++){ scanf("%d%f%f%f",&(p->num),&(p->chinese),&(p->maths),&(p->english));p->avg=(p->chinese+p->maths+p->english)/3;}for(p=s;p<s+3;p++)printf("%d %3.1f %3.1f %3.1f %3.1f\n",p->num,p->chinese,p->maths,p->english,p->a vg);}(4)#include <stdio.h>#include <string.h>#define N 3typedef struct{char dm[5]; /*产品代码*/char mc[11]; /* 产品名称*/int dj; /* 单价*/int sl; /* 数量*/long je; /* 金额*/} PRO;void SortDat(PRO sell[],int n){ int i,j;PRO xy;for(i=0; i<N-1; i++)for(j=i+1; j<N; j++)if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) { xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}void main(){ PRO sell[N];int i;for(i=0; i<N; i++){scanf("%s%s",sell[i].dm,sell[i].mc); //可这样输入,如:101 aaascanf("%d%d",&sell[i].dj,&sell[i].sl); //可这样输入,如:10 20sell[i].je=sell[i].dj*sell[i].sl;}SortDat(sell,N);printf("dm\t\tmc\t\tdj\tsl\tje\n");for(i=0; i<N; i++){printf("%s\t\t%s\t\t%d\t%d\t%ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}}(5)#include <stdio.h>#include <stdlib.h>main(){int *pi;int i,j,t,n;printf("输入整数个数:");scanf("%d",&n);pi=(int *)malloc(n*sizeof(int));printf("输入整数:");for(i=0; i<n; i++)scanf("%d",&pi[i]);for(i=0; i<n-1; i++)for(j=i+1; j<n; j++)if(pi[i]>pi[j]){t=pi[i]; pi[i]=pi[j]; p i[j]=t;}for(i=0; i<n; i++)printf("%d ",pi[i]);printf("\n");free(pi);}#include <stdio.h>#include <stdlib.h>struct stu{ int num;char name[20];int age;struct stu *next;};void list(struct stu *head){ struct stu *p;printf("The list records are:\n");p=head;if(head!=NULL)do{ printf("%d\t%s\t%d\n",p->num,p->name,p->age);p=p->next;}while(p!=NULL);elseprintf("The list is null");}struct stu * insert(struct stu *head,struct stu *stud){ struct stu *p0,*p1,*p2;p1=head; /*p1指向链表第一个节点*/ p0=stud; /*p0指向要插入的节点*/if(head==NULL) /*原链表是空表*/{ head=p0;p0->next=NULL; /*p0作为头指针*/ }else{ while((p1!=NULL)&&(p0->num>=p1->num)){ p2=p1;p1=p1->next;} /*p1指针后移*/if(p1!=NULL){ if(head==p1) head=p0;/*插入链表开头*/else p2->next=p0; /*插入到p2节点之后*/p0->next=p1;}else{ p2->next=p0;p0->next=NULL;}/*插入到最后*/return head;}main(){ struct stu *newstu,*head;head=NULL;int num;scanf("%d",&num);while(num!=0){ newstu=(struct stu *)malloc(sizeof(struct stu));newstu->num=num;scanf("%s",newstu->name);scanf("%d",&newstu->age);head=insert(head,newstu);scanf("%d",&num);}list(head);}(7)#include <stdio.h>void partition(unsigned long int num){ union a{ unsigned short int part[2];unsigned long int w;}n,*p;p=&n;n.w=num;printf("long int=%lx\n",num);printf("low part num=%0x,high part num=%0x\n",p->part[0],p->part[1]); }main(){ unsigned long int x;x=0x23456789; //这是为了调试方便,应改为scanf函数partition(x);}C语言第十一章参考答案一、选择1.B2.A3.B4.C5.B6.C7.D8.C9.C、D 10.A 11.A 12.C 13.B二、填空1 :fopen(fname,"w")ch2:"r"fgetc(fp) 或getc(fp)3:"bi.dat"&jfp4:==NULLflag==1s[strlen(s)-1]=='\n'三、改错题1:第一处改为:long num=0;第二处改为: !feof(fp) 或!=0改为==02: 第一处改为:rewind(fp)第二处改为: fgetc(fp)!= '\n' '\0'后面加上&& feof(fp)!=1四、编程题(1)#include<stdio.h>#include <stdlib.h>#include <string.h>main(){FILE *fp;char str[100];int i=0;if((fp=fopen("myfile","w"))==NULL){ printf("Can not open the file.\n");exit(0);}printf("Input a string:\n");gets(str);while(str[i]!='!'){ if(str[i]>='a'&& str[i]<='z')str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen("myfile","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}(2)#include<stdio.h>struct student{ char num[10];char name[8];int score[3];float ave;}stu[5];main(){int i,j,sum;FILE *fp;for(i=0;i<5;i++){ printf("\nInput score of student %d:\n",i+1);printf("NO.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);sum=0;for(j=0;j<3;j++){ printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;}fp=fopen("stud","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("File write error\n");fclose(fp);fp=fopen("stud","r");for(i=0;i<5;i++){ fread(&stu[i],sizeof(struct student),1,fp);printf("%s,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);}}(3)#include<stdio.h>#include <stdlib.h>main(){char s[80];int a;FILE *fp;if((fp=fopen("test","w"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(stdin,"%s%d",s,&a); //相当于scanffprintf(fp,"%s %d",s,a);fclose(fp);if((fp=fopen("test","r"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(fp,"%s %d",s,&a);fprintf(stdout,"%s %d\n",s,a); //相当于printf fclose(fp);}(4)#include<stdio.h>#include <stdlib.h>main(){FILE *fp;int i,j,n,i1;char c[100],t,ch;if((fp=fopen("A","r"))==NULL){printf("Can not open the file.\n");exit(0);}printf("\nfile A:\n");for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);i1=i;if((fp=fopen("B","r"))==NULL){ printf("\n Can not open the file.");exit(0);}printf("\nfile B:\n");for(i=i1;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);n=i;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(c[i]>c[j]){ t=c[i];c[i]=c[j];c[j]=t;}printf("\n file C:\n");fp=fopen("c","w");for(i=0;i<n;i++){ putc(c[i],fp);putchar(c[i]);}fclose(fp);}(5)#include<stdio.h>main(){FILE *fp1,*fp2;char ch;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");ch=fgetc(fp1);while(!feof(fp1)){putchar(ch);ch=fgetc(fp1);}rewind(fp1);while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}(6)#include<stdio.h>main(){FILE *fp; long position;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Sample data\n");position=ftell(fp);printf("position=%ld\n",position);fclose(fp);}第12章1.选择题(1)D (2)C (3)D (4)D (5)C(6)D (7)D (8)B (9)A (10).C2.填空题(1) //(2) public、private 、protected(3) 函数类型类名::函数名(形参表列) 或类型类名::函数名(参数表)(4) 内联函数(5) 构造函数(6) 类名, 创建对象时(7) 私有(8) 私有(9) 基类的构造函数成员对象的构造函数派生类本身的构造函数3.概念题(1)答:本质差别是C++是面向对象的,而C语言是面向过程的。

C语言程序设计(江宝钏著)清华大学出版社第9章习题答案(1)

C语言程序设计(江宝钏著)清华大学出版社第9章习题答案(1)

C语言程序设计(江宝钏著)清华大学出版社第9章习题答案(1)习题9 答案第5 题:#includevoid infoinput(struct student* st,int num);void levelcount(struct student* st,int num);//定义一个结构student 表示学生基本情况struct student{char stuno[20];char stuname[20];double cgrade;char gradelevel;};int main(){struct student ss[100]; //根据题意,一个班学生人数不超过100 个int snum=0;while (snum<=0||snum>100){printf("请输入班级的学生数n<=100:");scanf("%d",&snum);}infoinput(ss,snum);levelcount(ss,snum);return 0;}//输入基本数据void infoinput(struct student* st,int num){int i=0;while(i<num){< bdsfid="89" p=""></num){<>printf("请输入学生%1d 的学号、姓名、计算机成绩:",i+1);scanf("%s%s%lf",st[i].stuno,st[i].stuname,&st[i].cgrade); while (st[i].cgrade<0||st[i].cgrade>100){printf("请输入学生%1d 的计算机成绩[0-100]:",i+1);scanf("%lf",&st[i].cgrade);}if (st[i].cgrade>=90) st[i].gradelevel='A';else if(st[i].cgrade>=70) st[i].gradelevel='B';else if(st[i].cgrade>=60) st[i].gradelevel='C';else st[i].gradelevel='D';i++;}}//统计等级人数void levelcount(struct student* st,int num){int levelA=0,levelB=0,levelC=0,levelD=0;int i;for(i=0;i<num;i++){< bdsfid="107" p=""></num;i++){<> switch (st[i].gradelevel){case 'A':levelA++;break;case 'B':levelB++;break;case 'C':levelC++;break;case 'D':levelD++;break;};}printf("统计结果:A:%d 人,B:%d 人,C:%d 人,D:%d 人\n",levelA,levelB,levelC,levelD);}第6 题:#include#includevoid finit();void fcreat();void fdelete();void fupdate();void ffind();//定义日期struct date{int year;int month;int day;};//定义一个结构student 表示学生基本情况struct llist{char name[20];struct date birthday;char homeno[10];char mobileno[20];};struct llist addlist[50];//如果不用链表做,假设://通讯录每个位置记录一个联系人信息//如果某位置联系人姓名信息为空,表示该位置无联系人int main(){int menuno=0;while (1){printf("\n 请选择操作功能:\n");printf("[1]新建:\n");printf("[2]删除:\n");printf("[3]修改:\n");printf("[4]查询:\n");printf("[5]退出:\n");scanf("%d",&menuno);switch(menuno){case 1:fcreat();break;case 2:fdelete();break;case 3:fupdate();break;case 4:ffind();break;case 5:return 0;default:printf("错误选项,请重新选择!\n");};}return 0;}void finit(){int i;for(i=0;i<50;i++) {strcpy(addlist[i].name,"");addlist[i].birthday.year=0;addlist[i].birthday.month=0;addlist[i].birthday.day=0;strcpy(addlist[i].homeno,"");strcpy(addlist[i].mobileno,"");}}void fcreat(){int i;char oname[20];int oyear;int omonth;int oday;char ohomeno[10];char omobileno[20];printf("请输入联系人信息姓名、出生年、月、日、家庭电话、手机号:\n"); scanf("%s%d%d%d%s%s",oname,&oyear,&omonth,&oday,oho meno,omobileno); for(i=0;i<50;i++) {if (strlen(addlist[i].name)==0) {strcpy(addlist[i].name,oname);addlist[i].birthday.year=oyear;addlist[i].birthday.month=omonth;addlist[i].birthday.day=oday;strcpy(addlist[i].homeno,ohomeno);strcpy(addlist[i].mobileno,omobileno);printf("已增加新联系人\n");break;}}if (i>=50) printf("通讯录满,无法增加新联系人\n");void fdelete(){int i;char oname[20];printf("请输入联系人姓名:\n");scanf("%s",oname);for(i=0;i<50;i++) {if (strcmp(addlist[i].name,oname)==0) {strcpy(addlist[i].name,"");addlist[i].birthday.year=0;addlist[i].birthday.month=0;addlist[i].birthday.day=0;strcpy(addlist[i].homeno,"");strcpy(addlist[i].mobileno,"");printf("已删除该联系人%s\n",oname);break;}if (i>=50) printf("无该联系人,无法删除\n");}void fupdate(){int i;char oname[20];char nname[20];int nyear;int nmonth;int nday;char nhomeno[10];char nmobileno[20];printf("请输入联系人姓名:\n");scanf("%s",oname);printf("请输入联系人信息姓名、出生年、月、日、家庭电话、手机号:\n"); scanf("%s%d%d%d%s%s",nname,&nyear,&nmonth,&nday,nho meno,nmobileno); for(i=0;i<50;i++) {if (strcmp(addlist[i].name,oname)==0) {strcpy(addlist[i].name,nname);addlist[i].birthday.year=nyear;addlist[i].birthday.month=nmonth;addlist[i].birthday.day=nday;strcpy(addlist[i].homeno,nhomeno);strcpy(addlist[i].mobileno,nmobileno);printf("已修改联系人%s\n",nname);break;}if (i>=50) printf("无该联系人,无法修改\n");void ffind(){int i;char oname[20];printf("请输入联系人姓名:\n");scanf("%s",oname);for(i=0;i<50;i++) {if (strcmp(addlist[i].name,oname)==0) {printf("姓名:%s",addlist[i].name);printf(" 出生日期:%1d 年%1d 月%1d 日",addlist[i].birthday.year,addlist[i].birthday.month,addlist[i].bi rthday.day); printf("家庭电话:%s",addlist[i].homeno);printf("手机:%s",addlist[i].mobileno);break;}}if (i>=50) printf("无该联系人\n");}第7 题:#includevoid salaryinput(struct salary* sl,int num);void salarylist(struct salary* sl,int num);struct salary{char id[20];char name[20];double base;double merit;double subsidiary;double insurance;double tax;double real;};int main(){struct salary ss[100]; //工资人数不超过100 个int snum=0;while (snum<=0||snum>100){printf("请输员工人数n<=100:");scanf("%d",&snum);}salaryinput(ss,snum);salarylist(ss,snum);return 0;void salaryinput(struct salary* sl,int num){int i=0;while(i<num){< bdsfid="279" p=""></num){<>printf("请输入员工%1d 的编号、姓名、基本工资、绩效工资、津贴工资、保险:\n",i+1); scanf("%s%s%lf%lf%lf%lf",sl[i].id,sl[i].name,&sl[i].base,&sl[i].meri t,&sl[i].su bsidiary,&sl[i].insurance);sl[i].tax=(sl[i].base+sl[i].merit+sl[i].subsidiary)*0.05;sl[i].real=(sl[i].base+sl[i].merit+sl[i].subsidiary-sl[i].insurance-sl[i].tax); i++;}}void salarylist(struct salary* sl,int num){int i;for(i=0;i<num;i++){< bdsfid="289" p=""></num;i++){<>printf("员工的编号、姓名、实发工资如下:",i+1);printf("%s %s %lf\n",sl[i].id,sl[i].name,sl[i].real);}}第8 题:#include#includevoid linkcreat();void linklist();struct Node{char data;struct Node *link;};Node *snode=NULL,*tmpnode,*lastnode;int main(){linkcreat();linklist();//最好增加一个释放链表的函数,为什么?return 0;}void linkcreat(){char c;lastnode=snode;printf("请输入一行字符:\n");while(scanf("%c",&c),c!='\n'){tmpnode=(Node*)malloc(sizeof(Node)); tmpnode->data=c;if (snode==NULL) snode=tmpnode;else lastnode->link=tmpnode; lastnode=tmpnode; }lastnode->link=NULL;}void linklist(){tmpnode=snode;while(tmpnode!=NULL){printf("%c",tmpnode->data); tmpnode=tmpnode->link; }printf("\n");}。

C程序设计第三版谭浩强习题答案全下

C程序设计第三版谭浩强习题答案全下

s ,另一个用来 第 9 章 预处理命令9.1 定义一个代参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的 实参。

输出已交换后的两个值。

解:# define SWAP(a,b) t=b;b=a;a=tmain ( ){int a,b,t;printf( “ Input two integers a,b: ” );scanf( “ %d,%d, ” *a,*b);SWAP(a,b);printf(“ Now,a=%d,b=%n ”d ,a,b);} 运行结果如下:In put two in tegers a,b : 3,4/Now,a=4,b=39.2 输入两个整数,求它们相除的余数。

用带参的宏来实现,编程序。

解:# define SURPLUS(a,b) a%bmain ( ){int a,b;printf( “Input two integers a,b:”); scanf( “ %d,%d ” ,&a,&b);printf(“Remember i s n%”d , SURPLUS(a , b));} 运行结果如下:Input two integers a,b : 60,13/Remember is 89.3 三角形的面积为: area=其中 s= (a+b+c),a,b,c 为三角形的三边。

定义两个带参的宏,一个用来求 求area 。

写程序,在程序中用带实参的宏名来求面积area 。

解:# include <math.h># define S(a,b,c)(a+b+c)/2# define AREA(a,b,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)) main ( ) {float a,b,c; printf(“Input a,b,c: ”);scanf( “ %f,%f,%f ” ,&a,&b,&c);if (a+b>c && a+c>b && b+c>a)printf(“ area:%8n.2”f. ,AREA(a,b,c));elseprintf( “ It is not a triangle! ” );}运行结果:①In put a,b,c: 3,4,5/area:6.00②In put a,b,c: 12,3,5/It is not a triangle!9.4给年份year 定义一个宏,以判断该年份是否为闰年。

(word完整版)C语言程序设计课后习题1-8参考答案

(word完整版)C语言程序设计课后习题1-8参考答案

C语言程序设计课后习题1—8参考答案习题1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。

运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。

数据运算包括算术运算和逻辑运算。

控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的.存储器是计算机中具有记忆能力的部件,用来存放程序和数据.输入设备是用来输入程序和数据的部件。

输出设备正好与输入设备相反,是用来输出结果的部件。

2、简述计算机的工作原理。

答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。

整个过程由控制器进行控制。

3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。

系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。

这类软件一般与具体应用无关,是在系统一级上提供的服务。

系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。

另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。

在操作系统的基础上运行。

4、什么叫软件?说明软件与硬件之间的相互关系。

答:软件是指计算机程序及有关程序的技术文档资料。

两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。

在不太严格的情况下,认为程序就是软件。

硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。

C语言程序设计(第3版)第9章补充习题及答案

C语言程序设计(第3版)第9章补充习题及答案

第9章补充习题及答案习题9.1 选择题(1)设int i,*p= &i;以下语句正确的是。

A.*p=10; B.i=p; C.i=*p; D.p = 2*p+1;(2)设char chStr[10],*pStr=chStr; 以下语句不正确的是。

A.pStr= chStr +5; B.chStr=pStr+ chStr;C.chStr [2]=pStr [4]; D.*pStr = chStr [0];(3)以下程序的执行结果是。

#include "stdio.h"void main(){ int iA[ ]={1,2,3,4,5,6};int *pInt;pInt = iA;*(pInt+3)+=2;printf("%d,%d\n",*pInt,*(pInt+3));}A.1,3 B.1,6 C.3,6 D.1,4 (4)以下fnMycomp()函数的功能是按词典顺序比较两个字符串chStr1和chStr2的大小。

如果chStr1大于chStr2,则返回正值;等于则返回0;小于则返回负值。

请选择正确的编号填空。

int fnMycomp(char *chStr1,char *chStr2){for( ; chStr1==chStr2; )if(*chStr1== '\0')return (0);return (*chStr1-*chStr2);}A.chStr1++ B.chStr2++C.chStr1++;chStr2++ D.chStr1++,chStr2++ (5)以下fnMycopy()函数的功能是将两个字符串chStr1和chStr2连接起来。

请选择正确的编号填空。

void fnMycopy(char *chStr1, char *chStr2){char *pStr=chStr1;while(*chStr1) ① ;while(*chStr2){*chStr1= ② ;chStr1++;chStr2++;}*chStr1 = '\0';③ ;}① A.chStr1-- B.chStr1++ C.chStr1D.*chStr1② A.*chStr2 B.chStr2 C.chStr2--D.*chStr2++③ A.return (chStr1) B.return (chStr2)C.return(pStr) D.return(pStr-chStr2)9.2 填空题(1)以下程序的执行结果是。

C++程序设计基础课后答案 第九章

C++程序设计基础课后答案  第九章

9.1 阅读下列程序,写出执行结果1. #include <iostream.h>template <typename T>void fun( T &x, T &y ){ T temp;temp = x; x = y; y = temp;}void main(){ int i , j;i = 10; j = 20;fun( i, j );cout << "i = " << i << '\t' << "j = " << j << endl;double a , b;a = 1.1;b = 2.2;fun( a, b );cout << "a = " << a << '\t' << "b = " << b << endl;}2. #include <iostream.h>template <typename T>class Base{ public:Base( T i , T j ) { x = i; y = j; }T sum() { return x + y; }private:T x , y;} ;void main(){ Base<double> obj2(3.3,5.5);cout << obj2.sum() << endl;Base<int> obj1(3,5);cout << obj1.sum() << endl;}9.2 思考题1.抽象类和模板都是提供抽象的机制,请分析它们的区别和应用场合。

2.类属参数可以实现类型转换吗?如果不行,应该如何处理?3.类模板能够声明什么形式的友员?当类模板的友员是函数模板时,它们可以定义不同形式的类属参数吗?请你写个验证程序试一试。

《C语言程序设计》课后习题答案()谭浩强

《C语言程序设计》课后习题答案()谭浩强

第1章程序设计和C语言 1 1.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句59 3.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。

C程序设计习题答案(7-9章)谭浩强著

C程序设计习题答案(7-9章)谭浩强著
if(flag1)
{ printf("\na[%d][%d]=%d\n",i,maxj,max);
flag2=1;
}
}
if(!flag2) printf("NOT");
for(k=2;k<=n*n;k++)
{i=i-1;
j=j+1;
if((i<1)&&(j>n))
{i=i+2;
j=j-1;
}
else
uppn++;
else if(text[i][j]>='a'&&text[i][j]<='z')
printf("\n");
}
}
7.7
main()
{int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1)
{scanf("%d",&n);
for(j=i+1;j<11;j++)
{temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
c=getchar();
if(c=='N'||c=='n')flag=0;
}
}
7.10
main()
{int i,j,uppn,lown,dign,span,othn;
char text[3][80];
for(i=3;i<N;i++)

c++第九章习题参考答案

c++第九章习题参考答案

C++程序设计教程(第二版)【高等教育出版社】第九章习题参考答案2011-07-26 16:55答案仅供参考本文来自lyz810的空间,/lyz810/blog/item/09e84c0e5cdb74306059f386.html//定义一个Dog类,包含name、age、sex、weight等属性以及对这些属性操作的方法。

//实现并测试这个类//以下文件为NO1.CPP#include<iostream>#include "Dog.h"using namespace std;void main(){Dog dog1,dog2,dog3;char name[11],sex;int weight,age;for(int i=1;i<4;i++){system("cls");cout<<"请输入第"<<i<<"只狗的信息("<<i<<"/3)\n";cout<<"名字(10字节以内不含空格)\n";cin>>name;cout<<"年龄\n";cin>>age;cout<<"性别(f或m)\n";cin>>sex;cout<<"重量\n";cin>>weight;switch(i){case 1:dog1.SetAttr(name,age,sex,weight); break;case 2:dog2.SetAttr(name,age,sex,weight); break;case 3:dog3.SetAttr(name,age,sex,weight); break;}}system("cls");cout<<"显示信息:\n";cout<<"名字\t年龄\t性别\t体重\n"; for(i=1;i<4;i++){switch(i){case 1:dog1.ShowAttr(); break;case 2:dog2.ShowAttr(); break;case 3:dog3.ShowAttr(); break;}}system("pause>nul"); }//以下文件为Dog.h#ifndef DOG_H#define DOG_Hclass Dog{char Name[11];int Age;char Sex;int Weight;public:void SetAttr(char[],int,char,int);void ShowAttr();};#endif//以下文件为Dog.cpp#include <iostream>#include <cstring>#include "Dog.h"using namespace std;void Dog::SetAttr(char *name,int age,char sex,int weight) {strcpy(Name,name);Age=age;Sex=sex;Weight=weight;}void Dog::ShowAttr(){cout<<Name<<"\t"<<Age<<"\t"<<Sex<<"\t"<<Weight<<"\n";}//设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。

同济c 程序设计 软件基础 答案 PPT 第九章

同济c  程序设计 软件基础 答案 PPT 第九章
本文由_MR_L_L贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
第九章 C++的I/O流库 的 流库 9.1 流 9.2 磁盘文件 9.3 程序举例
输出 数据 内存 数据 输入 设备
cout是系统定义过的ostream类的一个对象 cout是系统定义过的ostream类的一个对象,该类提供的多 是系统定义过的ostream类的一个对象, 输出功能都适用于cout,包括: 输出功能都适用于cout,包括: cout,包括
限定最大字符个数 不能超过size size不能超过size-1 指定的结束符, 指定的结束符, 该字符不包含在 字符串中, 字符串中,默认 结束符为‘ 结束符为‘\n’
放字符串的字符 组或字符指针
ude "iostream.h" ude "string.h" main() 输入一行字符串, 输入一行字符串,最 ne,max=0; 大长度不能超过49 大长度不能超过49 s[50],t[50]; <<"input a string:"<<endl; e((cin.getline(s,50))) ne=cin.gcount(); //line中存放的是刚刚读入的那行字符串的长度 中存放的是刚刚读入的那行字符串的长度 f(line>max) 若改为cin.getline(s,50, ' ') max=line; 结果如何? 结果如何? strcpy(t,s); }
file.close(); eam infile("abc.txt",ios::in); //以读的方式打开文件 以读的方式打开文件abc.txt 以读的方式打开文件 到文件尾返回1 到文件尾返回

C语言程序设计答案(黄保与编)第9章

C语言程序设计答案(黄保与编)第9章

一、选择题1、假设已经概念“struct stu {int a, b;} student;”,那么以下输入语句中正确的选项是D)scanf(“%d”,&;2、假设已有以下结构体概念,那么值为2的表达式是A)c[0].y;struct cmplx{int x;int y;}c[]={1,2,3,4};3、设有如下程序段,那么的值为D)A、B、C都不是union u{int a;int b;float c;}vu;=1; =2; =3;4、设已经概念“union u{char a; int b;}vu;”在VC中存储char型数据需要1个字节,存储int型数据需要4个字节,那么存储变量vu需要B)4个字节5、设已经概念“union u{int a; int b}vu={1,2};”,那么D)该概念错误6、设有概念“enum date{year,month,day}d;”那么以下表达中正确的选项是A)date是类型、d是变量、year是常量7、设有概念“enum date{year,month,day}d;”那么正确的表达式是B)d=year8、假设已经概念了“typedef struct stu{int a,b}student;”那么以下表达中正确的选项是C)student是结构体类型9、以下有关typedef语句的表达中,正确的选项是C)typedef语句用于给已概念类型取别名二、编程题1、设计一个通信录的结构体类型,并画出该结构体变量在内存中的存储形式struct {telephone char[20];address char[100];};2、用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离#include <>#include <>void main(){struct Point{float x;float y;}a,b;printf("输入点a的横坐标:\n");scanf("%f", &;printf("输入点a的纵坐标:\n");scanf("%f", &;printf("输入点b的横坐标:\n");scanf("%f", &;printf("输入点b的纵坐标:\n");scanf("%f", &;printf("a、b两点之间的距离为:%f\n", sqrt( - * - + - * - ));}3、用结构体变量表示日期(年、月、日),任意输入两个日期,求它们之间相差的天数#include <iostream>#include <>using namespace std;#define DAY_OF_YEAR 365 um=0;stu[i].average=0;printf("please scanf num name sex score(1) score(2) score(3) score(4) score(5)\n");scanf("%d%s%s",&stu[i].num,stu[i].name,stu[i].sex);for(j=0;j<5;j++){scanf("%d",&stu[i].score[j]);stu[i].sum+=stu[i].score[j];}stu[i].average=stu[i].sum/;}for(i=0;i<N;i++){printf("num name sex score(1) score(2) score(3) score(4) score(5) sum average\n");printf("%d %s %s ", stu[i].num, stu[i].name, stu[i].sex);for(j=0;j<5;j++){printf("%d ",stu[i].score[j]);}printf("%d ", stu[i].sum);printf("%f ", stu[i].average);printf("\n");}}4、箱子中有假设干个红、黄、白3中颜色的小球,每次从中掏出2个,求取得两种不同颜色的小球的可能情形,并输出每种颜色组合(利用列举类型)#include <>#include <>void main(){enum Color{Red, Yellow, White};enum Color i, j;for(i = Red; i <= White; i = (Color)(i + 1)){for(j = i; j <= White; j = (Color)(j + 1)){char s1[3], s2[3];switch(i){case 0: strcpy(s1, "红"); break;case 1: strcpy(s1, "黄"); break;case 2: strcpy(s1, "白"); break;}switch(j){case 0: strcpy(s2, "红"); break;case 1: strcpy(s2, "黄"); break;case 2: strcpy(s2, "白"); break;}printf("%s %s\n",s1,s2);}}}。

C语言程序设计答案(黄保和编)第9章

C语言程序设计答案(黄保和编)第9章

C语言程序设计答案(黄保和编)第9章选择题若已经定义“struct stu {int a, b;} student;”,则下列输入语句中正确的是D)scanf(“%d”,&student.a);若已有以下结构体定义,则值为2的表达式是A)c[0].y;struct cmplx{int x;int y;}c[]={1,2,3,4};设有如下程序段,则vu.a的值为D)A、B、C都不是union u{int a;int b;float c;}vu;vu.a=1; vu.b=2; vu.c=3;设已经定义“union u{char a; int b;}vu;”在VC中存储char型数据需要1个字节,存储int型数据需要4个字节,则存储变量vu需要B)4个字节设已经定义“union u{int a; int b}vu={1,2};”,则D)该定义错误设有定义“enum date{year,month,day}d;”则下列叙述中正确的是A)date是类型、d是变量、year是常量设有定义“enum date{year,month,day}d;”则正确的表达式是B)d=year若已经定义了“typedef struct stu{int a,b}student;”则下列叙述中正确的是C)student是结构体类型下列有关typedef语句的叙述中,正确的是C)typedef语句用于给已定义类型取别名编程题设计一个通讯录的结构体类型,并画出该结构体变量在内存中的存储形式struct {name 占10个字节telephone 占20个字节address 占100个字节name char[10];telephone char[20];address char[100];};用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离#include#includevoid main(){struct Point{float x;float y;}a,b;printf("输入点a的横坐标:\n");scanf("%f", &a.x);printf("输入点a的纵坐标:\n");scanf("%f", &a.y);printf("输入点b的横坐标:\n");scanf("%f", &b.x);printf("输入点b的纵坐标:\n");scanf("%f", &b.y);printf("a、b两点之间的距离为:%f\n", sqrt( (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) )); }用结构体变量表示日期(年、月、日),任意输入两个日期,求它们之间相差的天数#include#includeusing namespace std;#define DAY_OF_YEAR 365 //一年的天数,当为闰年时需要另外操作//日期结构体typedef struct date{int year;int month;int day;int day_of_year; //该日为该年的第几天}DATE, *DATE_P;//函数声明bool compear(DATE_P max, DATE_P min);int titoal(DATE_P date);bool leap_year(const int year);int funtion(DATE_P max , DATE_P min);//主函数void main(){DATE date_1, date_2; //输入的两个日期DATE_P max, min; //max指向大日期,min指向小日期int result;//数据输入printf("请输入日期1的数据项,年月日间用空格阁开:\n");scanf("%d%d%d", &date_1.year, &date_1.month, &date_1.day);printf("请输入日期2的数据项,年月日间用空格阁开:\n");scanf("%d%d%d", &date_2.year, &date_2.month, &date_2.day);//数据处理if( !compear(max=&date_1, min=&date_2) ) //比较日期大小,不需要交换result = funtion(max, min);else //需要交换result = funtion(min, max);//结果printf("两日期间相差的天数为:%d\n", result);}//比较两日期的大小bool compear(DATE_P max, DATE_P min){//max的日期小于min的日期,日期对调if((max->year < min->year)) //max的年份小于min return 1;else if((max->year == min->year)) //max和min的年份相同{if((max->month < min->month)) //max的月份小于min return 1;else if((max->month == min->month)) //max和min的月份相同if((max->day < min->day)) //max的日小于minreturn 1;}//其他情况满足max的日期大于(等于)min,日期保持不变return 0;}//计算相差天数int funtion(DATE_P max , DATE_P min){//年份相同,相差天数为大日期减小日期if(max->year == min->year){//计算大日期max->day_of_year = titoal(max); //计算日期函数if( leap_year(max->year) ) //如果为闰年if( (max->month==2 && max->day==29) || max->month>2) max->day_of_year ++;//计算小日期min->day_of_year = titoal(min);if( leap_year(min->year) ) //如果为闰年if( (min->month==2 && min->day==29) || min->month>2) min->day_of_year ++;//返回相差天数return max->day_of_year - min->day_of_year;}//年份不同,相差天数为max、min剩余天数和之间年的天数总和int max_year, min_year, other_year=0;//计算大日期max->day_of_year = titoal(max);if( leap_year(max->year) ) //如果为闰年if( (max->month==2 && max->day==29) || max->month>2) max->day_of_year ++;max_year = max->day_of_year;//计算小日期min->day_of_year = titoal(min);if( leap_year(min->year) ) //如果为闰年if( (min->month==2 && min->day==29) || min->month>2) min->day_of_year ++;min_year = DAY_OF_YEAR - min->day_of_year; //剩余的天数if( leap_year(min->year) ) //如果为闰年天数加1min_year ++;//计算之间的日期int year;for(year=min->year+1 ; year< max->year ; year++)other_year+=DAY_OF_YEAR+leap_year(year);//一年的天数, 并考虑是否为闰年//返回总天数return max_year + min_year + other_year;}//计算某日该年的第几天, 闰年也按平年处理int titoal(DATE_P date){int result=0; //最后结果int i; //标记月份for(i=1 ; i< date->month ; i++) //计算以过月份的天数{switch(i){case 1:case 3:case 5:case 7:case 8:case 10:result += 31;break;//大月31天,注:12月不会出现,所以忽略不写case 4:case 6:case 9:case 11:result += 30;break;//小月31天default:result += 28; //2月28天}return result += date->day; //加上本月天数既为最后结果}//判断某年是否为闰年,若是返回1,否则返回0bool leap_year(const int year){if( (!(year%4) && year%100) || !(year%400) )return 1;return 0;}用结构体变量表示复数(实部和虚部),输入两个复数,求两复数之积#includestruct com{int real;int im;};void main(){struct com a,b,c;struct com cmult(struct com creal,struct com cim);int i,j;printf("输入两个复数的实部和虚部:");scanf("%d%d%d%d",&a.real,&a.im,&b.real,&b.im);c=cmult(a,b);printf("乘积为:%d+%di",c.real,c.im);}struct com cmult(struct com creal,struct com cim) /*求乘积的函数*/struct com a;a.real=creal.real*cim.real-creal.im*cim.im;a.im=creal.real*cim.im+creal.im*cim.real;return(a);}/* 设复数为a+bi 和c+di ,那么和为:(a+c)+(b+d)i,乘积为:(ac-bd)+(ad+bc)i 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、选择题1、若已经定义“struct stu {int a, b;} student;”,则下列输入语句中正确的是D)scanf(“%d”,&student.a);2、若已有以下结构体定义,则值为2的表达式是A)c[0].y;struct cmplx{int x;int y;}c[]={1,2,3,4};3、设有如下程序段,则vu.a的值为D)A、B、C都不是union u{int a;int b;float c;}vu;vu.a=1; vu.b=2; vu.c=3;4、设已经定义“union u{char a; int b;}vu;”在VC中存储char型数据需要1个字节,存储int型数据需要4个字节,则存储变量vu需要B)4个字节5、设已经定义“union u{int a; int b}vu={1,2};”,则D)该定义错误6、设有定义“enum date{year,month,day}d;”则下列叙述中正确的是A)date是类型、d是变量、year是常量7、设有定义“enum date{year,month,day}d;”则正确的表达式是B)d=year8、若已经定义了“typedef struct stu{int a,b}student;”则下列叙述中正确的是C)student是结构体类型9、下列有关typedef语句的叙述中,正确的是C)typedef语句用于给已定义类型取别名二、编程题1、设计一个通讯录的结构体类型,并画出该结构体变量在内存中的存储形式struct {telephone char[20];address char[100];};2、用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离#include <stdio.h>#include <math.h>void main(){struct Point{float x;float y;}a,b;printf("输入点a的横坐标:\n");scanf("%f", &a.x);printf("输入点a的纵坐标:\n");scanf("%f", &a.y);printf("输入点b的横坐标:\n");scanf("%f", &b.x);printf("输入点b的纵坐标:\n");scanf("%f", &b.y);printf("a、b两点之间的距离为:%f\n", sqrt( (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) )); }3、用结构体变量表示日期(年、月、日),任意输入两个日期,求它们之间相差的天数#include <iostream>#include <stdio.h>using namespace std;#define DAY_OF_YEAR 365 //一年的天数,当为闰年时需要另外操作//日期结构体typedef struct date{int year;int month;int day;int day_of_year; //该日为该年的第几天}DATE, *DATE_P;//函数声明bool compear(DATE_P max, DA TE_P min);int titoal(DATE_P date);bool leap_year(const int year);int funtion(DATE_P max , DATE_P min);//主函数void main(){DA TE date_1, date_2; //输入的两个日期DA TE_P max, min; //max指向大日期,min指向小日期int result;//数据输入printf("请输入日期1的数据项,年月日间用空格阁开:\n");scanf("%d%d%d", &date_1.year, &date_1.month, &date_1.day);printf("请输入日期2的数据项,年月日间用空格阁开:\n");scanf("%d%d%d", &date_2.year, &date_2.month, &date_2.day);//数据处理if( !compear(max=&date_1, min=&date_2) ) //比较日期大小,不需要交换result = funtion(max, min);else //需要交换result = funtion(min, max);//结果printf("两日期间相差的天数为:%d\n", result);}//比较两日期的大小bool compear(DATE_P max, DA TE_P min){//max的日期小于min的日期,日期对调if((max->year < min->year)) //max的年份小于min return 1;else if((max->year == min->year)) //max和min的年份相同{if((max->month < min->month)) //max的月份小于min return 1;else if((max->month == min->month)) //max和min的月份相同if((max->day < min->day)) //max的日小于minreturn 1;}//其他情况满足max的日期大于(等于)min,日期保持不变return 0;}//计算相差天数int funtion(DATE_P max , DATE_P min){//年份相同,相差天数为大日期减小日期if(max->year == min->year){//计算大日期max->day_of_year = titoal(max); //计算日期函数if( leap_year(max->year) ) //如果为闰年if( (max->month==2 && max->day==29) || max->month>2)max->day_of_year ++;//计算小日期min->day_of_year = titoal(min);if( leap_year(min->year) ) //如果为闰年if( (min->month==2 && min->day==29) || min->month>2)min->day_of_year ++;//返回相差天数return max->day_of_year - min->day_of_year;}//年份不同,相差天数为max、min剩余天数和之间年的天数总和int max_year, min_year, other_year=0;//计算大日期max->day_of_year = titoal(max);if( leap_year(max->year) ) //如果为闰年if( (max->month==2 && max->day==29) || max->month>2)max->day_of_year ++;max_year = max->day_of_year;//计算小日期min->day_of_year = titoal(min);if( leap_year(min->year) ) //如果为闰年if( (min->month==2 && min->day==29) || min->month>2)min->day_of_year ++;min_year = DAY_OF_YEAR - min->day_of_year; //剩余的天数if( leap_year(min->year) ) //如果为闰年天数加1min_year ++;//计算之间的日期int year;for(year=min->year+1 ; year< max->year ; year++)other_year+=DAY_OF_YEAR+leap_year(year);//一年的天数, 并考虑是否为闰年//返回总天数return max_year + min_year + other_year;}//计算某日该年的第几天, 闰年也按平年处理int titoal(DATE_P date){int result=0; //最后结果int i; //标记月份for(i=1 ; i< date->month ; i++) //计算以过月份的天数{switch(i){case 1:case 3:case 5:case 7:case 8:case 10:result += 31;break;//大月31天,注:12月不会出现,所以忽略不写case 4:case 6:case 9:case 11:result += 30;break;//小月31天default:result += 28; //2月28天}}return result += date->day; //加上本月天数既为最后结果}//判断某年是否为闰年,若是返回1,否则返回0bool leap_year(const int year){if( (!(year%4) && year%100) || !(year%400) )return 1;return 0;}4、用结构体变量表示复数(实部和虚部),输入两个复数,求两复数之积#include <stdio.h>struct com{int real;int im;};void main(){struct com a,b,c;struct com cmult(struct com creal,struct com cim);int i,j;printf("输入两个复数的实部和虚部:");scanf("%d%d%d%d",&a.real,&a.im,&b.real,&b.im);c=cmult(a,b);printf("乘积为:%d+%di",c.real,c.im);}struct com cmult(struct com creal,struct com cim) /*求乘积的函数*/{struct com a;a.real=creal.real*cim.real-creal.im*cim.im;a.im=creal.real*cim.im+creal.im*cim.real;return(a);}/* 设复数为a+bi 和c+di ,那么和为:(a+c)+(b+d)i,乘积为:(ac-bd)+(ad+bc)i 。

相关文档
最新文档