C语言复习第六课
- 格式:doc
- 大小:79.50 KB
- 文档页数:4
C语言程序设计– 第六章课后习题电子13-02班王双喜一、选择题1. C语言中一维数组的定义方式为:类型说明符数组名(C)A. [整型常量]B. [整型表达式]C. [整型常量]或[整型常量表达式]D. [常量表达式]2. C语言中引用数组元素时,下标表达式的类型为(C)A. 单精度型B. 双精度型C. 整型D. 指针型3. 若有定义:int a[3][4];,则对a数组元素的非法引用是(D)A. a[0][3*1]B. a[2][3]C. a[1+1][0]D. a[0][4](解释:A、B、C均正确,D看起来引用不太妥当,但其亦有其意义(a[0][4]等价于a[1][0]))4. 若有定义:int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};,则a数组的第一维大小是(C)A. 1B. 2C. 3D. 4(解释:共9个元素,除以3即可得第一维大小是3;若有余数,则应加1)5. 若有定义:int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};,则值为5的表达式是(C)A. a[5]B. a[a[4]]C. a[a[3]]D. a[a[5]]6. 要求定义包含8个int类型元素的一维数组,以下错误的定义语句是(A)A. int N = 8;int a[N]; B. #define N 3while (a[2*N+2];C. int a[] = {0, 1, 2, 3, 4, 5, 6, 7};D. int a[1+7] = {0};(解释:数组的大小必须是整型常量或整型常量表达式)7. 若二维数组a有m列,则在a[i][j]前的元素个数为(A)A. i * m + jB. j * m + iC. i * m + i - 1D. i * m + j - 18. 下面是对数组s的初始化,其中不正确的是(D)A. char s[5] = {"abc"};B. char s[5] = {'a', 'b', 'c'};C. char s[5] = "";D. char s[5] = "abcdef";(解释:D中元素个数太多,算上'\0'共六个,非法)9. 下面程序段的运行结果是(B)char c[] = "\t\v\\\0will\n";printf("%d", strlen(c));A. 14B. 3C. 9D. 字符串中有非法字符,输出值不确定(解释:字符串中第四个是'\0'即结束标志,因此字符串长度是3)10. 判断字符串s1是否等于s2,应当使用(D)A. if (s1 == s2)B. if (s1 = s2)C. if (strcpy(s1, s2))D. if (strcmp(s1, s2) == 0)(解释:对于字符串来讲,其名字的内容是该字符串的起始地址,不能通过比较名字来比较相等,而应该用专用的函数进行逐字符匹配)二、写出程序的执行结果1. 程序一:# include <stdio.h>main(){int a[3][3] = {1, 3, 5, 7, 9, 11, 13, 15, 17};int sum = 0, i, j;for (i = 0; i < 3; i++)for (j = 0; j < 3; j++){a[i][j] = i + j;if (i == j) sum = sum + a[i][j];}printf("sum = %d", sum);}执行结果:打印sum = 6.(解释:a中各个元素的值是其行和列数字之和,sum内保存a中对角线元素之和,即sum = 0 + 2 + 4)2. 程序二:# include <stdio.h>main(){int i, j, row, col, max;int a[3][4] = {{1, 2, 3, 4}, {9, 8, 7, 6}, {-1, -2, 0, 5}};max = a[0][0]; row = 0; col = 0;for (i = 0; i < 3; i++)for (j = 0; j < 4; j++)if (a[i][j] > max){max = a[i][j];row = i;col = j;}printf("max = %d, row = %d, col = %d\n", max, row, col);}执行结果:打印max = 9, row = 1, col = 0.(解释:此程序的功能是逐行逐列扫描元素,总是将最大的元素赋给max,并保存该元素的行数和列数;因此执行完毕后,max是最大的元素(9),row是其行数(1),col是其列数(0))3. 程序三:# include <stdio.h>main(){int a[4][4], i, j, k;for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)a[i][j] = i - j;for (i = 0; i < 4; i++){for (j = 0; j <= i; j++)printf("%4d", a[i][j]);printf("\n");}}执行结果:第一行打印0;第二行打印1 0;第三行打印2 1 0;第四行打印3 2 1 0。
C语⾔程序设计教程第六章课后习题参考答案P158 1求三个实数最⼤值#includefloat max(float,float,float);int main(){float a,b,c,m;printf("请输⼊三个实数:");scanf("%f %f %f",&a,&b,&c);printf("最⼤数为%f\n",max(a,b,c));return 0;}float max(float a,float b,float c){float t;if(a>b&&a>c)t=a;else if(b>a&&b>c)t=b;elset=c;return t;}P158 2求最⼤公约数最⼩公倍数#includeint fun1(int a,int b);int fun2(int a,int b);int main(){int a,b;printf("请输⼊两个整数:");scanf("%d %d",&a,&b);printf("最⼤公约数为:%d\n",fun1(a,b));int t,r;if(a{t=a;a=b;b=t;}while((r=(a%b))!=0) {a=b;b=r;}return b;}int fun2(int a,int b) {int n;n=(a*b)/fun1(a,b); return n;}P158 3求完全数#includevoid wan(int n); void main(){int n;for(n=1;n<1000;n++) wan(n);printf("\n");}void wan(int n){if(n%i==0)s=s+i;}if(n==s)printf("%d\t",n); }P158 4⽆暇素数#include#includeint nixvshu(int n);int isPrime(int n);int main(){int n,t;printf("⽆暇素数:\n");for(n=100;n<=999;n++) {t=nixvshu(n);if(isPrime(n)&&isPrime(t)) printf("%d\t",n);}printf("\n");return 0;}int nixvshu(int n){int x=0;while(n){x=x*10+n%10;n=n/10;}return x;int i;for(i=2;i<=sqrt(n);i++)if(n%i==0) return 0;return n;}P158 7递归函数#includeint Y(int n){if(n==0)return 0;if(n==1)return 1;if(n==2)return 2;elsereturn (Y(n-1)+Y(n-2)+Y(n-3)); } int main(){int n,k=0;for(n=0;n<=19;n++){printf("%d\t",Y(n));k++;if(k%5==0)printf("\n");}return 0;}P124 6分解质因数#include#includevoid fenjie(int );int main(){int n;printf("请输⼊⼀个正整数:"); scanf("%d",&n);if(isPrime(n)){printf("%d=1*%d\n",n,n);}else{fenjie(n);printf("\n");}return 0;}int isPrime(int n){int i;for(i=2;i<=sqrt(n);i++){if(n%i==0) return 0;}return 1;}int zhi(int n){int m;for(m=2;m<=n;m++){if(isPrime(m)&&(n%m==0)) break;void fenjie(int n){int m;printf("%d=%d",n,zhi(n));while(n>zhi(n)){m=zhi(n);n=n/m;printf("*%d",zhi(n));}}P47 1输出闰年#includeint f(int year);int main(){int year,k=0;for(year=1900;year<=2000;year++){if(f(year)){printf("%d\t",year);k++;if(k%5==0)printf("\n");}}return 0;}int f(int year){if((year%4==0&&year%100!=0)||(year%400==0)) return year;P47 2输出回⽂数#includeint fun(int n);int main(){int n,k=0;for(n=10;n<=2000;n++) {if(n == fun(n)){printf("%d\t",n);k++;if(k%5==0)printf("\n");}}return 0;}int fun(int n){int i=0;while(n>0){i=i*10+n%10;n=n/10;}return i;}P47 3进制转换#includevoid trans(int n,int base); int main()printf("请输⼊要转换的⼗进制数:"); scanf("%d",&n);printf("请输⼊转换的进制:"); scanf("%d",&base);trans(n,base);printf("\n");return 0;}(⽅法⼀)void trans(int n,int base){if(n){trans(n/base,base);if(n%base>=10)switch(n%base){case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;}elseprintf("%d",n%base);}}(⽅法⼆)void trans(int n,int base){int r;char c;trans(n/base,base); r=n%base;if(r>=10)c='A'+r-10;elsec='0'+r;printf("%c",c);}}。
《C语言程序设计(chénɡ xù shè jì)》之----- “函数(hánshù)”教学(jiāo xué)设计贵州交通技师(jìshī)学院张红《C语言程序设计(chénɡ xù shè jì)》之----- “函数(hánshù)”教学(jiāo xué)设计【教材(jiàocái)】:教材(jiàocái):《C语言程序设计(chénɡ xù shè jì)实训教程》,主编:康英健。
出版社:海军出版社。
中职中专教材。
【教学内容分析】:函数是C语言程序设计中非常重要的一个知识点。
是学生从杂乱的程序中重新整理排版的思维。
在以后的工作中广泛使用,学生在以后的程序设计中,都需要把相对独立的功能独立出来。
实现“低耦合,高内聚”的效果。
所以函数是程序设计思想的一个升华,也是一个重点和难点。
学生需要学好函数的知识,才能更好的学后续的专业课程。
【学生情况分析】:中职学生整体来说学习基础较差,自主学习的能力也欠缺。
特别对学科专业基础的理论知识体系明显处于劣势,在学习方面多经挫折,信心不足,缺乏学习的积极性。
在理解逻辑思维方面难度较大。
所以在讲解这节知识的过程中,我通过故事的形式导入,让学生理解函数真正的含义。
【教学目标】:本次课需要学生了解什么是函数。
通过本节教学,提升学生的自学能力,增强学生的自信心,并能在平时的编程工作中灵活的运用函数的知识来解决具体的问题。
1、知识目标①了解简单函数的概念②知道函数的分类③掌握函数的定义方法④知道函数参数及返回值2、能力目标:①通过教师的讲解,让学生能以此类推,灵活的使用函数的方法编程。
②在教师的指导下,对认识不到位(dào wèi)的知识点进行加深理解。
C语言各章节知识点总结C语言是一种通用的高级编程语言,广泛应用于计算机软件开发。
下面是C语言各章节的知识点总结:第一章:C语言简介-C语言起源和发展-C语言的特点和优势-C语言的应用领域-C语言的编译和执行过程-编写第一个C语言程序第二章:C语言基础-C语言的基本数据类型-变量和常量-运算符和表达式- 控制语句(if语句、switch语句、for循环、while循环)-输入和输出-函数的定义和调用第三章:C语言数组-数组的定义和初始化-一维数组和多维数组-数组的应用(排序、查找、统计)- 字符串处理函数(strlen、strcpy、strcat)-字符串的输入和输出第四章:C语言指针-指针的概念和作用-指针变量和指针的运算-指针和数组的关系-指针作为函数参数-动态内存分配第五章:C语言函数高级特性-递归函数-函数指针和回调函数-变量的作用域和存储类别-预处理指令-多文件程序设计第六章:C语言结构体和共用体-结构体的定义和初始化-结构体的嵌套和数组-共用体的定义和应用-枚举类型的定义和使用- typedef的使用第七章:C语言文件处理-文件的概念和分类-文件的打开和关闭-文件的读取和写入-文件的定位和修改-错误处理和异常处理第八章:C语言位运算和位字段-位运算的概念和操作-位掩码和位移操作-位字段的定义和使用-位字段的对齐和优化-位操作的应用第九章:C语言高级编程技术-内存管理和动态内存分配-系统调用和库函数的使用-异常处理和错误处理-多线程编程和进程间通信-嵌入式系统开发技术总结:C语言是一门基础且强大的编程语言,掌握C语言的各章节知识点对于学习和使用C语言是非常重要的。
掌握C语言基础知识可以编写简单的程序,掌握指针和数组等知识可以处理更加复杂的数据结构和算法,掌握高级特性可以编写更加高效和模块化的程序。
通过学习C语言,可以为后续学习其他编程语言打下坚实的基础。
第六课
※主要内容
(1)、查找技术
(2)、排序技术
※主要知识点
(1)、查找技术
①、查找时数据处理领域中的一个重要内容,查找的效率会直接影响到数据处理的效率,不同的数据结构,应采用不同的查找方法
②、查找技术包括:顺序查找和二分法查找
③、以下是顺序查找和二分法查找的信息表
查找方法信
息数
据
结
构
使用
范围
和查
找原
理
特
点
特殊情况下只能用此
方法
对于长度为n
的有序表,在
最坏的情况下
所需比较次数
顺
序
查
找
线使用范围:线性表
查找原理:顺序查找又称
顺序搜索,是从线性表的
第一个元素依次与所要查
找的元素进行比较,如果
是,则查找成功,否则该
缺点:对于
大的线性
表来说查
找的效率
不高
(1)、如果线性表为
无序表。
不管其存储
结构,都只能用顺序
查找
(2)、即使是有序线
性表,如果采用的是
次
n
性 表 线性表中午此元素
链式存储结构,也只能用顺序查找
二 分 法 查 找
使用范围:顺序存储的有序表(有序表是指线性表中的元素的按非递减排列)
原理:将要查找的元素与线性表中的中间一个元素比较大小
次n
2log
(2)、排序技术
①、排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。
排序的方法很多,下面介绍几种常见的排序方法 ②、几种常见的排序方法的信息表 排序方法 信息 此类的排序方法
假设线性表的长度为n ,在最坏的情况下,
需要比较的次数
交换类排序
冒泡排序法 2/)1(-n n 次
快速排序法
插入类排序
简单插入排序法
2/)1(-n n 次
希尔排序法
5.1n
选择类排序
简单选择排序法 2/)1(-n n 堆排序
次)log (O 2n
n
练习题 一、选择题
(1)、对于长度为n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为( ) A 、n+1 B 、n C 、(n+1)/2 D 、n/2 (2)在长度为n 的有序线性表中进行二分查找,最坏情况下需要比较的次数为( ) A 、)(n O B 、)(2
n O C 、)(log 2n
O D 、)log (2n n O
(3)、对于长度为n 的线性表排序,在最坏情况下比较次数不是2/)1(-n n 的排序方法是 ( )
A 、快速排序
B 、冒泡排序
C 、直接插入排序
D 、堆排序 (4)、对于一个长度为n 的线性表,在最坏的情况下,下列各排序的方法的比较次数正确是( )
A 、冒泡排序:2/n
B 、快速排序:2/)1(-n n
C 、冒泡排序:2/)1(+n n
D 、快速排序:2/n
二、填空题
(1)、在最坏的情况下,冒泡排序的时间复杂度为:。
(2)、在长度为n的有序线性表中进行二分查找,需要的比较次数为:。
(3)、对于长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为:。
(4)、排序是计算机程序设计中的一种重要操作,常见的排序方法有、交换排序、。
(5)、对于n个元素的序列进行冒泡排序时最少的比较次数为:。
时间:2012年10月25号
The ideals which have lighted my way , and time after time have given me new courage to face life cheerfully 19 have been kindness , beauty and truth .(Albert Einstein , American scientist)
有些理想曾为我们引过道路,并不断给我新的勇气以欣然面对人生,那些理想就是——真、善、美。
(美国科学家爱因斯坦)。