c同步练习 联系客服

发布时间 : 星期六 文章c同步练习更新完毕开始阅读

归,后者称为间接递归,本节讨论简单递归。 2.一个问题要采用递归方法来解决时,必须符合以下三个条件:

1)可以把要解决的问题转化为一个新的问题,而这个新问题的解法仍与原来的解法相同。 2)可以应用这个转化过程使问题得到解决 3)必定要用一个明确的结束递归的条件。 一习题: 有以下程序

main(int argc,char *argv[])

{int n=0,i;

for(i=1;i

}编译连接后生成可执行文件tt.exe,若运行时输入以下命令行

tt 12 345 678 程序运行后的输出结果是

A) 12 B) 12345 C)12345678 D) 136 二:上机部分

1.求n!

2.用递归算法根据以下求平方根的迭代公式,求某数a的平方根。x1=1/2(x0+a/x0) 3.请写递归函数,把输入的一个整数转化成二进制数输出。

4.用递归算法,求1+2+3+4+....+n; 5.用递归算法,求下面公式:

1 当n=0时 f(n) 1 当n=1时 f(n-1)+f(n-2) 当n>1时

struct link {char ch; struct link *p;

}a;

p是一个可以指向struct link类型变量的指针;因此,a.p=&a是合法的表达式 2.建立静态链表 struct node {int data; struct node *next;

};

typedef struct node NODETYPE; main()

{NODETYPE a,b,c,*h,*p; a.data=10; b.data=20;c.data=30; h=&a;

a.next=&b; b.next=&c; c.next='\\0'; p=h;

while(p)

{printf(\ p=p->next; }

printf(\}

二:动态链表: 1.创建 2.查找 3.插入 4.删除 分析: 结构体: struct node {int data;

struct node *next; };

typedef struct node SLIST;

A)建立带有头结点的单向链表

第十四章结构体

知识体系:

一:静态链表:

1.结构体中含有可以指向本结构体的指针成员。 当一个结构体中有一个或多个成员是指针,他们的基类型就是本结构体类型时,通常把这种结构体称为可以“引用自身的结构体” 例如:

第 33 页 共 38 页

编写函数creat_slist1,建立如图所示的带有头结点的单向链表。结点数据域中数值从键盘输入,以-1作为结束标志,链表的头结点的地址由函数值返回。 SLIST *creat_slist1(); { int c;

SLIST *h,*s,*r;

h=(SLIST *)malloc(sizeof(SLIST )); r=h;

scanf(\

while(c!=-1)

{s=(SLIST *)malloc(sizeof(SLIST)); s->data=c; r->next=s; r=s;

scanf(\ }

r->next='0'; } main() { SLIST *h; ......

h=creat_slist1(); ....}

B)顺序访问链表中各个结点的数据域

编写函数printf_slist,顺序输出单向链表各项结点数据中的内容。 SLIST printf_slist(SLIST *head) {SLIST *p; p=head->next;

if(p=='\\0') printf(\else { printf(\ do

{printf(\ p=p->next; }while(p!='\\0'); printf(\ } } main()

{ SLIST *h; ......

h=creat_slist1();

printf_slist(h); ....}

C)在单向链表中插入结点

编写函数insert_snode,它的功能是:在值为x的结点前,插入值为y的结点,若值为x的结点不存在,则插在表尾。

void inser_slist(SLIST *head ,int x,int y) {SLIST *s,*p,*q;

s=(SLIST *)malloc(sizeof()); s->data=y; q=head;

p=head->next;

while(p!='\\0'&&p->data!=x) {q=p; p=p->next; } s->next=p; q->next=s; }

main()

{ SLIST *h; int x,y;

scanf(\ h=creat_slist1(); printf_slist(h); insert_slist(h,x,y); printf_slist(h);

}

D)删除单向链表中的结点。

编写函数delete_snode,删除值为x的结点。

void delete_snode(SLIST *head ,int x) { SLIST *p,*q; q=head;

p=head->next;

while(p!='\\0'&&p->data!=x)

第 34 页 共 38 页

{q=p;p=p->next;}

if(p->data==x) q->next=p->next; }

main()

{ SLIST *h; int x,y; int m;

scanf(\ scanf(\ h=creat_slist1(); printf_slist(h); insert_slist(h,x,y); printf_slist(h); delete_snode( *h ,m); printf_slist(h); }

习题部分: 有以下程序段

typedef struct node { int data; struct node *next; } *NODE; NODE p;

以下叙述正确的是

A)p是指向struct node结构变量的指针的指针 B)NODE p;语句出错

C)p是指向struct node结构变量的指针 运算符 ~ << >> & ^ | 含义 按位求反 左移 右移 按位与 按位异或 按位或 优先级 1 2 2 3 4 5 功能 各位上数字取反 向左移动,右边补0(相当于*2) 向右移动,(相当于/2) 和0被屏蔽,和1保持不变 相同为0不同为1 有1出1,全0才出0 有以下程序 #include #include

typedef struct{ char name[9];char sex; float score[2]; } STU; STU f(STU a)

{ STU b={\ int i; strcpy(a.name,b.name); a. sex=b.sex;

for(i=0;i<2;i++) a.score[i]=b.score[i]; return a;} main()

{STU c={\d=f(c);

printf(\re[1]);

}程序的运行结果是

A)Qian,f,95,92 B)Qian,m,85,90 C)Zhao,m,85,90 D)Zhao,f,95,92

第十五章位运算

知识体系:

1.有如下程序段:int a=14,b=15,x; char c=?A?;

x=(a&&b)&&(c

A ture B false C 0 D 1 2.有以下程序: main()

{unsigned char a,b,c; a=0x3; b=a|0x8; c=a<<1;

printf(“%d%d\\n”,b,c); }结果是_______

A-11 12 B-6 , -13 C 12 24 D11 22 3.main()

{int x=3,y=2,z=1; printf(“%d\\n”,x/y&~z);

第 35 页 共 38 页

D)p是struct node结构变量

}结果是_______

A 3 B 2 C 1 D 0

4. 若有以下语句:则c的二进制数______ char a=3,b=6,c; c=a^b>>2;

A00000010 B11111101 C00000011 D11111100

7. 二进制数a是00101101,若想通过异或运算

(a^b)使a的高4位取反,低4位不变,则 二进制数b应是____

A00000010 B11111101 C00000011 D11110000 5. 有以下程序 main()

{unsigned char a=2,b=4,c=5,d; d=a|b; d&=c; printf(“%d\\n”,d); } 程序运行后的输出结果是(B)

A)3 B)4 C)5 D)6 6. 有以下程序

