二级C语言上机终结

合集下载

二级C语言上机 总结

二级C语言上机 总结

本题是利用结构体存储学生记录并由实参ss返回。 第一处:实参ss是一个结构型指针变量,所以应填:STU。 第二处:该学生的各科成绩都乘以一个系数a,所以应填:score[i]。 第三处: 函数的调用, 由于函数定义时使用的指针结构型变量, 所以应填 : &std。
②填形参名的题目 这类题也是比较简单的,在子函数中从上往下看,如果看到变量没有声明,并且该变量 不是全局变量则该变量名就应该是形参。
二级 C 语言上机指导
一、填空题考点分析:
(一) 、文件函数的各个参数的意义
常考 的 有 fopen(), fseek(), fprintf(), fscanf(), fclose(),fwrite(),fread(), feof(),rewind(fp)在这里要明确每一个函数的参数的意义及使用方法。 文件结构体:(FILE) 缓冲文件系统为每个正在适用的文件都在内存开辟的文件信息区 该文件信息用系统定义的名为 FILE 的结构体描述 注意:文件结构体(FILE)包含在 stdio.h 头文件中 typedef struct { int _fd; int _cleft; int _mode; char *_next; char *_buff; }FILE; 例: FIEL *fp;
பைடு நூலகம்
(二) 、数据定义: 这类题集中在定义变量的类型,函数类型,形参的类型及形参名
1、 变量的类型中爱出的考题一般在指向文件的指针的定义方法:FILE *
如在第二套的填空中就是这种考法,要注意FILE必须大写,而且要注意指针,如果他给 的没有*则在定义时用户必须加上*。 如(第 2、14 套等)题: #include <stdio.h> void fun(char *s, int a, double f)

江苏省高校计算机等级考试二级C语言上机真题答题要点

江苏省高校计算机等级考试二级C语言上机真题答题要点

【上机题命题及答题要点】1、近年来江苏省高校上机题目难度有所下降。

本轮上机命题的难度系数及全国计算机等级考试二级C语言接近。

2、改错题通常有3~4个错误。

错误分为两大类,一类是语法出错,这类错误比较查错和容易修改,即在编译时报的错误。

另一类是结果出错,即程序的算法出错,这类错误需认真审题。

3、编程题必须掌握C语言的文件,应熟悉文件指针的定义,文件的打开及文件的输入输出。

编程题的固定框架。

必须记忆。

以C01的编程为例。

#include <stdlib.h> /*库函数exit(0)需要*/#include <stdio.h> /*定义文件指针时需要的头文件*/…………..{}void main(){ FILE *fp;所有数据类型的说明和定义if((fp=fopen("t:\\myf2.out","w"))==NULL){ printf("\nCan't open the file!"); exit (0);}函数调用(具体问题具体分析)结果输出printf("\nMy number is:120992340\n");fprintf(fp,"\nMy number is:1292340\n");fclose(fp);}4、必须熟悉常用算法。

5、江苏省高校计算机二级C语言上机编程题常考问题:字符串相关问题、素数相关问题、回文数相关问题、矩阵(二维数组)相关问题、特殊数问题(如,合数、真因子或质因子之和、水仙花数、亲密数、完数、数制转换、哥德巴赫猜想等)。

6、掌握文件输出操作标准形式。

【2013年3月江苏省等考上机真题解析】江苏省高等学校非计算机专业学生(C01)计算机基础知识和应用能力等级考试上机试卷二级C语言(试卷代号C01)(本试卷完成时间70分钟)一、改错题(16分)【程序功能】判断一个N×N方阵(N为奇数)是否为魔方阵。

二级C语言上机操作指南

二级C语言上机操作指南

上机考试系统的使用(适合新大纲规定的VC++6.0环境下二级C、三级C、一级等科目的上机考试)下面我们开始本篇文章(本文适合全国计算机等级考试二级C、三级的上机):最新大纲全国计算机等级考试上机考试系统工作站的运行平台是Microsoft的中文版Windows XP操作系统。

测试考生对Windows XP操作系统的一般理解及考生在Windows XP下的微机操作能力和各种应用软件的应用能力。

使用方法如下:1.启动考试程序,出现如下图所示的登录界面2.在“开始登录”功能项上单击鼠标左键或按回车键出现考号输入窗口,如下图所示:3.按回车或选择“考号验证”对输入的考号以及姓名、身份证号进行验证。

如下图所示:4.如果考号不正确选择“否(N)”重新输入;如果考号正确选择“是(Y)”继续。

5.经“登陆提示”选择“是”确认后会再出现一个窗口,从略,选择“抽取试题”后,系统出现如下图所示的“考试须知”。

(二级C、和三级C语言上机都是类似的形式)6.选择“开始考试并计时”,进入考试界面,就可以看题、做题,并开始计时,如下图所示。

上机考试系统将自动在屏幕中间生成装载试题内容查阅工具的考试窗口,并在屏幕顶部始终显示着考生的准考证号、姓名、考试剩余时间以及可以随时显示或隐藏试题内容查阅工具和交卷按钮的窗口,窗口最左边的“显示窗口”字符表示屏幕中间的考试窗口正被隐藏着,当用鼠标点击“显示窗口”字符时,屏幕中间就会显示考试窗口,且“显示窗口”字符变成“隐藏窗口”。

