程序设计基础C实验报告、Visual Basic实验指导书_第1页
程序设计基础C实验报告、Visual Basic实验指导书_第2页
程序设计基础C实验报告、Visual Basic实验指导书_第3页
程序设计基础C实验报告、Visual Basic实验指导书_第4页
程序设计基础C实验报告、Visual Basic实验指导书_第5页
已阅读5页,还剩99页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计基础C实验报告PAGE31《程序设计基础C》实验报告教学班级:学号:姓名:课程教师:实验辅导教师:_____________重庆理工大学计算机学院2012年2月

实验5循环程序设计教学班级:_______学号:_________姓名:___________实验日期:实验地点:(机房)实验成绩:___________一、实验目的(1)了解C语言循环结构的使用范围。(2)学会正确使用逻辑运算符和逻辑表达式。(3)熟练掌握C语言的三种循环结构:whilc语句、do……whilc语句、for语句的特点和使用方法。(4)能够编写一些有实际应用意义的循环结构程序。二、实验内容1.基本内容题目1:计算1-3+5-7+......-99+101的值。(提示:注意符号的变化)#include<stdio.h>voidmain(){ inti,t=1,s=0;/*t标识正负符号*/ for(i=1;i<101;i+=2)/*error*/ { s+=i*t; t=-t; } printf("s=%d\n",s);}①请改错,并运行程序。②分别用do……while语句和while语句改写以上程序。题目2:分析程序,运行时输入:24579<CR>(注:<CR>表示回车换行)。#include<stdio.h>voidmain(){ intc; while((c=getchar())!='\n') { switch(c-'2') { case0: case1:putchar(c+4); case2:putchar(c+4);break; case3:putchar(c+3); case4:putchar(c+2);break; default:putchar(c); } } printf("\n");}题目3:下面程序的功能是打印100以内个位数为3且能被3整除的所有数,选择合适的语句填入该空格中。#include<stdio.h>voidmain(){ inti,j; for(i=0;_i<=10__;i++) { j=i*10+3; if(________i%3!=0____) continue; printf("%4d",j); }}题目4:编程输出:用0~4任意组成无重复数字的三位数?都是多少?每行输出10个数。#include<stdio.h>voidmain(){ inti,j,k,count=0; printf("\n"); for(i=1;i<5;i++)/*以下为三重循环*/ for(j=0;j<5;j++) for(k=0;k<5;k++) { if(__________________)/*确保i、j、k三位互不相同*/{printf("%6d",i*100+j*10+k);count++;if(________________)printf("\n");}} printf("\n");}题目5:根据公式求e的近似值,精度要求为10-6。题目6:输入一行字符,将小写字母转换为大写字母显示,其它字符原样输出。2.选择内容题目7:打印出如下图案*************************#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=8-i;j++)//理解数字8的作用printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}/*上面的程序输出上三角形*//*下面的程序输出下三角形*/for(i=3;i>=1;i--){for(j=1;j<=8-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}}①运行以上程序,验证实验结果。②模仿上面程序,打印出如下图案122233333三、实验结果(用截图说明)题目1题目2题目3题目4题目7四、调试心得(选作)

