2024年1月13日发(作者:)
(完整)c语言习题谭浩强有参考答案版
1.若有以下定义和语句:
int a[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(“%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.设有以下定义和语句,则*(*(p+2)+1)的值为__60________.
int a[3][2]={10, 20, 30, 40, 50, 60}, (*p)[2]; p=a;
8.若有int a=1;int b=2;则a|b的值为___3______.
9。设有char *p="abcde0fghjik0 ”; 则语句printf(”%dn ",strlen(p));的输出结果是_____5_______。
10.表达式0x13^0x17的值是__ox4________。
11.在C语言中,&运算符作为单目运算符时表示的是__取地址_____运算;作为双目运算符时表示的是_按位与____运算。
12.若p是指向某一结构体变量的指针变量,则通过指变量对结构体成员的引用方法有:
_____p—〉_______和_______(*p)。_______。
13.设int a[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_______ .
union aa {float x; float y; char c[6]; };
struct st{ union aa v; float s[5]; double ave; } w;
17.设有语句int y; y=sizeof(2。25*4);则y的值是____8_____。
18。已知 int a=1,b=3则a^b的值为___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 a[4]={0,1,2,3,4},*p;
p=&a[1];
1 / 20
(完整)c语言习题谭浩强有参考答案版
则++(*p)的值是___2_____。
24.若有int (*p)[4];则p是_指向包含4个整型元素的一维数组的指针变量。
25.表达式071∧052的值是___o23______
26.表达式0x14&0x18的值是__ox10_______。
27.设有定义:int (*p)(int, int),则p是___指向函数入口地址的指针变量。
28。fclose函数当成功地执行了关闭操作,则返回值为___0___________。
29.设有定义int a[3][4],*p;若二维数组的首行首地址为2000,一个整型数据占4个字节,则a+1的首地址是__2016___________。
30。表达式3&5的值是_____1_______。
31.设有定义union data
{ int i;’2
char ch;
float f;
}a;
则变量a所占内存长度为_____4_______个字节.
32。若p是指向某一结构体变量的指针变量,则通过指变量对结构体成员的引用方法有:
_____p->__________和_____(*p)。_________。
33.设a是二维数组名,则a[0]表示___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 a[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
#include
double fun(int n)
{ double s, t;
int i;
___s=1_______ ;
t=1。0;
for(i=1;i〈=n; i++)
2 / 20
(完整)c语言习题谭浩强有参考答案版
{ t=t*i/(2*i+1);
______s+=t_________;
}
return s;
}
main()
{printf(”n %12。10lf”, fun(25));
}
2。下面程序的功能是:对字符串从小到大进行排序并输出,请填空。
#include ”string.h”
#include "stdio。h”
sort(char *a[],int n)
{ int i,j;
char *p;
for(j=1;j〈=__n-1________;j++)
for(i=0; _i if( ___strcmp(a[i],a[i+1])___>0) { p=a[i]; a[i]=a[i+1]; a[i+1]=p; } } 3。下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为的新文件中,请填空。 #include "stdio.h” FILE *fp; { char ch; if((fp=fopen( “",”w"___________))==NULL)exit(0); while((ch=getchar( ))!='___@____')fputc (ch,fp); fclose(fp); } 4。若已定义: struct num { int a; int b; 3 / 20 (完整)c语言习题谭浩强有参考答案版 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 #define M 81 int fun(char *ss, char c) { int i=0; for(; ___*ss!=’0'_____________;ss++) if(*ss==c) i++; return i; } main() { char a[M], 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(__a[M],ch______)); } 6。下面函数的功能是:找出一维数组元素中最大的值和它所在的下标,最大值的和它所在的下标通过形参传回,n是数据个数。请填空。 void fun(int a[],int n, int *max, int *d) { int i; *max=a[0]; *d=0; for(i=0;___i〈n________;i++) if(*max< ___a[i]_________ ) { *max=a[i];*d=i; } } 7。以下函数用来在w数组中插入x.n所指向的存储单元中存放w数组中字符个数.数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序.请填空。 void fun(char *w, char x, int *n) { int i, p; 4 / 20 (完整)c语言习题谭浩强有参考答案版 p=0; while(x 〉 w[p]) p++; for(i=*n; i〉p; i——) w[i]=__w[i—1]____________; w[p]=____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 } 9。以下程序将数组a的4个元素和数组b的6个元素写到名为lett。dat的二进制文件中,请填空。 #include main() { FILE *fp; char a[4]="1234",b[6]="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 ( ___m%k==0________ ) {printf(“%d,",k); m=m/k } 5 / 20 (完整)c语言习题谭浩强有参考答案版 else k++; } 11.以下程序是将一个磁盘文件中的信息复制到另一个磁盘文件中.请填空。 #include #include void main( ) {FILE *in,*out; char ch,infile[10],outfile[10]; printf(”Enter the infile name:n"); scanf(”%s",infile); printf("Enter the outfile name:n"); 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。以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标.请填空. #define N 3 #define M 3 int select(int a[N][M],int *n) { int i,j,row=1,colum=1; for(i=0;i for(j=0;j〈M;j++) if(a[i][j]>a[row][colum]){row=i;colum=j;} *n= _row_________ ; return _a[row][colum]________ ; } main() {int a[N][M]={9,11,23,6,1,15,9,17,20},max,n; 6 / 20 (完整)c语言习题谭浩强有参考答案版 max=select(a,&n); 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〈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 8 main() {int a[M],i,j,t; for(i=0;i i=0; j=M-1; while (i〈j) {t=*(a+i); *(a+i)=*(a+j)_________; *( __a+j_____ )=t; i++;j--; } for(i=0;i〈M;i++) printf("%3d",*(a+i)); } 7 / 20 ) (完整)c语言习题谭浩强有参考答案版 en函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。 int mystrlen(char *str) { int i; for(i=0; __str[i]_______ !=‘0’;i++); return( ___i____ ); } 16.下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1)) 请填空。 #include〈conio。h> #include〈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〉t时返回正值,当s my_cmp(char *s, char *t) {while (*s == *t) {if (*s ==__‘0’_________)return 0; ++s; ++t; } return __(*s—*t)_________ ; } 18。以下函数set用来建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾,每个结点数据域为从键盘输入的单个字符。单向链表的头指针作为函数值返回,回车键结束输入。请填空。(注:在单链表的第一个结点之前附设一个结点,称之为头结点,头结点的数据域可以不存储任何信息.) struct node{char data; struct node *next; }; 8 / 20 (完整)c语言习题谭浩强有参考答案版 struct 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.下面程序是判断输入的字符串是否是“回文”,(正读和倒读都一样的字符串称“回文”,如level ).请填空。 #include〈stdio。h> #include〈string,h〉 main() { char s[81],*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; for(i=0;i { k=i; 9 / 20 (完整)c语言习题谭浩强有参考答案版 for(j=i+1;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() { int findbig(int,int,int); int (*f)(),x,yz,z,big; f=_findbig_________; scanf(”%d%d%d",&x,&y,&z); big=____(*f)______(x,y,z); printf("bing=%dn",big); } 22.以下程序是将若干字符串按字母顺序(由小到大)输出.请填空。 #include #include void main() {void sort(char *name[ ],int n); void print(char *name[ ],int n); char *name[ ]={”Follow me”,"BASIC",”Great Wall",”FORTRAN”,"Computer design"}; 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 {k=i; for(j=i+1;j〈n;j++) if(strcmp(name[k],name[j])〉0) __ k=j___________; if(k!=i) {temp=name[i];__name[i]=name[k]_______; name[k]=temp;} 10 / 20 (完整)c语言习题谭浩强有参考答案版 } } void print(char *name[ ],int n) {int i; for(i=0;i printf("%sn”,name[i]); } 23。以下程序为从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止。请填空。 #include 〈stdlib.h> #include 〈stdio.h> void main(void) {FILE *fp; char ch,filename[10]; scanf(”%s",filename); if((fp=fopen( __filename,”w”____________ ))==NULL) { printf("cannot open filen"); 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,%dn”,*a,*b,*c); num=*a; if(*a〉*b) __num=*b__________; if(num〉*c) __num=*c_________; 11 / 20 (完整)c语言习题谭浩强有参考答案版 printf (”输出最小整数:%dn”, num ) ; } 25。下面程序段中,for循环的执行次数是____6_____。 char *s="ta018bc"; for(;*s!='0';s++) printf("*”); 26.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点).请填空。 struct link { char data; struct link *next; }; … struct 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 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",fun(50));} 28.以下程序功能是:有一个班,3个学生,各学4门课,计算总平均分数.请填空。 include void main() 12 / 20 (完整)c语言习题谭浩强有参考答案版 {void average(float *p,int n); float score[3][4]={{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________; aver=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 4 void rotate(int a[][N]) { int i,j,t; for(i=0;i〈N;i++) for(j=0;___j〈N_______;j++) { t=a[i][j]; _a[i][j]=a[j][i]____________ ; a[j][i]=t; } } 30. 已知head指向单链表的第一个结点,以下程序调用函数print输出这一单向链表。请填空。 #include ”stdio.h" struct student {int info; struct student *link; }; 13 / 20 (完整)c语言习题谭浩强有参考答案版 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.以下程序用以输出结构体变量bt所占内存单元的字节数,请填空。 struct ps { double i; char arr[20〕; }; void main() {struct ps bt; printf("bt size:%dn",sizeof(bt)____________); } 32。以下程序是通过指针变量输出整型数组a的10个元素。请填空. #include int main() { int i,a[10],*p=a; printf("please enter 10 integer numbers:"); for(i=0;i〈10;i++) scanf(”%d",p++); ___p=a___________; for(i=0;i<10;i++,p++) printf("%d ",__*p___________); printf("n"); return 0; } 33。以下程序用来统计文件fname。dat中字符个数。请填空。 #include ”stdio.h” 14 / 20 (完整)c语言习题谭浩强有参考答案版 main() { FILE *fp; long num=0L; if((fp=fopen( _"”,”r”___________ ))==NULL) { pirntf("Open errorn"); exit(0);} while( _!feof(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 if ( *p>*s ) s=p; return( __*s_______ ); } main() { int x[5]={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; 15 / 20 (完整)c语言习题谭浩强有参考答案版 while(*p!='。') { while(((*p〈'Z’)&&(*p>’A’))||((*p<'z')&&(*p>’a’))) { _ t=t+1_____________ ;} if( _t>max__________ ) max=t; t=0;p++ } printf(”max=%dn”,max); } 37。下面程序段的运行结果是___hELLO!________。 char s[80],*sp="HELLO!”; sp=strcpy(s,sp); s[0]='h'; puts(sp); 38。设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年龄,请填空。 struct man { char name[20]; int age; }person[]={”Liming”,18, ”Wanghua”,19, "Zhangping”,20}; main() { int i,j,max,min; max=min=person[0].age; for(i=1;i〈3;i++) if(person[i].age>max) _max=_person[i]。age________; else if(person[i]。age〈min) __ min=person[i]。age_________; for(i=0;i〈3;it++) if(person[i]。age!=max&&person[i]。age!=min) {printf(”%s%dn”,person[i].name,person[i].age); break; } } 39.下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后 输出。请填空。 int i; char s[80],*p for(i=0;i<79;i++) { s[i]=getchar(); 16 / 20 (完整)c语言习题谭浩强有参考答案版 if(s[i]==’n') break; } s[i]=____’0’_______; p=______s______; while(*p) putchar(*p++); } 40。下面程序的功能是将字符串中的数字字符删除后输出.请填空。 #include〈stdio.h〉 void delnum(char *s) { int i,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(”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=&x[0]; 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; 17 / 20 (完整)c语言习题谭浩强有参考答案版 } ___*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=head; while(p!=NULL) { p=_p->next_____________ ; if((*p)。data〉__(*s).date_ __________ ) s=p; } } 编程题: 1。设有以下定义: struct student {long num; float score; struct student *next; }; int n; /*n为结点个数*/ 请编写一个插入结点的函数insert,以实现对结点的插入。函数首部为: struct student *insert(struct student *head, struct student *stud) 2。设有以下定义: struct student 18 / 20 (完整)c语言习题谭浩强有参考答案版 {long num; float score; struct student *next; }; int n; /*n为结点个数*/ 请编写一个删除结点的函数del,以实现对结点的删除。函数首部为: struct student *del(struct student *head,long num) 3.设有以下定义: struct student {long num; float score; struct student *next; }; int n; /*n为结点个数*/ 请编写一个输出链表的函数print,以实现对链表的输出.函数首部为: void print(struct student *head) 4。 有李、张、王3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。 5。 请编写一个利用选择法对n个整数按由大到小顺序排序的函数。函数首部为: void sort(int *x,int n) 6。 设有以下定义: struct student {long num; float score; struct student *next; }; int n; /*n为结点个数*/ 请编写一个建立键表的函数creat.函数首部为: struct student *creat(void) 7. 有一个班,3个学生,名学4门课,计算平均分数以及第n个学生的成绩.部分代码如下,请写出average函数和search函数的定义. #include int main() {void average(float *p,int n); void search(float (*p)[4],int n); 19 / 20 (完整)c语言习题谭浩强有参考答案版 float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}}; average(*score,12); search(score,2); return 0; } 8。 将若干字符串按字母顺序(由小到大)输出。部分代码如下,请写出sort函数的定义。 #include 〈stdio.h> #include int main() {void sort(char *name[ ],int n); void print(char *name[ ],int n); char *name[ ]={"Follow me”,”BASIC”,”Great Wall”,”FORTRAN”,"Computer design”}; int n=5; sort(name,n); print(name,n); return 0; } 20 / 20
发布者:admin,转转请注明出处:http://www.yc00.com/news/1705081137a1391881.html
评论列表(0条)