在考试窗口中单击“程序填空题”、“程序修改题”和“程序设计题”按钮,可以分别查看各个题型的题目要求。

如下图所示7.开始做题,编译、连接和运行程序。

当考试系统登录成功后,考生在试题内容查阅窗口的“考试项目”(也叫“答题”)菜单上根据试题内容的要求选择“启动Microsoft Visual C++”(如果点击“启动Microsoft Visual C++”后不能正确启动Visual C++,我们也可以选择手动启动VC6.0,例如从桌面快捷方式或从程序组开始菜单等其他方式启动Visual C++,这对我们做题完全没有任何影响),注意:“考试项目”(也叫“答题”)菜单下面出现的按钮可能有两种形式:一种是我们上面提到的出现“启动Microsoft Visual C++”按钮,还有第二种可能是出现“BLANK1.C”、“MODI1.C”、“PROG1.C”这几个按钮,如果是第一种形式(出现“启动Microsoft Visual C++”按钮)的话,直接点击““启动Microsoft Visual C++”按钮后按本文后面描述的方法打开相应题目源程序即可,本文主要讲解的是这种方式,如果是第二种形式(出现“BLANK1.C”、“MODI1.C”、“PROG1.C”这几个按钮)那就更简单了,点击“BLANK1.C”即可自动启动Visual C++6.0并自动打开程序填空题,此后的操作和第一种形式就没有区别了,做完并运行正确并保存后,关闭VC++6.0,然后继续按相同的方法做“MODI1.C”、“PROG1.C”即可。

计算机二级《C语言》上机操作试题及答案

计算机二级《C语言》上机操作试题及答案

计算机二级《C语言》上机操作试题及答案计算机二级考试是全国计算机等级考试,四个等级中的一个等级,由教育部考试中心主办,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。

下面是店铺收集整理的计算机二级《C语言》上机操作试题及答案,仅供参考,希望能够帮助到大家。

(1)一个栈的初始状态为空。

现将元素1、2、3、4、5、A、B、c、D、E依次入栈,然后再依次出栈,则元素出棱的顺序是( )。

A.12345ABCDEB.EDCBA54321C.ABCDEl2345D.54321EDCBA(2)下列叙述中正确的是( )。

A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定的'(3)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。

A.0(n)B.D(n2)C.O(1092n)D.0(nl092n)(4)下列叙述中正确的是( )。

A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间(5)数据流图中带有箭头的线段表示的是( )。

A.控制流B.事件驱动C.模块调用D.数据流(6)在软件开发中,需求分析阶段可以使用的工具是( )。

A.N—s图B.DFD图C.PAD图D.程序流程图(7)在面向对象方法中,不属于“对象”基本特点的是( )。

A.一致性B.分类性C.多态性D.标识唯一性(8)一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。

A.一对一B.一对多C.多对一D.多对多(9)在数据管理技术发展的三个阶段中,数据共享最好的是( )。

计算机二级C语言上机题库答案大全及上机说明