实验6数组实验教学班级:_______学号:__________姓名:___________实验日期:实验地点:(机房)实验成绩:___________实验目的(1)理解数组的特点及其与普通变量的区别及特点;(2)掌握一维数组的定义、赋值和输入输出的方法;(3)掌握二维数组的定义、赋值和输入输出的方法;(4)掌握字符数组和字符串函数的使用;(5)掌握与一维数组和字符数组有关的程序与算法;(6)理解与二维数组有关的程序与算法。实验任务1.基本内容【题目1】读程序,写结果。#include<stdio.h>voidmain(){inti,s=0,a[10]={1,2,3,4,5,6,7,8,9,10}; for(i=4;i<7;i++) s=s+a[i]; printf("s=%d\n",s);}【题目2】下面程序给数组a输入数据,以每行4个数据形式输出,请填空。#include<stdio.h>#defineN8voidmain(){ inti,a[N]; for(i=0;i<N;i++) scanf("%d",_____________); for(i=0;i<N;i++) { if(_____________) printf("\n"); printf("%11d",_________); } printf("\n");}【题目3】用简单选择法对10个整数排序,将程序补充完整。#defineN10#include<stdio.h>voidmain(){ inti,j,min,temp,a[N]={1,5,4,3,7,0,9,8,2,6}; for(i=0;i<N-1;i++) { min=i; for(j=i+1;______________;j++) if(a[min]>a[j]) min=j; if(min!=i) {_______________________________________} } printf("\n排序结果为:\n"); for(i=0;i<N;i++) printf("%5d",a[i]); printf("\n");}【题目4】下面的程序用冒泡法对10个数排序(从小到大),将程序补充完整。#defineN10#include<stdio.h>voidmain(){ inti,j,min,temp,a[N]={1,5,4,3,7,0,9,8,2,6}; for(i=0;i<N;i++) for(j=0;____________;j++) if(__________________){temp=a[j];a[j]=a[j+1];a[j+1]=temp;} printf("\n排序结果为:\n"); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n");}【题目5】任意输入20个数到一维数组a中,求这20个数的平均值。【题目6】编程:任意输入10个数,判断该哪些是素数,并输出这些素数。【题目7】以下程序是求二维数组中的最小数及其下标(设最小数是唯一的),请填空完成程序,并上机验证。#include<stdio.h>voidmain(){ inti,j,row,col,min; inta[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}}; min=a[0][0]; _______________________ for(j=0;j<4;j++) if(___________________) {min=a[i][j];row=i;col=j;} printf("min=%d,row=%d,col=%d\n",min,row,col);}【题目8】以下程序是实现输出杨辉三角(最多十行),请将程序补充补充完整。11112113311464115101051…#defineN11#include<stdio.h>voidmain(){ inti,j,a[N][N]; for(i=1;i<N;i++) { a[i][1]=1; _______________________; } for(i=3;i<N;i++) for(j=2;__________________;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i<N;i++){ for(j=1;j<=i;j++)printf("%6d",a[i][j]);_________________________;}printf("\n");}【题目9】从键盘上任意键入n阶方阵,求它的两条对角线元素之和。【题目10】分析以下读程序,写的运行结果,并上机验证。#include<stdio.h>voidmain(){ charc,s[]="BABCDCBA"; intk; for(k=1;(c=s[k])!='\0';k++) { switch(c) { case'A':putchar('?');continue; case'B':++k;break; default:putchar('*'); case'C':putchar('&');continue; } putchar('#'); } putchar('\n');}【题目11】输入一串字符,计算其中字母的个数。#include<stdio.h>#include<string.h>#defineN81voidmain(){ charch[N]; inti,count=0; puts("请输入一串字符:"); _____________________/*提示:使用字符串输入函数*/ for(i=0;i<strlen(ch);i++) if(_____________________________________) count++; printf("字母个数为:%d\n",count);}【题目12】编程:输入一串字符,要求逆序输出。2.选择内容【题目13】将两个字符串连接起来,不使用strcat字符函数#include<stdio.h>#defineN80voidmain(){ chars1[2*N],s2[N]; inti=0,j=0; printf("\n请输入两个字符串,以空格或回车键作字符串结束标志:\n"); scanf("%s",________); scanf("%s",________); while(s1[i]!='\0') i++; while(_______________) s1[i++]=s2[j++]; s1[i]='\0'; printf("\n连接后的两个字符串为:\n%s\n",s1);}【题目14】在字符串str中查找字符ch首次出现的位置,若str字符串中不包含字符ch,则输出0。【题目15】有4位学生,考4门功课。求出每位学生的总分和平均分,及所有学生每门功课平均分和所有功课的平均分。【题目16】找出一个二维数组的”鞍点”,即该位置上的元素在该行上最大,在该列上最小,如无”鞍点”,则给出提示。三、实验结果(用截图说明)题目1题目2题目3题目4题目5题目7题目8题目10题目11四、调试心得(选作)

