c语言习题 谭浩强 有答案_第1页
c语言习题 谭浩强 有答案_第2页
c语言习题 谭浩强 有答案_第3页
c语言习题 谭浩强 有答案_第4页
c语言习题 谭浩强 有答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.若有以下定义和语句:int a4=0,1,2,3,*p;p=&a2;则+(*p)的值是_3_。2.与表达式a|=b等价的另一书写形式是_a=a|b_。3.链表中的每个结点都是_结构体_类型数据。4.设有语句:char *a="I_love_china!"a=a+2;则执行printf(“%sn”,a);的输出结果是_love_china!_。5.若有宏义:#define f(x) x*x 则当a=3时,执行f(a-1)的值是_-1_。6.有以下函数调用语句,请问函数fun1到底有_4_个参数。fun1(x,(y,z),10,fun2(x-1,y-1)7.设有以下

2、定义和语句,则*(*(p+2)+1)的值为_60_。 int a32=10, 20, 30, 40, 50, 60, (*p)2; p=a; 8.若有int a=1;int b=2;则ab的值为_3_。 9.设有char *p="abcde0fghjik0 " 则语句printf("%dn ",strlen(p);的输出结果是_5_。10.表达式0x130x17的值是_ox4_。11.在C语言中,&运算符作为单目运算符时表示的是_取地址_运算;作为双目运算符时表示的是_按位与_运算。12.若p是指向某一结构体变量的指针变量,则通过指变量对结构体成

3、员的引用方法有:_p->_和_(*p)._。13.设int a34=1,2,3,4,5,6,7,8;则*(*a+2)的值为_3_。14.判断文本文件是否结束时使用的符号常量EOF的值是_-1_。15.FILE *p的作用是定义一个文件指针变量,其中的FILE是在 stdio.h_头文件中定义的。16.若有以下说明和定义语句,则变量w在内存中所占的字节数是_34_ 。union aa float x; float y; char c6; ; struct st union aa v; float s5; double ave; w;17.设有语句int y; y=sizeof(2.25*4

4、);则y的值是_8_。18.已知 int a=1,b=3则ab的值为_2_。19.下面程序段的运行结果是_ef_。char str ="abc0def0ghi",*p=str;printf("%s",p+5);20.表达式0x13|0x17的值是_ox17_。21.rewind函数的作用是_使文件位置标记指向文件开始位置_。22.与表达式a&=b等价的另一书写形式是_a=a&b_。23.若有以下定义和语句:int a4=0,1,2,3,4,*p;p=&a1;则+(*p)的值是_2_。24.若有int (*p)4;则p是_指向包含4

5、个整型元素的一维数组的指针变量。25.表达式071052的值是_o23_ 26.表达式0x14&0x18的值是_ox10_。27.设有定义:int (*p)(int, int),则p是_指向函数入口地址的指针变量。28.fclose函数当成功地执行了关闭操作,则返回值为_0_。29.设有定义int a34,*p;若二维数组的首行首地址为2000,一个整型数据占4个字节,则a+1的首地址是_2016_。30.表达式3&5的值是_1_。31.设有定义union data int i;'2 char ch; float f;a; 则变量a所占内存长度为_4_个字节。

6、32.若p是指向某一结构体变量的指针变量,则通过指变量对结构体成员的引用方法有: _p->_和_(*p)._。33.设a是二维数组名,则a0表示_0行0列元素地址_。34.设有语句:char *a="I_love_china!"a=a+7;则执行printf(“%sn”,a);的输出结果是_china!_。35.设int b =1,2,3,4,y,*p=b;则执行语句y=*p+;之后,变量y的值为_1_。36.设int a34=1,3,5,7,2,4,6,8;则*(*a+1)的值为_3_。程序阅读题1.下面的程序是求表达式的值:s=1+1/3+(1*2)/(3*5)+

7、(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1),请填空。#include <stdio.h>#include <math.h>double fun(int n) double s, t; int i;_s=1_ ;t=1.0;for(i=1;i<=n; i+) t=t*i/(2*i+1);_s+=t_;return s;main()printf("n %12.10lf", fun(25);2.下面程序的功能是:对字符串从小到大进行排序并输出,请填空。 #include "string.h&q

8、uot; #include "stdio.h" sort(char *a,int n) int i,j; char *p; for(j=1;j<=_n-1_;j+) for(i=0; _i<n-j_;i+) if( _strcmp(ai,ai+1)_>0) p=ai; ai=ai+1; ai+1=p; 3.下面程序把从终端读入的文本(用作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。#include "stdio.h"FILE *fp; char ch;if(fp=fopen( “bi.dat”,"w"

9、;_))=NULL)exit(0);while(ch=getchar( ))!='_')fputc (ch,fp);fclose(fp);4.若已定义:struct num int a; int b; float f;n=1,3,5.0;struct num *pn=&n;则表达式pn->b/n.a*+pn->b的值是_12_,表达式(*pn).a+pn->f的值是_6.0_。5.下列程序的功能是:求出ss所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串123412132,输入字符1,则输出3,请填空。 #include #include

