实验编程题答案
实验一
1、输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。
#include
using namespace std;
int main()
{
int y,m;
cin>>y>>m;
if(1900<=y&&y<3000&&0 { if(y%4==0&&y%100!=0||y%400==0) { switch(m) { case 1:cout<<"31";break; case 2:cout<<"29";break; case 3:cout<<"31";break; case 4:cout<<"30";break; case 5:cout<<"31";break; case 6:cout<<"30";break; case 7:cout<<"31";break; case 8:cout<<"31";break; case 9:cout<<"30";break; case 10:cout<<"31";break; case 11:cout<<"30";break; case 12:cout<<"31";break; } } else { switch(m) { case 1:cout<<"31";break; case 2:cout<<"28";break; case 3:cout<<"31";break; case 4:cout<<"30";break; case 5:cout<<"31";break; case 6:cout<<"30";break; case 7:cout<<"31";break; case 8:cout<<"31";break; case 9:cout<<"30";break; case 10:cout<<"31";break; case 11:cout<<"30";break; case 12:cout<<"31";break; } } } else cout<<"Input error!"; return 0; } 2、某高校录取研究生的要求是,新生的每门课成绩不低于60分,总成绩不低于340分,370分以下为自费。编一程序实现输入一个学生的四门课成绩,试判断该生为该校录取的情况(“没有录取”、“自费”、“公费”三种情况)。 #include using namespace std; int main() { int a,b,c,d,s; cin>>a>>b>>c>>d; s=a+b+c+d; if(a>=60&&b>=60&&c>=60&&d>=60&&s>=340) { if(s>=370) cout<<"公费"< else cout<<"自费"< } else cout<<"没有录取"< return 0; } 3、 在华农校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。 #include using namespace std; int main() { double tb,tw,s; cin>>s; tb=s/3+50; tw=s/1.2; if(tb>tw) cout<<"Walk"< else if(tb else cout<<"All"< return 0; } 4、 一个停车场的标准收费是3小时之内收5元,超过3小时,每增加1小时加收2元;如果时间不是整数,按比例收取,例如:如果输入为3.6小时,则费用为5 + (3.6-3)*2 = 6.2 元。最高收费为40元。假设任何车辆的停车时间都不超过24小时。编写程序,计算每辆车的停车费。 【提示】 要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式: cout< 按上面的形式控制输出格式时,需在源程序最开始加上一行:#include #include #include using namespace std; int main() { double t,cost; cin>>t; if(t<=3) cout<<"5.00"< else if(t<=20.5) { cost=(t-3)*2+5; cout< } else cout<<"40.00"< return 0; } 5、 模拟计算器的功能,能根据用户输入的两个运算数和运算符(?+?、…-?、…*?或…/ ?),对两个数进行相应的运算,输出运算结果。注意:除法运算…/ ?的除数不能为0。 #include using namespace std; int main() { double a,b,n; char c; cin>>a>>b>>c; if(c=='/'&&b==0) cout<<"除数为0!"< else if(c!='+'&&c!='-'&&c!='*'&&c!='/') cout<<"运算符号错误!"; else if(c=='+') { n=a+b; cout< } if(c=='-') { n=a-b; cout< } if(c=='*') { n=a*b; cout< } if(c=='/') { n=a/b; cout< } return 0; } 实验二 1、 给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少? #include using namespace std; int main() { int a,b,c,d,e,f,x=0; cin>>a>>b>>c>>d>>e>>f; if(a<=100) if(b if(c if(d if(e if(f cout< return 0; } 2 一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第5次落地时,共经过多少米? 第5次反弹多高? #include using namespace std; int main() { int h0; double s,h; cin>>h0; h=h0/32.0; s=h0+2*(h0/2.0+h0/4.0+h0/8.0+h0/16.0); cout< return 0; } 3 有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。 #include #include using namespace std; int main() { double i,n,x,y,z; double s; cin>>n; x=2;y=1;s=2; for(i=1;i { z=x;x=y+z;y=z;s=s+x/y; } cout< return 0; } 4 在平面坐标系中,有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断给定的多个点是否在这个正方形内。 #include using namespace std; void main() { float x,y; for( ; ; ) { cin>>x>>y; if(x==0&&y==0) { cout<<"yes"< break; } if(x<=1&&x>=-1&&y<=1&&y>=-1) cout<<"yes"< else cout<<"no"< } } 5 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号所构成的数字正好等于某一个整数的平方。请根据以上线索求出车号。 #include using namespace std; #include void main() {int a,b,c,d,m,n; for(a=0;a<10;a++) {for(b=0;b<10;b++) {for(c=0;c<10;c++) {for(d=0;d<10;d++) {if(a==b&&c==d) {m=a*1000+b*100+c*10+d; {for(n=32;n<100;n++) if(n*n==m) cout< { } } } } } } } } 实验三 1 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 #include using namespace std; int main() { int a[100]; int m,sum=0; for(int i=1;i<=10;i++) cin>>a[i]; cin>>m; for(i=1;i<=10;i++) { if(m>=a[i]||(m=a[i])) sum=sum+1; } cout< return 0; } 2 歌唱大赛选手成绩这样计算:去掉一个最高分,去掉一个最低分,将剩下分数的平均值作为选手的最后得分。现假设共有6位评委,都是按百分制打分,请编程计算选手的成绩。 提示:将6个评分存入score数组中。关键是求出其中的最大值max(即最高分)和最小值min(即最低分)。 #include using namespace std; int main() { double score[100]; double m=0; double g=0; for(int i=1;i<=6;i++) cin>>score[i]; double big=score[1]; double small=score[1]; for(int j=1;j<=6;j++) { if(score[j]>big) big=score[j]; } for(int k=1;k<=6;k++) { if(score[k] small=score[k]; } for(int n=1;n<=6;n++) g+=score[n]; m=(g-big-small)/4; cout< return 0; } 3 插入式加密法是信息加密中一种简单的加密技术,其方法是在明文字符中插入一些无意义的字母来形成密文单词。例如,对于明文:China,在间隔为1的位置依次插入一个字母而形成密文:Coheifnia。因此,其解密过程与加密过程相反,即从密文中首字符开始取,每间隔1个位置依次取出字符,就得到原始的明文。请编程实现插入式加密法所对应的解密算法,将密文翻译成明文。 提示:定义两个字符数组ci和pl,分别存放密文字符串和明文字符串。解密过程即在字符串ci中,从下标0的字符(首字符)开始,将偶数下标的字符(?\0?之前的)依次取出赋值到字符数组pl中,最后即得到明文字符串。 #include using namespace std; int main() { char ci[100]; char pl[100]; int m=0; cin.getline(ci,100); for(int i=0;ci[i]!='\0';i++) { if(i%2==0) { pl[m]=ci[i]; m=m+1; } } pl[m]='\0'; cout< return 0; } 4 输入一个长度小于20的不含空格的字符串,然后对该字符串做如下处理:对字符串中的每个字符,如果是大写字母,将其转化为小写;如果是小写字母,将其转化为大写,最后将处理后的字符串输出。 要求用指针对字符串进行处理。 #include using namespace std; int main() { char s[21],*p; cin>>s; p=s; while(*p) { if(*p>='a'&&*p<='z') *p=*p-32; else if(*p>='A'&&*p<='Z') *p=*p+32; p++; } cout< return 0; } 5 在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数,或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。 注意:数组中的第一个数(下标为0)只要和第二个数(下标为1)不相等,第一个数(下标为0)就是极值点;同理,数组中的最后一个数只要和倒数第二个数不相等,最后一个数也是极值点。 #include using namespace std; void main() { int n; cin>>n; cout< int*p=new int[n]; int j=0; for(int i=0;i cin>>p[i]; while(j { if(n>=2&&j==0&&p[0]!=p[1]) cout<<"0"<<' '< if(j!=n-1&&j!=0) { if((p[j]>p[j+1]&&p[j]>p[j-1])||(p[j] cout< } if(j==n-1&&p[n-1]!=p[n-2]) cout< j++; } delete []p; } 实验四 1 判断正整数n是否为完数。已知一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。此程序要求编写函数bool wanshu(int n),判断n是否为完数,若n是,则函数返回true;否则返回false。然后主函数通过该函数的返回值,在屏幕上输出判断结果。 #include using namespace std; int number (int); int main() { int n; cin>>n; int result=number(n); if(result==-1) cout<<"no"< else cout<<"yes"< return 0; } int number (int a) { int total=0,re=0; for(int i=0;i { total+=i; if(a==total) { re=a; break; } else re=-1; } return re; } 2 假定现在已是2012年,请编写程序,计算2012年伦敦奥运会倒计时的天数并输出。已知伦敦奥运会的开幕日期是2012年7月27日。用户输入日期的范围必须是2012年1月1日— 2012年7月26日。要求程序中编写函数int CountDown(int year,int month,int day),来计算从用户输入的日期year-month-day到伦敦奥运会开幕日之间的倒数天数。 提示:所求天数= month这个月的总天数-day+(month+1到6月所有这些月份天数之和)+27。 #include using namespace std; int main() { int y,m,d,x; cin>>y>>m>>d; if(y!=2012||(m>7||m==0)||(m==7&&d>27)) cout< else if(m==7) { x=27-d; cout< } else { switch(m) { case 1:x=31-d+29+31+30+31+30+27;break; case 2:x=29-d+31+30+31+30+27;break; case 3:x=31-d+30+31+30+27;break; case 4:x=30-d+31+30+27;break; case 5:x=31-d+30+27;break; case 6:x=30-d+27;break; } cout< } return 0; } 3 许多英语单词无论是顺读还是倒读,其词形完全一样,都是同一个单词,如dad(爸爸)、noon(中午)、level(水平)等,这样的词称为回文词。在最权威的《牛津英语大词典》里,最长的回文词是tattarrattat,是个象声词,表示敲门的声音。英语的回文句更有趣味(忽略其中的标点符号)。最著名的一句为:“Madam,I?m Adam.”(小姐,我是亚当。)据说,这是亚当在伊甸园里初见夏娃作自我介绍时说的话。 现要求编写一个函数bool huiwen(char *p),判断输入的一个单词是否为回文词。p是指向要输入的字符串的指针,如果是返回true,否则返回false。 #include using namespace std; bool huiwen(char *p) { char *q=p+strlen(p)-1; for(int i=0;i if(*p!=*q) return false; return true; } void main() { char ch[100]; cin>>ch; if(huiwen(ch)) cout<<"yes"; else cout<<"no"; cin.get(); cin.get(); } 4 编写一个函数,用于生成一个由若干个指定字符构成的字符串,其原型为: void mystr(char c,int n, char *p);其中,参数c是构造字符串的字符,n是字符串中字符的个数,p是生成的字符串的首地址。 要求:编写主函数,在主函数中进行字符和字符个数的输入,然后再调用mystr函数生成字符串,最后在主函数中将生成的字符串输出。 #include using namespace std; void mystr(char c,int n,char *p) { for(int i=1;i<=n;i++) cout< return; } int main() { char c; char *p; p=&c; int n; cin>>c; cin>>n; mystr(c,n,p); return 0; } 5 有一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生1对兔子,小兔子长到第3个月后每个月又生1对兔子。假设所有兔子都不死,问每个月兔子的总对数为多少? 提示:不满1个月的为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。每对老兔子每个月会生1对小兔子。因此,每个月的兔子总数依次为1,1,2,3,5,8,13,…。这就是Fibonacci数列。该数列的递归定义如下:f(n)=1 (n等于1或2);f(n)= f(n-1)+ f(n-2) (n>2) 请编写递归函数int fib(int n),求出第n个月兔子的总对数。 #include using namespace std; void fib(int s) { int d=1,f=1,sum=0,n=1,t=0; while(n { n++; t=f; f=d; d+=t; sum=d+f; } cout<<"第"< } int main() { int s; cin>>s; if(s!=1) fib(s); else cout<<"第1个月兔子的总对数为1"< return 0; } 实验五 1 仿照本次实验预习的程序填空题1,将以上Distance函数定义为类piont的友元函数,实现程序的功能。并在主函数中增加输入两点作为友元函数的实参。 #include #include using namespace std; class point { public: point(float a,float b) { x=a; y=b; } friend float Distance(point p1,point p2) { float dx=p1.x-p2.x; float dy=p1.y-p2.y; return (float)sqrt(dx*dx+dy*dy); } private: float x,y; }; int main() { float p1_x,p1_y,p2_x,p2_y; //输入四个点 cin>>p1_x>>p1_y>>p2_x>>p2_y; point p1(p1_x,p1_y),p2(p2_x,p2_y); cout< return 0; } 2 根据以下主函数的功能来设计日期类CDateInfo,使其能正确运行。类CDateInfo中应该具有描述年、月、日的三个数据成员和相应的成员函数。 #include using namespace std; class CDateInfo { int year,month,day; public: CDateInfo(){}; CDateInfo(int y,int m,int d) {year=y,month=m,day=d;}; void SetDate(int y,int m,int d); void GetDate(); }; void CDateInfo::SetDate(int y=2011,int m=10,int d=10) { year=y; month=m; day=d; } void CDateInfo::GetDate() { cout< } int main() { CDateInfo data1,data2(2011,10,10); //定义对象data1和data2 //分别调用类的不带参数的构造函数和带3个参数的构造函数对 //其数据成员进行初始化 //date1的数据成员未初始化时,其年月日用默认值2000,1,1来继续初始化。 int y,m,d; cin>>y>>m>>d; //输入年月日值 data1.SetDate(y,m,d); //设置data1的年月日为y,m,d data1.GetDate(); //按year-month-day的格式显示data1的年月日 data2.GetDate(); //按year-month-day的格式显示data2的年月日 return 0; } 3 根据以下主函数的功能来设计日期类Student,使其能正确运行。类Student中应该具有描述学生姓名、性别、年龄的三个数据成员和相应的成员函数。 #include #include using namespace std; class Student { char chOne[100]; int iSex; int iOld; public: void SetName(char *name); void SetGender(int sex); void SetAge(int age) { iOld=age; } int GetAge(){return iOld;} int GetGender(){return iSex;} void GetName(char *name); }; void Student::SetName(char *name) { strcpy(chOne,name); } void Student::SetGender(int sex) { iSex=sex; } void Student::GetName(char *name) { strcpy(chOne,name); } int main() { Student Zhang_San; //创建Student类对象Zhang_San char*chOne; int iSex; unsigned iOld; chOne=new char[11]; //创建动态字符数组用来存放姓名,指针chOne指向该数组 cin>>chOne; //输入姓名,存放在chOne所指向的动态字符数组中 cin>>iSex; //输入性别,输入1表示性别为“男”,输入0表示性别为“女” cin>>iOld; //输入年龄 Zhang_San.SetName(chOne); //用输入的姓名设置对象Zhang_San用来表示姓名的数据成员Zhang_San.SetGender(iSex); //设置对象Zhang_San用来表示性别的数据成员 Zhang_San.SetAge(iOld); //设置对象Zhang_San用来表示年龄的数据成员 cout< Zhang_San.GetName(chOne); //调用GetName(char *)成员函数将对象Zhang_San表示姓名的数据成员值 //存放到chOne所指向的动态字符数组中 cout<<"Zhang_San's name is "< cout<<"Zhang_San's gender is "< delete []chOne; return 0; } 4 根据以下主函数的功能来设计计算器类Calculator,使其能正确运行。类Calculator中应该具有描述运算数的a和b及其表示a和b运算结果的三个数据成员和相应计算并显示结果的成员函数。 #include using namespace std; class Calculator {public: Calculator(float,float); add( ); //计算a+b并显示结果 subtract( ); multiply( ); divide(); private: float a,b,r; }; Calculator::Calculator(float x,float y) { a=x; b=y; } Calculator::add( ) { r=a+b; cout< } Calculator:: subtract( ) { r=a-b; cout< } Calculator::multiply( ) { r=a*b; cout< } Calculator::divide() { r=a/b; cout< } int main( ) { float a, b; cin>>a>>b; //从键盘输入运算数a、b Calculator cal( a , b ); //用a和b初始化创建的Calculator类对象cal cal.add( ); //计算a+b并显示结果 cal.subtract( ); cal.multiply( ); cal.divide( ); return 0; } 5 根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。 #include using namespace std; class Imaginary {public: Imaginary(float a,float b) {x=a;y=b;} friend Add(Imaginary c1,Imaginary c2); friend Sub(Imaginary c1,Imaginary c2); private: float x,y; }; Add(Imaginary c1,Imaginary c2) { cout< { cout< int main() { float x1,y1,x2,y2; cin>>x1>>y1>>x2>>y2; Imaginary imag1(x1,y1),imag2(x2,y2); Add(imag1,imag2); Sub(imag1,imag2); return 0; } (一)SQL的定义功能 1.用SQL的定义命令创建一个职工表(zg.dbf),表结构如下所示。 字段名类型宽度小数点 职工号 C 4 姓名 C 8 性别 C 2 出生日期 d 工资 N 7 2 命令: create table zg(职工号 c(4),姓名 c(8),性别 c(2),出生日期 d,工资 n(7,2)) 2.修改上题创建的职工表。 (1)增加“职称”字段,类型为字符型,宽度为6。 alter table zg add 职称 c(6) (2)删除出生日期字段。 alter table zg drop 出生日期 (3)把性别字段的类型改为逻辑型。 alter table zg alter 性别 l (4)把工资字段改名为实发工资。 alter table zg rename 工资 to 实发工资 (二)SQL的操作功能 1.给课程表(kc)插入一条记录("2001","英语精读",2," ") insert into kc(课程号,课程名,学分) values ("2001","英语精读",2) 2.给女同学的入学分数增加10分。(提示:用update 命令) update xsqk set 入学分数=入学分数+10 where 性别="女" 3.把课程号为“1003”的学分改为3分。(提示:用update 命令) update kc set 学分=3 where 课程号="1003" 4.给成绩表(cj)中不及格成绩的数据加上删除标记。 delete from cj where 成绩<60 查看是否执行,再去掉删除标记。 Recall all (三)SQL语言的查询功能 1.查询指定列 (1)查询所有男同学的个人记录。 长沙理工大学C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: Thedressislong Theshoesarebig Thetrousersareblack 答案: #include printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序:a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4.设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include c语言实验答案 //1.1编写一程序,在屏幕上输出如下内容:// X | X | X //---+---+--- // | | //---+---+--- // 0 | 0 | 0 #include computes their sum,difference,produc t and quotient. //The first number:<第一个整数在此输入> //The second number:<第二个整数在此输入> //Results as follows: //<第一个整数>+<第二个整数>=<和> //<第一个整数>-<第二个整数>=<差> //<第一个整数>*<第二个整数>=<积> //<第一个整数>/<第二个整数>=<商> #include 实验七黑盒测试之场景法测试实验 1.1 实验目的 1、通过对简单程序进行黑盒测试,熟悉测试过程,对软件测试形成初步了解,并养成良好的测试习惯。 2、掌握黑盒测试的基础知识,能熟练应用场景法进行测试用例的设计。1.2 实验平台 操作系统:Windows 7或Windows XP 1.3 实验内容及要求 1、练习1 软件系统几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。场景法就是通过用例场景描述业务操作流程,从用例开始到结束遍历应用流程上所有基本流(基本事件)和备选流(分支事件)。下面是对某IC卡加油机应用系统的基本流和备选流的描述。 基本流A; 备选流: (1)使用场景法设计测试案例,指出场景涉及到的基本流和备选流,基本流用字母A表示,备选流用题干中描述的相应字母表示。 场景1:A 场景2:A、B 场景3:A、C 场景4:A、D 场景5:A、E (2)场景中的每一个场景都需要确定测试用例,一般采用矩阵来确定和管理测试用例。如下表所示是一种通用格式,其中行代表各个测试用例,列代表测试用例的信息。本例中的测试用例包含测试用例、ID、场景涤件、测试用例中涉及的所有数据元素和预期结果等项目。首先确定执行用例场景所需的数据元素(本例中包括账号、是否黑名单卡、输入油量、账面金额、加油机油量),然后构建矩阵,最后要确定包含执行场景所需的适当条件的测试用例。在下面的矩阵中,V 表示有效数据元素,I表示无效数据元素,n/a表示不适用,例如C01表示“成功加油”基本流。请按上述规定为其它应用场景设计用例矩阵。 测试用例表 2.程序填空 (1)以下程序的功能是计算1~50之间能被7整除的整数之和。 #include #include 《C语言程序设计》 实 验 手 册 《C语言程序设计》实验课程简介 课程名称:C语言程序设计实验 课程性质:专业必修课 课程属性:专业必修课 学时学分:学时32 学分1 开课实验室:软件实验室 面向专业:网络工程、软件工程、计算机科学与技术 一、课程的任务和基本要求 C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C 语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。 二、实验项目 【实验一】最简单的C程序---顺序程序设计 【实验二】逻辑运算和判断选取控制 【实验三】循环结构程序设计(一) 【实验四】循环结构程序设计(二) 【实验五】函数 【实验六】数组(一) 【实验七】数组(二) 【实验八】指针 【实验九】结构体、共用体和文件 【实验十】C程序综合性实验 三、有关说明 1、与其它课程和教学环节的联系: 先修课程:计算机文化 后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程 2、教材和主要参考书目: (1)教材: 《C程序设计习题解答与上机指导》,谭浩强吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目: 《C语言程序设计》谭浩强主编,清华大学出版社,2003年。 三、实验内容 实验一最简单的C程序---顺序程序设计 (验证性实验 2学时) (一)、实验目的 1.熟悉win-tc程序运行环境 2.掌握运行一个C程序的步骤,理解并学会C程序的编辑、编译、链接方法 3.掌握C语言中使用最多的一种语句——赋值语句 4.掌握数据的输入输出方法,能正确使用各种格式控制符 (二)、实验内容 1.写出下列程序的运行结果 (1)#include 《高级语言程序设计》实验报告班级:学号:姓名:成绩: 实验7 函数程序设计 一、实验目的 1.掌握函数定义的方法。 2.掌握函数实参与形参的传递方式。 3.掌握函数的嵌套调用和递归调用的方法。 4.了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1 (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。纠正程序中存在的错误,以实现其功能。程序以文件名存盘。 #include <> #include <> void sub( char s[], char t[] ) { int i, d; d=strlen( s ); for( i=1; i< d ; i++ ) for( i=0; i< d ; i++ ) t[i]=s[d-1-i] ; for( i=0; i 24c02读写程序大全 2C总线的应用(24C02子程序) // 对24C02的读、写 // extern void DelayMs(unsigned int); // extern void Read24c02(unsigned char *RamAddress,unsigned char Ro mAddress,unsigned char bytes); // extern void Write24c02(unsigned char *RamAddress,unsigned char Ro mAddress,unsigned char bytes); /***************************************************************************/ #define WriteDeviceAddress 0xa0 #define ReadDviceAddress 0xa1 #include C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。 3算法描述流程图 4源程序 #include for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。 C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include<> main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.编写程序: (1) a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 (2)a=160,b=46,c=18,d=170, 编写求(a+b)/(b-c)*(c-d)的程序。 答案: (1) #include<> main() { int a,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } (2) #include<> main() { int a,b,c,d; float x; a=160; b=46; c=18; d=170; x=(a+b)/(b-c)*(c-d); printf("(a+b)/(b-c)*(c-d)=%f\n",x); } 3. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b 时,将0赋给c。(提示:用条件运算符) 答案: #include<> main() { int a,b,c; a=0; b=-10; c= (a>b) b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 2、(1) 编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7 广东金融学院实验报告 课程名称:C++程序设计 实验编号 实验7数组与指针练习系别参考答案及实验名称 姓名学号班级 实验地点新电403实验日期2011-11-24实验时数4 指导教师曲政同组其他成员无成绩 一、实验目的及要求 1.学习C/C++数组和指针的概念和使用方法。 2.练习C++/CLI托管数组的创建方法和元素访问方法。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio2005 三、实验内容及步骤(包含简要的实验步骤流程) 1.内容和步骤 ⑴仔细阅读本课件的知识点和例题,努力理解其中的文字阐述和源代码,必要时可将源代码拷入Visual Studio2005生成的C++/CLR框架编译和运行,将运行结果与源代码对照,加深对C/C++数组和指针的理解。 ⑵在理解本课件内容的基础上,编写C/C++程序实现下列文字描述: a.声明一个int型变量x,并赋初值3; b.打印x的值; c.打印x的地址; d.声明一个指向int的指针p,并让其指向变量x; e.打印p所指变量的值 f.打印p的值; g.声明一个有10个元素的一维本地整型数组A,并为其赋初值0~9; h.在一个循环中打印A的所有元素的值; i.打印A的值; j.打印A的第一个元素的地址; k.声明一个指向int的指针q,并让其指向A的第一个元素; l.在一个循环中通过q后跟下标,打印出A的所有元素的值; m.在一个循环中通过q加上循环变量和取值运算,打印出A的所有元素的值; n.在一个循环中通过q的增量和取值运算,打印出A的所有元素的值; o.在一个循环中通过q的负增量,反序打印出A的所有元素的值; p.声明一个int型指针r,在堆中创建一个int型变量,为该变量赋初值3,并将该变量的地址赋给该指针,打印出该变量的值,然后删除该变量。 q.声明一个本地类Point(可以用包含2个int型变量和一个有参数构造函数的结构体表示)的指针s,在堆中创建一个Point类的对象,调用构造函数为该对象的两个数据成员赋初值3和4,并将该对象的地址赋给该指针,打印两个数据成员的值,然后删除该对象。 r.声明一个int型指针t,在堆中创建一个3个元素的int类型数组并将该数组的首地址赋给该指针,为三个数组元素分别赋值3、4、5,在一个循环中打印出所有元素的值,然后删除该数组。 s.声明一个本地类Point类的指针u,在堆中创建一个3个元素的Point类的对象数组(需在Point 中添加无参数构造函数)并将数组的首地址赋给该指针,为三个数组元素分别赋值(1,2)、(3,4)、(5,6),在一个循环中打印该数组所有元素分量的值,然后删除该数组。 t.用基本语法声明并创建一个10个元素的一维托管整型数组B,并在一个循环中为元素赋值0~9; u.在另一个循环中打印B所有元素的值。 v.用初值表方式声明并创建一个10个元素的一维托管整型数组C,并为其元素赋初值10~19; w.在一个循环中打印C所有元素的值。 x.用数组C为数组B赋值。 y.在一个循环中打印B和C所有元素的值。 2.提示和要求 ⑴首先将上面的文字描述拷入Visual Studio2005生成的C++/CLR框架,在每条文字描述之前加“//”将其变为注释,并在其下留一个空行准备编写对应的程序。 ⑵对应于逐条文字描述,在其下编写程序(可能是一个或一组语句),每编写一条文字描述对应的程序,就编译(运行)一次,以保证语法和算法的正确性。 ⑶当全部文字描述所对应的程序编写完成,并编译、运行正确,将文字描述和源代码拷入实验报告。 ⑷对C/C++的数组和指针做简要总结。 AT24C02串行E2PROM的读写 I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 1.I2C总线的基本结构采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。I2C总线接口电路结构如图1所示。 2.双向传输的接口特性传统的单片机串行接口的发送和接收一般都各用一条线,如MCS51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。 总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。 3.I2C总线上的时钟信号在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。 当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。 4.数据的传送在数据传送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图2所示。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。 1.数据类型 a.输入一个小数点后有多位数字的小数,实现将其保留三位小数,并输出;, #include<> main() {double b,d; printf("请输入一个小数:"); scanf("%lf",&b); printf("输出原来的数:%f\n",b); b*=1000; b+=; b=(int)b; d=b/1000; printf("输出现在的数:%.3lf\n0",d); } b.输入一个4位整数,求其得各位数字的平方和;(1234 1+4+9+16=30) #include<> main() {int n,sum=0,i,t; printf("请输入一个四位整数:\n"); scanf("%d",&n); for(i=0;i<4;i++) {t=n%10; n/=10; sum+=t*t; } printf("%d\n",sum); } c.定义字符型变量ch,写出六种给ch赋值字符’A’的代码; #include<> main() {char ch; ch='A'; ch=65; ch=0x41; ch=0101; ch='\101'; ch='\x41'; } d.编写程序输出26组大小写字母;(AaBbCc……….XxYyZz) #include<> main() {int i; for(i=65;i<91;i++) {printf("%c",i); printf("%c",i+32); } printf("\n"); } e.定义浮点型变量f1、f2,为f1赋值10的-30次,为f2赋值10的30次 #include<> main() { double f1,f2; f1=10e-30; 《高级语言程序设计》实验报告班级:_________ 学号:_______ 姓名:_________ 成绩:_________ 实验7函数程序设计 一、实验目的 1 ?掌握函数定义的方法。 2. 掌握函数实参与形参的传递方式。 3. 掌握函数的嵌套调用和递归调用的方法。 4. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1.改错题(在程序中画出错误的语句,将修改后的语句完整地写在该语句的右边。|) (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放 在t所指的数组中。例如,当s所指字符串的内容为“ ABCD时,t所指数组中的内容为“DCBAABCD纠正程序中存在的错误,以实现其功能。程序以文件名sy7_1.c存盘。 #i nclude ATMEGA16读写iic(24c02) C语言程序测试通过 #include while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i); USART_TXD(i); } } /*上面上主函数部分*/ #include 实验一熟悉C程序运行环境 班级学号姓名成绩 一、实验目的 1. 熟悉C语言Visual C++调试环境。 2. 掌握C程序的编辑、调试及运行。 二、实验内容 项目1. 调试并运行下面程序,并写出运行结果: #include <> int main() { printf(“Good morning!\n”); printf(“Hello,world!\n”); return 0; } 运行结果(注意,按照屏幕输出格式写): 项目2. 调试并运行下面程序,并写出运行结果: #include <> int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果: 项目3. 调试并运行下面程序,并写出运行结果: #include <> int max(int,int); int main() { int a , b , c; /*定义变量*/ a=23; b=56; /*为变量赋值*/ c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/ return 0; } int max(int x,int y) /*定义max函数,函数值为整型*/ { int z; /*定义变量*/ if(x>y) z=x; else z=y; return(z); /*将z的值返回*/ } 运行结果: 三、提高部分 1.试想,如果求10个数中的最大者,则程序该如何编写。 程序代码 运行结果: 上海电力学院 实验报告 课程名称高级程序设计C++(1) 实验项目实验七数组1 姓名学号班级专业 同组人姓名无指导教师姓名实验日期 一、实验目的 1、掌握一维数组的定义、赋值和输入输出的方法; 2、掌握与数组有关的算法(特别是排序算法)。 二、实验内容和步骤 编程序并上机调试运行。 1、按如下要求编程: 在第一个循环中给a数组的前10个数组元素依次赋1、 2、 3、 4、 5、 6、 7、 8、 9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1;在最后一个 循环中输出对称折叠以后的a数组的前10个元素。 ●程序源代码(注意添加注释) #include /************************************************** 24C02.C 功能描述: PC端发送3个数据n0,n1,n2. n0=0,写,将n1写入n2地址中 n0=1,读,读出n1地址中的数据,n2不起作用,但必须有 收到一个字节后,将其地址值显示在数码管第1、2位上,数值显示在第5、6位上 读出一个字节后,将其地址值显示在数码管第1、2位上,读出的值显示在第5、6位上;**************************************************/ #define uchar unsigned char #define uint unsigned int #define Slaw0x0a; //写命令字 #define Slar 0xa1; //读命令字 #include "reg52.h" #include "intrins.h" sbit Scl=P2^1; //串行时钟 sbit Sda=P2^0; //串行数据 bit Rec; //接收到数据的标志 uchar RecBuf[3]; //接收缓冲区 #define Hidden 0x10; //消隐字符在字形码表中的位置 sbit we=P2^7; sbit du=P2^6; uchar code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uchar code disptab[]={0x3f,0x6,0x5b,0x4f,0x66, 0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x0}; uchar DispBuf[6]; uchar code TH0V al=(65535-3000)/256; uchar code TL0V al=(65535-3000)%256; uchar code th1=0xfd; uchar code tl1=0xfd; //以下是中断程序,用于显示 void timer0() interrupt 1 { static uchar count; uchar tmp; P0|=0x3f; we=1; tmp=dispbit[count]; P0&=tmp; we=0; du=1; 文档从网络中收集,已重新整理排版.word版本可编辑.欢迎下载支持. 《C语言程序设计》 实验报告 2013~2014学年第二学期 班级 姓名 学号 指导教师 实验一 实验项目名称:C程序的运行环境和运行C程序的方法 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序; 2.通过运行简单的C程序,初步了解C源程序的特点。 二、预习内容: 教材《C语言程序设计教程》第1章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入并运行下面的程序: #include 2. (1) 改正后的源程序: #include 实验七参考答案
C语言程序设计实验报告参考答案
c语言实验答案
实验七-黑盒测试之场景法测试实验(参考答案)
C语言程序设计实验与习题答案
C语言实验报告参考答案
C实验报告7参考答案
24c02读写程序大全
C语言程序设计实验报告(数组)
C语言实验报告参考答案原
C++程序设计实验七_参考答案
AT24C02串行E2PROM的读写
c语言实验习题及答案详解
C实验报告7参考答案
ATMEGA16读写iic(TWI)(24c02) C语言程序
C语言程序设计实验实验指导书及答案
C++实验7及参考答案
at24c02应用程序
C语言程序设计实验报告(实验1-12)