首页 c语言习题谭浩强有参考答案版

c语言习题谭浩强有参考答案版

举报
开通vip

c语言习题谭浩强有参考答案版1.若有以下定义和语句:inta[4]={0,1,2,3},*p;p=&a[2];则++(*p)的值是___3__。2.与表达式a|=b等价的另一书写形式是_a=a|b________。3.链表中的每个结点都是_结构体________类型数据。4.设有语句:char*a="I_love_china!";a=a+2;则执行printf(“%s\n”,a);的输出结果是___love_china!__________。5.若有宏义:#definef(x)x*x则当a=3时,执行f(a-1)的值是____-1___。6....

c语言习题谭浩强有参考答案版
1.若有以下定义和语句:inta[4]={0,1,2,3},*p;p=&a[2];则++(*p)的值是___3__。2.与 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式a|=b等价的另一书写形式是_a=a|b________。3.链表中的每个结点都是_结构体________类型数据。4.设有语句:char*a="I_love_china!";a=a+2;则执行printf(“%s\n”,a);的输出结果是___love_china!__________。5.若有宏义:#definef(x)x*x则当a=3时,执行f(a-1)的值是____-1___。6.有以下函数调用语句,请问函数fun1到底有___4____个参数。fun1(x,(y,z),10,fun2((x-1,y-1)))7.设有以下定义和语句,则*(*(p+2)+1)的值为__60________。inta[3][2]={10,20,30,40,50,60},(*p)[2];p=a;8.若有inta=1;intb=2;则a|b的值为___3______。9.设有char*p="abcde\0fghjik\0";则语句printf("%d\n",strlen(p));的输出结果是_____5_______。10.表达式0x13^0x17的值是__ox4________。11.在C语言中,&运算符作为单目运算符时表示的是__取地址_____运算;作为双目运算符时表示的是_按位与____运算。12.若p是指向某一结构体变量的指针变量,则通过指变量对结构体成员的引用方法有:_____p->_______和_______(*p)._______。13.设inta[3][4]={{1,2,3,4},{5,6,7,8}};则*(*a+2)的值为__3____。14.判断文本文件是否结束时使用的符号常量EOF的值是___-1___。15.FILE*p的作用是定义一个文件指针变量,其中的FILE是在stdio.h_____头文件中定义的。16.若有以下说明和定义语句,则变量w在内存中所占的字节数是_34_______。unionaa{floatx;floaty;charc[6];};structst{unionaav;floats[5];doubleave;}w;17.设有语句inty;y=sizeof(2.25*4);则y的值是____8_____。18.已知inta=1,b=3则a^b的值为___2_______。19.下面程序段的运行结果是___ef_____。charstr[]="abc\0def\0ghi",*p=str;printf("%s",p+5);20.表达式0x13|0x17的值是__ox17________。21.rewind函数的作用是_使文件位置标记指向文件开始位置________。22.与表达式a&=b等价的另一书写形式是___a=a&b______。23.若有以下定义和语句:inta[4]={0,1,2,3,4},*p;p=&a[1];则++(*p)的值是___2_____。1/1924.若有int(*p)[4];则p是_指向包含4个整型元素的一维数组的指针变量。25.表达式071∧052的值是___o23______26.表达式0x14&0x18的值是__ox10_______。27.设有定义:int(*p)(int,int),则p是___指向函数入口地址的指针变量。28.fclose函数当成功地执行了关闭操作,则返回值为___0___________。29.设有定义inta[3][4],*p;若二维数组的首行首地址为2000,一个整型数据占4个字节,则a+1的首地址是__2016___________。30.表达式3&5的值是_____1_______。31.设有定义uniondata{inti;'2charch;floatf;}a;则变量a所占内存长度为_____4_______个字节。32.若p是指向某一结构体变量的指针变量,则通过指变量对结构体成员的引用方法有:_____p->__________和_____(*p)._________。33.设a是二维数组名,则a[0]表示___0行0列元素地址__________________。34.设有语句:char*a="I_love_china!";a=a+7;则执行printf(“%s\n”,a);的输出结果是_china!____________。35.设intb[]={1,2,3,4},y,*p=b;则执行语句y=*p++;之后,变量y的值为__1_____。36.设inta[3][4]={{1,3,5,7},{2,4,6,8}};则*(*a+1)的值为_3_____。程序阅读题1.下面的程序是求表达式的值:s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*......*n)/(3*5*7*......(2*n+1)),请填空。#include#includedoublefun(intn){doubles,t;inti;___s=1_______;t=1.0;for(i=1;i<=n;i++){t=t*i/(2*i+1);2/19______s+=t_________;}returns;}main(){printf("\n%12.10lf",fun(25));}2.下面程序的功能是:对字符串从小到大进行排序并输出,请填空。#include"string.h"#include"stdio.h"sort(char*a[],intn){inti,j;char*p;for(j=1;j<=__n-1________;j++)for(i=0;_i0){p=a[i];a[i]=a[i+1];a[i+1]=p;}}3.下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。#include"stdio.h"FILE*fp;{charch;if((fp=fopen(“bi.dat”,"w"___________))==NULL)exit(0);while((ch=getchar())!='___@____')fputc(ch,fp);fclose(fp);}4.若已定义:structnum{inta;intb;floatf;}n={1,3,5.0};structnum*pn=&n;3/19则表达式pn->b/n.a*++pn->b的值是_12________,表达式(*pn).a+pn->f的值是____6.0__。5.下列程序的功能是:求出ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符1,则输出3,请填空。#include#include#defineM81intfun(char*ss,charc){inti=0;for(;___*ss!='\0'_____________;ss++)if(*ss==c)i++;returni;}main(){chara[M],ch;clrscr();printf("pleaseenterastring:\n");gets(a);printf("pleaseenterachar:";ch=getchar());printf("\nThenumberofthecharis:%d\n",fun(__a[M],ch______));}6.下面函数的功能是:找出一维数组元素中最大的值和它所在的下标,最大值的和它所在的下标通过形参传回,n是数据个数。请填空。voidfun(inta[],intn,int*max,int*d){inti;*max=a[0];*d=0;for(i=0;___iw[p])p++;for(i=*n;i>p;i--)w[i]=__w[i-1]____________;w[p]=____x________;4/19++*n;}8.下面的程序实现的是指针p所指向的地址的n个数中,求出最大的和最小的数据,请填空。fun(int*p,intn){int*q;intmax,min;max=min=*p;for(q=p;q<__p+n______;q++)if(*q>max)max=*q;elseif(___*q#include5/19voidmain(){FILE*in,*out;charch,infile[10],outfile[10];printf("Entertheinfilename:\n");scanf("%s",infile);printf("Entertheoutfilename:\n");scanf("%s",outfile);if((in=fopen(__infile,"r"_______))==NULL){printf("cannotopeninfile\n");exit(0);}if((out=fopen(outfile,"w"))==NULL){printf("cannotopenoutfile\n");exit(0);}while(___!feof_______(in))fputc(fgetc(in),out);fclose(in);fclose(out);}12.以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。#defineN3#defineM3intselect(inta[N][M],int*n){inti,j,row=1,colum=1;for(i=0;ia[row][colum]){row=i;colum=j;}*n=_row_________;return_a[row][colum]________;}main(){inta[N][M]={9,11,23,6,1,15,9,17,20},max,n;max=select(a,&n);printf("max=%d,line=%d\n",max,n);13.下面程序是对输入的两个整数按大小顺序输出。请填空。#includeintmain(){voidswap(int*p1,int*p2);(226)inta,b;6/19int*pointer_1,*pointer_2;printf("pleaseenteraandb:");scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a#includedoublefun(intm){doublet=1.0;inti=2;for(i=2;i<=m;i++)t+=1.0/(i*(i+1));____return(t)_________;}main(){intm;clrscr();printf("\n请输入一个整数:");scanf("%d",&m);printf("\n结果是:%lf\n",______fun(m)_______);}17.函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,当sdata=ch;8/19t3->next=t2;t3=t2;ch=getchar();}t3->next=NULL;_return(t1)____;}19.下面程序是判断输入的字符串是否是“回文”,(正读和倒读都一样的字符串称“回文”,如level)。请填空。#include#includemain(){chars[81],*p1,*p2;intn;gets(s);n=strlen(s);p1=s;p2=___s+n-1___________;while(p1*(x+k))___k=j_________;if(k!=i){t=*(x+i);_*(x+i)=*(x+k)___;*(x+k)=t;}}}21.设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数。请填空。main(){intfindbig(int,int,int);int(*f)(),x,yz,z,big;9/19f=_findbig_________;scanf("%d%d%d",&x,&y,&z);big=____(*f)______(x,y,z);printf("bing=%d\n",big);}22.以下程序是将若干字符串按字母顺序(由小到大)输出。请填空。#include#includevoidmain(){voidsort(char*name[],intn);voidprint(char*name[],intn);char*name[]={"Followme","BASIC","GreatWall","FORTRAN","Computerdesign"};intn=5;sort(name,n);print(name,n);}voidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i0)__k=j___________;if(k!=i){temp=name[i];__name[i]=name[k]_______;name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;i#includevoidmain(void){FILE*fp;charch,filename[10];scanf("%s",filename);10/19if((fp=fopen(__filename,"w"____________))==NULL){printf("cannotopenfile\n");exit(0);}ch=getchar();ch=getchar();while(ch!='#'){_fputc(ch,fp)__________;putchar(ch);ch=getchar();}fclose(fp);}24.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。#include"stdio.h"main(){int*a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;printf("输入3个整数:");scanf("%d%d%d",x,y,z);printf("%d,%d,%d\n",*a,*b,*c);num=*a;if(*a>*b)__num=*b__________;if(num>*c)__num=*c_________;printf("输出最小整数:%d\n",num);}25.下面程序段中,for循环的执行次数是____6_____。char*s="\ta\018bc";for(;*s!='\0';s++)printf("*");26.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。请填空。structlink{chardata;structlink*next;};…structlink*p,*first;intc=0;11/19p=first;while(p!=NULL________){c++;p=P->next___;}27.下面的程序是求如下表达式的值。s=sqrt(ln(1)+ln(2)+ln(3)+……+ln(n)),当n=50时,给出程序运行结果(保留6位小数)。请填空。#includedoublefun(intn){doubles=0.0;__inti___________for(i=1;i<=n;i++)s+=log(1.0*i);___s=sqrt(s)________;returns;}main(){printf("%10.6lf\n",fun(50));}28.以下程序功能是:有一个班,3个学生,各学4门课,计算总平均分数。请填空。includevoidmain(){voidaverage(float*p,intn);floatscore[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};average(*score,12);}voidaverage(float*p,intn){float*p_end;floatsum=0,aver;p_end=___p+n-1_____________;for(;p<=p_end;p++)sum=sum+___*p________;aver=sum/n;printf("average=%5.2f\n",aver);}29.下面rotate函数的功能是:将n行n列的矩阵A转置为A’,例如:12341591312/195678261014当A=9101112则A’=37111513141516481216请填空:#defineN4voidrotate(inta[][N]){inti,j,t;for(i=0;iinfo________);p=___p->link_______;}while(p!=NULL);}31.以下程序用以输出结构体变量bt所占内存单元的字节数,请填空。structps{doublei;chararr[20〕;};13/19voidmain(){structpsbt;printf("btsize:%d\n",sizeof(bt)____________);}32.以下程序是通过指针变量输出整型数组a的10个元素。请填空。#includeintmain(){inti,a[10],*p=a;printf("pleaseenter10integernumbers:");for(i=0;i<10;i++)scanf("%d",p++);___p=a___________;for(i=0;i<10;i++,p++)printf("%d",__*p___________);printf("\n");return0;}33.以下程序用来统计文件fname.dat中字符个数。请填空。#include"stdio.h"main(){FILE*fp;longnum=0L;if((fp=fopen(_"fname.dat","r"___________))==NULL){pirntf("Openerror\n");exit(0);}while(_!feof(fp)_________){fgetc(fp);num++;}printf("num=%1d\n",num-1);fclose(fp);}34.以下程序运行后的输出结果是___5_______#includemain(){char*p=“abcde\0fghjik\0”;printf(“%d\n”,strlen(p));}35.以下程序调用findmax函数返回数组中的最大值,请填空。14/19findmax(int*a,intn){int*p,*s;for(p=a,s=a;p-a*s)s=p;return(__*s_______);}main(){intx[5]={12,21,13,6,18};printf("%d\n",findmax(x,5));}36.下面程序的功能是计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以‘.’为结束。请填空。#includemain(){staticchar*p,a[]="Iamhappy";intmax=0,t=0;p=a;while(*p!='.'){while(((*p<'Z')&&(*p>'A'))||((*p<'z')&&(*p>'a'))){_t=t+1_____________;}if(_t>max__________)max=t;t=0;p++}printf("max=%d\n",max);}37.下面程序段的运行结果是___hELLO!________。chars[80],*sp="HELLO!";sp=strcpy(s,sp);s[0]='h';puts(sp);38.设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年龄,请填空。structman{charname[20];intage;}person[]={"Liming",18,"Wanghua",19,"Zhangping",20};15/19main(){inti,j,max,min;max=min=person[0].age;for(i=1;i<3;i++)if(person[i].age>max)_max=_person[i].age________;elseif(person[i].agevoiddelnum(char*s){inti,j;for(i=0,j=0;s[i]!='\0';i++)if(s[i]<'0'___||_______s[i]>'9'){s[j]=s[i];j=j+1;}s[j]='\0';}main(){char*item;printf("inputastring:\n");gets(item);delnum(item);printf("%s\n",_____item_________);}41.下面程序的运行结果是___25_____main(){intx[]={0,1,2,3,4,5,6,7,8,9};16/19ints,i,*p;s=0;p=&x[0];for(i=1;i<10;i+=2)s+=*(p+i);printf("sum=%d”,s);}42.函数voidfun(float*sn,intn)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。s=1-1/3+1/5-1/7+…+1/n.voidfun(float*sn,intn){floats=0.0,w,f=-1.0;inti=0;for(i=0;i<=n;i++){f=___(_-1)_______*f;w=f/(2*i+1);s+=w;}___*sn_______=s;}43.已知head指向单链表的第一个结点,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。以下过程求出链表所有链结点中,数据域值最大的结点的位置,由指针变量s传回调用程序。请填空。structlink{intdata;structlinknext;}main(){structlink*head,*q;…fmax(head,q);printf("max=%d",q->data);…}voidfmax(structlink*head,structlink*s){structlink*p;p=head;s=head;while(p!=NULL){p=_p->next_____________;if((*p).data>__(*s).date___________)s=p;}}17/19编程题:1.设有以下定义:structstudent{longnum;floatscore;structstudent*next;};intn;/*n为结点个数*/请编写一个插入结点的函数insert,以实现对结点的插入。函数首部为:structstudent*insert(structstudent*head,structstudent*stud)2.设有以下定义:structstudent{longnum;floatscore;structstudent*next;};intn;/*n为结点个数*/请编写一个删除结点的函数del,以实现对结点的删除。函数首部为:structstudent*del(structstudent*head,longnum)3.设有以下定义:structstudent{longnum;floatscore;structstudent*next;};intn;/*n为结点个数*/请编写一个输出链表的函数print,以实现对链表的输出。函数首部为:voidprint(structstudent*head)4.有李、张、王3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。5.请编写一个利用选择法对n个整数按由大到小顺序排序的函数。函数首部为:voidsort(int*x,intn)6.设有以下定义:structstudent{longnum;18/19floatscore;structstudent*next;};intn;/*n为结点个数*/请编写一个建立键表的函数creat。函数首部为:structstudent*creat(void)7.有一个班,3个学生,名学4门课,计算平均分数以及第n个学生的成绩。部分代码如下,请写出average函数和search函数的定义。#includeintmain(){voidaverage(float*p,intn);voidsearch(float(*p)[4],intn);floatscore[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};average(*score,12);search(score,2);return0;}8.将若干字符串按字母顺序(由小到大)输出。部分代码如下,请写出sort函数的定义。#include#includeintmain(){voidsort(char*name[],intn);voidprint(char*name[],intn);char*name[]={"Followme","BASIC","GreatWall","FORTRAN","Computerdesign"};intn=5;sort(name,n);print(name,n);return0;}19/19
本文档为【c语言习题谭浩强有参考答案版】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
闫凤贤
热爱锻炼
格式:pdf
大小:375KB
软件:PDF阅读器
页数:19
分类:
上传时间:2023-04-04
浏览量:10