10、#define M 81 int fun(char *ss, char c) int i=0; for(; _*ss!='0'_;ss+) if(*ss=c) i+; return i; main() char aM, ch; clrscr(); printf("please enter a string: n"); gets(a); printf("please enter a char: " ch=getchar(); printf("nThe number of the char is: %dn",fun(_aM

11、,ch_); 6.下面函数的功能是:找出一维数组元素中最大的值和它所在的下标,最大值的和它所在的下标通过形参传回,n是数据个数。请填空。 void fun(int a,int n, int *max, int *d) int i; *max=a0; *d=0; for(i=0;_i<n_;i+) if(*max< _ai_ ) *max=ai;*d=i; 7.以下函数用来在w数组中插入x。n所指向的存储单元中存放w数组中字符个数。数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序。请填空。 void fun(char *w, char x, int *n) int i

12、, p; p=0; while(x > wp) p+; for(i=*n; i>p; i-) wi=_wi-1_; wp=_x_; +*n; 8.下面的程序实现的是指针p所指向的地址的n个数中,求出最大的和最小的数据,请填空。 fun(int *p,int n) int *q; int max,min; max=min=*p; for(q=p;q<_ p+n_;q+) if(*q>max) max=*q; else if( _*q<min_ ) min=*q; 9.以下程序将数组a的4个元素和数组b的6个元素写到名为lett.dat的二进制文件中,请填空。#inc

13、lude main() FILE *fp;char a4="1234",b6="abcedf";if(fp=fopen("_lett.dat_","wb")=NULL) exit(0);fwrite(a,sizeof(char),4,fp);fwrite(b,_6 _,1,fp);fclose(fp);10.函数primedec(m)是求整数m的所有素数因子,并输出。如:m为120时。输出的素数因子为: 2,2,2,3,5程序如下:primedec(int m)int k=2; while (k<=m) if

14、 ( _m%k=0_ ) printf(“%d,”,k); m=m/k else k+;11.以下程序是将一个磁盘文件中的信息复制到另一个磁盘文件中。请填空。#include <stdlib.h>#include <stdio.h> void main( ) FILE *in,*out; char ch,infile10,outfile10; printf("Enter the infile name:n"); scanf("%s",infile); printf("Enter the outfile name:n&qu

15、ot;); scanf("%s",outfile); if(in=fopen( _infile,"r"_ )=NULL) printf("cannot open infilen"); exit(0); if(out=fopen(outfile,"w")=NULL) printf("cannot open outfilen"); exit(0); while( _!feof_(in)fputc(fgetc(in),out); fclose(in); fclose(out); 12.以下程序中,se

16、lect 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。#define N 3#define M 3int select(int aNM,int *n) int i,j,row=1,colum=1;for(i=0;i<N;i+)for(j=0;j<M;j+)if(aij>arowcolum)row=i;colum=j;*n= _row_ ;return _arowcolum_ ; main() int aNM=9,11,23,6,1,15,9,17,20,max,n; max=select(a,&n);

17、 printf("max=%d,line=%dn",max,n);13.下面程序是对输入的两个整数按大小顺序输出。请填空。#include <stdio.h>int main() void swap(int *p1,int *p2);(226) int a,b; int *pointer_1,*pointer_2; printf("please enter a and b:"); scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; if(a&l

18、t;b) swap(_pointer_1,pointer_2_); printf("max=%d,min=%dn",a,b); return 0; void swap(int *p1,int *p2) int _temp_; temp=*p1; (p256) *p1=*p2; *p2=temp;14.以下程序将数组a中的数据按逆序存放。请填空。#define M 8main()int aM,i,j,t; for(i=0;i<M;i+) scanf("%d",a+i); i=0; j=M-1; while (i<j)t=*(a+i); *(a+

