下载此文档

《C语言编程基础》习题答案.pdf


文档分类:IT计算机 | 页数:约29页 举报非法文档有奖
1/29
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/29 下载此文档
文档列表 文档介绍
该【《C语言编程基础》习题答案 】是由【wawa】上传分享,文档一共【29】页,该文档可以免费在线阅读,需要了解更多关于【《C语言编程基础》习题答案 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..《C语言编程基础(第2版)》习题答案前言《C语言编程基础(第2版)》每章后面都安排了一定数量的习题,这有利于读者理解、消化和掌握各单元的学习内容。习题中,除了有填空题、选择题、回答问题等适合掌握基本概念的题型外,大部分是分析程序运行结果和要求编写实用程序,这有利于读者训练编程技巧和增强编程能力。应广大读者要求,特别是一线教学老师的要求,我们给出全部习题答案,供读者参考。编程答案只是实现题目算法要求的一种,并不一定是最好的。希望读者自己多做思考,利用多种方法进行编程,用以提高自己的程序设计水平和锻炼自己的创新能力。由于作者水平所限,错误和不当之处在所难免,恳请批评指正。习题一1、填空题。⑴C语言程序由__函数__组成,其中必须有且只能有一个名为_main__的函数。C程序的执行从___名为main的主__函数开始。⑵每个C语句必须以__分__号结束。⑶标识符只能由_英文字母_、__数字_和_下划线__三类符号构成,而且标识符的第一个字符必须是__英文字母__或__下划线__。⑷关键字是指___C语言编译系统所固有的、具有专门意义的标识符___。⑸C程序中,注释的内容应放在__/*_和_*/__符号之间。2、选择题。⑴下面合法的C语言标识符是___C___。⑵C语言中主函数的个数是___A______。⑶以下有关注释的描述中,错误的是___C___。⑷C程序中,main函数的位置____D___。3、指出并改正下面程序中的错误。⑴main应为main()⑵应在本程序最后加上大括号}。⑶语句结束应有分号。如:inta,b;a=1;b=2;printf("%d",a+b);4、分析下列程序,写出运行结果。:..⑴该程序是计算两个整数a和b的乘积并赋值给c,运行结果为:c=30⑵该程序输出一个字符串和一排星号,运行结果为:Hello!*****************5、编程题。⑴按题目要求,编写输出固定信息的程序如下:main(){pt();printf("e!");pt();}pt(){printf("*****************");}⑵按题目要求,编写输入数据输出其表达式的程序如下:main(){inta,b,c;scanf("%d",&a);scanf("%d",&b);c=a*b+10;printf("c=%d",c);}习题二1、单项选择题。⑴C语言中的变量名只能由字母、数字和下划线组成,且第一个字符_C_。⑵合法的常量是__D___。⑶C语言中的基本数据类型所占存储空间长度的顺序是__D___。⑷下列符号串中与相同的合法常量是__C___。2、填空。⑴C语言中的基本数据类型包括____整型(int)_、____浮点型(flot)__和_字符型(char)_三种。⑵整型常数有_十进制整数_、_八进制整数_和_十六进制整数_三种表示形式;整型变量可分为四类:_一般整型(int)_、_短整型(short)_、_长整型:..(long)_、_无符号型_。其中_无符号型_又可分为_无符号整型(unsignedint)、_无符号短整型(unsignedshort)和_无符号长整型(unsignedlong)_3种。⑶有10个用指数形式表示的符点常数:请指出合法的有___③④⑥⑧⑩___。⑷在C中,没有专为存贮字符串的变量,但可以用__字符型数组__或__字符型指针变量_存贮字符串。其定义格式为_charstr[6];_和_char*a;_。⑸数据类型混合运算时,要进行同型转换,转换方式分为__自动转换(隐式转换)__和__强制转换(显式转换)__两种。3、写出下列程序运行结果。⑴215/9=23…8⑵97b⑶4、编写程序。⑴按题目要求编写求三个已知数的乘积,程序如下:main(){inta,b,c;a=19;b=22;c=650;printf("a*b*c=%d\n",a*b*c);}⑵按题目要求,编写将值整数化后赋值的程序如下:main(){inta1,a2;floatb,c;b=;c=;a1=(int)(b*c);a2=(int)c%(int)b;printf("a1=%d;a2=%d\n",a1,a2);}⑶按题目要求,编写计算圆周长、面积和圆柱体积的程序如下:main(){intr,h,c,s,v;r=15;h=3;c=2**15;s=*r*r;v=s*h;printf("c=%d,s=%d,v=%d\n",c,s,v);:..}习题三1、填空题。⑴设有intx=11;则表达式(x++*1/3)的值是_____3____。⑵已知数学表达式y=x2-2x+5,写出对应的C语言表达式_y=x*x-2*x+5_。⑶已知a=10,则表达式x=(a=a+b,a-b)的值为__x=10__。2、选择题。⑴在C语言中,下列运算符的操作数必须是int类型的运算符是(D)。⑵假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为(A)。⑶已定义intm=6,n=5;,则执行m%=n-1;之后,m的值是(B)。⑷已有inta=1,b=1;则执行b=(a=2*3,a*5),a+7之后,a,b的值是(B)。⑸已有intx=2,y=1;则执行x++==y--;的结果是(D)。3、求下面算术表达式的值。⑴⑵4、分析下列程序,写出运行结果。⑴注意,在C语言中,因为函数调用中参数按从右到左的顺序求值,因此该程序执行打印输出的结果为:311⑵该程序在计算条件表达式的值赋给a时,其x值已为6,y值已为7,因此运行结果为:a=7,b=0,c=6⑶该程序利用运算符与结合性的优先级不同,而取得a与b的值。(因为该题使用了逻辑运算符,可在学了第5章以后再详细分析)运行结果如下:a=2,b=1⑷该程序应用复合的赋值运算符和从右至左结合性的运算规则,求取n的值,运行结果如下:n=28⑸该程序在执行语句“y=x++-1;”时,y为0而x在执行后变为2;在执行语句“z=--y+1;”时,z为0而y便成了-1。运行结果如下::..x=2,y=-1,z=05、编程题。⑴用符号常量编写简单计算程序如下(复杂应用应在第9章学习后再做):#defineN12#defineM25main(){floatc;printf("N+M=%d\n",N+M);printf("N-M=%d\n",N-M);printf("N*M=%d\n",N*M);c=(float)N/M;printf("N/M=%f\n",c);}⑵查看i++与++j运算结果差异的程序,编写如下:main(){inti=20,j=20;printf("i++:%d\n++j:%d\n",i++,++j);}⑶查看m--与--n运算结果差异的程序,编写如下:main(){intm=20,n=20;printf("m--:%d\n--n:%d\n",m--,--n);}习题四1、单项选择题。⑴下列叙述不正确的是__B__。⑵当输入数据为12345678时,下面程序运行的结果是__C___。⑶putchar函数可以向终端输出一个__D___。⑷按格式输出的格式符__C__。2、回答问题。:..⑴在键盘上输入数据格式如下:12,24,Aa□□□1□↙(□代表空格,其中数据1是为了对付%*f占位,↙代表回车)⑵该题是求输入任意两个整数a与b的和。若读入a=b=5,其运行结果为:typeanumberplease!a=?5↙typeanotherplease!b=?5↙asumbis103、写出下列程序的执行结果。⑴执行结果:32767,-327682147483647,-214748364865535,0⑵执行结果:yes,puter.⑶执行结果:a\b’□□□□□tw123⑷执行结果:□□□□□,□+01,□□□+02B,66,102,427567890,34675022,7a1211232,25740,2be0,11232COMPUTER,□□ABC4、编写程序。⑴对输入的大写字母改用小写输出的程序,编写如下:#include<>main(){charc;printf("输入一个大写字母:\n");c=getchar();putchar(c+32);:..}⑵计算三门课总成绩等数据的程序,编写如下:#include<>main(){floata,b,c,sum,ave,mod;printf("输入三门课程的成绩:\n");scanf("%f%f%f",&a,&b,&c);sum=a+b+c;ave=(a+b+c)/3;mod=fmod(sum,3);printf("总成绩=%,平均成绩=%,总成绩除3的余值=%\n",sum,ave,mod);}⑶已知数据,按输出结果的要求编写输出程序如下:main(){inta=1,b=2,c=3,g=12345;floatd=,e=-,f=;longh=123456;chari='o',j='p';printf("a=%db=%dc=%d\n",a,b,c);printf("d=%f,e=%f,f=%f\n",d,e,f);printf("d+e=%e+f=%d+f=%\n",d+e,e+f,d+f);printf("g=%7dh=%ld\n",g,h);printf("i=%cor%d\nj=%cor%d\n",i,i,j,j);}习题五1、单项选择题。⑴C语言用__C__表示逻辑量为“假”⑵要求当A的值为奇数时,表达式的值为“真”;A的值为偶数时,表达式的值为“假”。以下不满足要求的表达式是__D__。⑶在if语句的嵌套中,else总是与__C__配对。⑷下面对for循环概念描述正确的是__D__。:..2、填空题。⑴switch后面的“表达式”,通常为_整_型或_字符_型表达式;每个case的常量表达式的值__不能相同__。⑵如果不算goto语句构成的循环结构,那么C语言可以构建循环的语句一共有_3_种,分别是__for循环、while循环、do-while循环__。⑶continue语句与break语句在使用时,有两点主要的不同:①它不适用于_switch_语句;②它跳转时是__跳过循环体中下面的语句从下一次循环开始__。⑷把下面的两条if分支语句合并成一条if分支语句应该写成:if(x>=y)printf(”m=%d\n”,m=2);elseprintf(”n=%d\n”,n=1);3、指出以下程序的打印结果。该程序运行结果如下:x=11y=10x=55y=10x=8y=10z=10x=2y=2x=3y=3x=4y=4x=5y=5x=6y=6x=7y=7x=8y=8x=9y=9x=2y=2x=1y=1000x=2y=100x=3y=104、编写程序。⑴按要求,用两种循环方式编写相关程序如下:⑴-①的for循环#include<>main(){:..intr;floatv;for(r=1;r<=100;r+=2){v=4/3**pow(r,3);printf("r=%d,v=%f\n",r,v);}}⑴-①的while循环#include<>main(){intr;floatv;r=1;while(r<=100){v=4/3**pow(r,3);printf("r=%d,v=%f\n",r,v);r+=2;}}⑴-②的for循环main(){ints,i;s=0;for(i=13;i<=103;i+=10)s=s+i;printf("s=%d\n",s);}⑴-②的while循环main(){ints,i;s=0;i=13;while(i<=103){s+=i;i+=10;}:..printf("s=%d\n",s);}⑵找出学生成绩中的最高分和最低分的程序,编写如下:main(){intmax,min,n;printf("请输入成绩,-1结束:");scanf("%d",&n);max=min=n;while(n!=-1){if(n>max)max=n;if(n<min)min=n;scanf("%d",&n);}printf("最高分:%d,最低分:%d\n",max,min);}⑶输出“水仙花数”的程序,编写如下:#include<>main(){intn,a,b,c;for(n=100;n<=999;n++){a=n/100;b=n%10;c=(n%100-b)/10;if(pow(a,3)+pow(b,3)+pow(c,3)==n)printf("%d\n",n);}}习题六1、填空题。⑴数组是一组具有相同___类型__的数据的集合。⑵如果一个数组的长度为10,则该数组中数组元素下标的最小值为_0_,最大值为_9_。⑶若有inta[]={10,20,30,40};则数组a的长度为__4__。⑷在C语言中,没有字符串变量,字符串的存储是通过__字符数组__来实现的。⑸strlen函数的功能是__测试字符串的长度__,strcmp函数的功能是__:..比较两个字符串的大小__。2、选择题。⑴定义一个有100个元素的int型数组,下面正确的语句是__D__。⑵下面正确的对数组b进行初始化的语句是__C__。⑶在C程序中,引用一个数组元素时,其下标的数据类型允许是__D__。⑷下面语句中正确的是___A__。⑸若有定义:charstr[]="Hello";则数组str所占的空间为___B__。3、分析下列程序,写出运行结果。⑴该程序通过for循环为数组元素自动赋值,然后输出。运行结果如下:a[0]=1a[1]=2a[2]=3a[3]=4a[4]=5a[5]=6a[6]=7a[7]=8a[8]=9a[9]=10⑵该程序定义并初始化了a、b、c三个数组,然后分别输出各数组的各个元素,用来验证初始化的结果。运行结果如下:数组a:1020304050数组b:12300数组c:0123⑶该程序通过gets()函数为字符数组接收字符,然后输出各元素。运行结果如下:abc↙(输入的字符)str[0]=astr[1]=bstr[2]=c4、编写程序。⑴对输入一组数进行相关统计的程序,编写如下:main(){inti,num[10];intmax,min,sum=0;floataverage;:..clrscr();printf("输入10个数:\n");for(i=0,i<10;i++){scanf("%d",&num[i]);/*输入数值*/sum+=num[i];/*累加求和*/}average=(float)sum/10;/*求平均值*/max=min=num[0];for(i=1;i<10;i++)if(num[i]>max)max=num[i];/*求最大值*/elseif(num[i]<min)min=num[i];/*求最小值*/printf("最大值=%d\n",max);printf("最小值=%d\n",min);printf("10个数的和为:%d\n",sum);printf("平均值为:%",average);}⑵求素数的程序编写如下:main(){inti,j,k,m=0;clrscr();for(i=2;i<=100;i++){k=0;for(j=2;j<=i-1;j++)if(i%j==0){k=1;break;}if(k==0){printf("%4d",i);m=m+1;if(m%8==0)printf("\n");}}}⑶判断一个浮点数是否在一个浮点型数组中的程序,编写如下:main():..{inti,exist;floata[4],n;printf("输入浮点型数组:\n");for(i=0;i<4;i++){printf("a[%d]=",i);scanf("%f",&a[i]);printf("\n");}printf("输入一个浮点数:");exist=0;scanf("%f",&n);for(i=0;i<4;i++){printf("a[%d]=%f;\n",i,a[i]);if(a[i]==n)exist=1;}if(exist==1)printf("%f在数组中。\n",n);elseprintf("%f不在数组中!\n”,n);}此题前面的浮点型数组的值,也可通过初始化直接赋值的办法得到。⑷输出二维数组中最大值及位置的程序,编写如下:main(){inti,j,row=0,col=0,max;inta[4][6];for(i=0;i<4;i++)for(j=0;j<6;j++)scanf(“%d”,&a[i][j]);max=a[0][0];for(i=0;i<4;i++)for(j=0;j<6;j++)if(a[i][j]>max){max=a[i][j];row=i;col=j;}printf(“max=%d,row=%d,col=%d\n”,max,row,col);}⑸在字符串中的指定位置插入字符串的程序,编写如下::..main(){charch1[10],ch2[3],ch3[13];inti=0,n;printf("输入字符串1(长度为10):\n");scanf("%s",ch1);printf("输入字符串2(长度为3):\n");scanf("%s",ch2);printf("插入位置n(n<10):\n");scanf("%d",&n);n--;for(i=0;i<n;i++)ch3[i]=ch1[i];for(i=n;i<n+3;i++)ch3[i]=ch2[i-n];for(i=n;i<10;i++)ch3[i+3]=ch1[i];printf("%s",ch3);}习题七1、填空题。⑴C语言函数分成__系统提供的库函数__和__用户自定义函数_两大类。⑵一个C程序由主函数和若干__个自定义函数__组成,各个函数在程序中的定义是__相互独立__的。⑶函数的递归调用是指__函数直接或间接地调用自己__。⑷当__用数组名__作函数参数时,实参与形参的传递为“地址传递”。⑸根据变量的作用范围的不同,可将变量分为_局部_变量和_全局_变量。根据变量生存期的不同,可以将变量分为__动态存储__变量和__静态存储__变量。⑹static变量的特点是__其值始终存在__。2、选择题。⑴如果一个函数有返回值,那么这个函数只有__A__个返回值。⑵下面关于空函数的定义,正确的是___B___。⑶以下错误的描述是__C___。⑷调用一个不含return语句的函数,以下正确的说法是___D___。⑸下面函数调用语句中含有实参的个数为___C___。⑹数组名作函数参数时,实参传递给形参的是__B___。3、指出并改正下面程序在函数定义或调用中的错误。:..⑴被调函数f(x)定义时对形式参数x未做参数说明。应改为:f(intx)或:f(x)intx;⑵函数调用时,实际参数的类型应与被调函数形式参数的类型相一致。本题在主函数中的整型变量a应改为浮点型:inta;改为floata;⑶被调函数f()定义时不需要加分号,f();应改为:f()⑷在C程序中,不能在一个函数的函数体内定义另一个函数。该题在主函数中定义f()为空值类型且作为一个语句是错误的。应去掉voidf();4、分析下列程序,写出运行结果。⑴主函数以a=2为实参调用f(x)函数,f(x)通过return语句向主函数返回y的值赋给b,结果应为:b=4⑵在该程序中实参变量a、b和形参变量x、y分别占用不同的存储单元,虽然在swap函数中x、y的值发生了交换,但主函数中a、b的值却没有改变。运行结果应为:a=1↙b=2↙x=2,y=1a=1,b=2⑶全局变量x初始化为1,调用被调函数f()执行一次x++,然后再执行x++后输出x值应为:x=3⑷x为定义在整个函数体和复合语句内的同名自动变量,其作用域不同。intx=20;定义在复合语句中,只在复合语句中有效。运行结果如下:x=20x=11⑸执行被调函数,将原数组元素初值分别加1,因此输出结果为:num[0]=2num[1]=3num[2]=4num[3]=5num[4]=65、编写程序。⑴该题目要求使用判断奇偶数函数,编写程序如下:main(){:..intn;printf("输入一个整数:");scanf("%d",&n);a(n);}a(intn){if(n%2==0)printf("%d是偶数\n",n);elseprintf("%d是奇数\n",n);}⑵编写一个将3个数从小到大顺序输出的函数如下:sort(x,y,z)intx,y,z;{intt;if(x>y){t=x;x=y;y=t;}if(x>z){t=x;x=z;z=t;}if(y>z){t=y;y=z;z=t;}Printf("%d%d%d",x,y,z);}⑶将输入的秒数值,转换为时:分:秒输出,编程如下:inthou=0,min=0;main(){intsec,sec2;clrscr();printf("请输入秒数:\n");scanf("%d",&sec);sec2=change(sec);printf("%d个小时:%d分钟:%d秒",hou,min,sec2);}intchange(sec1)intsec1;{if(sec1>3600){hou=sec1/3600;min=(sec1%3600)/60;sec1=sec1%60;}:..elseif(sec1>60){hou=0;min=sec1/60;sec1=(sec1%60);}return(sec1);}⑷求一组学生成绩的总分、平均分、最高分和最低分的程序,编写如下:main(){floats,ave,score[100];intI,m;clrscr();printf("输入学生人数:");scanf("%d",&m);printf("输入%d个学生的成绩:\n",m);for(i=0;i<m;i++){scanf("%d",&score[i]);s=s+score[i];}printf("总成绩=%.2f\n",s);ave=average(score,m);printf("最高分=%d\n",max);printf("最低分=%d\n",min);printf("平均成绩=%.2f",ave);}floatmax=0,min=0;floataverage(array,n)floatarray[];intn;{inti;floataver,sum=array[0];max=min=array[0];for(i=1;i<n;i++){if(array[i]>max)max=array[i];/*求最高分*/elseif(array[i]<min)min=array[i];/*求最低分*/sum=sum+array[i];}aver=sum/n;/*求取平均成绩*/return(aver);/*返回主程序值*/:..}⑸显示菜单并实现相应选择功能的程序,编写如下:#include<>main(){inti;while(i!=3){clrscr();printf("********************\n");printf("\n");printf("\n");printf("\n");printf("********************\n");scanf("%d",&i);if(i==1)lifang();elseif(i==2)lifanggen();}}lifang(){intn;longs;printf("inputn:\n");scanf("%d",&n);s=pow(n,3);printf("%d的立方为:%ld\n\n",n,s);}lifanggen(){intn;doubles;printf("inputn:\n");scanf("%d",&n);s=(double)1/3;s=pow(n,s);printf("%d的立方根为:%f\n\n",n,s);}⑹用递归法求n!的程序,编写如下:main():..{longf(),t;intn;printf("inputnumber:\n");scanf("%d",&n);t=f(n);printf("%d的阶乘为:%ld",n,t);}longf(intn){staticlongs=1;if(n>1)f(n-1);s*=n;}习题八1、填空。(1)文件是存贮在外部存贮设备上的_信息集合_。一般分为_程序_文件和_数据_文件。(2)C语言文件存贮在磁盘上有两种形式,一种是按_ASCII码存储_,另一种是按_二进制码存储_。(3)定义文件指针变量的格式为__FILE*fp__。(4)feof()函数是_文件尾_检测函数,当文件位置指针处于_文件尾_时,它返回一个__非0_值。(5)对流式文件可以进行顺序读写,也可以进行随机读写,关键是_如何控制文件的位置指针_。2、回答问题。⑴有三大好处:①保存运算的中间结果或最终结果,方便使用;②将数据独立于程序之外,便于多处、多人共享;③事先录入保存所需数据,可以提高程序运行时的效率。⑵在ASCII码文件中,一个字节代表一个字符,便于字符的输入输出处理,但占用存储空间较大;二进制文件占用的存储空间较小,但在文件中,一个字节并不代表一个字符。⑶w:创建一个ASCII码文件只写;r:打开一个ASCII码文件只读;a:打开一个ASCII码文件添加;wb:创建一个二进制文件只写;rb+:打开一个二进制文件读/写。:..⑷文件操作完以后及时关闭,可将文件指针脱离该文件,并将内存缓冲区中的数据写入磁盘,用以保证写入文件的数据完整。⑸EOF在中定义为-1,它也是一个合法的二进制整数,用fgetc()函数检查文件尾容易发生错判。3、程序改错。⑴该程序是要求将键盘上输入的一些字符写入磁盘文件中,程序中有两处错误:①(检查文件是否存在且要向文件写,注意文件名和打开方式)fp=fopen("","r")应改为:fp=fopen("","w")②(向文件中写而不是读)fgetc(fp);应改为:fputc(c,fp);⑵该程序是要求从文件中读并统计其正数、负数和零的个数,在屏幕上显示。程序中有两处错误:①(当不是文件尾时才读取并统计)while(feof(p)==1)应改为:while(feof(p)==0)②(f为存储负数的变量应取i<0)elseif(i=0)f++;应改为:elseif(i<0)f++;4、编写程序。⑴将字符串写入文件的程序,编写如下:#include<>FILE*fp;main(){chara[2][8]={"TurboC","BASIC"};fp=fopen("","w");fputs(a[0],fp);fputs(a[1],fp);fclose(fp);}⑵将字符串从文件中读出的程序,编写如下:#include<>FILE*fp;main(){char*a;if((fp=fopen("","r"))==NULL){printf("cannotopenfile\n");exit(1);}fgets(a,13,fp);clrscr();:Thedocumentwascreated

《C语言编程基础》习题答案 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数29
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wawa
  • 文件大小1.01 MB
  • 时间2024-09-23
最近更新