《2022 兰州文理学院c考试大纲分析.docx》由会员分享,可在线阅读,更多相关《2022 兰州文理学院c考试大纲分析.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、考核知识点1指针运算的本质是什么。指针可以进行哪些运算。举例 说明指针数组、行指针。编写具体的程序实例,并说明其区别,分别 介绍其适用场合。指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然 就是指针类型,指针运算本质就是地址之间的运算。指针的作用就是,给出一个指针,取出该指针指向地址处的值;指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运 算是毫无意义的。char a100char *p = &a50;*(p-50) = a;*(p+40) = b;P-20 = c;p10 = d;类型相同指针之间的运算:(+-(b)?(a):(b)
2、普通函数:MAX(a,b) return ab?a:b;宏定义:方面修改宏值,提高程序的运行效率。函数调用:用定义函数的方式代替主函数里面复杂的运算,主函数根据其所用的相应运算 来进行相应的函数调用。+宏定义:#define P 3.14#includeVoid main()Int r;Float s;s=p*r*r*r*4/3;Printf( f”,s);函数调用#includevoid S (int i) Float s ;for(inti= 0;i 20;i+) printf( %d ,arr_2i);) intsum = 0;for(inti= 0;i 20;i+)(sum= sum+
3、arr_2i;) printf( sum %d, sum);主函数intmain()(intx = 6;printf(费波数列前15项为:);for(inti= 0;i = 15;i+)(printf( %d ,fbi(i);)printf(n);printip*蕨数列前d 项和为d”,x,sum_fbi(x);system, pause”);returnO;)递归好处:代码更简洁清晰,可读性更好递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度 太大,可能系统撑不住。考核知识点12在一个数列中,从键盘输入一个数,要求找出该数是 数组中第几个元素,如果该数不
4、存在,那么输出查找失败提示。用至 少两种查找方法实现,并详细阐述查找原理,列举每一种方法的优 点和缺点。顺序查找:#include voidmain()inti,num;intlist10=1,3,5,7,9,13,15,17,19,21;scanf(,num);for(i=0;i10;i+)(if(listi=num)printf ( d”,i+1)break;elseprintf(查找失败!”);)优点,算法简单,缺点,数据量大的情况下查找速度慢。二分法ttinclude ttdefine M 10voidmain() intaM = -12, 0, 6, 16, 23, 56, 80,
5、100,110, 115;intn, flag, low, mig, high;flag= 0;low= 0;high= MT;printf (zzPlease input a number : n); scanf (级d,&n);*while(low amid) low= mid + 1;elsehigh = mid - 1;*if (flag = 1) printf (/zThe index of %d is %dz,, n, mid);)elseprintf (Z/There is not n);优点适用数据区域比拟大,较顺序方法来说查找快捷,缺点:二分法查找确保数组有序S=P*r*r*
6、r*4/3;Void main () Int i ;Float mj ;Mj=S (i);Printf ( f” , mj);考核知识点3使用一维数组模拟一个无序且不重复的数列,并完成数 列元素的增删改查操作,试用c语言编程实现。(1)增删改查功能用函数定义实现;(2)删除和修改函数需要嵌套调用查找函数;(3)查找功能使用经典查找算法实现为加分项。#include#define maxsize 100int fine(int n,lnt amaxsize) 查找函数int i;for(i=0;ia.length;i+)lf(ai=n)Return i+1;)int add(int n,int
7、amaxsize) 增加函数int i;for(i=0;ia.length;i+)lf(ai=O)ai=n;)Return ai;)int del(int njnt amaxsize) 删除函数int ij;fine (n); 调用查找函数,返回所在的下标+1for(i=j;ia.length;i+)ai=ai+l;)return 0;)int alt(int n,int amaxsize) 修改函数int ij;j=fine (n); 调用查找函数,返回所在的下标+L赋值给jai-l=n;return 0;)Void main()Intn, i;n用来储存,用来判断进行什么操作,。查找,1增
8、加,2修改,3删除,i储存具 体数值。Int amaxsize=2,6z9,8,6,32,59,48,23 一维数组初始化。Printf(“提示语句:0查找,1增加,2修改,3删除)Scanf ( d” , &n);Printf(“提示语句:修改的数字”)Scanf ( d” , &i);Switch (n) Case 0 : fine (i,a) ; break;: add (i,a) ; break;Case 1 : alt (ia) ; break;: del (i,a) ; break;)考核知识点4编写程序,要求使用gets函数从终端输入一个字符串, 计算其中单词的个数,要求单词之间
9、有空格,和普通的句子一样,例 如:I am a Chinese,并将字符串用puts函数输出一次。试想上述功能 假设改用printf、scanf函数进行操作,能否实现,请说明原因并阐述两类 函数的区别。scanf()配合s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回。如 果要读取一行字符串,比方:I love you!1这种情况,scanf()就无能为力了。这时我们最先想到的是用gets。读取.gets。函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets。函数并不读取换行符它会把换行符替换成空字符VT,作为c语言字符串结束的 标志。#includ
10、e void main()(char string100;char c;int i=0, num = 0, word = 0; word为0,即使开头就为空格,认为是新单词的开始 gets(string);while (c = stringi+)!=O)(if(c =) 为空格,就是代表新单词开始(word = 0;)else if (word = 0)/c既不等于空格又是新单词的开始(num+;单词个数加1word = 1 ;/word=l就不是新单词printf (n%dnH,num);考核知识点5函数之间数据传递有哪几种形式。请选择至少两 种以上的传递方式进行介绍,请编写程序详细阐述参数
11、传递过程, 说明它们之间的区别。值传递,指针传递,引用传递。值传递:指在调用函数时将实际参数向形式参数的传递。指针传递:通过地址的传递进行对值的访问。应用传递:引用变量作为形参时,它将变为实参列表中相应变量的别名,对形参 进行的任何更改都将真正更改正在调用它的函数中的变量,弓I用变量实际上指向的是被它引用 的变量。考核知识点6编写一个程序,将字符串A中的字符复制到字符 串B中,要求将字符串A的后几个字节和字符串B的前几个字节重 叠,将复制后的新字符串存放在字符串c中并输出。strcpy()利用标准库函数strcpy(),可以将一字符串的一局部拷贝到另一个字符串中。strcpy。函 数有3个参数
12、:第一个参数是目录字符串;第二个参数是源字符串;第三个参数是一 个整数,代表要从源字符串拷贝到目标字符串中的字符数。以下是一个用strcpy()函数 拷贝字符串的一局部的例子:#include#include#include intmain(intargc, char *argv) (charbuf20=6.0 1257487794/n;charda5=0;charnum15=0;inti=O, j=0;strcpy(da,buf, 3);strcpy(num,buf+(strlen(buf)-ll), 10);printf(buf= %s, da= %s,num= %s/n,buf, da,
13、num);returnl;)考核知识点7c语言中的主要控制语句有哪些。请举一个包含多 种控制语句的实例,画出实现这个具体问题的传统流程图和N-S流 程图,并比拟两种流程图的优劣。由卜else条件语句for( )循环语句while(卜循环语句dowhile()循环语句continue结束本次循环语句break中止执行switch或循环语句sw计ch多分支选择语句 求绝对值。传统流程图和N-S流传统流程图:比拟详细,但是比拟繁琐。N-S流程图:简单,但是表达清晰,错误不容易排查。考核知识点8用结构体一维数组存放某公司某月销售部门员工 的销售量及销售额,按员工编号由小到大顺序对员工数据进行排序, 找
14、出本月销售冠军,并陈述设计思想并编程实现。#include#definemaxsize30Structemployeelntid;lntnum;lntmoney;);voidmain()Intij;lntmax_sale=employee.num0*employee.money0;for(j=0;ja.length();j+)Scanf( %d %d %d” ,&employee.idi,&employee.numi,&employee.moneyi);输入)for(j=0;jmax_sale)max_sale=employee.numj *employee.money j; l=j;)Pri
15、ntf(“销售冠军的编号是:d,他的销售额是:d”,i,max_size);排序方法,冒泡for(j=0;ja.length();j+)/*外循环控制排序趟数,n个数排n-1趟*/ for(i=0;iai+l) /*相邻元素比拟,逆序那么交换*/t=ai;ai=ai+l;ai+l=t;)考核知识点9输入一个非十进制整数(可以自行选择二进制或 八进制或十六进制)将其转换成十进制整数,陈述算法思想并用程 序设计语言编程实现。思想:将输入的数字按照字符串进行处理,将字符串从第一位开始,按照0结尾进行 依次计算求和,编写二,八,十六分别转为十进制,主函数选择进制转换,并用gets ()输入进行进制函数
16、调用。#include/*二进制转十进制*/intfunl(char *str)(intnum= 0;while(*str!= 0)(inti= *str-O;if(i=0 &i=0 &i=0 &ch=a &ch=f,)num=num*16+10+ch-,a,;str+;)returnnum;)lntmain()(charstr1024;intmenu, output;菜单项选择项,转换后的十进制数printf(“请输入数据:”);gets(str);printf(请选择进制 2,8,16 :);Scanf ( u%d ,&menu);switch(menu)(easel:output= fu
17、nl(str);break;case2:output= fun2(str);break;case3:output= fun3(str);break ;)returnoutput;)考核知识点10交换两个变量的值,有几种算法。试举例说明并 实现交换过程,要求使用三种以上的方法实现交换,并比拟每种方 法的优点和缺点已经适用场合。1仓lj建中间变量这是最快也是最简单的方法,例如:#includevoidmain()(inta=10;intb=20;inttemp;temp=b;b=a;a=temp;printf(交换后a,b的值为交)printf(a=%dn,a);printf(,b=%dn,b);
18、调用函数交换两个数的值#includevoidswap(int*p1 ,int *p2)(inttemp;temp=*p1;*p1=*p2;*p2=temp;intmain()(inta=1O;intb=20;printf(交换前a,b的值分别为:n);printf(a=%dnH,a);printf(b=%dnn,b);swap(&a,&b);printf(交换后a,b的值分别为:n);printf(a=%dnM,a);printf(b=%dnn,b);returnO;用加减或乘除运算来交换易产生数值溢出#includeintmain()(inta=1O;intb=20;printf(交换前a
19、,b的值分别为:rT);printf(a=%dn,a);printf(b=%dn,b);a=a+b; /a=a*b;b=a-b; /b=a/b;a=a-b; /a=a/b;printf(交换前a,b的值分别为:n);printf(a=%dn,a);printf(b=%dnH,b);)用异或交换可读性差#includeintmain()(inta=1O;intb=20;printf(交换前a,b的值分别为:rT);printf(a=%dnn,a);printf(b=%dnn,b);a=aAb;b=aAb;a=aAb;printf(交换前a,b的值分别为:rT);printf(a=%dnM,a);
20、printf(b=%dnH,b);用位运算交换可读性差#include intmain()(inta=1O;intb=20;printf(交换前a,b的值分别为:rT);printf(a=%dn,a);printf(b=%dn,b);b = (_int64)(_int64)a 32 | (a = b) 32;printf(交换前a,b的值分别为:rT);printf(a=%dn,a);printf(b=%dnn,b);returnO;)考核知识点11用函数求fibonacci数列前n项的和。分别用递 归和非递归两种方法实现,并详细阐述两种方法的调用过程,并列 举两种方法的优点和缺点。说明:fi
21、bonacci数列为数列的第一项值 为1,第二项值也为1,从第三项开始,每一项均为其前面相邻两项 的和。递归写法fbi()此函数求x项的斐波那契数intfbi(intx) 斐波那契(if(x = 1| | x=2)returnl;elsereturnfbi(x -1) +fbi(x - 2);)intsum_fbi(intx)此函数求斐波那契数列前x项的和intsum_fbi(intx) 求和(if(x = 0)returnO;ints = 0;for(inti= 0;i= x;i+)(s = s +fbi(i);)returns;)非递归写法intarr_220 = 1,1;for(inti= 2;i 20;i+)(arr_2i = arr_2i-1 + arr_2i- 2;) 一 一