程序设计基础习题集 35
输出结果为 a,d abc,def ghi,mno hi,no
程序⑵ #include
{ struct info { int data; info *pn; } info *base,*p; base=NULL;
for(int i=0;i<10;i++) {
p=(inf*) malloc(sizeof(struct info)); p->data=i+1; p->pn=base; base=p; }
p=base;
while(p!=NULL) {
printf(\ }
printf (\ }
输出结果为 10 9 8 7 6 5 4 3 2 1
6.下列函数用于将节点类型为ntab的链表中某个结点(数据成员data与形参num匹配)删除,填空将函数补充完整。
解答: struct ntab* del_node(struct ntab *h, int num) { struct ntab *p1,*p2;
if(h==NULL) { printf(\ p1=h;
while(num!=p1->data && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num==p1->data)
if(p1==h) { h=p1->next; free(p1); } else { p2->next=p1->next; delete p1; } else
printf(\ return h; } 7.下列函数用于在节点类型为ltab的非空链表中插入一个节点(由形参指针变量p0指向),链表按照节点数据成员no的升序排列,填空将函数补充完整。
解答: struct ltab* insert(struct ltab* head,struct ltab* stud) { struct ltab *p0,*p1,*p2; p1=head;p0=stud;
while((p0->no>p1->no)&&( p1->next!=NULL)){ p2=p1; p1=p1->next; } if(p0->no<=p1->no)
if(head==p1) { p0->next=head; head=p0; }
36 C程序设计基础习题集
else { p2->next=p0; po->next=p1; } else { p1->next=p0; p0->next=NULL; } return (head); }
习 题 十
1. 计算下列表达式的值。
⑴ 5&7 ⑵ -12&6 ⑶ 7|8 ⑷ -12||32 ⑸ (x=13)^9 ⑹ 15/2^1 ⑺ ~-15 ⑻ ~15/3 ⑼ 7<<2 ⑽ -9<<2 ⑾ (x=13)>>3 ⑿ -9>>3 解答:⑴ 5 ⑵ -5 ⑶ 15 ⑷ 1 ⑸ 4 ⑹ 6 ⑺ 14 ⑻ -5 ⑼ 28 ⑽ -36 ⑾ 1 ⑿ -2 2. 变量a、b均被声明为short类型,分别写出执行下列语句后a、b的值。
⑴ a=4;b=5;a&b; ⑵ a=-4;b=a|6; ⑶ a=3;b=a<<2; ⑷ a=-15;b=~a>>2 解答:⑴ a=4,b=5 ⑵ a=-4,b==2 ⑶ a=3,b=12 ⑷ a=-15,b=3 3. 阅读下列程序,写出运行时输入 6 8 8 4 12 -5 23 -12 ^z 的输出结果。
#include
void sub1(short *x,short *y) { *x=*x^*y; *y=*x^*y; *x=*x^*y; } void main() { short a,b;
while(scanf(\ sub1(&a,&b); printf(\ } }
解答:交换 a、b 的值。 4. 编程,输入一个int类型数据后,输出该数的机内码。
解答: #include
{ int a,i; char b[33]={'\\0'}; scanf(\
for(i=31;i>=0;i--){ b[i]=(char)((a&1)+'0');a=a>>1; } puts(b); }
5.输入1个short类型数据,显示它二进制数奇数位(即从左边起的第1、3、5、??、15位)。
解答:#include
{ short a,i; char b[9]={'\\0'}; scanf(\
for(i=7;i>=0;i--){ b[i]=(char)((a&1)+'0');a=a>>2; } puts(b);
程序设计基础习题集 37
}
6.输入一个整数,将其低8位全置1,高8位保留,并以十六进制输出该数。
解答:#include
{ int a; scanf(\
a=a|0xff; printf(\ }
习 题 十一
⒈ 写出下列fopen函数调用所打开文件的读写方式与文件存储格式。
⑴ fpt=fopen(\⑵ fpt=fopen(\⑶ fpt=fopen(\⑷ fpt=fopen(\⑸ fpt=fopen(\
解答:⑴ 新建文本文件 ⑵ 新建二进制文件 ⑶ 可读写文本文件 ⑷ 追加记录二进制文件 ⑸ 新建可读写文本文件 ⒉ 填空题
⑴ fopen函数的返回值是 文件读写的首地址或NULL 。
⑵ 文件打开方式为\,文件打开后,文件读写位置在 文件的首纪录前 。 ⑶ 文件打开方式为\,文件打开后,文件读写位置在 文件的末纪录后 。 ⑷ 表达式“fgetc(fpn)”的值为 所读入字符的ASCII值 或 EOF 。 ⑸ 表达式“fgets(a,10,fpn)”的值为 字符串a的地址 或 NULL 。 ⑹ 函数fscanf的返回值为 所读入数据个数 或 EOF 。 ⑺ 函数fread的返回值为所读入数据的个数或 0 。
⑻ 表达式“fscanf(fpn,\”的值为-1时,函数feof()的值为 1 。
3. 编程,输入若干同学的姓名、学号、3门功课成绩,写到文本文件e:\\aaa.txt。
解答:
#include
struct stu{char name[9];char numb[9];int score[3];} void main()
{ FILE *fp1; struct stu a; int i,n;
fp1=fopen(\ for(i=1;i<=n;i++) {
scanf(\ fprintf(fp1,\%s %d %d %d\\n\ /* 格式串中各格式符间有空格,在从文件读入数据时可作为间隔符 */ }
fclose(fp1); }
38 C程序设计基础习题集 4. 编程,顺序读入题3所建立文本文件中各个同学的姓名、学号、成绩,显示输出。
解答: #include
struct stu{char name[9];char numb[9]; int score[3];}; void main()
{ FILE *fp1; struct stu a;
fp1=fopen(\
while(fscanf(fp1,\ &a.score[1],&a.score[2])!=EOF)
printf(\ a.score[1],a.score[2]); fclose(fp1);
} /* 应参照(题3)文件中数据存储格式,确定读文件时的格式符 */ 5. 编程,输入1个同学的学号,从题3所建立的文本文件中删除该同学的信息。
解答: #include
struct stu{char name[9];char numb[9]; int score[3];}; void main()
{ FILE *fp1,*fp2; struct stu a; char x[9]; gets(x);
fp1=fopen(\ while(fscanf(fp1,\ &a.score[1],&a.score[2])!=EOF)
if(strcmp(a.numb,x))fprintf(fp2,\ a.score[0],a.score[1],a.score[2]); fclose(fp1);fclose(fp2);
remove(\ } 6. 编程,读入若干行字符(每行不超过80个),写入文本文件e:\\bbb.txt。
解答: #include
{ FILE *fp; char a[81];
fp=fopen(\
while(gets(a)!=NULL) { fputs(a,fp); fputc('\\n',fp); } fclose(fp); /* 加入换行符,作为间隔符 */ }
7. 文件a.txt、b.txt中各自存放了若干个整数,编程,显示在a.txt中存在而b.txt中不存在的那些数。
解答: #include
{ FILE *fa,*fb; int a,b;
fa=fopen(\
程序设计基础习题集 39
while(!feof(fa)) { fscanf(fa,\ while(!feof(fb)) {
fscanf(fb,\ }
if(feof(fb)) printf(\ rewind(fb); }
fclose(fa); fclose(fb); }
8. 编程,输入若干同学的姓名、学号、3门功课成绩,写到二进制文件中(文件名自定)。
解答: #include
{ FILE *fp; char name[9],numb[9]; int i,n,score[3]; fp=fopen(\ for(i=1;i<=n;i++) {
scanf(\ fwrite(name,sizeof(name),1,fp); fwrite(numb,sizeof(numb),1,fp); fwrite(score,sizeof(int),3,fp); }
rewind(fp); /* 下面的读文件程序段不是必须的,只是为验证输入是否正确 */ while(fread(name,sizeof(name),1,fp)!=NULL) {
fread(numb,sizeof(numb),1,fp); fread(score,sizeof(int),3,fp); printf(\ } } 9. 编程,输入1个同学的姓名、学号、3门功课成绩,修改题8所建立的二进制文件中具有相同学号同学的信息。
解答: #include
{ FILE *f1,*f2; char name[2][9],numb[2][9]; int s[2][3];
f1=fopen(\ scanf(\ while(fread(name[1],sizeof(name[1]),1,f1)!=NULL) {
fread(numb[1],sizeof(numb[1]),1,f1); fread(s[1],sizeof(int),3,f1); if(strcmp(numb[0],numb[1])) {
fwrite(name[1],sizeof(name[1]),1,f2); fwrite(numb[1],sizeof(numb[1]),1,f2); fwrite(s[1],sizeof(int),3,f2); }
else {