2014黑龙江省C语言版基础
- 格式:docx
- 大小:23.47 KB
- 文档页数:5
一、写出下列程序段的运行结果(40分)1.(4分)char a= 'F'-'E',b= '\12',c=12,d;c = a<b<c;d =--a&& b++;printf("%d,%d,%d,%d",a,b,c,d);2.(4分)int a=2, b=5;printf("a=%%d,b=\\d,");b/=a;a+=a-b;printf("%d,%d",a,b);3.(4分)char a=256;printf("%d,",a++);a=(int)(13/5+1.4);printf("%d",a);4.(4分)int p[8]={11,12,13,14,15,16,17}; int i=0,j=0;while (i++<7) (第一次循环i=1)if (p[i]%2) j+=p[i];printf("%d\n",j);5.(4分)int a=3,b=5;void exchange(int a, int b){int t;t=a; a=b; b=t;printf("%d,%d\n", a, b);} int main(){exchange(a,b);printf("%d,%d\n",a,b);return 0;}6.(4分)void f(char ch){if (ch>'A'){f(ch-1);}putchar(ch);}int main(){f('D');return 0;}7.(4分)char str[10]="123456789"; int i;for (i=9; i>0; i/=2){str[i]=0;printf("%s\n",str);}8.(4分)struct {int x; int y; int z;}a[3] ={1,2,3,4,5,6,7,8,9};printf("%d,%d\n", a[1].x+a[2].y, a[1].y+a[2].z);9.(4分)int a[8]={1,2,3,4,5,6,7,8};int i=1, *p = a;while (p<a+8){p rintf("%d ",*p);p = p+i;i*=2;} 10.(4分)FILE *fp;int d=20150111;char c1,c2;char str[4];fp=fopen("a.tmp","w");fprintf(fp,"%d", d);fclose(fp);fp=fopen("a.tmp","r");c1=fgetc(fp);fgets(str, 4, fp);c2=fgetc(fp);fscanf(fp, "%d", &d);printf("%c,%s,%c,%d",c1,str,c 2,d);二、改错题(20分)以下程序实现:从键盘输入20个学生的成绩数据,将这些数据存到磁盘文件“stu.dat”上,并求这些学生的最差成绩。
c语言基础知识C语言是一种通用的高级编程语言,具有简洁易读、高效灵活和移植性强等特点,被广泛应用于软件开发、系统编程、嵌入式系统以及科学计算等领域。
本文将从C语言的起源、语法特点、基础知识以及实际应用等方面,详细介绍C语言的基础知识。
首先,我们来了解一下C语言的起源。
C语言是由美国计算机科学家丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初开发的。
当时,丹尼斯·里奇在贝尔实验室为了为Unix操作系统开发一种新的高级编程语言,于是开始了C语言的设计与实现。
C语言最初是作为汇编语言的替代品,用于编写Unix操作系统的内核和系统软件,但随着时间的推移,C语言渐渐被广大程序员所接受,并逐渐成为一种通用的高级编程语言。
接下来,我们来了解一下C语言的语法特点。
C语言是一种基于过程的编程语言,其语法结构相对简洁,容易理解和掌握。
C语言的程序由一系列函数组成,每个函数可以包含一系列语句,函数之间可以相互调用。
C语言的语法规范包括关键字、标识符、数据类型、运算符、控制语句等。
关键字是C语言中已经被定义为特定用途的单词,标识符是用来给变量、函数等命名的名称。
数据类型包括整型、浮点型、字符型、数组和结构体等。
C语言的运算符包括算术运算符、关系运算符、逻辑运算符等。
控制语句包括分支语句(if-else语句、switch语句)和循环语句(for循环、while循环)等,用于控制程序的执行流程。
在学习C语言的基础知识时,首先需要了解变量的概念。
变量是存储数据的一种抽象概念,用于在程序中保存和操作数据。
在C语言中,变量必须在使用之前先进行声明,并且需要指定该变量的数据类型。
例如,可以使用int来声明整型变量,float来声明浮点型变量,char来声明字符型变量。
每个变量都有一个唯一的标识符,用于在程序中引用这个变量。
C语言还提供了一些基本的输入输出函数,用于与用户进行交互。
例如,使用printf函数可以输出结果到屏幕上,使用scanf函数可以从键盘上获取用户输入的数据。
2014二级c语言考试大纲2014年的二级C语言考试大纲主要针对那些希望获得计算机编程基础和C语言应用能力认证的学员。
这份大纲涵盖了C语言的基本概念、数据类型、控制结构、函数、数组、指针、结构体、文件操作等多个方面。
以下是详细的考试内容概述:# 一、C语言概述- C语言的历史和发展- C语言的特点- C语言的编译和链接过程# 二、基本数据类型和运算符- 整型、浮点型、字符型数据类型- 常量和变量- 运算符:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符- 表达式和求值# 三、控制结构- 条件语句:if、switch- 循环语句:while、do-while、for- 跳转语句:break、continue、goto# 四、函数- 函数的定义和声明- 函数的参数和返回值- 函数的调用和递归- 作用域和存储类别# 五、数组- 一维数组和二维数组- 数组的初始化- 数组的遍历和排序- 字符串和字符数组# 六、指针- 指针的概念和定义- 指针与数组的关系- 指针的运算- 指针数组和函数指针# 七、结构体和联合体- 结构体的定义和使用- 结构体数组和指针- 联合体的概念- 枚举类型# 八、预处理指令- 宏定义:#define- 文件包含:#include- 条件编译:#ifdef、#ifndef、#endif# 九、文件操作- 文件的打开和关闭:fopen、fclose- 文件的读写:fread、fwrite、fscanf、fprintf - 文件的定位:fseek、ftell、rewind- 错误处理# 十、动态内存分配- malloc和free函数- 动态分配数组和结构体# 十一、C语言编程风格和调试- 代码的可读性和可维护性- 常见的编程错误和调试技巧# 十二、综合应用- 综合运用C语言知识解决实际问题- 程序设计的基本步骤:问题定义、算法设计、编码实现、测试和调试# 十三、考试形式和要求- 笔试:选择题、填空题、简答题、编程题- 上机考试:编程题、调试题这份大纲为学员提供了一个全面的C语言学习框架,旨在帮助学员掌握C语言的基础知识和应用技能,为进一步的计算机编程学习和软件开发打下坚实的基础。
黑龙江省职教中心《C 语言编程基础》毕业试题一注:本试卷满分100分,考试时间90分钟;题中“口”表示空格符。
一、填空题:(每空1分,共20分)1、C 语言程序的基本单位是____________。
2、源程序经过编译后产生的结果称为 ,其扩展名为 。
3、int a[10]={7,6,5};所定义的数组a 有______个元素,其中a[4]的值为________。
4、设指针变量fp,打开指定名为“abb.txt ”的ASCII 码文件只是为了写的表达式为 。
5、在内存中应该开辟 个字节来存放一个字符。
6、在使用标准字符输入函数getchar()时,应在程序前加上____________。
7、以下程序的输出结果是 。
#include<stdio.h> main( ){ int i=6,j; j=(++i)+(i++) ; printf(“j=%d \n”,j); }8、有int x,y;执行y=(x=1,++x,x+2)后,赋值表达式的值为 。
9、在C 语言中,没有专门为存储字符串的变量,但可以用 来存储字符串,其定义格式为 。
10、在C 语言中,二维数组元素在内存中是按__________________的顺序存放的。
11、下列程序段中循环体的执行次数是 。
a=10; b=0;do {b+=2;a-=2+b;}while(a>=0);12、定义:int a[3][4]={{1,2},{0},{4,6,8,10}}; 则初始化后,a[1][2]得到的初值是,a[2][1]得到的初值是。
13、指针变量定义的一般形式是________________________。
14、程序#include<stdio.h>main(){int j,i=1; j=-i++; print f(“%d,%d\n”,j,i);}运行后输出结果为15、程序#include<stdio.h>main(){int a=177; printf(“a=%o\n”,a);}运行后输出结果为16、若有以下定义:int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;则语句:p+=2,*(p++);执行后的结果(值)是二、选择题:(每题1分,共20分)1、在C语言中,源程序文件的后缀名是()A、·CB、·objC、·exeD、·bas2、下列字符中不属于转义字符的是( )。
第1章C语言程序设计基础(1) 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是( A )。
A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行D)以上说法都不对(2) 以下关于简单程序设计的步骤和顺序的说法中正确的是( B )。
A)确定算法后,整理并写出文档,最后进行编码和上机调试B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构(3) 以下叙述中错误的是( B )。
A)C程序在运行过程中所有计算都以二进制方式进行B)C程序在运行过程中所有计算都以十进制方式进行C)所有C程序都需要编译链接无误后才能运行D)C程序中整型变量只能存放整数,实型变量只能存放浮点数(4) 以下叙述正确的是( B )。
A)C语言程序是由过程和函数组成的B)C语言函数可以嵌套调用,例如,fun(fun(x))C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可作为单独文件形式存在(5) 以下叙述中正确的是( D )。
A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整(6) 以下叙述中正确的是( C )。
A)C程序的基本组成单位是语句B)C程序中的每一行只能写一条语句C)简单C语句必须以分号结束D)C语句必须在一行内写完(7) 计算机能直接执行的程序是( D )。
A)源程序B)目标程序C)汇编程序D)可执行程序(8) 以下4个选项中,不能看成一条语句的是( D )。
A);B)a=5,b=2.5,c=3.6;C)if(a<5);D)if(b!=5)x=2;y=6;(9) 以下叙述中错误的是( D )。
《C语言程序设计基础》教材参考答案包括各单元:一.随堂练习二.单元总结三.单元练习四.实训指导单元一程序设计宏观认识一.随堂练习【随堂练习1-1】1.根据上述示例模仿编程,输入正方形的边长,计算其面积。
#include <stdio.h>void main( ){ int a,s; //数据准备,边长a,面积sprintf("请输入正方形的边长:");scanf("%d",&a); //数据输入s=a*a; //数据计算printf("该正方形的面积为:%d.\n",s);}【随堂练习1-2】1.下面哪些标识符属于合法的用户自定义标识符:Main、void、_num、my$、a*、N4、3m、a-2答:合法的用户自定义标识符是:Main、_num、N42.结合【例1.2】指出程序代码中所用到的标识符哪些是关键字,哪些是预定义标识符,哪些是用户自定义标识符。
答:关键字:void、int预定义标识符:include、main、printf、scanf用户自定义标识符:a、b、c3.分析【例1.2】中函数的结构,包括函数首部(函数返回值类型、函数名、形式参数)、函数体语句(说明语句、可执行语句)。
答:函数首部:void main( ),其中函数返回值类型为void、函数名为main、形式参数无;函数体语句:{}内的语句为函数体,其中:说明语句为int a,b,c;,其余为可执行语句。
【随堂练习1-3】1.在VC++6.0环境中完成【例1.2】程序开发过程。
(略)2.查阅【例1.2】所对应的工程文件夹,了解相关文件的含义。
工程文件夹中:.CPP:用C/C++语言编写的源代码文件。
.DSP:VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。
项目文件,文本格式。
.DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中。
1、本题要求建立有序的循环链表。
从头到尾扫描数组A,取出A[i](0<=i<n),然后到链表中去查找值为A[i]的结点,若查找失败,则插入。
LinkedList creat(ElemType A[],int n)//由含n个数据的数组A生成循环链表,要求链表有序并且无值重复结点{LinkedList h;h=(LinkedList)malloc(sizeof(LNode));//申请结点h->next=h; //形成空循环链表for(i=0;i<n;i++){pre=h;p=h->next;while(p!=h && p->data<A[i]){pre=p; p=p->next;} //查找A[i]的插入位置if(p==h || p->data!=A[i]) //重复数据不再输入{s=(LinkedList)malloc(sizeof(LNode));s->data=A[i]; pre->next=s; s->next=p;//将结点s链入链表中}}//forreturn(h);}算法结束2、因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。
void LongestPath(BiTree bt)//求二叉树中的第一条最长路径长度{BiTree p=bt,l[],s[]; //l, s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点int i,top=0,tag[],longest=0;while(p || top>0){ while(p) {s[++top]=p;tag[top]=0; p=p->Lc;} //沿左分枝向下if(tag[top]==1) //当前结点的右分枝已遍历{if(!s[top]->Lc && !s[top]->Rc) //只有到叶子结点时,才查看路径长度if(top>longest) {for(i=1;i<=top;i++) l[i]=s[i]; longest=top; top--;}//保留当前最长路径到l栈,记住最高栈顶指针,退栈}else if(top>0) {tag[top]=1; p=s[top].Rc;} //沿右子分枝向下}//while(p!=null||top>0)}//结束LongestPath3、设有一个数组中存放了一个无序的关键序列K1、K2、…、Kn。
现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。
51. 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。
设此组记录存放于数组r[l..h]中。
若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。
请编写出算法并简要说明算法思想。
4、冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。
48.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。
(注:双向起泡排序即相邻两趟排序向相反方向起泡)5、设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
算法应对异常情况(入栈满等)给出相应的信息。
设有一个背包可以放入的物品重量为S,现有n件物品,重量分别为W1,W2,...,Wn。
问能否从这n件物品中选择若干件放入背包,使得放入的重量之和正好是S。
设布尔函数Knap(S,n)表示背包问题的解,Wi(i=1,2,...,n)均为正整数,并已顺序存储地在数组W中。
请在下列算法的下划线处填空,使其正确求解背包问题。
Knap(S,n)若S=0则Knap←true否则若(S<0)或(S>0且n<1)则Knap←false否则若Knap(1) , _=true则print(W[n]);Knap ←true否则 Knap←Knap(2) _ , _设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为多少?画出具体进栈、出栈过程。
假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间。
例如:设str1和str2是分别指向两个单词的头结点,请设计一个尽可能的高效算法,找出两个单词共同后缀的起始位置,分析算法时间复杂度。
将n(n>1)个整数存放到一维数组R中。
设计一个尽可能高效(时间、空间)的算法,将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据(x0, x1, x2,…, xn-1),变换为(xp, xp+1, … , xn-1 ,x0 , x1,…, xp-1)。
6、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。
20分void Hospital(AdjMatrix w,int n)//在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。
{for (k=1;k<=n;k++) //求任意两顶点间的最短路径for (i=1;i<=n;i++)for (j=1;j<=n;j++)if (w[i][k]+w[k][j]<w[i][j]) w[i][j]=w[i][k]+w[k][j];m=MAXINT; //设定m为机器内最大整数。
for (i=1;i<=n;i++) //求最长路径中最短的一条。
{s=0;for (j=1;j<=n;j++) //求从某村庄i(1<=i<=n)到其它村庄的最长路径。
if (w[i][j]>s) s=w[i][j];if (s<=m) {m=s; k=i;}//在最长路径中,取最短的一条。
m记最长路径,k记出发顶点的下标。
Printf(“医院应建在%d村庄,到医院距离为%d\n”,i,m);}//for}//算法结束对以上实例模拟的过程略。
各行中最大数依次是9,9,6,7,9,9。
这几个最大数中最小者为6,故医院应建在第三个村庄中,离医院最远的村庄到医院的距离是6。
1、对图1所示的连通网G,请用Prim算法构造其最小生成树(每选取一条边画一个图)。
7、设有一个数组中存放了一个无序的关键序列K1、K2、…、Kn。
现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。
51. 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。
设此组记录存放于数组r[l..h]中。
若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。
请编写出算法并简要说明算法思想。
8、请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink-rlink法存储。
9、编程实现单链表的就地逆置。
23.在数组 A[1..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个.10、我们用l代表最长平台的长度,用k指示最长平台在数组b中的起始位置(下标)。
用j 记住局部平台的起始位置,用i指示扫描b数组的下标,i从0开始,依次和后续元素比较,若局部平台长度(i-j)大于l时,则修改最长平台的长度k(l=i-j)和其在b中的起始位置(k=j),直到b数组结束,l即为所求。
void Platform (int b[ ], int N)//求具有N个元素的整型数组b中最长平台的长度。
{l=1;k=0;j=0;i=0;while(i<n-1){while(i<n-1 && b[i]==b[i+1]) i++;if(i-j+1>l) {l=i-j+1;k=j;} //局部最长平台i++; j=i; } //新平台起点printf(“最长平台长度%d,在b数组中起始下标为%d”,l,k);}// Platform11、4、 void LinkList_reverse(Linklist &L)//链表的就地逆置;为简化算法,假设表长大于2{p=L->next;q=p->next;s=q->next;p->next=NULL;while(s->next){q->next=p;p=q;q=s;s=s->next; //把L的元素逐个插入新表表头}q->next=p;s->next=q;L->next=s;}//LinkList_reverse12、给出折半查找的递归算法,并给出算法时间复杂度性分析。
13、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。
当n=1时,只有一个根结点,由中序序列和后序序列可以确定这棵二叉树。
设当n=m-1时结论成立,现证明当n=m时结论成立。
设中序序列为S1,S2,…,Sm,后序序列是P1,P2,…,Pm。
因后序序列最后一个元素Pm是根,则在中序序列中可找到与Pm相等的结点(设二叉树中各结点互不相同)Si(1≤i≤m),因中序序列是由中序遍历而得,所以Si是根结点,S1,S2,…,Si-1是左子树的中序序列,而Si+1,Si+2,…,Sm是右子树的中序序列。
若i=1,则S1是根,这时二叉树的左子树为空,右子树的结点数是m-1,则{S2,S3,…,Sm}和{P1,P2,…,Pm-1}可以唯一确定右子树,从而也确定了二叉树。
若i=m,则Sm是根,这时二叉树的右子树为空,左子树的结点数是m-1,则{S1,S2,…,Sm-1}和{P1,P2,…,Pm-1}唯一确定左子树,从而也确定了二叉树。
最后,当1<i<m时,Si把中序序列分成{S1,S2,…,Si-1}和{Si+1,Si+2,…,Sm}。
由于后序遍历是“左子树—右子树—根结点”,所以{P1,P2,…,Pi-1}和{Pi,Pi+1,…Pm-1}是二叉树的左子树和右子树的后序遍历序列。