实验7函数实验教学班级:_______学号:姓名:实验日期:实验地点:(机房)实验成绩:___________实验目的(1)理解函数定义的方法。(2)掌握函数实参与形参的对应关系,以及函数”参数传递”的方式。(3)掌握函数的嵌套调用和递归调用的方法;(4)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法。实验任务1.基本内容【题目1】以下程序是求3个数中的最大值,请完善程序并上机验证。#include<stdio.h>voidmain(){ inta,b,c,m; intmax(intx,inty);/*函数声明*/ printf("inputa,b,c="); scanf("%d,%d,%d",&a,&b,&c); __________________________ printf("最大值是:%d\n",m);}intmax(intx,inty)/*函数定义*/{ intz; z=(x>y)?x:y; returnz;}【题目2】程序填空:子函数中判断一个大于1的整数是否是素数,数据由主函数中输入,并在主函数中显示结果。#include<stdio.h>voidmain(){ intnumber; printf("请输入一个正整数:\n"); scanf("%d",&number); if(__________________________) printf("\n%d是素数:",number); else printf("\n%d不是素数:",number);}intprime(intnumber)/*请注意区别main函数和prime函数中的number变量*/{ intflag=1,n; for(n=2;flag==1&&n<=number/2;n++) if(___________________________) flag=0; return(flag);}【题目3】读程序,验证结果。#include<stdio.h>voidmain(){ inti=2,p; p=f(i,i+=1); printf("%d\n",p);}intf(inta,intb){ intc; if(a>b) c=1; elseif(a==b) c=0; else c=-1; return(c);}①将程序中第4行语句:p=f(i,i+=1);改为以下语句,比较程序结果:p=f(i+=1,i);②实践说明,函数的参数求值顺序是:________________________【题目4】编程在主函数中输入和输出字符串,在子函数中实现一个字符串按反序存放。【题目5】用子函数计算4名学生的平均分。标注“error”处有错误,请改正。#include<stdio.h>#defineN4floataverage(floatarray[])/*注意数据类型的一致*/{ inti;floataver,sum=0; for(i=0;i<N;i++) sum+=array[i]; aver=sum/N; return(aver);}voidmain(){ floatscore[N],aver; inti; printf("\ninput%dscores:\n",N); for(i=0;i<N;i++) scanf("%f",&score[i]); aver=average(score[N]);/*error*/ printf("\naveragescoreis%5.2f\n",aver);}【题目6】改正标注“error”语句行的错误,理解本程序的功能。#include<stdio.h>voidmain(){ inta[][3]={0,2,4,6,8,10,12,14,16},sum; intfunc();/*函数声明*/ sum=func(a[][3]);/*error*/ printf("\nsum=%d\n",sum);}intfunc(inta[][])/*error*/{ inti,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j) sum+=a[i][j]; returnsum;}【题目7】在主函数中定义数组A[3][4]、B[4],用子函数对数组A每一行求和,其值放在数组B中,在主函数中输出数组B的值。【题目8】输入两个正整数,求其中最大公约数和最小公倍数。将程序补充完整。#include<stdio.h>intfun1(x,y){ inttemp; if(x<y) { temp=x; x=y; y=temp; } while(y!=0) { temp=x%y; x=y; y=temp; } returnx;}intfun2(x,y){ returnx*y/fun1(x,y);}/*函数的嵌套调用*/voidmain(){ inta,b; printf("请输入两个正整数:\n"); scanf("%d,%d",&a,&b); printf("它们的最大公约数为:%d\n",________________); printf("它们的最小公倍数为:%d\n",________________);}【题目9】阅读以下程序,若输入为ABCDE#时,写出程序的执行结果。#include"stdio.h"voidreverse(){ charch; ch=getchar(); if(ch=='#') printf("%c",ch); else { reverse(); printf("%c",ch); }}voidmain(){ reverse(); printf("\n");}【题目10】编程计算猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了,求第一天共摘了多少桃子?【题目11】阅读以下程序,该程序中,main函数的局部变量是:_______________,max函数的局部变量是:_______________,全局变量是:_____________,理解它们的使用方式。#include<stdio.h>inta=4,b=6;intmax(inta,intb){ intc; c=a>b?a:b; returnc;}voidmain(){ inta=9; printf("%d\n",max(a,b));}【题目12】以下是一个求1-10累加和的错误程序,请改正。#include<stdio.h>voidmain(){ inti,s; for(i=1;i<=10;i++) s=sum(i); printf("s=%d\t",s);}sum(intj){ intx=0;/*error*/ x+=j; return(x);}2.选择内容【题目13】编写一个函数,判断一个整数是不是回文数。如:34543是回文数,个位与万位相同,十位与千位相同。【题目14】在一个数组A中存放100个数据,用子函数判断该数组中那些是素数,并统计该素数的个数,在主函数中输出该素数的个数。【题目15】用递归法将一个整数转换成字符串。例如,输入1234,应输出字符串”1234”。n的位数不确定,可以是任意的整数。请在注释行中添加注释,使程序易于理解。#include<stdio.h>voidconvert(intn){ inti; if((i=n/10)!=0)/*__________________________________*/ convert(i); putchar(n%10+'0');/*___________________________________*/}voidmain(){ intnumber; printf("\n输入整数:"); scanf("%d",&number); printf("\n输出字符是:"); if(number<0)/*______________________________________*/ { putchar('-'); number=-number; } convert(number); printf("\n");}三、实验结果(用截图说明)题目1题目2题目6题目9题目12四、调试心得(选作)

