技能培训报告rj.docx
《技能培训报告rj.docx》由会员分享,可在线阅读,更多相关《技能培训报告rj.docx(15页珍藏版)》请在冰豆网上搜索。
技能培训报告rj
陕西国防工业职业技术学院
《技能培训》报告
专业:
软件技术
班级:
软件3101
姓名:
陈园园
学号:
13#
指导老师:
淡海英何杰惠
实训时间:
2011-2012
(1)第18周
实训地点:
单片机实验室
成绩:
二零一一年十二月
题目一
条件\序号
1
2
3
4
A>0
Y
Y
N
N
B>0
Y
N
Y
N
1、阅读以下说明和流程图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
下面的流程图中有两个判断条件A>0和B>0。
这些判断条件的各种组合情况如下所示。
表中Y表示相应的条件成立,N表示相应的条件不成立。
每一列表示一种条件合,并在列首用相应的序号来表示。
【流程图】
【问题1】(4分)
当遇到哪几种条件组合时,流程图能执行“1→i”?
(写出相应的序号即可)
【问题2】(4分)
当遇到哪几种条件组合时,流程图能执行“2→j”?
(写出相应的序号即可)
【问题3】(6分)
当遇到哪几种条件组合时,流程图能执行“3→k”?
(写出相应的序号即可)
【问题4】(1分)
该流程图共有多少条实际执行路径?
2、程序清单
(1)A>0B>0A>0B<=0
(2)A>0B<=0A<=0B<=0
(3)A>0B>0A<=0B>0A<=0B<=0
3、运行结果(截图)
(1)12
(2)24
(3)134
(4)4条
题目二
1、阅读以下说明和C函数,将应填入(n)处的语句或语句成分写在答题纸的对应栏内。
【说明1】
函数deldigit(char*s)的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。
其思路是:
先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再拷贝给s。
【C函数】
voiddeldigit(char*s)
{
char*t=(char*)malloc(
(1)):
/*申请串空间*/
inti,k=0;
if(!
t)return;
for(i=0:
i<strlen(s);i++)
if(!
(*(s+i)>=‘0’&&*(s+i)<=‘9’)){
t[k++]=
(2);
}
(3)=‘\0’ /*设置串结束标志*/
strcpy(s,t);
free(t);
}
【说明2】
函数reverse(char*s,intlen)的功能是用递归方式逆置长度为len的字符串s。
例如,若串s的内容为“abcd”,则逆置后其内容变为“deba”。
【C函数】
voidreverse(char*s,intlen)
{
charch;
if((4))
{
ch=*s;
*s=*(s+len-1);
*(s+len-1)=ch;
reverse((5));
}
}
2、程序清单:
说明1:
voiddeldigit(char*s)
{
char*t=(char*)malloc(strlen(s)+1);/*申请串空间,strlen(s)+1是申请空间大小*/
inti,k=0;
if(!
t)return;
for(i=0:
i<strlen(s);i++)
if(!
(*(s+i)>=‘0’&&*(s+i)<=‘9’))/*判断s[i]是否为数字*/
{
t[k++]=s[i];/*如果s[i]是不是数字则将其传给t[k]并且k++指向下一位*/
}
t[k]=‘\0’ /*设置串结束标志*/
strcpy(s,t);/*将t中现有的元素拷贝给s,s中存放的是没有数字的元素*/
free(t);/*释放t空间*/
}
main(){
charw[10];
scanf("%s",&w);
deldigit(&w);
printf("%s",w);
}
说明2:
#include"stdio.h"
voidreverse(char*s,intlen)
{
charch;
if(len>1)/*字符串的长度>1*/
{
ch=*s;
*s=*(s+len-1);
*(s+len-1)=ch;
reverse(s+1,len-2);/*递归调用依次调换*/
}
}
main(){
chara[20];
//ints;
//s=strlen(a);
scanf("%s",&a);
reverse(&a,strlen(a));
printf("%s",a);
}
3、运行结果(截图)
说明1:
说明2:
题目三
1、阅读以下说明和C代码,回答问题1和问题2,将解答写在答题纸的对应栏内。
【说明1】
下面代码的设计意图是:
将保存在文本文件data.txt中的一系列整数(不超过100个)读取出来存入数组arr[],然后调用函数sort()对数组arr的元素进行排序,最后在显示屏输出数组arr的内容。
【C代码】
【问题1】(9分)
以上C代码中有三处错误(省略部分的代码除外),请指出这些错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行。
【说明2】
下面是用C语言书写的函数get_str的两种定义方式以及两种调用方式。
行号
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include
voidsort(inta[],intn)
{/*对n个元素的整型数组a按递增方式排列*/
/*
此处代码省略
*/
return;
}
intmain()
{
inti,num=0;
intarr[100];
FILEfp;
fp=fopen("data.txt","r");
if(!
fp)
return-1;
while(!
feof(fp)){
fscanf(fp,"%d",arr[num++]);
}
sort(arr[],num);
for(i=0;ifprintf(stdout,"%d",arr[i++]);
fclose(fp);
return0;
定义方式1
定义方式2
voidget_str(char*p)
{
p=(char*)malloc(1+sizeof("testing"));
strcpy(p,"testing");
}
voidget_str(char**p)
{
*p=(char*)malloc(1+sizeof("testing"));
strcpy(*p,"testing");
}
调用方式1
调用方式2
intmain()
{
char*ptr=NULL;
get_str(ptr);
if(ptr)
printf("%s\n",ptr);
else
printf("%p\n",ptr);/*输出指针的值*/
return0;
}
intmain()
{
char*ptr=NULL;
get_str(&ptr);
if(ptr)
printf("%s\n",ptr);
else
printf("%p\n",ptr);
return0;
}
【问题2】(6分)
若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空
(1)~(3)。
若采用定义方式1和调用方式1,则输出为“00000000”。
若采用定义方式1和调用方式2,则
(1)。
若采用定义方式2和调用方式1,则
(2)。
若采用定义方式2和调用方式2,则(3)。
2、程序清单(要求有主要注释说明)
3、运行结果(截图)
题目四
1、阅读以下说明和C函数,将应填入(n)处的语句或语句成分写在答题纸的对应栏内。
【说明】
己知单链表L含有头结点,且结点中的元素值以递增的方式排列。
下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删结点的空间。
若链表中不存在满足条件的元素,则返回-1,否则返回O。
例如,某单链表如图4-1所示。
若令minK为20,maxK为50,则删除后的链表如图4-2所示。
图4-1
图4-2
链表结点类型定义如下:
typedefstructNode{
intdata;
structNode*next;
}Node,*LinkList;
【C函数】
intDeleteList(LinkListL,intminx,intmaxK)
{/*在含头结点的单链表L中删除大于minx且小于maxK的元素*/
(1)*q=L,*p=L->next;/*p指向第一个元素结点*/
intdelTag=0;
while(p)
if(p->data<=minK)
{q=P;p=
(2);}
else
if(p->data<maxK){/*找到删除满足条件的结点*/
q->next=(3)free(p);
p=(4);delTag=1;
}
elsebreak;
if((5))return-1;
return0;
}
2、程序清单(要求有主要注释说明)
typedefstructNode{
intdata;
structNode*next;
}Node,*LinkList;
intDeleteList(LinkListL,intminx,intmaxK)
{/*在含头结点的单链表L中删除大于minx且小于maxK的元素*/
Node*q=L,*p=L->next;/*p指向第一个元素结点*/
intdelTag=0;
while(p)
if(p->data<=minK)
{q=P;p=p->next;}
else
if(p->data<maxK){/*找到删除满足条件的结点*/
q->next=p->nextfree(p);
p=q->next;delTag=1;
}
elsebreak;
if(delTag!
=1)return-1;
return0;
}
3、运行结果(截图)
题目五
1、阅读以下说明和Java代码,将应填入(n)处的语句或语句成分写在答题纸的对应栏内。
【说明】
某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。
【Java代码】
importjava.io.*;
classStudent{
privateStringsNO; //学号
privateintCredit; //分数
publicintgetCredit(){
returnCredit;
}
publicStringtoString(){
return“sN0=“+this.sNO+”,Credit=”+this.Credit;
}
Student(StringsNO,intCredit){
(1)=sNO;
(2)=Credit;
}
}
publicclassSortStudent{
voidsort(Student[]s){//Sortthearrays[]indecendingorderofCredit
for(inti=0;i for(intj=i+1:
j if(s[i].(3)
Studenttmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}
}
}
publicstaticvoidmain(Stringargv[]){
Student[]testStudent=newStudent[size];
try{
BufferedReaderin=newBufferedReader(newFileReader(“students.txt”));
booleandone=false;
inti=0;
while(!
done){
Strings=in.readLine(); //每次读取一个学生的学号和成绩
if(s!
=null){
Stringtmp[]=s.split(“,”);
testStudent[i++]=(5)
(tmp[0],Integer.parselnt(tmp[1]));
}else
done=true;
}
in.closeo();
(6)=newSortStudent();
ss.sort(testStudent);
System.out.println(“top30%:
”);
for(intj=O;j System.out.println(testStudent[j]);
}catch(IOExceptione){
System.out.println(“ioerror!
”);
}catch(NumberFormatExceptione){
System.out.println(“notanumber!
”);
}
}
(7)intsize=100;//学生总数
}
2、程序清单(要求有主要注释说明)
3、运行结果(截图)
培训总结
12月26号,我参加了程序员考试培训。
在培训期间,听了老师们的培训,使我们受益匪浅,首先要成为一个优秀的程序员需要要学的课程很多,其中,基础课程包括:
计算机硬件基础、计算机网络基础、操作系统、计算机组成原理、计算机体系结构、数据库原理、软件工程、离散数学、算法设计与分析、数据结构、编译原理
编程语言可以根据需要选择,底层开发人员必学:
汇编语言、c、c++;web应用表示层开发人员:
html、xml、javascript、jsp(或asp,php)等;普通应用程序开发:
c++、vb、.net(其中包括多种语言,可根据现有基础选择)、java等。
深刻体会到了以下的几点:
一、要养成良好的学习习惯;良好的学习习惯包括:
课前预习、认真听讲和课后编码练习等。
二、学习过程中,不仅仅是停留在表层的东西,对于简单的例题也应该有耐心去琢磨、调试和尝试改动,这样也能加深对课程的理解和编程能力。
三、一定要多读、多看与JAVA相关的书籍甚至是论坛的帖子。
学习是无止境的,我们在学习的同时,JAVA也在发展。
所以,多看些关于JAVA的书籍和论坛上的技术讨论帖是非常有帮助的,因为它们都是与时俱进的,能让我们获得的知识更快,更有时效性,也让我们的知识来源更为广泛和灵活。
这仅仅是我这一个周参加程序员培训以来学到的一部分而已,我需要学习的还有很多很多。
在学习的过程中不断的总结和积累经验是非常重要的。
老师和同学们在这期间给予的帮助是非常大的,在接下来的学习生活中,我会继续努力的,也让我们继续协作,共同进步!