#include main()

{ int a=1,b=2,c=3,x; x=(a^b)&c; printf(\程序的运行结果是

A)0 B)1 C)2 D)3

main( )

{char x=040;

Printf(“%d\\n”,x=x<<1); }

A 64 B 0 C 63 D32

第十六章文件

知识体系:

一:C 语言文件概念:

1.在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种操作称为“输入”或“读”。当调用输出函数把程序中变量的值输出到外部文件时,这种操作称为“输出”或“写” 2.数据的存储形式分为文本文件和二进制文件。 二:文件指针

定义文件指针类型指针变量的一般形式为: FILE *fp1,*fp2; 三:打开文件

1.调用C语言提供的库函数fopen“打开”文件 fopen(文件名,文件使用方式);

函数返回一个指向FILE类型的指针。例如: FILE*fp;

fp=fopen(\

2.fopen函数调用中要求两个字符串作为参数。第一个字符串中包含了进行读、写操作的文件名,用来指定所要打开的文件;第二个字符串中指定了文件的使用方式,用户可以通过这个参数来指定对文件的使用意图。

3.调用之后,指针fp就指向了文件file_a,无论是哪种方式,当打开文件时出现了错误,fopen函数返回NULL.

if((fp=fopen(\ {printf(\

exit(0); }

4.最常用的文件使用方式及其含义如下: 1)“r”为读而打开文件,当指定这种方式时,对打开的文件只能进行“读”操作。若指定的文件不存在,则会出错;另外一些情况,如企图去

7. 以下程序的功能是进行位运算 main()

{ unsigned char a,b; a =7^3;b=~4&3; printf(“%d%d\\n”,a,b); }程序运行后的输出结果是 A 4 3 B 7 3 C 7 0 D 4 0 8. 已知int a=1,b=3则a^b的值为 A 3 B 1 C 2 D 4 9.下面程序结果:________ main( )

{printf(“%d\\n”,12<<2); }

A 0 B 47 C 48 D 24 10下面程序结果:________

第 36 页 共 38 页