实验8常用指针实验教学班级:_______学号:__________姓名:__________实验日期:__________实验地点:_________(机房)实验成绩:___________实验目的(1)掌握指针的概念,指针变量的定义和使用。(2)熟练使用指针访问各种简单数据类型。(3)熟练掌握C语言指针的常见运算。(4)熟练使用指针访问一维数组。(5)理解和掌握指针作为函数参数的实质,学会使用指针作为函数参数。实验任务1.基本内容【题目1】请改正程序中错误的地方,预测程序的运行结果,并上机调试验证。#include<stdio.h>voidmain(){ intx=1,y=2,*p,*q; p=x;/*error*/ q=y;/*error*/ printf("x=%d,y=%d\n",x,y); printf("&x=%d,&y=%d\n",&x,&y); printf("p=%d,q=%d\n",p,q); printf("p=%d,q=%d\n",*p,*q);}【题目2】请预测程序的结果,并上机运行程序,验证结果。#include<stdio.h>voidmain(){ inta[]={1,3,5,7,9,11,13}; int*p=a; printf("1--%d\n",*p); printf("2--%d\n",*(++p)); printf("3--%d\n",*++p); printf("4--%d\n",*(p--)); printf("5--%d\n",*p--); printf("6--%d\n",*p++); printf("7--%d\n",++(*p)); printf("8--%d\n",(*p)++); p=&a[2]; printf("9--%d\n",*p); printf("10--%d\n",*(++p)); p++; printf("11--%d\n",*p);}【题目3】请预测程序的结果,并上机运行程序,验证结果。#include<stdio.h>voidmain(){ inta[6]={1,2,3,4,5,6}; int*p,i,s=1; p=a; for(i=0;i<6;i++) s*=*(p+i); printf("%d\n",s);}【题目4】请预测程序的结果,并上机运行程序,验证结果。#include<stdio.h>voidmain(){ chara[]="abcdef"; char*b="ABCDEF"; inti; for(i=0;i<3;i++) printf("%c,%s\n",*a,b+i); printf("\n"); for(i=3;a[i];i++) { putchar(*(b+i)); printf("%c\n",*(a+i)); }}【题目5】程序功能:输入一行字符(不超过100个),统计其中大写字母的个数?要求:阅读以下程序,将空格处补充完整,并上机调试运行。#include<stdio.h>voidmain(){ intcle=0; char*p,s[101]; printf("请输入一行字符:"); gets(s); p=s; while(____________) { if((*p>='A')&&(*p<='Z')) ++cle; ____________________;} printf("大写字母个数=%d\n",__________);}【题目6】编写程序:输入两个整数,通过函数swap交换这两个整数的值。要求:在main函数中输入两个整数,在main函数中输出交换后的结果。分析程序,将空白部分补充完整,并上机验证。#include<stdio.h>voidswap(int*p1,int*p2){ inti; i=_______;____________;_____________;}voidmain(){ intn1,n2; printf("请输入两个整数:"); scanf("%d%d",&n1,&n2); swap(_________________); printf("%d,%d\n",n1,n2);}【题目7】程序功能:求两个数中的最大值。要求:阅读以下程序,将空格处补充完整,并上机调试运行。#include<stdio.h>int*max(int*x,int*y){ if(*x>*y) return__________; else return__________;}voidmain(){ inta,b; printf("请输入两个整数a,b:"); scanf("%d,%d",&a,&b); printf("最大值是:%d\n",______________);}【题目8】将数组a中的10个整数按相反顺序存放,完善程序。#include<stdio.h>#defineN10voidinv(int*x,intn)/*理解掌握本函数的算法*/{ intt,i; for(i=0;i<=(n-1)/2;i++) { t=*(x+i); *(x+i)=*(x+n-1-i); *(x+n-1-i)=t; }}voidmain(){ inti,a[N]; for(i=0;i<N;i++) scanf("%d",a+i); printf("原序为:\n"); for(i=0;i<N;i++) printf("%6d",a[i]); inv(_______________); printf("\n"); printf("逆序为:\n"); for(i=0;i<N;i++) printf("%6d",*______________); printf("\n");}2.选择内容【题目9】编写程序:输入10个整数到一个一维数组中,把该数组中所有为偶数的数,放到另一个数组中并输出。要求:分析程序,将省略号的部分补充完整,并上机验证。#include<stdio.h>voidmain(){ intnum[10],i,dnum[10],di; int*p; p=num; for(i=0;i<=9;i++)/*输入10个整数*/ { scanf("%d",p+i);} di=0;/*偶数个数清0*/ for(i=0;i<=9;i++) { ……} p=dnum; for(i=0;i<di;i++)/*输出所有的偶数*/ { …… }}【题目10】编写程序:输入某班35个同学一门课程的成绩,计算并输出所有学生成绩的平均值,以及每个学生成绩与平均值之间的差值。要求:用一维数组保存35个学生的成绩,用指针变量对学生成绩进行访问。【题目11】编写程序:输入一行字符(不超过1024个),统计其中大写字母、小写字母、空格、数字及其它字符分别有多少个?要求:用字符数组存放输入的字符,用指针对字符数组进行访问。【题目12】编写函数len,求一个字符串的长度。要求:在main函数中输入字符串,并输出其长度。分析下面的代码,将省略号的部分补充完整,并上机验证。#include<stdio.h>intlen(char*str){ ……}voidmain(){ charstr[1024]; gets(str); printf("%d",len(str));}【题目13】编写函数convert,把字符串中的小写字母转换成大写字母。要求:在main函数中输入字符串,并输出转换后的字符串。分析下面的代码,将省略号的部分补充完整并上机验证。#include<stdio.h>voidconvert(char*p){ ……}voidmain(){charstr[100];gets(str);convert(str);puts(str);}三、实验结果(用截图说明)题目1题目2题目3题目4题目6四、调试心得(选作)VisualBasic6.0实验指导书2013

实验1:VisualBasic的基本操作实验目的掌握基本的VisualBasic集成开发环境的使用掌握基本的VisualBasic窗体程序开发流程掌握窗体属性的修改和设置掌握标签(Label)、按钮(CommandButton)、滚动条(ScrollBar)、时间计时器控件(Timer)的使用。实验内容打开VisualBasic6.0的集成开发环境,创建一个新的项目(project),然后保存到以自己的学号为目录名的文件夹中;创建如下的窗体程序:程序运行时,鼠标拖动6滚动条来调整移动速度,速度越大移动越快,速度显示在4标签上;按7“开始”按钮开始运动,运动时2标签左右移动,当到达边界的时候则反向运动,同时标签上显示当前的系统时间,同时按钮的文字变为“暂停”。图1-1UI规划图1-2运行时的界面实验指导打开VB集成开发环境,选择菜单“文件”--“新建工程”,创建一个新的“标准EXE”项目,然后选择“文件”--“保存工程”,在硬盘上创建一个以自己学号为名字的目录,然后保存所有的文件在那个目录中。按照图1-1所示添加相应的控件,并修改相关的属性,如下表所示:序号窗口/控件类型属性名属性值说明1窗体(Form)名称Form1caption实验1:运动的时间窗体的标题2标签(Label)名称LbMoveTimecaption(空)初始值为空,等到时间时就设置为当前时间3标签(Label)名称Lable2Caption移动速度:标签4标签(Label)名称lbMoveSpeedCaption10速度值,10是初始值5计时器(Timer)名称Timer1EnabledFalse设置计时器初始不打开Interval1000设置计时器时间间隔(1000为1000毫秒ms,即为1秒)6水平滚动条(HScroll)名称hsMoveSpeedMin10最小值(滚动条最左端)Max1000最大值(滚动条最右端)SmallChange1最小递增(减)值(按最左最右的箭头按钮)LargeChange100最大递增(减)值(按滚动条的空白区域)Value10当前滚动条滑块的数值7命令按钮(CommandButton)名称cbStartCaption开始编写下面的事件处理程序:(注意,写下面的程序时,先转到代码窗口,在左上角下拉列表中先选择控件变量,然后在右上角下拉列表中选择对应事件,在生成的代码块中编写代码,注意行号不用写)PrivateSubcbStart_Click()PrivateSubcbStart_Click()Timer1.Enabled=NotTimer1.EnabledIf(Timer1.Enabled=True)ThencbStart.Caption="暂停"ElsecbStart.Caption="开始"EndIfEndSubPrivateSubhsMoveSpeed_Change()lbMoveSpeed.Caption=hsMoveSpeed.ValueTimer1.Interval=1010-hsMoveSpeed.ValueEndSubPrivateSubTimer1_Timer()StaticstepxAsIntegerConstSTEP_VALUE=100If(stepx=0)Thenstepx=STEP_VALUEIf(lbMoveTime.Left+lbMoveTime.Width>Form1.Width)Thenstepx=-STEP_VALUEIf(lbMoveTime.Left<=0)Thenstepx=STEP_VALUElbMoveTime.Left=lbMoveTime.Left+stepxlbMoveTime.Caption=NowEndSub思考题上面的第14行为什么要用static?上面的第11行为什么不直接Timer1.Interval=hsMoveSpeed.Value?简单说明如何实现按钮的文字变化。