计算机二级C语言上机题库答案大全及上机说明
编程:
int i,j=0;
for(i=0;i<strlen(s);i+=2)
if(s[i]%2==0) t[j++]=s[i];
t[j]='\0';
10、程序填空题
给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各节点数据域中值之和作为函数值返回。
填空:(1) data (2) next (3) head
{
If( (ss[i]>='a'&&ss[i]<='z') ss[i]-=32;
9、程序填空题
给定程序中,函数fun的功能是:统计出带有头结点的单向链表中节点的个数,存放在形参n所指的存储单元中。
填空:(1) *n (2) next (3) head
改错:(1) a=NULL; (2) if(*r==*p)
n++;
p++;
}
while(*q) /*计算串t的长度m,其中q为临时指针*/
{
m++;
q++;
}
if(n>=m) /*比较m和n的值,设置p指向较大的指针*/
p=s;
else
p=t;
return p;
7、程序填空题
给定程序中建立一个带有头结点的单向链表,链表中的各节点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的节点,使之只保留一个。
while(*p)
{if(*p>='a' &&p<='z')

C语言二级上机复习总结

C语言二级上机复习总结

与*号有关的操作9.请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。

删除前导*号int j=0; char *p = a ;while(*p == '*') p++ ;while(*p) { a[j++] = *p ; p++; }/*while(*p)C语言中,如果P这个指针指向的值是真,则做,否则不做!!*/a[j]=0 ;填空:[N] t[i][j] t[j][i]改错:#define FU(m,n) ((m)/(n))return(value);10.请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。

形参p已指向字符串中最后的一个字母。

除尾部*号,其余*删除char *q=a; int j=0;while(*q && q<p) { if(*q != '*') a[j++] = *q ; q++ ; }while(*p) a[j++]=*p++; a[j]=0;填空:t[][N] i=0;i<n s改错:int fun(int a[],int m)else if(m > a[mid])11.请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。

只删除中间*号int j=0; char *q=a;while(*q && q < h) a[j++] = *q++ ;while(*h && *p && h < p){ if(*h != '*') a[j++] = *h ; h++; }while(*p) a[j++] = *p++ ;a[j] = 0 ;填空:sum=0 t[i][i] 1改错:double r;while(fabs(m-n)>0.001)12.请编写函数fun,它的功能是:删除字符串中所有的*号。

全国计算机等级考试2级C语言上机考试例题讲解

全国计算机等级考试2级C语言上机考试例题讲解
2级C语言上机考试例题讲解 级 语言上机考试例题讲解
2级考试的上机题型有: 级考试的上机题型有: 级考试的上机题型有
1。填空题(30分,2~3个) 。填空题( 分 个 2。改错题(30分,2~3个) 。改错题( 分 个 3。程序编写题(40分,一定记得调试运行,否则没分!) 一定记得调试运行, 。程序编写题( 分 一定记得调试运行 否则没分! 1、 题是按照每个考点的答案给分的, 1、2 题是按照每个考点的答案给分的,也就是说只有和标准 答案一致的才是正确的 。虽然和标准答案不同也有可能运行 正确 ,但是也不能得分 。不过不用担心这个 ,因为题目简单 相应的正确答案的种类也少, 所以运行正确就OK 相应的正确答案的种类也少, 所以运行正确就 ;3题要求 题要求 最高、 最高、 也最灵活 ,只要能写出符合题目要求功能的代码就可 以得40分 以得 分。 出现的问题是: 出现的问题是:有时最后那题就是编不出来 ,前面又错了 就得50分 一点 就得 分……
}
2。删除字符串 。
[例5]:规定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部 的*号不删除。例如,若字符串中的内容为 *******A*BC*DEF*G****,删除后,字符串中的内容则应当 是A*BC*DEF*G****。 void fun (char *a) { char *p=a ; while(*p==‘*’) p++; for(; *p!=‘\0’;p++,a++) *a=*p; *a=‘\0’ ; }
练习:fun函数的功能是:在一个字符串中,删除指定 下标的字符,余下的形成一个新串,比如,串a为 “world”,n=3,则输出的字符串为“word”. void fun(char a[], charb[], int n) { int i,k=0 ; for(i=0;a[i]!=‘\0’;i++) {if ( i!=n ) b[k]=a[i]; k++;} b[k]=‘\0 ’;

二级C语言上机 总结及技巧

二级C语言上机 总结及技巧

一、填空题填空题是计算机等级考试中的难点,占有的分值为30分。

做填空题时注意掌握答题技巧。

填空题的分类:(一)、数学题目6、13、25、29、36、37、38、44、46解题方法:1.如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0或者是0.0;如果以后用到的是乘除运算,则赋初值为1或者是1.0;2.循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i<=m或者是i<=n;3.循环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。

如果没有则一般填的是i++;4.看表达式中的每一项的运算规则,按照运算的规则把每一项中的n值替换为i,特殊情况例外。

如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。

(二)、字符串题目8、10、11、12、14、18、19、21、35、45、48、491、循环的条件是判断该字符是否和结束符相等,如果相等,说明该字符串结束,否则说明没有结束,继续循环。

2、把一个数字字符转变成对应的数值的格式是:ch=ch-‘0’;把大写字母转变为小写字母的格式:ch=ch+32;把小写字母转变为大写字母的格式为:ch=ch-32;3、区分好字符数组中的指针和指针所指的值的关系。

在循环语句中,当指针往后走一个位置的时候,用的是指针的自加,而不是指针所指的值的自加。

4、掌握字符数组中的函数的使用的格式。

即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。

注意里面的格式中使用的都是和指针。

5、字符数组结束时都有一个结束符:‘\0’;在字符数组中的题目中的结束后要加上一个结束符。

二级C语言上机(分类)

二级C语言上机(分类)

第一类删除或移动星号1.假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

void fun(char *a ){ while(*a!='\0') a++;a--;while(*a=='*') a--;*(a+1)='\0';}改:[1]a2=k/10 [2]return i;填:[1]N [2]i [3]-1 2.假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。

void fun(char *a){ int i=0; char *p=a ;while(*p&&*p=='*') { a[i]=*p; i++; p++;}while(*p){ if(*p!=’*’) { a[i]=*p; i++; } p++; }a[i]= '\0';}改:[1]int k=0;[2]while(*p ||*q)填:[1]i [2]ps[j] [3]tp3.假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,若字符串中的内容为*******A*BC*DEF*G****,假设n的值为4,删除后,字符串中的内容则应当是****A*BC*DEF*G****。

void fun(char *a,int n){ int i=0, k=0; char *p, *t;p=t=a;while(*t=='*') { k++; t++;}if(k>n){ while(*p) { a[i]= *(p+k-n) ; i++; p++; }a[i]='\0'; }}改:[1]t=1.0;[2]return(s*2);填:[1][M] [2]N [3]'\0' 4.假定输入的字符串中只包含字母和*号。

二级C语言上机编程题技巧总结

二级C语言上机编程题技巧总结

二级C语言上机编程题技巧一、方法总结1、二级C语言上机编程题在二级上机考试中属于较难题型,因此很多同学都害怕通过不了。

综合往年的考试,结合考试大纲,每年考试的编程题都有一定的规律和方法,只要同学们认真熟练使用做题的方法,通过考试是没有问题的。

2、编程题做题方法一:使用C语言特有的函数做题(1)编程思想:使用C语言函数库中的做题,做题时必须注意包含对应的头文件(2)考题举例:题库中的第37题,要求将数字字符串转化为对应整数,例如“-1234”转化后为-1234。

做题时需要添加头文件#include "stdlib.h",然后在fun函数中写入程序return atol(p);其中atol(p)表示将p从字符串转化为长整型数。

最后编译,运行后输入测试数据后即可得到满分。

#include <stdio.h>#include <string.h>#include "stdlib.h"long fun ( char *p){return atol(p);}(3)方法总结:该类方法可以适用的题目较少,同学们了解即可。

3、编程题做题方法二:使用规律做题(1)编程思想:部分题目的答案是固定的,不会因为输入的数据改变而改变,因此这部分题目我们直接将答案记住即可,减少编程的麻烦。

(2)考题举例:题库中的70题,求cos(x)-x=0的一个实根。

做题时候在fun函数中输入return0.739085;后点击编译和运行即可,无需输入测试数据。

(补充:如果需要输入测试数据,程序在输出的黑屏上面会提示,不过一般是英文提示,所以同学们要格外小心)#include <math.h>#include <stdio.h>double fun(){return 0.739085;}(3)考题总结:该题为每年必考的题目,因此同学们要将答案熟记,以便大家能顺利通过考试。

二级C语言上机考试操作技巧

二级C语言上机考试操作技巧

二级C语言上机考试操作步骤有几点注意事项:1,C语言考试中,所有需要输入的时候以及粘贴的时候,都要注意要把输入法调整到英文输入法状态下。

2,如果不出问题在考试之前会有一份考前的最后缩小版的上机答案,其中只有50套题,找起来会比较方便,如果在这50套利没找到,就去整个题库里找,这里面一定会有。

3,电子版WORD搜索的使用方法,打开WORD后按CTRL+F,便打开搜索文件筐,输入关键的词语即可。

如果搜索不到,可以换下关键词也可以。

4,关于缩小版50套题的使用方法,下页便是缩小版的50套题,这50套题会按照不同类型分成几种题型,考试开始的时候,先答编程题,然后对应相应的编程题去找与其对应的改错题和填空题。

5,压缩包中的C语言考试应用软件只能在XP的系统下使用。

C语言程序可以自行上网下载。

提早这么久便把题库给大家,是希望大家在放假期间能对其有个了解,尽量都一次通过。

上机考试步骤一、进入考试系统单击桌面上的“考试系统”图标,进入考试启动界面。

“考试启动界面”如图1所示。

图1二、输入考生信息进入考试界面后,单击“开始登录”按钮即可进入考试环境进行“考生信息”的输入。

“信息登录”对话框如图2所示。

图2考生信息输入完成后,单击“考号验证”按钮进行信息核实。

信息核实过程中,系统会弹出如图3所示的对话框。

图3 “登录提示”对话框在确定考生信息完全正确时,单击“是”按钮,进入答题。

答题界面中含有“程序填空题”、“程序修改题”、“程序设计题”三个按钮,如图4所示。

图4 考试答题窗口三、开始答题在开始答题之前,首先确定在考试窗口中的“考生文件夹”的位置。

例如,本系统中的“K:\K01\24001203”文件路径。

然后,单击“答题”菜单中的“启动Microsoft Visual C++”菜单项进入“Visual C++ 6.0”系统环境界面,如图6所示。

在系统环境中,使用“文件-打开”命令,在打开对话框中的“查找范围”选项对应的下拉列表框中选择考生文件夹的位置。

计算机等级考试二级C语言上机操作指导.docx

计算机等级考试二级C语言上机操作指导.docx

程序设计是实践性很强的过程,任何稈序最终都必须在计算机上运行,以检验程序的匸确少否。

因此在学习程序设计中,-•定要重视上机实践环节,通过上机可以加深理解C语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的能力与技巧。

一.C语言程序的上机步骤按照C语言语法规则而编写的C程序称为源程序。

源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII码表示,并保存在扩展名为C”的文件中。

源程序是无法肓接被计算机运行的,因为计算机的CPU只能执行二进制的机器指令。

这就需要把ASCII码的源程序先翻译成机器指令,然后计算机的CPU才能运行翻译好的程序。

源程序翻译过程由两个步骤实现:编译少连接。

首先对源程序进行编译处理,即把每一条语句丿IJ若丁条机器指令来实现,以牛成市机器指令纽成的口标程序。

但口标程序还不能马上交计算机肓接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户白己编写的,而宜接调用系统函数库中的库函数。

因此,必须把“库函数"的处理过程连接到经编译生成的冃标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。

C语言程序的调试、运行步骤可以用图A・1表示:开始语法错误连接佬误运行错误棵序调试图A-l C语言程序的调试、运行步骤图A・1中,虚线表示当某一步骤出现错误时的修改路线。

运行时,无论是出现编译错谋、连接错课,述是运行结果不对(源程序屮有语法错课或逻辑错课),都需要修改源程序, 并对它重新编译、连接和运行,直至将程序调试正确为止。

除了较简单的情况,一般的程序很难一次就能做到完全止确。

在上机过程中,根据出错现象找出错误并改止称为程序调试。

我们要在学习程序设计过程屮,逐步培养调试程序目标程序的能力,它不可能靠几旬话讲清楚,要靠H己在上机屮不断摸索总结,它可以说是一种经验积累。

程序中的错误大致可分为三类:2程序编译时检查出來的语法错谋;2连接时出现的错误;2程序执行过程中的错误。

计算机等级考试二级C语言上机试题上汇总(可直接打印版)

计算机等级考试二级C语言上机试题上汇总(可直接打印版)

计算机等级考试二级C语言上机试题上汇总第 1套试题说明***********************************第一题(30分)给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据从小到大顺序链接。

函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排列。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!***********************************第二题(30分)给定程序MODI1.C中函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。

k的值由主函数传入, 若k的值为500, 则函数值为4622。

请改正程序中的错误,使程序能输出正确的结果。

注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! ***********************************第三题(40分)函数fun的功能是: 对指定字符在字符串a中出现的次数进行统计, 统计的数据存到b数组中。

其中: 字符'a'出现的次数存放到b[0]中,字符'b'出现的次数存放到b[1]中,字符'c'出现的次数存放到b[2]中,字符'd'出现的次数存放到b[3]中,字符'e'出现的次数存放到b[4]中,其它字符出现的次数存到b[5]中。

例如, 当a中的字符串为: "bacd1b+ddep",调用该函数后,b中存放数据应是:1、2、1、3、1、3。

注意: 部分源程序存在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

第 2套试题说明***********************************第一题(30分)给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。

计算机二级C语言上机题型总结

计算机二级C语言上机题型总结

计算机二级C语言上机题型总结计算机二级C语言上机题型总结一)“******”问题1、将字符串中的前导*号全部删除,中间和后面的*号不删除。

void fun(char *a){char *p=a;while(*p= =’*’) p++;for( ; *p!=’\0’;p++,a++)*a=*p;*a=’\0’;}2、只删中间*int i;for(i=0;a[i]= =’*’;i++)for( ;h<p;h++)< p="">if(*h!=’*’)a[i++]=*h;for( ;*p;p++)a[i++]=*p;a[i]=’\0’;3、只删尾*while(*a!=’\0’)a++;a--;while(*a= =’*’)a--;*(a+1)=’\0’;4、只留前*int i , j=0;for(i=0;a=’*’;i++); j=i;for( ;a;i++)if(a!=’*’)a[j++]=a[i];a[j]=’\0’;5、只留中间*int i,j=0;for(i=h;ia[j]=’\0’;6、只留尾*char *t=a;for( ; t<=p;t++)if(*t!=’*’)*(a++)=*t;for( ;t!=’\0’;t++)*(a++)=*t;*a=’\0’;7、*个数>n个,删多余的*;*个数<=n个,不做任何处理。

int i=0, k=0;char *p,*t;p=t=a;while(*t= =’*’){k++;t++;}if(k>n){while(*p){a[i]=*(p+k-n);i++;p++}a[i]=’\0’;}(二)移动问题1、若一维数组中有n个整数,要求把下标从p到n-1(p<=n-1)的元素平移到数组前面。

int i,j,t;for(i=p;i<=n-1;i++){t=w[n-1];for(j=n-2;j>=0;j--)w[j+1]=w[j];w[0]=t;}2、把下标从0到p(p<=n-1)的元素平移到数组最后。

计算机二级C语言上机编程题详细分析

计算机二级C语言上机编程题详细分析

计算机二级C语言上机编程题详细分析计算机二级C语言上机编程题详细分析相信不少同学都认为计算机二级C语言上机编程题很难,所以今天店铺为大家带来计算机二级C语言上机编程题详细分析,希望各位考生考出理想成绩。

1、请编一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):程序运行后,如果输入精度0.0005,则程序输出多少。

注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。

试题源程序如下:#include#includedouble fun(double eps){}main(){ double x;printf("Input eps:");scanf("%lf",&x); printf(" eps=%lf, PI=%lf ",x,fun(x));}分析:(1)本题所用基本算法应为累加。

假设累加值放在变量s中,累加项放在变量t中,累加操作由语句s=s+t;来实现。

(2)若称为第1累加项,则其前的1为第0累加项,其后的一项为第2累加项,按给定的公式可知,从第1累加项开始,后一项的累加项是前一项的值乘以。

所以当前的累加项应当是:t=t*n/(2.0*n+1.0)。

表达式右边的t中是前一项的值,表达式左边的t为当前的每累加累加项。

请注意,不要写成:t*n/(2*n+1)而进行整除。

(3)若第0累加项的1作为s的初值,语句:s=s+t;执行n次,就把第1到第n项累加到了s中。

每进行一次累加,n值增1。

(4)把以上操作放在循环中。

按本题规定,当某项小于eps(0.0005)时停止迭代,因此若用while循环,可用t>=eps作为控制循环进行的条件:while( t>=eps ){ s+=t; n++; t=t*n/(2.0*n+1); }(5)注意应给所用变量赋适当的初值。

C 语言上机总结报告

C 语言上机总结报告

C语言上机实验报告经过了九周的上机练习,我们算是完成了阶段性的胜利,从书本上枯燥的知识,通过上机练习把他们学以致用,融会贯通;不得不说,上机对于大一不允许带电脑,算得上是对c语言巩固和提高的重要途径了,很多我们不懂得问题,通过敲一下代码就知道可不可以这样了。

还有很多格式,看不懂的代码,也都能解决。

另外,重要的是通过上机我也拾得了编程的乐趣,链接好的程序就像是我的Baby,一节课生好几个。

这是一种莫大的成就感。

原来我还可以这样。

如果仅是书本上的知识,我很难保证能坚持看下去,因为要把抽象的东西阐述出来,很多时候都是很枯燥的。

所以上机便是这样一个辅助的途径。

下面是我这九周所积累的一些问题和经验。

1.首先就是书写的问题。

到现在我还时不时忘了加分号。

这么一个细微的问题有时候会报很多错。

其中易犯的便是scanf中&的使用,以及&&逻辑运算符和位运算符不分,==错写=,自定义函数,声明时不加分号,do,while语句while后忘加分号,以及数组不从a[0]开始写,for循环中控制条件用<还是<=,于是就会溢出。

2.printf里格式的问题,想要在数前补0整数可以靠.num而浮点数需要前加0,对于输出无符号16进制数%x,八进制数%o和十进制%u,总是记不住,还有一个比较特别的是可以用*占位,然后在后面的参数中说明精度和宽度,用#让浮点数始终有小数,字符串的5.4s只显示4位。

另一个我发现无关紧要的是printf中lf和f没什么区别,scanf却不一样。

3.scanf的另一个问题是当出现空格是,读取的字符串就不完整了,在百度后,我找到了更好的gets函数,便可以读取空格,还有scanf的一一对应特性,不过空格不算。

4.++i和i++的使用问题。

很多时候并不在意这些,便会导致数据的溢出,和结果总是偏差1,所以在使用时先得想好用哪个,如int k ; while(k--) ;printf(“%d”,k)结果是-1,因为在while判断过程中还要减1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.上机填空题技巧总结一、填空题之方法1.上机填空题占30分,一般有3个空需要填写,每个空为10分;2.填空题做题之前必须弄清题目含义,抓住关键字,例如:要求对数组进行从小到大排序,则将会出现大于符号,如果是从大到小排序则出现小于符号;3.填空题中出现频率最高的就是函数的调用、函数的首部、函数的返回值等和函数相关的问题,因此必须牢牢掌握祝函数的基本特征;4.填空题中有的“空”比较难,考生除了掌握必须的C语言知识之外,还需要很好的逻辑思路,如果一个空将花很多时间来解决,那么建议使用“死记硬背”的方法来缩短复习时间;5.上机题库中100题有部分题目是重复的或是相似的题目很多,同学们要使用比对的方法尽量去理解;6.多练习,多思考,多总结二、填空题与结构体相关1.结构体成员引用:上机题库P18第9题(和92题一致),P27第23题(和51题一样)读清楚题目要求:(1)要求将形参a所指结构体变量的数据赋值给函数中的结构体变量b(2)从例如可以看出来:结构体中的学号和姓名变为了1002和“LiSi”,但是3门课成绩没有变化#include <stdio.h>#include <string.h>struct student {long sno;char name[10];float score[3];};void fun(struct student a){ struct student b; int i;/**********found**********/b = __1__;→题目要求将形参a的值赋值给结构体变量b,因此填:ab.sno = 10002;→学号变为了10002/**********found**********/strcpy(__2__, "LiSi");→姓名要变为”LiSi”,则要引用b中的name成员printf("\nThe data after modified :\n");/*讲解是一句带过不用多讲*/ printf("\nNo: %ld Name: %s\nScores: ",b.sno, ); /*讲解是一句带过不用多讲*//**********found**********/for (i=0; i<3; i++) printf("%6.2f ", b.__3__);→分析:这个是一个循环语句,执行3次循环,printf("%6.2f ", b.__3__)要求输出是一个实型数据的成员,因此可以得知是score成员,因为score是一个数组,因此填:b.score[i],当i变化就可以取出第一门、第二门、第三门课的成绩printf("\n");}main(){ struct student s={10001,"ZhangSan", 95, 80, 88};int i;printf("\n\nThe original data :\n");printf("\nNo: %ld Name: %s\nScores: ",s.sno, );for (i=0; i<3; i++) printf("%6.2f ", s.score[i]);printf("\n");fun(s);}23题:(1)从例如中可以看出:变化的是结构体中的学号和姓名#include <stdio.h>#include <string.h>struct student {long sno;char name[10];float score[3];};void fun( struct student *b){ int i;/**********found**********/b__1__ = 10004;→题目中t的学号变化为了10004,因此填写:b->sno,不能填写b.sno,因为b是一个指针/**********found**********/strcpy(b__2__, "LiJie");→t的姓名变为了”LiJie”,因此填写:b->name}main(){ struct student t={10002,"ZhangQi", 93, 85, 87};int i;printf("\n\nThe original data :\n");printf("\nNo: %ld Name: %s\nScores: ",t.sno, );for (i=0; i<3; i++) printf("%6.2f ", t.score[i]);printf("\n");/**********found**********/fun(__3__);→此处为函数调用,根据形参的类型来判定实参,形参struct student *b为结构体指针,联系main函数定义部分只有struct student t和b 的类型相同,因此可知需要填的是:&tprintf("\nThe data after modified :\n");printf("\nNo: %ld Name: %s\nScores: ",t.sno, );for (i=0; i<3; i++) printf("%6.2f ", t.score[i]);printf("\n");}2.函数调用and结构体:上机题库P22第16题(和78、82题一样)重点注意:(1)把a中地址作为函数返回值返回函数(2)观察可知a中的学号、姓名边为了10002和“zhangSan”,每门课的成绩增加了1分#include <stdio.h>#include <string.h>struct student {long sno;char name[10];float score[3];};/**********found**********/__1__ fun(struct student *a)→根据函数调用t = fun(&s);可知函数返回类型和t的类型相同,struct student s={10001,"ZhangSan", 95, 80, 88}, *t;可知t的类型为struct student *{ int i;a->sno = 10002;strcpy(a->name, "LiSi");/**********found**********/for (i=0; i<3; i++) __2__ += 1;→题目要求将每门课成绩增加1分,因此填为:a->score[i],不能为a.score[i]或是a.score/**********found**********/return __3__ ;→题目要求返回a的地址,a本身就是一个指针,因此填入a即可}main(){ struct student s={10001,"ZhangSan", 95, 80, 88}, *t;int i;printf("\n\nThe original data :\n");printf("\nNo: %ld Name: %s\nScores: ",s.sno, );for (i=0; i<3; i++) printf("%6.2f ", s.score[i]);printf("\n");t = fun(&s);printf("\nThe data after modified :\n");printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);for (i=0; i<3; i++) printf("%6.2f ", t->score[i]);printf("\n");}3.结构体和排序:上机题库P14第2题重点注意:(1)排序的格式:红色部分为考试中的重点,必须记住从小到大排序: for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j ]=t;} 从大到小排序: for(i=0;i<n-1;i++)for(j=i+1;j<n ;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j ]=t;}void fun(struct student a[], int n) {/**********found**********/__1__ t;→此处要求填入t 的类型,可以从t = a[i];中得知t 和a 数组的类型必须一致,void fun(struct student a[], int n)中得知a 为结构体类型,因此填写:struct student int i, j;/**********found**********/for (i=0; i<__2__; i++)→根据排序的格式填空,因此记住是关键 for (j=i+1; j<n; j++) /**********found**********/if (strcmp(__3__) > 0)→按照姓名字典顺序从小到大排序,因此: strcmp(a[i].name,a[j].name),此处需要特别注意 { t = a[i]; a[i] = a[j]; a[j] = t; } }main(){ struct student s[4]={{10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85, 70, 78},{10003,"CaoKai", 75, 60, 88},{10004,"FangFang", 90, 82, 87}};int i, j;printf("\n\nThe original data :\n\n"); for (j=0; j<4; j++){ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name); for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); printf("\n"); }fun(s, 4);printf("\n\nThe data after sorting :\n\n"); for (j=0; j<4; j++){ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name); for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); printf("\n"); } }三、填空题与链表相关1.带头结点的链表:p=h->next,上机题库P21第15题考点分析:(1)带头结点链表的表现形式:带头结点的链表,头结点head不存放任何的数据,从头结点的下一个结点开始存放数据,因此考试中如果出现 p = __1__ ;则填入p=h->next(2)链表数据排序对数组元素从小到大排序:for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j ]=t;}对链表元素进行从小到大排序:while (p) /*相当于数组排序中的for(i=0;i<n-1;)*/{q = p->next;/*相当于j=i+1*/while (q) /*相当于for(;j<n;){if (p->data > q->data) /*相当于if(a[i]>a[j])*/{ t = p->data; p->data = q->data; q->data = t; }/*如果a[i]>a[j]成立,则交换数据元素,让数据变成从小到大排序*/ q = q->next;/*相当于q++*/}p = p->next;/*相当于p++*/}15题:#include <stdio.h>#include <stdlib.h>#define N 6typedef struct node {int data;struct node *next;} NODE;void fun(NODE *h){ NODE *p, *q; int t;/**********found**********/p = __1__ ;→链表为带头结点,因此填写:p=h->nextwhile (p) {/**********found**********/q = __2__ ;→比较两个链表中元素的大小,因此q=p->next,这样q指向了p的下一位while (q) {/**********found**********/if (p->data __3__ q->data)—>从小到大排序,因此使用大于符号,填写:>{ t = p->data; p->data = q->data; q->data = t; }q = q->next;}p = p->next;}}main(){ NODE *head;int a[N]= {0, 10, 4, 2, 8, 6 };head=creatlist(a);printf("\nThe original list:\n");outlist(head);fun(head);printf("\nThe list after sorting :\n");outlist(head);}2.不带头结点的链表:p=h(1)不带头结点链表的表示形式:(2)讲解P38第42题(和15题类似)void fun(NODE *h){ NODE *p, *q; int t;p = h;→不带头结点的链表while (p) {/**********found**********/q = __1__ ;→q指向p的下一位,因此填入:q=p->next/**********found**********/while (__2__)→判断q有没有到末尾,因此填入p或是p!=NULL{ if (p->data > q->data){ t = p->data; p->data = q->data; q->data = t; }q = q->next;}/**********found**********/p = __3__ ;→ while (p)为循环条件,要构成循环p就得自加或是自减,从循环体中得知没有进行p++之类的操作,因此此处填入:p=p->next或是p++}}main(){ NODE *head;int a[N]= {0, 10, 4, 2, 8, 6 };head=creatlist(a);printf("\nThe original list:\n");outlist(head);fun(head);}3.链表的返回值:P43第50题(和43题类似)/**********found**********/__1__ fun(NODE *h)→根据函数调用head=fun(head);和 NODE *head; 知道函数的返回值为NODE *{ NODE *p, *q, *r;p = h;if (p == NULL)—>如果p数据位空,则表示p中没有任何的数据,因此就无需再进行逆置,故return NULL;return NULL;q = p->next;p->next = NULL;/**********found**********/while (__2__)→此空判断q有没有为空,讲解时候不容易理解,考生记住即可,填入:while(q)或是while(q!=NULL){ r = q->next;q->next = p;p = q;/**********found**********/q = __3__ ;→填入:q=r;次空理解起来较难,因此考生必须认真记忆,老师无需多讲}return p;}main(){ NODE *head;int a[N]={2,4,6,8,10};head=creatlist(a);printf("\nThe original list:\n");outlist(head);head=fun(head);printf("\nThe list after inverting :\n");outlist(head);}四、填空题与文件相关1.文件指针定义(1)文件定义的形式:FILE *fp;(课本P115)(2)举例:上机题库P30第28题第一空/**********found**********/__1__ fp;分析:在涉及文件类型的上机题目时fp指的就是文件指针,因此在前面填写类型时候直接写入:FILE *fp;(3)类似题目:P32第32题第1个空、P67第88题第2个空2.文件打开(1)文件打开的格式:fopen(“文件名”,“打开方式”);(课本P115)(2)举例:P31第30题第1个空void fun(char *filename, STU n){ FILE *fp;/**********found**********/fp = fopen(__1__, "rb+");分析:缺少了文件名,形参filename是实参传过来的文件名,因此这里直接填入:fp = fopen(filename, "rb+");表示以“读和写”的方式打开一个二进制文件filename (3)类似的题目:P41第47题第1个空、P71第94题第1个空、P72第96题第3空3.文件关闭(1)文件关闭的格式:fclose(文件指针);(课本P117)(2)举例:上机题库P30第28题第2空fp = fopen("file1.txt", "w");/*第一次以写的形式打开文件file1.txt*/fprintf(fp, "%s %d %f\n", s, a, f);/**********found**********/__2__ ;fp = fopen("file1.txt", "r");/*第二次以读的形式打开文件file1.txt*/分析:打开文件以后必须将它关闭,因此该空要填:fclose(fp);(3)类似题目:P72第96题第2空4.测试文件结束(1)判断文件结束的feof函数形式:feof(fp)(课本P118)(2)经常出现在while()的表达式里面,常见形式为:while(!feof(fp))测试指针fp有没有结束(3)举例:上机题目P26第22题第1空FILE *fp;STU n; int i;fp = fopen(filename,"rb+");/**********found**********/while (!__1__)分析:填写feof(fp)测试fp指针又没有结束(4)类似题目:P32第32题第2个空、P61第80题第1个空、P71第94题第2个空5.设置文件位置函数(1) fseek设置文件位置:fseek(文件指针,位移量,移动起始点)(课本P118)(2)考试一般考查的是移动的起始点:SEEK_SET表示文件开始,SEEK_CUR表示文件当前位置,SEEK_END表示文件末尾(3)举例:上机题库P31第30题第2个空/**********found**********/fseek(fp, -1L*sizeof(STU), __2__);分析:题目要求:重写形参filename所指文件中最后一个学生的数据,因此文件指针fp要指向最后的位置,则填入:fseek(fp, -1L*sizeof(STU), SEEK_END);(4)类似题目:P26第22题第3空、P61第80第3空、6.读二进制文件(1)fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针);(课本P120)(2)举例:P31第30题第3空void fun(char *filename, STU n){ FILE *fp;/**********found**********/fp = fopen(filename, "rb+");/*打开文件filename*//**********found**********/fseek(fp, -1L*sizeof(STU), SEEK_END);/*定位到最后一个学生的位置*//**********found**********/fwrite(__3__, sizeof(STU), 1, fp);/*将形参n新学生的数据覆盖最后一个学生的数据,因为fp已经定位到了最后一个学生的位置*/fclose(fp);}分析:题目要求用新数据覆盖最后一个学生的数据,因此填入:fwrite(&n, sizeof(STU), 1, fp);填入的是地址,不能是:fwrite(n, sizeof(STU), 1, fp);(3)类似题目:P41第47题第3空,P67第88题第3空、7.写二进制文件函数(1)fread(读出数据的指针,每一个数据占有的字节,输出数据的个数,文件指针);(2)上机考试填空题没有出现需要填写的空,考生作一般的了解8.fcanf函数数和fprintf函数(1)fscanf(文件指针,格式控制字符串,输入列表项);(2)fprintf(文件指针,格式控制字符串,输出列表项);(3)fscanf函数和fprintf函数在上机编程题中详细介绍,这里不作重点讲解,了解即可五、填空题与函数相关1.函数调用:P13第1题#include <stdio.h>double f1(double x) 定义了f1函数,有一个形参{ return x*x; }double f2(double x, double y) 定义了f2函数,有两个形参{ return x*y; }/**********found**********/__1__ fun(int i, double x, double y)→根据函数调用r = fun(1, x1, x2);可知函数返回值和r类型一致,double x1=5, x2=3, r;r为doule类型,则函数返回double{ if (i==1)/**********found**********/return __2__(x);→此处为函数调用,实参数为1,根据实参和形成个数一致可知,调用的为f1函数else/**********found**********/return __3__(x, y);→此处的实参数为2,则调用f2函数}main(){ double x1=5, x2=3, r;r = fun(1, x1, x2);r += fun(2, x1, x2);printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r);}六、填空题与数组相关1.类似题目:3、4、7、20、24、26、39、40、41、54、57、64、68、70、71、76、89、90、992.一维数组中存在这样一些类型:(1)求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。

相关文档
最新文档