1、第一章一、简答题1.参考书上第五页图172.因为C语言是强类型语言,语法规定必须先定义后使用,只有先定义,系统才能为其分配存储空间。3.参考书上第二页二、填空题1.算法2. .C , .obj , .exe3.提出问题,构造模型,选择方法,编写程序,上机调试4.15.sin(35.0*3.14159/180) + x * cos(60.0*3.14159/180)6.67.0三、改错题1.参考书上第二页,算法与程序的区别2.只能定义为一种类型3必须先定义,后使用4.可以随时修改5只有char型变量才只存储一个字节6.a还是实型变量7.b中的值不丢失8.i的类型不变四、单选15 BDCDC6-1
2、0DCBBD11-15CBADC16-18AAA第二章一、简答1.参考书上23页2.while先判断,后执行,do while先执行,后判断,循环体至少执行一次3.参考书上29页4.continue,结束本次循环break,结束循环区别在于,continue只结束本次循环重新进行下次循环,而break结束整个循环二、填空题1.顺序结构,选择结构,循环结构2.ifelse 和switch3.语句1语句2 , 语句24.零5.break , continue61 , 07.条件运算符, 双目三、单选1-5ABDCC 6-10DBBDA11-15CBCDA16-20ACAAD21-25CDCBB26
3、-29BCCA四、程序分析题1.end 1end2.num%10 max = t3.j%34.10, 12五、编程题1.#include int main() char str100 ; gets(str) ; int n1 , n2 , n3 , n4 , i ; n1 = n2 = n3 = n4 = 0 ; for(i = 0 ; stri != 0 ; +i) if(stri = A & stri = a & stri = 0 & stri = 9) +n3 ; else +n4 ; printf(大写字母:%dn , n1) ; printf(小写字母:%dn , n2) ; pri
4、ntf(数字字符:%dn , n3 ) ; printf(其他字符:%dn , n4) ; return 0;2.#include #include int main() int array4 , min , max , i ; for(i = 0 ; i 4 ; +i) scanf(%d , &arrayi) ; min = max = array0 ; for(i = 1 ; i 4 ; +i) if(arrayi max) max = arrayi ; printf(min = %d , max = %dn , min , max) ; return 0;3.#include int m
5、ain() float money , lixi ; int year ; scanf(%f %d , &money , &year) ; switch(year) case 1 : lixi = money * 0.63 / 100 ; break ; case 2 : lixi = money * 0.66 / 100 ; break ; case 3 : lixi = money * 0.69 / 100 ; break ; case 5 : lixi = money * 0.75 / 100 ; break ; case 8 : lixi = money * 0.84 / 100 ;
6、break ; default : printf(输入错误n) ; return -1 ; printf(%fn , money + lixi) ; return 0;4.#include int main() int x , y ; scanf(%d , &x) ; if(x 100) y = x + 8 ; else if(x -10) y = -x + 8 ; else y = 0 ; printf(%dn , y) ; return 0;5.#include int main() int i , j , k , m = 3 ; for(k = 5 ; k 12 ; k += 2 , -
7、m) for(i = 0 ; i m ; +i) printf( ) ; for(j = 0 ; j k ; +j) printf(*) ; printf(n) ; return 0;6.#include int main() printf( *n) ; printf( * *n) ; printf( * *n) ; printf(*n) ; return 0;第三章一、简答1.a:数组名,a0 :数组第0号元素, &a1数组第1号元素的地址2.不同,”a”是字符串,末尾有一个03.2 * 3 * 2 = 12个字节二、填空题1.02.按行存放3.10144str145.0三、改错1.是02.
8、只能是常量3.一定相同4.不会给错误信息5.没有提供字符串类型6.不等价,”ok”末尾有一个0四、单选1-5DBCAC6-10CDDCB 11-13CDC五、程序分析题1.AzyD2.1233.454.4some string * test5.统计输入字符串中空格的个数3 ,16.max maxmin = max7.aasum/nxi aj10.12456000001234560000六、编程题1.#include int main(int argc , char *argv) int a11 , i , n ;printf(请输入十个递增排列的数列:) ;for(i = 0 ; i = 0
9、& ai n ; -i) ai+1 = ai ;ai+1 = n ;printf(插入后数列为:) ;for(i= 0 ; i 11 ; +i)printf(%d , ai) ;printf(n) ;return 0 ;2.#include #include int main(int argc , char *argv) char a100 , b100 , min , i ;scanf(%s %s , a , b) ;min = 0 ;for(i = 1 ; ai != 0 ; +i) if(amin ai)min = i ;strcat(b , a + min + 1) ;amin + 1
10、 = 0 ;strcat(a , b) ;printf(%sn , a) ;return 0 ;3.#include int main(int argc , char *argv) char s1100 , char s2100 ;int i ;gets(s1) ;gets(s2) ;char *string1 = s1 , *string2 = s2 ;do i = (int)*string1 -(int)*string2; while(*string1+ & *string2+ & (!i) );for(i = 0 ; s1i != 0 & s2i != 0 & s1i = s2i ; +
11、i) ;printf(%dn , i) ;return 0 ;4.#include int main(int argc , char *argv) char s100 ;int i ;gets(s) ;for(i = 0 ; si != 0 ; +i) if(i = 0 | (si-1 = & si = a & si = z)si -= 32 ;puts(s) ;return 0 ;5.#include int main(int argc , char *argv) char s1100 , s2100 ;int end , i ;gets(s1) ;gets(s2) ;for(end = 0
12、 ; s1end != 0 ; +end) ;for(i = 0 ; s2i != 0 ; +i)s1end+ = s2i ;s1end = 0 ;puts(s1) ;return 0 ;第四章一、简答题1.参考书上68页,69页,72页2.函数的返回值,函数的形参3.实参与形参之间是值传递的关系二、填空题1.库用户自定义2.33.gets()4.strlen()5.strcpy() 6.全局局部7.有返回值无返回值8.return 9.void10.前11.调用三、改错1.表示不同的变量2.按照调用的先后顺序执行3.各自有自己的存储单元4.可以没有形参5.分配在动态存储区6.以该函数定义的返
13、回值为准7.嵌套调用指函数调用函数四、单选1-5BDACC 6-10DAACC11-13BCC五、程序分析题1.jstrj-12.本题程序是错的,第五行,for(I = m + 1 ; i+)这里少东西,所以跳过3.i nx = fun(4)4.1: a = 1 , b = 12: a = 2 , b = 23: a = 3 , b= 3六、编程题1.int fun(int year) if( year % 400 = 0| (year % 4 = 0 & year % 100)return 1 ;elsereturn 0 ;2.#include #include void fun1(int
14、a , int b , int c) float t = sqrt(b * b - 4 * a * c) ;printf(x1 = %f , x2 = %fn , (-b + t) / 2.0 * a , (-b -t) / 2.0 *a) ;void fun2(int a , int b , int c) printf(x1 = x2 = %fn , -b/ 2.0 * a) ;void fun3(int a , int b , int c) printf(该方程没有实根) ;int main(int argc , char *argv) int a , b , c ;scanf(%d %d
15、 %d , &a , &b , &c) ;if(b * b - 4 * a *c 0)fun1(a , b , c) ;else if(b * b - 4 * a * c = 0)fun2(a , b , c) ;elsefun3(a , b , c) ;return 0 ;3.#include #include int fun(int a , int n) int i , j = 0 ;for(i = 1 ; i n ; +i)if(i % 3 = 0 & i % 7 = 0)aj+ = i ;return j ;int main(int argc , char *argv) int a10
16、0 , n , m , i ;scanf(%d , &n) ;m = fun(a , n) ;for(i = 0 ; i m ; +i)printf(%f , sqrt(ai) ;return 0 ;第五章一、简答1.不一定,这要看指针的类型,比如 int * p ,则p + 1 就增加两个字节2.定义指针时表示定义的变量是指针类型,引用指针时,表示指针指针指向的变量3.p + n , p n ,其中n是int类型二、填空题1.地址2.&*3.指针4.*p5.10066.malloc7.a+i*(a+i)8.39.b0三、改错题1.只能存放同类型的变量的地址,比如int *只能存放int型变量
17、的地址2.这个说法是正确的,没有错误3.不是,指的是指针所指向的变量的类型4.只能是同类型的指针或者&a这样的地址值5.是可以改变的四、单选1-5CDDAA6-10BCDDD五、程序分析题1.*xt2.r + bu*x3.104.CDG5.80,-206.57.551711717六、编程题1.#include int main(int argc , char *argv) char s100 ;int i ;gets(s) ;for(i = 0 ; si != 0 ; +i) ;printf(%dn , i) ;return 0 ;2.#include int fun(char *s , ch
18、ar c) int count = 0 ;for( ; *s != 0 ; +s)if(*s = c)+count ;return count ;int main(int argc , char *argv) char s100 , c ;gets(s) ;c = getchar() ;printf(%s %cn , s , c ) ;printf(%dn , fun(s , c) ;return 0 ;3.#include int main(int argc , char *argv) char s100 ;int i , n1 , n2 , n3 , n4 , n5 ;n1 = n2 =
19、n3 = n4 = n5 = 0 ;gets(s) ;for(i = 0 ; si != 0 ; +i) if(si = A & si = a & si = 0 & si xa12.133.“ab”“cd”三、改错题1.可以同名2.可以含有3.不可以四、单选题BACBDD五、程序分析题1.Zhao2.10x3.200y4、-.5、3640206、max = personi.age min = personi.age六、编程题1.#include struct Score float s1 ;float s2 ; ;int main() struct Score stu ;scanf(%f %f
20、 , &stu.s1 , &stu.s2) ;printf(%fn , (stu.s1 + stu.s2)/2.0) ;return 0 ;2.#include struct Student char stuNo50 ; /学号float s1 ;/期中成绩float s2 ;/期末成绩 ;int main() struct Student stu10 ;int i ;for(i = 0 ; i 10 ; +i)scanf(%s %f %f , stui.stuNo , &stui.s1 , &stui.s2) ;for(i = 0 ; i next = p-nextp-next = q5、p
21、-next s-datat6、p-next = head-nexthead-next = p7、p-next-next8、head-next = NULL9、p-priors-next = ps10、O(1)三、改错题1、一定相邻2、该说法是正确的3、该说法是正确的4、需要移动节点5、不会发生溢出现象6、链表四、单选AABBABCAB10题为CDABCB五、程序分析1、删除单链表2、p-next != q-priorp = p-nextq = q-prior3、count = 0p = p-next 六、程序设计题1.#include #define MAX 100struct Link in
22、t dataMAX ;int n ;int findMin(struct Link * p) int min = 0 , i ;for(i = 1 ; i n ; +i)if(p-datamin p-datai)min = i ;return min ;int main() int i ;struct Link L ;scanf(%d , &L.n) ;for(i = 0 ; i L.n ; +i)scanf(%d , &L.datai) ;for(i = 0 ; i L.n ; +i)printf(%d , L.datai) ;printf(最小值是: %dn , L.datafindMin
23、(&L) ;return 0 ;2.#include #define MAX 100struct Link int dataMAX ;int n ;void insert(struct Link *p , int iValue) int i = p-n - 1 ;while(p-datai iValue) p-datai+1 = p-datai ;-i ;p-datai+1 = iValue ;+p-n ; int main(int argc , char *argv) struct Link L ;int i , insertValue ;scanf(%d , &L.n) ;for(i =
24、0 ; i L.n ; +i)scanf(%d , &L.datai) ;scanf(%d , &insertValue) ;insert(&L , insertValue) ;for(i = 0 ; i L.n ; +i)printf(%d , L.datai) ;return 0 ;3.#define MAX 100struct Link int dataMAX ;int n ;void deleteLink(struct Link *p) int i , j , k ;for(i = 0 ; i n ; +i) for(j = i + 1 ; p-dataj = p-datai & j
25、n ; +j) ;if(j != i + 1) int temp = j - i - 1 ;for(k = i + 1 ; j n ; +j , +k)p-datak = p-dataj ;p-n -= temp ;s4.struct Node int data ;struct Node *next ;int getLen(struct Node *p) int n = 0 ;while(p != NULL) +n ;p = p-next ;return n ;5.struct Node int data ;struct Node *next ;void setNum(struct Node
26、*p , int n1 , int n2) while(p != NULL) if(p-data = n1)p-data = n2 ;p = p-next ;6.struct Node int data ;struct Node *next ;struct Node * delNode(struct Node *list , int n) int flag = 1 , i = 1 ;struct Node * p = list , *q = list-next ;if(n = 1) list = list-next ;free(p) ;return list ;while(q != NULL)
27、 +i ;if(i = n) p-next = q-next ;free(q) ;q = p-next ;return list ;q = q-next ;p = p-next ;return list ;7.struct Node int data ;struct Node *next ;struct Node * fun(struct Node *list) struct Node * p = list , *q = list-next , * min , *pMin ;int temp ;min = list ;while(q != NULL) if(q-data data) min =
28、 q ; pMin = p ;p = p-next ;q = q-next ;if(min != list) pMin-next = min-next ;/删除最小节点/将最小节点插入到list节点之后min -next = list-next ;list-next = min ;/交换list节点和min节点的值temp = list-data ;list-data = min-data ;min-data = temp ;return list ;8.struct Node int data ;struct Node *next ;struct Node * fun(struct Node
29、 *list) struct Node * p = list , *list2 = NULL , *q ;struct Node *rear = (struct Node *) malloc(sizeof(struct Node) ;/循环链表的尾指针rear-next = rear ;while(1) q = p-next ;/保存下一个节点的地址/头插法插入pp-next = rear-next ;rear-next = p ;p = q ;if(p = list)break ;return rear ;第九章一、简答题1、不同:栈是先进后出,队列是先进先出相同:都是线性结构,都有顺序实现
30、和链式实现两种2、不能得到4 3 5 6 1 2的出栈序列,原因如下1.1 2 3 4依次进栈2.4 3出栈3.5入栈4.5出栈5.6入栈6.6出栈此时栈中元素为1,2。所以若1一定在2之后出栈。同样的分析方法,可知,1 3 5 4 2 6的出栈序列是可以的。3、共占5 * 6 4 120个字节按行排序时,起始地址为1000 + 2*6 + 5 =1017 按列排序时,起始地址为 1000 + 5 * 5 + 2 = 1027二、填空题1、判栈满添加元素2、判栈空删除元素3、1m-14、空栈空队5、n-16、12127、三、改错题1、这个说法是正确的2、有存取限制3、这个说法是正确的4、这个说
31、法是正确的5、练栈也是线性结构四、单选CBAC 5题的题意不清BDCCAABC五、程序设计题1.#include #define MAX 100struct Stack int dataMAX ;int top ;int pop(struct Stack * s) if(s-top != -1) return s-datas-top- ;else printf(Error) ;return -1 ;int push(struct Stack *s , int n) if(MAX -1 != s-top)return s-data+s-top = n ;else printf(Error) ;return -1 ; int main() struct Stack s ;int i ;s.top = -1 ;for(i = 0 ; i 10 ; +i)push(&s , i) ;for(i = 0 ; i 10 ; +i)printf(%d , pop(&s) ;return 0 ;2.#include #define MAX 100struct Stack int dataMAX ;int top ;/栈的出栈int pop(struct Stack * s) if(s-top != -1) return