实验2:窗体综合设计实验目的掌握框架(Frame)、文本框(TextBox)、复选框(CheckBox)、选项按钮(OptionButton)、列表框(ListBox)、下拉列表框(ComboBox),图像框(Image)、图形框(PictureBox)的使用;掌握驱动器列表框(DriveListBox)、目录列表框(DirListBox)、文件列表框(FileListBox)的使用;掌握鼠标事件处理的一般方法。掌握多窗口的相互调用。掌握VB中绘图的方式。实验内容创建如图2-1的画图板应用程序,完成图中所示功能图2-1画图板主窗体标准色包括:"白色","黑色","红色","绿色","黄色","蓝色","品红"读取图片是打开图2-2窗体,右上角是图片预览:图2-2读取图像文件窗体图2-3保存文件对话框保存图片时打开图2-3对话框。实验指导打开VB6.0集成开发环境,选择菜单“文件”“新建工程”,再选择“文件”“保存工程”,新建一个以自己学号为名字的文件夹,把所有文件保存在这个文件夹中;对缺省的窗体,作为主窗体,添加控件并设置其相关属性,如图2-4和表2-1所示:图2-4主窗体及其控件安排表2-1主窗体及其控件属性设置序号窗体或控件类型属性属性值说明1窗体(Form)名称mainFormBorderStyle1设置窗体不能自由改变大小Caption画图板标题2框架(Frame)名称Frame1Caption画图工具箱3列表框(ListBox)名称lsDrawTool4框架(Frame)名称Frame2Caption填充选项5复选框(CheckBox)名称ckSolidFillCaption实心填充6框架(Frame)名称Frame4Caption线粗细7选项按钮(OptionButton)名称opLineWeightCaption细线ValueTrue设置为真表示为缺省这个选项被选中Index0创建控件数组,下标为08选项按钮(OptionButton)名称opLineWeightCaption中线ValueFalse没被选中Index1创建控件数组,下标为19选项按钮(OptionButton)名称opLineWeightCaption粗线ValueFalseIndex210框架(Frame)名称Frame5Caption调色板11标签(Label)名称lbColorPad用于显示颜色Caption(空)BorderStyle1加上边框12标签(Label)名称Label1Caption标准色:13组合列表框(ComboBox)名称clStandardColor用于选择标准颜色Style2只能下拉选择,不能自己输入14标签(Label)名称Label3CaptionR15标签(Label)名称Label4CaptionG16标签(Label)名称Label5CaptionB17水平滚动条(HScroll)名称hsRed设置红色分量0~255Min0max255SmallChange1LargeChange10value018水平滚动条(HScroll)名称hsGreen设置绿色分量0~255Min0max255SmallChange1LargeChange10value019水平滚动条(HScroll)名称hsBlue设置蓝色分量0~255Min0max255SmallChange1LargeChange10value020命令按钮(CommandButton)名称cbLoadFileCaption读取图片21命令按钮(CommandButton)名称cbSaveFileCaption保存图片22标签(Label)名称lbFileFullName保存文件名的全路径Caption(空)BorderStyle1加上边框23图形框(PictureBox)名称pbDrawBox画图区域AutoRedrawTrue设为true才能保存自己的图形在主窗体的代码窗口中,编写下列代码(注意,写下面的程序时,先转到代码窗口,在左上角下拉列表中先选择控件变量,然后在右上角下拉列表中选择对应事件,在生成的代码块中编写代码,注意行号不用写)DimbeDrawingAsBoolean,x1AsInteger,y1AsInteger,x2AsInteger,y2AsIntegerDimbeDrawingAsBoolean,x1AsInteger,y1AsInteger,x2AsInteger,y2AsIntegerPrivateSubcbLoadFile_Click()loadFileForm.ShowvbModalIf(lbFileFullName.Caption<>"")ThenpbDrawBox.Picture=LoadPicture(lbFileFullName.Caption)EndIfEndSubPrivateSubcbSaveFile_Click()DimsAsStrings=InputBox("请输入文件名(不要输入扩展名)","保存文件对话框")If(s<>"")ThenlbFileFullName.Caption=App.Path&"\"&s&".bmp"SavePicturepbDrawBox.Image,lbFileFullName.CaptionEndIfEndSubPrivateSubclStandardColor_Click()lbColorPad.BackColor=clStandardColor.ItemData(clStandardColor.ListIndex)EndSubPrivateSubForm_Load()Dims1,s2,s3,iAsIntegers1=Array("白色","黑色","红色","绿色","黄色","蓝色","品红")s2=Array(vbWhite,vbBlack,vbRed,vbGreen,vbYellow,vbBlue,vbMagenta)Fori=0ToUBound(s1)clStandardColor.AddItems1(i),iclStandardColor.ItemData(i)=s2(i)NexticlStandardColor.ListIndex=1clStandardColor.ListIndex=1lbColorPad.BackColor=s2(1)s3=Array("画圆","画直线段","画矩形","自由线段")Fori=0ToUBound(s3)lsDrawTool.AddItems3(i),iNextilsDrawTool.ListIndex=0EndSubPrivateSubhsBlue_Change()lbColorPad.BackColor=RGB(hsRed.Value,hsGreen.Value,hsBlue.Value)EndSubPrivateSubhsGreen_Change()lbColorPad.BackColor=RGB(hsRed.Value,hsGreen.Value,hsBlue.Value)EndSubPrivateSubhsRed_Change()lbColorPad.BackColor=RGB(hsRed.Value,hsGreen.Value,hsBlue.Value)EndSubPrivateSubpbDrawBox_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)SelectCaselsDrawTool.TextCase"画圆","画直线段","画矩形"x1=X:y1=Yx2=X:y2=YpbDrawBox.DrawMode=vbNotXorPenIf(ckSolidFill.Value=vbChecked)ThenpbDrawBox.FillStyle=0pbDrawBox.FillColor=lbColorPad.BackColorElseIf(ckSolidFill.Value=vbUnchecked)ThenpbDrawBox.FillStyle=1EndIfIf(opLineWeight(0).Value=True)ThenpbDrawBox.DrawWidth=1If(opLineWeight(1).Value=True)ThenpbDrawBox.DrawWidth=10If(opLineWeight(2).Value=True)ThenpbDrawBox.DrawWidth=50beDrawing=TrueCase"自由线段"pbDrawBox.Circle(X,Y),10,lbColorPad.BackColorbeDrawing=TrueEndSelectEndSubPrivateSubpbDrawBox_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)DimxcAsInteger,ycAsIntegerIf(beDrawing=True)ThenSelectCaselsDrawTool.TextCase"画圆"pbDrawBox.Circle(x1,y1),Sqr((x2-x1)^2+(y2-y1)^2),lbColorPad.BackColorpbDrawBox.Circle(x1,y1),Sqr((X-x1)^2+(Y-y1)^2),lbColorPad.BackColorx2=X:y2=YCase"画直线段"pbDrawBox.Line(x1,y1)-(x2,y2),lbColorPad.BackColorpbDrawBox.Line(x1,y1)-(X,Y),lbColorPad.BackColorx2=X:y2=YCase"画矩形"pbDrawBox.Line(x1,y1)-(x2,y2),lbColorPad.BackColor,BpbDrawBox.Line(x1,y1)-(X,Y),lbColorPad.BackColor,Bx2=X:y2=YCase"自由线段"pbDrawBox.Circle(X,Y),10,lbColorPad.BackColorEndSelectEndIfEndSubPrivateSubpbDrawBox_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)If(beDrawing=True)ThenSelectCaselsDrawTool.TextCase"画圆"pbDrawBox.Circle(x1,y1),Sqr((x2-x1)^2+(y2-y1)^2),lbColorPad.BackColorpbDrawBox.DrawMode=vbCopyPenpbDrawBox.Circle(x1,y1),Sqr((X-x1)^2+(Y-y1)^2),lbColorPad.BackColorbeDrawing=FalseCase"画直线段"pbDrawBox.Line(x1,y1)-(x2,y2),lbColorPad.BackColorpbDrawBox.DrawMode=vbCopyPenpbDrawBox.Line(x1,y1)-(X,Y),lbColorPad.BackColorbeDrawing=FalseCase"画矩形"pbDrawBox.Line(x1,y1)-(x2,y2),lbColorPad.BackColor,BpbDrawBox.DrawMode=vbCopyPenpbDrawBox.Line(x1,y1)-(X,Y),lbColorPad.BackColor,BbeDrawing=FalseCase"自由线段"beDrawing=FalseEndSelectpbDrawBox.FillStyle=1EndIfEndSub选择菜单“工程”“添加窗体”,创建一个新的窗体来作为读取文件的对话框,添加控件并设置属性,如图2-5和表2-2。图2-5读取文件对话框表2-2读取文件对话框窗体及控件的属性设置序号窗体或控件类型属性属性值说明1窗体(Form)名称loadFileFormCaption读取图像文件BorderStyle1设置窗体不能自由改变大小2驱动器列表框(DriveListBox)名称Drive13目录列表框(DirListBox)名称Dir14文件列表框(FireListBox)名称File1Pattern*.bmp设置显示文件类型5图像控件(Image)名称imPreview显示预览图StretchTrue图像自动缩放适应控件大小6命令按钮(CommandButton)名称cbLoadCaption读取文件7命令按钮(CommandButton)名称cbCancelCaption取消编写读取文件对话框的事件处理代码PublicfilenameAsStringPublicfilenameAsStringPrivateSubcbCancel_Click()UnloadMeEndSubPrivateSubcbLoad_Click()mainForm.lbFileFullName.Caption=filenameUnloadMeEndSubPrivateSubDir1_Change()File1.Path=Dir1.PathEndSubPrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSubPrivateSubFile1_Click()filename=File1.Path&"\"&File1.filenameimPreview.Picture=LoadPicture(filename)EndSub思考为什么显示读取文件对话框要用vbModal(模式对话框)?如何在主窗体中获取另一个对话框中控件的内容?如何知道调用读取文件对话框时用户是选择“读取”而不是“取消”?读取和保存图片文件是如何进行的?如何在鼠标绘图时实现动态擦除临时画出的图形?