19、i)=*(a+j)_;*( _a+j_ )=t; i+;j-; for(i=0;i<M;i+) printf("%3d",*(a+i);15.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。int mystrlen(char *str) int i;for(i=0; _stri_ !=0'i+);return( _i_ );16.下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。T=1+1/(2*3)+1/(3*4)+1/(m*(m+1) 请填空。#include<conio.h>#include&l

20、t;stdio.h>double fun(int m) double t=1.0;int i=2;for(i=2; i<=m; i+) t+=1.0/(i*(i+1);_return(t)_ ;main() int m;clrscr();printf("n 请输入一个整数: ");scanf("%d",&m);printf("n 结果是: %lf n",_fun(m)_ ); 17.函数my_cmp( )的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s 和t的第一个不同字符的ASCII码差值,即s&g

21、t;t时返回正值,当s<t时返回负值。请填空。my_cmp(char *s, char *t)while (*s = *t) if (*s =_0_)return 0; +s; +t; return _(*s-*t)_ ;18.以下函数set用来建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾,每个结点数据域为从键盘输入的单个字符。单向链表的头指针作为函数值返回,回车键结束输入。请填空。(注:在单链表的第一个结点之前附设一个结点,称之为头结点,头结点的数据域可以不存储任何信息。)struct nodechar data; struct node *next; ;struct

22、node *set() struct node *t1,*t2,*t3;char ch;t1=(struct node*)malloc(sizeof(struct node);t3=t2=t1;ch=getchar();while(ch!=_n_) t2=_(struct node*)_malloc(sizeof(struct node);t2->data=ch;t3->next=t2;t3=t2;ch=getchar();t3->next=NULL;_ return(t1)_; 19.下面程序是判断输入的字符串是否是“回文”,(正读和倒读都一样的字符串称“回文”,如leve

23、l )。请填空。#include<stdio.h>#include<string,h>main() char s81,*p1,*p2;int n;gets(s);n=strlen(s);p1=s;p2=_s+n-1_;while(p1<p2) if(*p1!=*p2) break; else p1+;_p2-_ ;if(p1<p2)printf("NOn");else printf("Yesn");20.以下函数用来对n个数按由大到小排序,请填空。void sort(int *x,int n) int i,j,k,t;

24、 for(i=0;i<n-1;i+) k=i; for(j=i+1;j<n;j+) if(*(x+j)>*(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;f=_findbig_;scanf("%d%d%d",&x,&y,&z);big=_(*f)_(x,y,z);

25、printf("bing=%dn",big);22.以下程序是将若干字符串按字母顺序(由小到大)输出。请填空。#include <stdio.h>#include <string.h>void main() void sort(char *name ,int n); void print(char *name ,int n);char *name ="Follow me","BASIC","Great Wall","FORTRAN","Computer desi

26、gn" int n=5; sort(name,n); print(name,n); void sort(char *name ,int n) char *temp; int i,j,k; for(i=0;i<n-1;i+) k=i; for(j=i+1;j<n;j+) if(strcmp(namek,namej)>0) _ k=j_; if(k!=i) temp=namei;_namei=namek_; namek=temp; void print(char *name ,int n) int i; for(i=0;i<n;i+) printf("%

27、sn",namei);23.以下程序为从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止。请填空。 #include <stdlib.h>#include <stdio.h> void main(void) FILE *fp; char ch,filename10; scanf("%s",filename); if(fp=fopen( _filename,"w"_ )=NULL) printf("cannot open filen"); exit(0); ch=getchar( );

28、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,%dn&quo

29、t;,*a,*b,*c);num=*a;if(*a>*b) _num=*b_;if(num>*c) _num=*c_;printf ("输出最小整数:%dn", num ) ;25.下面程序段中,for循环的执行次数是_6_。char *s="ta018bc"for(;*s!='0's+)printf("*");26.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。请填空。struct link char data;struct link *next;;str

30、uct link *p,*first;int c=0;p=first;while( p!=NULL_ ) c+; p= P->next_;27.下面的程序是求如下表达式的值。s=sqrt(ln(1)+ln(2)+ln(3)+ln(n), 当n=50时,给出程序运行结果(保留6位小数)。请填空。#include <stdio.h>double fun(int n) double s=0.0;_int i_for(i=1;i<=n;i+)s+=log(1.0*i);_s=sqrt(s)_;return s;main()printf("%10.6lfn",

31、fun(50); 28.以下程序功能是:有一个班,3个学生,各学4门课,计算总平均分数。请填空。 include <stdio.h>void main() void average(float *p,int n); float score34=65,67,70,60,80,87,90,81,90,99,100,98; average(*score,12); void average(float *p,int n) float *p_end; float sum=0,aver; p_end=_p+n-1_; for(;p<=p_end;p+) sum=sum+_*p_; ave

32、r=sum/n; printf("average=%5.2fn",aver); 29.下面rotate函数的功能是:将n行n列的矩阵A转置为A,例如: 1 2 3 4 1 5 9 13 5 6 7 8 2 6 10 14 当 A 9 10 11 12 则 A= 3 7 11 15 13 14 15 16 4 8 12 16请填空:#define N 4void rotate(int aN) int i,j,t; for(i=0;i<N;i+) for(j=0;_j<N_;j+) t=aij; _aij=aji_ ; aji=t; 30. 已知head指向单链表的

33、第一个结点,以下程序调用函数print输出这一单向链表。请填空。#include "stdio.h"struct studentint info;struct student *link;void print(struct student *head) struct student *p; printf("n the linklist is:");p=head;if(head!=NULL) do printf("%d",_p->info_ ); p=_p->link_; while(p!=NULL);31.以下程序用以输出

34、结构体变量bt所占内存单元的字节数,请填空。struct ps double i; char arr20;void main()struct ps bt; printf("bt size:%dn",sizeof(bt)_);32.以下程序是通过指针变量输出整型数组a的10个元素。请填空。#include <stdio.h>int main() int i,a10,*p=a; printf("please enter 10 integer numbers:"); for(i=0;i<10;i+) scanf("%d",

35、p+); _p=a_; for(i=0;i<10;i+,p+) printf("%d ",_*p_); printf("n"); return 0;33.以下程序用来统计文件fname.dat中字符个数。请填空。 #include "stdio.h" main() FILE *fp; long num=0L; if(fp=fopen( _"fname.dat","r"_ )=NULL) pirntf("Open errorn"); exit(0); while( _!f

36、eof(fp)_ ) fgetc(fp); num+; printf("num=%1dn",num-1); fclose(fp); 34.以下程序运行后的输出结果是_5_#include <string.h>main() char *p=“abcde0fghjik0”;printf(“%dn”,strlen(p); 35.以下程序调用findmax函数返回数组中的最大值,请填空。findmax (int *a,int n) int *p,*s;for(p=a,s=a;p-a<n;p+)if ( *p>*s ) s=p;return( _*s_ );m

37、ain() int x5=12,21,13,6,18;printf("%dn",findmax(x,5);36.下面程序的功能是计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以.为结束。请填空。#include<stdio.h>main() static char *p,a="I am happy" int max=0,t=0; p=a; while(*p!='.') while(*p<'Z')&&(*p>&

38、#39;A')|(*p<'z')&&(*p>'a') _ t=t+1_ ; if( _t>max_ ) max=t; t=0;p+ printf("max=%dn",max);37.下面程序段的运行结果是_hELLO!_。char s80,*sp="HELLO!"sp=strcpy(s,sp);s0='h'puts(sp);38.设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年龄,请填空。struct man char name20;int

39、 age;person="Liming",18, "Wanghua",19, "Zhangping",20;main() int i,j,max,min; max=min=person0.age;for(i=1;i<3;i+)if(personi.age>max) _max=_personi.age_;else if(personi.age<min) _ min=personi.age_;for(i=0;i<3;it+) if(personi.age!=max&&personi.age!=min

40、) printf("%s%dn",,personi.age); break; 39.下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。int i;char s80,*pfor(i=0;i<79;i+) si=getchar(); if(si='n') break; si=_'0'_; p=_s_; while(*p) putchar(*p+);40.下面程序的功能是将字符串中的数字字符删除后输出。请填空。#include<stdio.h>void delnum(char *

41、s) int i,j; for(i=0,j=0;si!='0'i+) if(si<'0' _|_ si>'9') sj=si;j=j+1; sj='0'main() char *item; printf("input a string:n"); gets(item); delnum(item); printf("%sn",_item_ );41.下面程序的运行结果是_25_ main() int x=0,1,2,3,4,5,6,7,8,9; int s,i,*p; s=0; p=

42、&x0; for(i=1;i<10;i+=2) s+=*(p+i); printf("sum=%d”,s);42.函数 void fun(float *sn, int n)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。 s=1-1/3+1/5-1/7+1/n.void fun( float *sn, int n) float s=0.0, w, f=-1.0; int i=0; for(i=0; i<=n; i+) f=_(_-1)_* f; w=f/(2*i+1); s+=w; _*sn_=s; 43.已知head指向单链表的第一个结点,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。以下过程求出链表所有链结点中,数据域值最大的结点的位置,由指针变量s传回调用程序。请填空。 struct link int data; struct link next; main() struct link *head,*q; fmax(head,q); printf("max=%d",q->data); void fmax(struct link *head, struct link *s) struct link *p; p=head; s=hea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论