版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《C语言程序设计教程》课后题答案第一章一选择题1.A2.B3.C4.D5.B6.C填空题程序算法main或主4.编译5.编译6..obj7.库函数8.文本或ASCII码三、 编程题参考代码如下:#include<stdio.h>voidmain(){printf("金\n木5水\n火5土\n");}参考代码如下:#include<stdio.h>voidmain(){inta,b;scanf("%d%d",&a,&b);printf("%d+%d=%d\n",a,b,a+b);printf("%d-%d=%d\n",a,b,a-b);printf("%d*%d=%d\n",a,b,a*b);printf("%d/%d=%d\n",a,b,a/b);}参考代码如下:#include<stdio.h>voidmain(){floata,b,h,s;scanf("%f%f%f",&a,&b,&h);s=(a+b)*h/2;printf("s=%f\n",s);第二章一选择题答案及分析:B,略A,-8在内存中是以补码(设两个字节)形式存储的A,C语言有32个关键字(参见课本第18页),且C语言标识符是区分大小写字母的A,略D,八进制数据中不能出现数码8B,字符常量应该用单引号括起来,答案D超出了ASCII取值范围(ASCII的取值范围为[0,255])C,该字符串中转义字符有三个:\\、\22和\n,普通字符有三个:a、,和0,所以字符串长度为6C,略D,C语言没有read函数和%D格式符号,且scanf函数第二个形参为地址列表B,根据题意,scanf函数输入数据时分隔符号不应该是逗号,应该是空格或回车符,且输入数据时分一行或几行均可A,scanf函数中不允许出现%8.4,%6.2和%8这样的格式符号C,既要保证5位小数位,还得保证整数位不变,这样数据12345.67800用10列不能完全显示出来,按C语言规定,12345.67800原样输出B,printf函数中格式符号%d,%o,%x表示对应的整型数据分别按十进制,八进制和十六进制输出C,按C语言规定,scanf函数形参双引号中,如果包含非格式符号,在输入数据时要求原样输入填空题答案及分析:1.intfloatdouble(略)2.65,89,printf函数中如果格式符号是%小,则输出相应字符的ASCII十进制数值a=98,b=765.000000,c=4321.000000,scanf函数中的格式符号%2d%3f%4f,表示将键盘输入的数据9876543210按2,3,4位分割,然后再分别赋给变量a,b,cscanf("%lf%lf%lf",&a,&b,&c);double类型的变量对应的格式符号是%lf三、 编程题参考代码如下:#include<stdio.h>voidmain(){inta=97;printf("%c\n",a);printf("%d\n",a);printf("%o\n",a);printf("%x\n",a);}程序分析:通过printf函数中不同的格式符号,即%c(字符),%d(十进制),%o(八进制),%x(十六进制)输出相应的值。参考代码如下:#include<stdio.h>voidmain(){inth,m,minute;scanf("%d:%d",&h,&m);minute=h*60+m;printf("minute=%d\n",minute);}程序分析:输入形式为10:27,故scanf函数双引号中两个格式符号%d之间必须加入“:”参考代码如下:#include<stdio.h>voidmain(){floatr=6371000,s,v;s=4*3.1415926*r*r;v=3.1415926*4/3*r*r*r;printf("s=%f\nv=%f",s,v);}程序分析:C语言中的n不代表3.1415926,可以用各种常量的形式体现出来。参考代码如下:#include<stdio.h>voidmain(){intm100,m50,m20,m10,m5,m1,m;scanf("%d",&m);m100=m/100;m50=(m-m100*100)/50;m20=(m-m100*100-m50*50)/20;m10=(m-m100*100-m50*50-m20*20)/10;m5=(m-m100*100-m50*50-m20*20-m10*10)/5;m1=m-m100*100-m50*50-m20*20-m10*10-m5*5;printf("%d元发工资,人名币各票面的张数为:\n",m);printf("100元的张数:%d\n",m100);printf("50元的张数:%d\n",m50);printf("20元的张数:%d\n",m20);printf("10元的张数:%d\n",m10);printf("5元的张数:%d\n",m5);printf("1元的张数:%d\n",m1);}程序分析:人民币的面值分别为100元,50元,20元,10元,5元和1元,工资4367元除以100后得到的商就为100元张数,余数再除以50,得到的商为50元的张数,余数再除20,……,以此类推就会得出人民币各面值相应的张数。参考代码如下:#include<stdio.h>voidmain(){floatr1,r2,r3,r;scanf("%f%f%f",&r1,&r2,&r3);r=r1*r2*r3/(r1*r2+r2*r3+r1*r3);printf("三个电阻并联后的总电阻为%f\n",r);}程序分析:首先将计算并联电阻值的公式变换一下;再就是考虑要保留小数位,故变量类型设置为实型,注意格式符号为%f。参考代码如下:#include<stdio.h>voidmain(){intx,a,b,c,d,y;scanf("%d",&x);a=x%10;b=x/10%10;c=x/100%10;d=x/1000;y=a*1000+b*100+c*10+d;printf("%d逆置各位数后的值为%d\n",x,y);}程序分析:1234除以10的余数就是4,商再除以10的余数就是3,1234除以100再除以10取余就是2,1234除以1000就是1。也可以用其他的表达式求出各位数值,例如输入数据1234中的4,可以用公式a=x-d*1000-c*100-b*10来计算。参考代码如下:#include<stdio.h>voidmain(){floatF,C;printf("请输入华氏温度:");scanf("%f",&F);C=5.0/9*(F-32);printf("华氏温度%f对应的摄氏温度为%f\n",F,C);}程序分析:5/9的值为0,所以要写成5.0/9,5/9.0或5.0/9.0,还要注意变量类型为实型,且对应的格式符号为%f。参考代码如下:#include<stdio.h>voidmain()charch1,ch2,ch3;printf("请输入三个数字字符:”);scanf("%c%c%c",&ch1,&ch2,&ch3);printf("将数字字符转换为数字%d,%d,%d\n",chl-'0',ch2-48,ch3-'0');}程序分析:通过键盘输入三个数字字符时要连续输入,不要加任何分隔符号,例如121等,另外,数字字符输出时遇到格式符号%小将输出相应数字字符的ASCII值,但任何一个数字字符的ASCII值减去字符0的ASCII值,再对应%d格式符号输出时,就是数字字符对应的数字,例如'2'-'0'=2。不能得到指定的输出结果,参考代码如下:voidmain(){inta,b,c,x,y;scanf("%d%d%d",&a,&b,&c);x=a*b;y=x*c;printf("a=%d,b=%d,c=%d\n",a,b,c);printf("x=%d,y=%d\n",x,y);}程序分析:scanf("%d,%d,%d",a,b,c);scanf函数第二类形参是地址列表,所以语句改为scanf(”%d,%d,%d",&a,&b,&c);而这个语句对应的键盘输入形式为2,3,4。为了满足题目要求,scanf语句改为scanf("%d%d%d",&a,&b,&c);。另外,printf函数双引号只能出现一对,且双引号中需要在相应的位置上添加a=等这样的字符串才能原样输出;还有整型变量对应格式符号是%d等。第三章15.B28.A15.B28.AA2.C3.C4.D5.C6.B7.C8.B9.A10.A11.A12.B13.D14.A16.C17.C18.C19.C20.C21.C22.B23.C24.C25.A26.B27.A29.C30.A31.C32.C二.填空题非零零passwarm3.525252fabs(x)>5x%y==06.if((1<=x&&x<=10||200<=x&&x<=210)&&x%2==1)printf("%d",x);7.k=1Right!1Right!1$$$a=0a=2,b=111.0<a<b12.t;"%f%f"a=b;13."%c",&ch'A'<=ch&&ch<='Z'ch14.死循环15.34516.73-117.x>=0x<amin18scan("%f",&x);sum+=x;19.820.1121.2.40000022.892123.i<=9j%3!=0b=i+1852d=1.0k++k<=n三、编程题1.参考代码如下:#include<stdio.h>voidmain(void){floatx,y;printf("Pleaseinputthevalueofx:");scanf("%f",&x);if(x>-5&&x<0)y=x;elseif(x==0)y=x-1;elseif(x>0&&x<10)y=x+1;printf("y=%f",y);}2.参考代码如下:#include<stdio.h>voidmain(void){floata,b,c;printf(”请输入三角形三边的长度:\n");scanf("%f%f%f",&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b)if(a==b&&a==c)printf(”该三角形是等边三角形\n");elseif(a==b&&a!=c)printf(”该三角形是等腰三角形\n");elseprintf(”该三角形是一般三角形\n");elseprintf(”不能构成三角形\n");}参考代码如下:#include<stdio.h>voidmain(void){floatM,N,menoy;printf(”请输入购买金额:”);scanf("%f",&M);if(M<100)N=0;elseif(M>=100&&M<200)N=1.5;elseif(M>=200&&M<300)N=2.5;elseif(M>=300&&M<400)N=3.5;elseif(M>=400&&M<500)N=4.5;elseif(M>=500&&M<600)N=5.5;elseN=6;menoy=M*(1-N/100);printf("实际支付金额:%f,返还的金额:%f\n",menoy,M-menoy);}参考代码如下:#include<stdio.h>voidmain(void){floatM,N,menoy;intin;printf(”请输入购买金额:”);scanf("%f",&M);in=M/100;switch(in){case0:N=0;break;case1:N=1.5;break;case2:N=2.5;break;case3:N=3.5;break;case4:N=4.5;break;case5:N=5.5;break;default:N=6;break;}menoy=M*(1-N/100);printf("实际支付金额:%f,返还的金额:%f\n",menoy,M-menoy);}参考代码如下:#include<stdio.h>voidmain(void){floatx,max;printf("Enteranumber:");scanf("%f",&x);max=x;while(x>0)printf("Enteranumber:");scanf("%f",&x);if(x>max)max=x;}if(max>0)printf("Thelargestnumberenteredwas%f\n",max);}参考代码如下:#include<stdio.h>voidmain(void){floatM,N,menoy;printf(”请输入购买金额:”);scanf("%f",&M);while(M>0){if(M<100)N=0;elseif(M>=100&&M<200)N=1.5;elseif(M>=200&&M<300)N=2.5;elseif(M>=300&&M<400)N=3.5;elseif(M>=400&&M<500)N=4.5;elseif(M>=500&&M<600)N=5.5;elseN=6;menoy=M*(1-N/100);printf(”实际支付金额:%f,返还的金额:%f\n",menoy,M-menoy);printf("请输入购买金额:”);scanf("%f",&M);}}参考代码如下:#include<stdio.h>voidmain(void)floatnumber,positivesum=0,negativesum=0,total=0;inti;for(i=1;i<=10;i++){scanf("%f",&number);if(number>=0)positivesum+=number;elsenegativesum+=number;total+=number;}printf("positivesum%f,negativesum%f,total%f\n",positivesum,negativesum,total);}参考代码如下:#include<stdio.h>voidmain(void){inti,sum=0,k=1;for(i=1;i<=101;i+=2){sum=sum+k*i;k=-k;}printf("1-3+5-7+...-99+101=%d\n",sum);}参考代码如下:#include<stdio.h>voidmain(void){floati,sum=0,k=1;for(i=1;k>=1e-4;i++){sum=sum+k;k=k/i;}printf("e=%f\n",sum);}10.参考代码如下:#include<stdio.h>voidmain(void){floati,sum=0,n=2,d=1,temp;for(i=1;i<=20;i++)sum=sum+n/d;temp=n;n=n+d;d=temp;}printf("sum=%f\n",sum);}11.参考代码如下:#include<stdio.h>#include<math.h>voidmain(void){floatapple,watermelon,pear;for(apple=1;apple<100;apple++)for(watermelon=1;watermelon<10;watermelon++){pear=100-apple-watermelon;if(fabs(apple*0.4+watermelon*4+pear*0.2-40.0)<1e-6)printf("apple:%.0f,watermelon:%.0f,pear:%.0f\n",apple,watermelon,pear);}}12.参考代码如下:#include<stdio.h>voidmain(void){inti,j,k;for(i=1;i<10;i++)for(j=0;j<10;j++)for(k=0;k<10;k++)if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)printf("%d\n",i*100+j*10+k);}或:#include<stdio.h>voidmain(void){inta,b,c,i;for(i=100;i<1000;i++){a=i/100;b=i/10%10;c=i%10;if(i==(a*a*a+b*b*b+c*c*c))printf("%d\n",i);13.参考代码如下:#include<stdio.h>voidmain(void){inta,b,c,d;for(a=1;a<10;a++)for(b=0;b<10;b++)for(c=0;c<10;c++)for(d=0;d<10;d++)if(a*1000+b*100+c*10+d==(a*10+b+c*10+d)*(a*10+b+c*10+d))printf("%d\n",a*1000+b*100+c*10+d);}或:#include<stdio.h>voidmain(void){inta,b,c,d,i;for(i=1000;i<10000;i++){a=i/1000;b=i/100%10;c=i/10%10;d=i%10;if(i==(a*10+b+c*10+d)*(a*10+b+c*10+d))printf("%d\n",i);}}14.参考代码如下:#include<stdio.h>voidmain(void){inti,j;for(i=l;iv=4;i++)〃先控制打印前4行{for(j=l;j<=4-i;j++)printf("");for(j=l;j<=2*i-l;j++)printf("*");printf("\n");}for(i=1;i<=3;i++)〃再控制打印后3行{for(j=1;j<=i;j++)printf("");for(j=1;j<=2*(4-i)-1;j++)printf("*");printf("\n");}}第四章一选择题A,如果没有给s[1]赋值,按C语言规定,s[l]下标变量中的数据是一个随机数C,"China"字符串末尾还有一个\0,故占6个字节D,scanf函数中格式符号若是%c,则把输入的第一个字符⑴赋给变量c,然后遇到格式符号%d,则把后续的23(遇到空格结束)赋值给变量i,遇到格式符号%s,则把后续的字符串"456"(遇到空格结束)赋值给变量sD,C语言规定,数组在定义时就已经分配好了所占内存空间,所以intx[5]在内容中占的字节数为4*5=20B,内层循环变量j每次都从0开始,使得在外层循环变量i每取一个值时,n[0]和n[1]的值都得重新计算B,这是求十进制数18对应二进制数的程序,将每次18除以2得到的余数依次放到数组a[0]至I」a[4]中,最后按a[4]至I」a[0]这样的顺序输出B,第一个for循环给a[0]到a[9]赋值为0到9,第二个for循环给p[0]到p[2]赋值为0,2,6,第三个for循环使k=k+p[0]*2+p[1]*2+p[2]*2=5+4+12=21D,C语言规定,定义二维数组时不能省略第二维下标值,但可以省略第一维下标值B,略A,每行的第4列元素的值都为0C,略D,C语言规定,字符数组不能用s="abcd"这样的赋值语句赋值C,float类型的变量对应格式符号通常为%f,不是%dA,每行的第3列元素的值均为0D,略C,A这种赋值形式无法放置字符串末尾的\0,B和D不符合C语言规定,即字符数组不能用s="good"这样赋值语句赋值A,这是字符数组str初始化的形式,str[0]到str⑸分别为字符s,t,r,i,n,g,str⑹到str[11]的值均为\0,函数strlen是统计字符串包含字符的个数,遇到\0(不包括\0)结束,所以str长度为6C,x数组比y数组多了一个字符\0A,数组名就是数组第一个元素的地址,所以scanf("%s",&s);中得删除数组名前面的&D,puts和putchar函数只有一个参数,printf函数中格式符号%$应该对应的是数组名D,程序功能是输出第2和第3个字符串A,双层循环完成的功能是求s的值,s=(((a[0][0]*10+a[0][2])*10+a[1][0])*10+a[1][2]=(((6*10+3)*10+8)*10+5=6385二.填空题a=1234b=5答案分析:C语言规定,使用scanf函数通过键盘输入数据时,除了格式符号和转义字符,其他符号要原样输入。Hello答案分析:b⑸=0等于b[5]='\0',是因为字符\0的ASCII值就是0,而printf("%s\n",b);的功能是输出字符串,但遇到空格或\0等字符时结束输出,所以答案为Hello。j<3;b[j][i]=a[i][j];i<3答案分析:通过两个数组下标变量位置的变换来完成程序功能。a[age]++i=18;i<=25答案分析:用数组a来存储每个年龄段的人数,并通过a[age]++来实现。c[i]=n%base;b[d]答案分析:十进制整数转换为n进制采用的是除以n取余法,使用变量base存放某个进制的值,c数组存放每次计算的余数。最后一个for循环输出不同进制所对应的数码符号。break;i>=8答案分析:如果找到某个数,则通过break语句终止循环。-850,2,0答案分析:程序功能是查找并输出二维数组中最小值及其下标值。a[i]>b[j] i<3j<5答案分析:数组a和b的长度可以相等或不等,通过iv3或jv5来看哪个数组的值还没有放进c数组中。a[i][j] j=0;j<4;j++j==3printf("\n");答案分析:用数组a最后一列,即第4列来保存每行的和,通过printf("\n");语句来控制按3行来输出。fi答案分析:略GDABC答案分析:略s[i++]答案分析:while(s[i])表示当s[i]中的字符不为\0时进入循环体,否则退出while循环。ahAMa答案分析:通过scanf("%s",a);给字符数组赋值时遇到空格或回车符号将终止输入。程序功能是将字符串中的字符a,大写变成小写,小写变成大写,其他字符保持不变。LBLMNP答案分析:执行strcat(a,b);语句后,a数组的值为”ABLMNP",b数组的值为”LMNP";在执行while(a[j++]!=O)b[j]=a[j];时,b[j]中的j值是前面a[j++]中j++执行后的值,即while循环首先执行b[1]=a[1]='B',然后是b[2]=a[2]='L',b[3]=a[3]='M',……,b[0]中的字符保持不变,仍是'L'。'\0'i++答案分析:因为while(str[i])是通过字符串末尾的\0来判断字符串是否读取结束,所以字符数组str最后要有一个字符串结束符号\0。b[j]=a[j][0];b[j]=a[j][k]答案分析:用b数组存储每行中的最大字符,最终b[0]存放第一行字符中的最大字符,b[1]存放第一行字符中的最大字符,……。b[j]=a[j][0]的作用是在查找一串字符中最大字符前,先把这串字符第一个字符放到b[j]中,然后通过循环和条件判断来实现最大字符的查找。a[k++]=a[j]答案分析:略三、编程题1.参考代码如下:#include<stdio.h>voidmain(void)intarray[31],total=0;inti,j=1;for(i=0;i<30;i++){array[i]=2*j;j++;total=total+array[i];}array[30]=total/30;for(i=0;i<31;i++)printf("%d,",array[i]);}答案分析:由于平均值要放在数组array的末尾,所以在定义数组时要多定义一个元素,即array[31]。另,为了保持数组类型一致性,故平均值也只取整数值。参考代码如下:#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inti,j,k,a[20],temp;srand(time(NULL));for(i=0;i<20;i++){a[i]=rand()%101;〃产生[0,100]之间的随机数,取整后赋给a[i]printf("%d",a[i]);}printf("\n");for(i=0;i<19;i++){k=i;for(j=i+1;j<20;j++)if(a[j]<a[k])k=j;if(k!=i)temp=a[i],a[i]=a[k],a[k]=temp;}for(i=0;i<20;i++)printf("%d",a[i]);}程序分析:略参考代码如下:#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inti,maxi,a[30];srand(time(NULL));for(i=0;i<30;i++){a[i]=rand()%101; 〃产生[0,100]之间的随机数,取整后赋给a[i]printf("%d",a[i]);}printf("\n");maxi=0;for(i=1;i<30;i++)if(a[maxi]<a[i])maxi=i;for(i=maxi+1;i<30;i++)//将最大数后边的数据依次前移一个位置a[i-1]=a[i];for(i=0;i<29;i++)printf("%d",a[i]);}程序分析:略参考代码如下:#include<stdio.h>voidmain(){inti,n=0,a[30],x;scanf("%d",&x);//输入要转换的数据do{a[n]=x%2;//取余数n++;x=x/2; //整除}while(x!=0);for(i=n-1;i>=0;i--)//输出printf("%d",a[i]);}程序分析:利用十进制数除以2取余数的方法计算对应的二进制数。参考代码如下:#include<stdio.h>#include<string.h>voidmain(){intright[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},s=0,i,y;charnum[18],check[11]={'1','0','X','9','8','7','6','5','4','3','2'};printf("请输入身份证号码的前17位:");gets(num); //输入身份证号码for(i=0;i<17;i++) //对前17位数字的权求和s=s+(num[i]-'0')*right[i];y=s%11; //计算模printf("lastnumberis%c\n",check[y]);}程序分析:身份证前17位是以字符串的形式输入的,利用表达式num[i]-'0可以得到每个字符对应的数字;然后算出y值,再将对应的验证码输出即可,例如若y=10,则输出字符2。参考代码如下:#include<stdio.h>voidmain(){inta[20][20]={0},i,j,n;scanf("%d",&n); //输入要打印的杨辉三角形的行数for(i=0;i<n;i++) //对第一列和对角线元素赋值a[i][0]=a[i][i]=1;for(i=2;i<n;i++) //求对角线以下、第一列右边的元素值for(j=1;j<i;j++)a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<n;i++) //打印杨辉三角形{for(j=0;j<=i;j++)printf("%8d",a[i][j]);printf("\n");}}程序分析:杨辉三角形数据矩阵的第一列和对角线上数值均为1,通过for(i=0;i<n;i++)a[i][0]=a[i][i]=1;就可以完成,且也完成了前两行的赋值,从第三行开始,利用双层循环计算除了第一列和对角线外其他元素的值。另,为了输出效果整齐,输出时可以规定每个元素占一样的列宽。参考代码如下:#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inta[5][6],i,j,max,min;srand(time(NULL));for(i=0;i<5;i++){for(j=0;j<6;j++){a[i][j]=rand()%51;产生[0,50]之间的随机数,取整后赋给a[i][j]printf("%4d",a[i][j]);}printf("\n");}max=min=a[0][0];for(i=0;i<5;i++)for(j=0;j<6;j++){if(max<a[i][j])max=a[i][j];if(min>a[i][j])min=a[i][j];}printf("max=%d,min=%d\n",max,min);}程序分析:先产生30个随机整数放到二维数组a中,然后假设第一个数即是最小数也是最大数,再通过双重循环和条件判断来找到这30个整数的最大值和最小值。参考代码如下:#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inta[20][20],i,j,n;srand(time(NULL));printf(”请输入n(n*n)的值:”);scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<=i;j++){a[i][j]=rand()%51;产生[0,50]之间的随机数,取整后赋给a[i][j]a[j][i]=a[i][j];}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%4d",a[i][j]);printf("\n");}}程序分析:通过for(j=0;j<=i;j++)来控制只遍历数值方阵的下三角数据(包括主对角线上的数据),通过a[j][i]=a[i][j];语句完成与下三角对应位置的上三角数组元素的赋值,从而形成对称矩阵。参考代码如下:#include<stdio.h>
voidmain(){charstr[80],c;inti=0;while((c=getchar())!='\n')//接受从键盘输入的字符,直到遇到回车{str[i]=c; //将接受到的字符存入字符数组中i++;}str[i]='\0';puts(str); //检验以上程序的结果是否正确}程序分析:gets函数功能是从键盘输入字符串,遇到回车符号结束输入,所以通过while((c=getchar())!='\n')来决定键盘输入的每一个字符是否放在数组str中。最后通过str[i]='\O';语句来添加字符串的结束标志'\0'。10.参考代码如下:#include<stdio.h>voidmain(){charstr[80],temp;inti,j;//测试字符串长度//测试字符串长度//i为最后一个字符所在下标//对换对称位置的字符for(i=0;str[i];i++);i--;for(j=0;j<i;j++,i--)temp=str[i],str[i]=str[j],str[j]=temp;puts(str); //输出处理好的字符串}程序分析:略11.参考代码如下#include<stdio.h>voidmain(){charmonth[12][20]={"****","January","February","March","April","May","June","July","August","September","October","November","December"};inta,b,c,d,e,number;printf(”请输入3位正整数,0或负数结束:");scanf("%d",&number);while(number>0){a=number/100;b=number/10%10;c=number%10;d=a+b+c;e=d%12;if(e==0)printf("%d=%d+%d+%d=%d,%d%%%d=%d,%s\n",number,a,b,c,d,d,12,e,month[e]);elseprintf("%d=%d+%d+%d=%d,%d%%%d=%d,%s\n",number,a,b,c,d,d,12,e,month[e]);scanf("%d",&number);}}程序分析:按照题意先给month数组赋初值,再通过公式把一个3位整数的每位数值提取出来,计算这三个数的和d,然后d除以12取余数,最后输出余数作为下标的对应month数组的数组元素即可。12.参考代码如下:#include<stdio.h>voidmain(){charstr[80];inti;gets(str);for(i=0;str[i]!='\0';i++)printf(”字符串的长度为%d\n",i);程序分析:通过for(i=0;str[i]!='\0';i++);中变量i值的递增来遍历数组,最终i的值就是字符串的长度。第五章一.选择题1-5DDBCB6-10BACAA11-15DBBCD二.填空题Howdoesshe*(p+i*4+j)printf("\n")*(++p)num+1q<num+10*q>max*q<min5.0或'\0'n++b[n]='\0'三、编程题参考代码如下:#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inti,a[20],b[20],*pa,*pb,temp;srand(time(NULL));for(i=0;i<20;i++){a[i]=rand()%101;b[i]=rand()%101;}printf(”数组a:");for(i=0;i<20;i++)printf("%d",a[i]);printf("\n");printf(”数组b:");for(i=0;i<20;i++)printf("%d",b[i]);printf("\n");pa=a;pb=b;for(i=0;i<20;i++)//对换数组a和数组b相同位置的元素{temp=*pa;
*pa=*pb;*pb=temp;pa++;pb++;printf(”对换后\n");printf(”数组a:");for(i=0;i<20;i++)printf("%d",a[i]);printf("\n");printf(”数组b:");for(i=0;i<20;i++)printf("%d",b[i]);}参考代码如下:#include<stdio.h>main(){charstr1[80],str2[80],*p1,*p2;intj;printf("inputtwokindsofstring:\n");gets(str1);gets(str2);for(p1=str1,p2=str2;*p1&&*p2;p1++,p2++)/*比较每一对字符,直到出现'\0',退出循环*/{j=*p1-*p2;/*j为结束比较时那对字符的ASCII码差值j=*p1-*p2;/*j为结束比较时那对字符的ASCII码差值*/if(j>0)printf("%d\n",1);elseif(j<0)printf("%d\n",-1);elseprintf("%d\n",0);}参考代码如下:#include<stdio.h>intmain(){inta[4][4],temp;int(*p)[4];inti,j;p=a; //为行指针p赋初值printf("Enterarrayelements:\n");for(i=0;i<4;i++) //输入数组元素的值
for(j=0;j<4;j++)scanf("%d",*(p+i)+j);for(i=0;i<4;i++)for(j=0;j<i;j++){temp=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=temp;} //转置矩阵for(i=0;i<4;i++) //输出数组元素的值{for(j=0;j<4;j++)printf("%4d",p[i][j]);printf("\n");}return0;}参考代码如下:#include<stdio.h>intmain(){charstr[80],*sp;intcount[26]={0},i,a;gets(str);for(sp=str;*sp;sp++)//用指针访问字符串{a=*sp-97; //将a字符的个数统计在数组count下标为0的单元,依次类推count[a]++;}for(i=0;i<26;i++)if(count[i]!=0)printf("%c=%d",i+97,count[i]);return0;}参考代码如下:#include<stdio.h>intmain(){charstr[80],*spf,*spr;intflag=1;gets(str);for(spr=str;*spr;spr++) //让指针spr指到字符串的末尾for(spf=str;spf<spr;spf++,spr--)//逐一比较,只要有一对字符不相等,将标志变量置为0if(*spf!=*spr)flag=0;if(flag)printf("YES\n");elseprintf("NO\n");return0;}参考代码如下:#include<stdio.h>#include<string.h>intmain(){charname[5][15];char*p[5];//定义指针数组char*temp;inti,j,k;printf("Enter5strings:\n");for(i=0;i<5;i++){gets(name[i]);//读入5个字符串p[i]=name[i];//指针数组元素指向字符串}for(i=0;i<4;i++)//用选择排序法排序{k=i;for(j=i+1;j<5;j++)if(strcmp(p[j],p[k])<0)k=j;if(k!=i){temp=p[i];p[i]=p[k];p[k]=temp;//改变指针的指向}}printf("\nThesortedresult:\n");printf(" \n");for(i=0;i<5;i++)puts(p[i]); //按指针指向顺序输出return0;第六章一.选择题16-20AABAA1-5CBCDA6-10AADBB11-15BBDBD16-20AABAA1.四auto,register,static,extern568,1712624120return1returnn+sum(n-1)三、编程题参考代码如下:#include<stdio.h>#include<math.h>intprime(intm){inti,k;if(m==1)return0;else{k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i<=k)return0;elsereturn1;}}intmain(){inti;for(i=101;i<200;i+=2)if(prime(i))printf("%d",i);}参考代码如下:#include<stdio.h>#include<math.h>floatfun(floatx){floaty;if(x>-5&&x<0)y=x;elseif(x==0)y=x-1;elseif(x>0&&x<10)y=x+1;returny;}voidmain(){floatx;printf(”请输入x的值:”);scanf("%f",&x);printf("%f\n",fun(x));}参考代码如下:voidtran(intx){inti,s[20]={0};for(i=0;x;i++){s[i]=x%8;x/=8;}i--;for(;i>=0;i--)printf("%d",s[i]);printf("\n");}voidmain(){intdec;printf("请输入一个十进制数:");scanf("%d",&dec);tran(dec);}参考代码如下:#include<stdio.h>voidswap(inta[],intn){int*pf,*pr,temp;for(pf=a,pr=a+n-1;pf<pr;pf++,pr--){temp=*pf;*pf=*pr;*pr=temp;}}voidmain(){intarray[20],n,i;printf("请输入要处理的数据的个数:”);scanf("%d",&n);printf(”请输入%d个数:”,n);for(i=0;i<n;i++)scanf("%d",&array[i]);swap(array,n);printf("对换后的数据为:");for(i=0;i<n;i++)printf("%d",array[i]);}参考代码如下:#include<stdio.h>voidswap2w(inta[][5]){inti,j,temp;for(i=0;i<2;i++)for(j=0;j<5;j++){temp=a[i][j];a[i][j]=a[5-i-1][j];a[5-i-1][j]=temp;}}voidmain(){inta[5][5],n,i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);swap2w(a);printf("对换后的数据为:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%d",a[i][j]);printf("\n");}}参考代码如下:#include<stdio.h>inthuiwen(charstr[]){char*spf,*spr;intflag=1;for(spr=str;*spr;spr++) //让指针spr指到字符串的末尾spr--; //用指针spr指到字符串最后一个字符for(spf=str;spf<spr;spf++,spr--)//逐一比较,只要有一对字符不相等,将标志变量置为0if(*spf!=*spr)flag=0;returnflag;}intmain(){charstr[80];gets(str);if(huiwen(str))printf("YES\n");elseprintf("NO\n");return0;}参考代码如下:#include<stdio.h>intdelch(charstr[],charch){inti,j;for(i=0;str[i];i++)if(ch==str[i])for(j=i+1;str[j];j++)//删除字符str[j-1]=str[j];str[j-1]=str[j]; //移动字符串末尾的'\0'}intmain(){charstr[80],c;gets(str);scanf("%c",&c);delch(str,c);puts(str);return0;}参考代码如下:#include<stdio.h>inthe(intn){if(n==1)return1;elsereturnn+he(n-2);}intmain(){inti,s=0;for(i=1;i<=19;i+=2)s=s+he(i);printf("%d\n",s);return0;}参考代码如下:#include<stdio.h>intfeb(intn){intf;if(n==1||n==0)return1;else{f=feb(n-1)+feb(n-2);returnf;}}intmain(){intn;scanf("%d",&n);printf("%d",feb(n));return0;第七章一.选择题1-5BDDCC6-10BBDCB11-15BBDCB16-18DBB二.填空题1.304ARRAYa,b,c;23acp->name&p->post_codestructcommunication*p->post_code三、编程题参考代码如下:#include<stdio.h>#defineN4/*结构体类型定义*/structstudent{charno[10];charname[10];floatscore[3];floattotal;};//主函数intmain(){structstudentstu[N]; //定义结构体数组,存储4个学生信息structstudenttemp; //定义结构体变量,用于交换数据的临时存储空间inti,j,k;/*从键盘输入学生信息*/puts("Enterstudents'info:");for(i=0;i<N;i++){printf("student#%d:\n",i+1);gets(stu[i].no); //输入学号gets(stu[i].name); //输入姓名scanf("%f%f%f",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);//输入3门课的成绩getchar(); //接收输入缓冲区的字符stu[i].total=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; //计算总成绩/*用选择排序法,对学生成绩进行排序*/for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++){if(stu[j].total>stu[k].total)k=j;elseif(stu[j].total==stu[k].total)//若总成绩相等,按英语成绩排序{if(stu[j].score[2]>stu[k].score[2])k=j;}}/*交换学生信息*/if(k!=i){temp=stu[i];//结构体变量赋值stu[i]=stu[k];stu[k]=temp;}}//输出排好序的学生信息printf("\nThesortedlist:\n");printf("%-12s%-22s%-10s%-10s%-10s%-10s\n","no","name","course1","course2","course3","Total");for(i=0;i<N;i++){printf("%-12s%-22s",stu[i].no,stu[i].name);printf("%-10.1f%-10.1f%-10.1f",stu[i].score[0],stu[i].score[1],stu[i].score[2]);printf("%-10.1f\n",stu[i].total);}return0;}参考代码如下:#include<stdio.h>#defineN45/*结构体类型定义*/structstudent{charno[10];charname[20];intage;floatscore;};//主函数intmain(){structstudentstu[N]; //定义结构体数组,存储45个学生信息intmaxi=0; //存储成绩最高的学生信息的下标inti;/*从键盘输入学生信息*/puts("Enterstudents'info:");for(i=0;i<N;i++){printf("student#%d:\n",i+1);gets(stu[i].no); //输入学号gets(stu[i].name); //输入姓名scanf("%d%f",&stu[i].age,&stu[i].score);//输入年龄和一门课的成绩getchar(); //接收输入缓冲区的字符if(stu[maxi].score<stu[i].score)maxi=i;}//输出成绩最高的学生信息printf("\nThehighestscoreis:\n");printf("%-12s%-22s%-10s%-10s\n","no","name","age","course");printf("%-12s%-22s",stu[maxi].no,stu[maxi].name);printf("%-10d%-10.1f%",stu[maxi].age,stu[maxi].score);return0;}参考代码如下:#include<stdio.h>/*共用体类型定义*/unioncch{unsignedinta;charb[4];};//主函数intmain(){unioncchx; //定义共用体类型变量scanf("%u",&x.a);printf("%c\n",x.b[0]);//低字节printf("%c\n",x.b[1]);printf("%c\n",x.b[2]);printf("%c\n",x.b[3]);return0;}//测试数据:1431989597参考代码如下:#include<stdio.h>#defineN3structperson{charname[15]; //姓名charjob[30];//职业charaddr[30];union{floatscore;//班级编号chartitle[10];//职称}cate;};structpersonper[N];//定义结构体数组,存储人员信息/*人员数据录入函数input()*/voidinput(){inti;for(i=0;i<N;i++){printf("Entername:");gets(per[i].name);//getchar();printf("Enterjob,ifteacher,firstcharactershouldbe\'t\',ifstudent,shouldbe\'s\':");gets(per[i].job);//getchar();if(per[i].job[0]=='s'){printf("Enterstudent'sscore:");scanf("%f%*c",&per[i].cate.score);}elseif(per[i].job[0]=='t'){printf("Enterteacher'stitle:");gets(per[i].cate.title);}printf("Enteraddress:");gets(per[i].addr);}}/*人员数据打印函数print()*/voidprint(){score/title\n"); score/title\n"); \n");printf("namejobaddrprintf(" for(i=0;i<N;i++){printf("%-10s",per[i].name);printf("%-15s",per[i].job);printf("%-15s",per[i].addr);if(per[i].job[0]=='s')printf("%f\n",per[i].cate.score);elseif(per[i].job[0]=='t')printf("%s\n",per[i].cate.title);}}voidsort(){inti,j,k;structpersontemp;for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(strcmp(per[k].name,per[j].name)>0)k=j;if(k!=i){temp=per[i];per[i]=per[k];per[k]=temp;}}}//主函数intmain(){input();sort();print();第八章一.单选题1-5BABAD6-10DDDCD11D二.填空题1.二进制文本2.pf=fopen("D:\\zk04\\data\\txfile.dat","w")3.二进制文本文件结束符非0值三、编程题参考代码如下:#include<stdio.h>FILE*fopenfun(char*file,char*model){FILE*fp;if((fp=fopen(file,model))==NULL){printf("Cannotopenfileof%s.\n",file);exit(0);}elsereturnfp;}main(){FILE*fp;charc;intdigcou=0,capcou=0,smacou=0,othercou=0;/*定义整型变量为计数器并初始化为0*/fp=fopenfun("file.txt","r");/*打开文件*/while((c=fgetc(fp))!=EOF)/*从文件中读字符*/{if(c>='0'&&c<='9')digcou++; /*统计数字字符*/elseif(c>='A'&&c<='Z')capcou++; /*统计大写字母*/elseif(c>='a'&&c<='z')smacou++; /*统计小写字母*/elseothercou++; /*统计其它字符*/}printf(”数字字符有%d个\n",digcou); /*输出字符个数*/printf("大写字母有%d个\n",capcou);printf("小写字母有%d个\n",smacou);printf("其它字符有%d个\n",othercou);fclose(fp); /*关闭文件*/}参考代码如下:#include<stdio.h>FILE*fopenfun(char*file,char*model){FILE*fp;if((fp=fopen(file,model))==NULL){printf("Cannotopenfileof%s.\n",file);//打开文件出错显示提示信息exit(0); //调用exit函数终止程序运行}elsereturnfp;}#defineSIZE10structstudent/*定义结构体*/{longnum;charname[10];intage;charaddress[10];}stu[SIZE],out;/*存盘函数:将学生的信息以数据块形式写入文件*/voidfsave(){FILE*fp;inti;fp=fopenfun("student.dat","wb");for(i=0;i<SIZE;i++)if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf("Filewriteerror.\n"); /*写过程中的出错处理*/fclose(fp); /*关闭文件*/}//主函数main(){FILE*fp;inti;
for(i=0;i<SIZE;i++)/*for(i=0;i<SIZE;i++)/*从键盘读入学生的信息*/printf("Inputstudent%d:",i+1);scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].address);/*调用函数保存学生信息/*调用函数保存学生信息*/Address\n");/*读入数据块*/fsave();fp=fopenfun("student.dat","rb");printf("No.NameAgewhile(fread(&out,sizeof(out),1,fp))printf("%8ld%-10s%4d%-10s\n",out.num,,out.age,out.address);fclose(fp);/*关闭文件*/}参考代码如下#include<stdio.h>FILE*fopenfun(char*file,char*model){FILE*fp;if((fp=fopen(file,model))==NULL){printf("Cannotopenfileof%s.\n",file);//打开文件出错显示提示信息exit(0); //调用exit函数终止程序运行}elsereturnfp;}#defineSIZE5structstudent/*定义结构体*/{longnum;charname[10];floatscore[5];floataver;}stu[SIZE],out;/*存盘函数:将学生的信息以数据块形式写入文件*/voidfsave(){FILE*fp;inti;fp=fopenfun("student.dat","wb");for(i=0;i<SIZE;i++)if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf("Filewriteerror.\n"); /*写过程中的出错处理*/if(fwrite(&out,sizeof(structstudent),1,fp)!=1)/*写入5门课的平均成绩*/printf("Filewriteerror.\n");fclose(fp);/*关闭文件*/}//主函数main(){FILE*fp;floataverage[5]={0},t;inti,j;for(i=0;i<SIZE;i++) /*从键盘读入学生的信息*/{printf("Inputstudent%d:",i+1);scanf("%ld%s",&stu[i].num,stu[i].name);for(j=0,t=0;j<5;j++){scanf("%f%*c",&stu[i].score[j]);t=t+stu[i].score[j];average[j]+=stu[i].score[j];}stu[i].aver=t/5;}out.num=0;strcpy(,"5course'ave");for(j=0;j<5;j++)out.score[j]=average[j]/SIZE;fsave();/*调用函数保存学生信息*/fp=fopenfun("student.dat","rb");printf("No. Namecourse1course2course3course4course5\n");while(fread(&out,sizeof(out),1,fp)) /*读入数据块*/{printf("%8ld%-12s",out.num,);for(j=0;j<5;j++)printf("%8.2f",out.score[j]);printf("\n");}fclose(fp);/*关闭文件*/}参考代码如下#include<stdio.h>FILE*fopenfun(char*file,char*model){FILE*fp;if((fp=fopen(file,model))==NULL){printf("Cannotopenfileof%s.\n",file);//打开文件出错显示提示信息exit(0); //调用exit函数终止程序运行}elsereturnfp;}#defineSIZE5structwarehouse/*定义结构体*/{charKNO[10];intKNOM};//主函数main(){FILE*fpr,*fpw;structwarehouset;fpr=fopenfun("CK.txt","r");fpw=fopenfun("XK.txt","w");while(!feof(fpr)){fscanf(fpr,"%s%d",t.KNO,&t.KNOM);if(t.KNOM>100)fprintf(fpw,"%s%d\n",t.KNO,t.KNOM);}fclose(fpr);/*关闭文件*/fclose(fpw);/*关闭文件*/}第九章第九章1.(1)30(2)3(3)9(4)292.(1)1(2)1(3)1(4)7(5)15(6)63.参考代码如下#include<stdio.h>voidmain(){//0125的二进制为//0125的二进制为01010101printf("%d\n",b);}4.参考代码如下voidmain(){inti,bit;voidmain(){inti,bit;unsignedintn,mask;mask=0x80000000;/*定义循环变量i和位1/0标志变量bit*//*定义欲转换的整数n和屏蔽字变量mask*//*初始屏蔽字,从左边最高位开始检查*/printf("EnteraintegerofHexadecimal:");scanf("%x",&n); /*输入要转换的整数*/printf("binaryof%xis:",n);for(i=0;i<32;i++) /*循环检查32位,并输出结果*/{if(i%8==0&&i!=0)printf(",");/*习惯上二进制每8位用“,”分隔以便查看*/bit=(n&mask)?1:0; /*n&mask非0,该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《盐 化肥》单元测试(解析版)
- 二零二四年度品牌推广独家合作协议
- 2024年度地铁口咖啡厅租赁合同3篇
- 2024年度技术研发合作合同(标的:智能机器人研发)
- 2024年度分公司注销全程服务合同
- 浙江省金华市兰溪市兰溪市第二中学2023-2024学年七年级上学期10月月考数学试题(解析版)-A4
- 代理推广合同模板(04版)
- 信用卡的合同范本大全3篇
- 保险公司与单位合作协议
- 2024年度电梯消防设施改造合同
- 浅谈我院高压氧舱的建设
- 乳化泵司机试卷(含答案)
- 化工基础简答题
- 有限空间作业气体检测记录
- 机器人与智能制造装备技术重点实验室建设方案
- 1373特殊教育概论-国家开放大学2022年1月(2021秋)期末考试真题-开放本科
- 25《苏幕遮》
- Minitab-T检验
- 现代试井解释.
- 经销商准入及评定表格vr
- 欧洲3000年历史地图演变NO1课件
评论
0/150
提交评论