实验3:VB文件操作实验目的熟练掌握VB中对基本文件的打开、关闭、读、写操作;熟练掌握VB中对字符串的基本操作。实验内容创建一个普通V带轮的查询程序,关键数据保存在文件中,通过读取文件中的数据进行查询,界面如图3-1。图3-1V带轮标准直径查询程序数据文件格式为文本文件,内容如下表3-1,文件名为“普通V带轮标准直径数据表.txt”,放在和项目文件相同的文件夹中。表3-1普通V带轮标准直径数据表文件内容[型号]YZABCDE-end-[基准直径]2022.4252831.535.54045505663717580859095100106112118125132140150160170180200212224236250265280315355375400425450475500530560630710800900100011201250160020002500-end-[外径]23.225.638.7,5459.2,6066.2,670,750,79,80.583.2,84,85.50,0,90.593.2,94,95.50,0,100.5103.2,104,105.50,0,111.5115.2,116,117.50,0,123.5128.2,129,130.5,1320,0,137.5,1390,144,145.5,1470,154,155.5,157-end-该表来自下表:基准直径dd带型YZABCDE外径da2023.222.425.6……5053.254757980.5……实验指导顺序文本文件读写文件的打开和关闭:Open语句能够对文件输入/输出(I/O)。语法OpenpathnameFormode[Accessaccess][lock]As[#]filenumber[Len=reclength]Open语句的语法具有以下几个部分:部分描述pathname必要。字符串表达式,指定文件名,该文件名可能还包括目录、文件夹及驱动器。mode必要。关键字,指定文件方式,有Append、Binary、Input、Output、或Random方式。如果未指定方式,则以Random访问方式打开文件。access可选。关键字,说明打开的文件可以进行的操作,有Read、Write、或ReadWrite操作。lock可选。关键字,说明限定于其它进程打开的文件的操作,有Shared、LockRead、LockWrite、和LockReadWrite操作。filenumber必要。一个有效的文件号,范围在1到511之间。使用FreeFile函数可得到下一个可用的文件号。reclength可选。小于或等于32,767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字符数。说明对文件做任何I/O操作之前都必须先打开文件。Open语句分配一个缓冲区供文件进行I/O之用,并决定缓冲区所使用的访问方式。如果pathname指定的文件不存在,那么,在用Append、Binary、Output、或Random方式打开文件时,可以建立这一文件。如果文件已由其它进程打开,而且不允许指定的访问类型,则Open操作失败,而且会有错误发生。如果mode是Binary方式,则Len子句会被忽略掉。重要在Binary、Input和Random方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭。在Append和Output方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。Open语句示例本示例示范Open语句的不同用法来做到文件的输出与输入。下列代码以顺序输入模式打开TESTFILE文件。Open"TESTFILE"ForInputAs#1'若要以其他方式打开文件,必需先关闭此文件。Close#1下列代码以只允许写操作的二进制方式打开文件。Open"TESTFILE"ForBinaryAccessWriteAs#1'若要以其他方式打开文件,必需先关闭此文件。Close#1下列代码以随机方式打开文件,文件中含有用户自定义数据类型Record的记录。TypeRecord'定义用户自定义数据类型。IDAsIntegerNameAsString*20EndTypeDimMyRecordAsRecord'声明变量。Open"TESTFILE"ForRandomAs#1Len=Len(MyRecord)'若要以其他方式打开文件,必需先关闭此文件。Close#1下列代码以顺序输出方式打开文件;任何过程都可以读写该文件。Open"TESTFILE"ForOutputSharedAs#1'若要以其他方式打开文件,必需先关闭此文件。Close#1下列代码以只允许读的二进制方式打开文件;其他过程不可以读该文件。Open"TESTFILE"ForBinaryAccessReadLockReadAs#1Close语句关闭Open语句所打开的输入/输出(I/O)文件。语法Close[filenumberlist]可选的filenumberlist参数为一个或多个文件号,其中filenumber为任何有效的文件号,语法如下:[[#]filenumber][,[#]filenumber]...说明若省略filenumberlist,则将关闭Open语句打开的所有活动文件。当关闭Output或Append打开的文件时,将属于此文件的最终输出缓冲区写入操作系统缓冲区。所有与该文件相关联的缓冲区空间都被释放。在执行Close语句时,文件与其文件号之间的关联将终结。文件读写:LineInput#语句从已打开的顺序文件中读出一行并将它分配给String变量。语法LineInput#filenumber,varnameLineInput#语句的语法具有以下几个部分:部分描述filenumber必要。任何有效的文件号。varname必要。有效的Variant或String变量名。说明通常用Print#将LineInput#语句读出的数据从文件中写出来。LineInput#语句一次只从文件中读出一个字符,直到遇到回车符(Chr(13))或回车–换行符(Chr(13)+Chr(10))为止。回车–换行符将被跳过,而不会被附加到字符串上。LineInput#语句示例本示例使用LineInput#语句从顺序文件中读入一行数据,并将该行数据赋予一个变量。本示例假设TESTFILE文件内含数行文本数据。DimTextLineOpen"TESTFILE"ForInputAs#1'打开文件。DoWhileNotEOF(1)'循环至文件尾。LineInput#1,TextLine'读入一行数据并将其赋予某变量。Debug.PrintTextLine'在立即窗口中显示数据。LoopClose#1'关闭文件。Input#语句从已打开的顺序文件中读出数据并将数据指定给变量。语法Input#filenumber,varlistInput#语句的语法具有以下几个部分:部分描述filenumber必要。任何有效的文件号。varlist必要。用逗号分界的变量列表,将文件中读出的值分配给这些变量;这些变量不可能是一个数组或对象变量。但是,可以使用变量描述数组元素或用户定义类型的元素。说明通常用Write#将Input#语句读出的数据写入文件。该语句只能用于以Input或Binary方式打开的文件。在读出数据时不经修改就可直接将标准的字符串或数值数据指定给变量。下表说明如何处理其它输入数据:数据指定给变量的值分隔逗号或空白行Empty#NULL#Null#TRUE#or#FALSE#True或False#yyyy-mm-ddhh:mm:ss#用表达式表示的日期与/或时间#ERRORerrornumber#errornumber(此变量是一个Variant,用来标记错误)输入数据中的双引号符号("")将被忽略。文件中数据项目的顺序必须与varlist中变量的顺序相同,而且与相同数据类型的变量匹配。如果变量为数值类型而数据不是数值类型,则指定变量的值为零。在输入数据项目时,如果已到达文件结尾,则会终止输入,并产生一个错误。注意为了能够用Input#语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用Write#语句而不使用Print#语句。使用Write#语句可以确保将各个单独的数据域正确分隔开。Input#语句示例本示例使用Input#语句将文件内的数据读入两个变量中。本示例假设TESTFILE文件内含数行以Write#语句写入的数据;也就是说,每一行数据中的字符串部分都是用双引号括起来,而与数字用逗号隔开,例如,("Hello",234)。DimMyString,MyNumberOpen"TESTFILE"ForInputAs#1'打开输入文件。DoWhileNotEOF(1)'循环至文件尾。Input#1,MyString,MyNumber'将数据读入两个变量。Debug.PrintMyString,MyNumber'在立即窗口中显示数据。LoopClose#1'关闭文件。Print#语句将格式化显示的数据写入顺序文件中。语法Print#filenumber,[outputlist]Print#语句的语法具有以下几个部分:部分描述filenumber必要。任何有效的文件号。outputlist可选。表达式或是要打印的表达式列表。设置outputlist参数的设置如下:[{Spc(n)|Tab[(n)]}][expression][charpos]设置描述Spc(n)用来在输出数据中插入空白字符,而n指的是要插入的空白字符数。Tab(n)用来将插入点定位在某一绝对列号上,这里,n是列号。使用无参数的Tab将插入点定位在下一个打印区的起始位置。expression要打印的数值表达式或字符串表达式。charpos指定下一个字符的插入点。使用分号将插入点定位在上一个显示字符之后。用Tab(n)将插入点定位在某一绝对的列号上,用无参数的Tab将插入点定位在下一个打印区的起始处。如果省略charpos,则在下一行打印下一个字符。说明通常用LineInput#或Input读出Print#在文件中写入的数据。如果省略参数outputlist,而且,filenumber之后只含有一个列表分隔符,则将一空白行打印到文件中。多个表达式之间可用一个空白或一个分号隔开。空白与分号等效。对于Boolean类型的数据,打印的是True或False。无论在什么国别,都不将True和False这两个关键字翻译出来。使用操作系统所能够辨认的标准短日期格式可将Date类型的数据写入文件中。在未指定日期或时间部件或这些部件的设置为零时,只将指定的部分写入文件中。如果outputlist的数据是Empty,则不将任何数据写入文件。但是,如果outputlist的数据是Null,则将Null写入文件。对于Error类型的数据而言,输出的数据看起来与Errorerrorcode一样。而且无论在什么地区,都不将Error关键字翻译出来。用Print#写入文件的所有数据都是国际通用的;也就是说,可以正确利用十进制分隔符将这些数据格式化。因为Print#将数据的图像写入文件,所以必须将各项数据分隔开来,以便正确打印。如果使用无参数的Tab将打印位置移动到下一个打印区,则Print#也会将打印字段之间的空白写入文件中。注意如果今后想用Input#语句读出文件的数据,就要用Write#语句而不用Print#语句将数据写入文件。因为在使用Write#时,将数据域分界就可确保每个数据域的完整性,因此可用Input#再将数据读出来。使用Write#还能确保任何地区的数据都被正确读出。Print#语句示例本示例使用Print#语句将数据写入一个文件。Open"TESTFILE"ForOutputAs#1'打开输出文件。Print#1,"Thisisatest"'将文本数据写入文件。Print#1,'将空白行写入文件。Print#1,"Zone1";Tab;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论