大学《C语言程序设计实验》实验题及答案解析_第1页
大学《C语言程序设计实验》实验题及答案解析_第2页
大学《C语言程序设计实验》实验题及答案解析_第3页
大学《C语言程序设计实验》实验题及答案解析_第4页
大学《C语言程序设计实验》实验题及答案解析_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

大学《C语言程序设计实验》实验题及答案解析实验一熟悉TurboC的编程环境一:目的要求1.熟悉TurboC的编程环境;2.知道程序编辑、链接、执行的基本步骤;3.学习如何查错并修改程序;4.上机前预习编写好程序。二:实验内容与步骤调试以下两个程序/*ThefirstCProgram*/#include<stdio.h>voidmain(){printf(“Hello,World!\n”);}#include<stdio.h>voidmain(){inta,b,sum;a=123;b=456;sum=a+b;printf(“sumis%d\n”,sum);}调试通过后,自己修改程序,使程序出错,并读懂错误提示,进行修改。

实验二数据输入输出格式的程序设计一.目的要求1.进一步熟悉调试程序的方法;2.熟练掌握格式输入与格式输出函数的使用。3.掌握字符与ASCⅡ值之间的转换方法。4.上机前预习编写好程序;二.实验内容与步骤1.按右图设计屏幕输出2.光标停在EnterNumber:之后,等待输入任一字符;输入字符1,则显示:Ch=1--49ASCⅡ值字符4.再接回车键,则退出运行。三.利用字符屏幕控制函数conio.h1.clrscr();2.gotoxy(x,y)。行(1~25)列(1~80)四、利用接口库函数dos.h的调用1.类型定义结构类型structdate.d;2.getdate(&d);3.printf(“%d/%d/%d”,d.da_year,d.da_mon,d.da_day)。五、程序提示:#include<conio.h>#include<dos.h>main(){charc1;structdated;clrscr();getdate(&d);···. ······getch();暂停等待输入任意字符(或按键)}解答:#include<stdio.h>#include<conio.h>#include<dos.h>main(){charc1;structdated;clrscr();getdate(&d); printf("\t\t%d/%d/%d",d.da_year,d.da_mon,d.da_day); printf("\n*************\n"); printf("*Menu*\n"); printf("*1.Input*\n"); printf("*2.Output*\n"); printf("*3.End*\n"); printf("*************\n"); printf("EnterNumber=>\n"); printf("Ch=---------->");gotoxy(20,8);c1=getch();gotoxy(20,8);putchar(c1);gotoxy(9,9);putchar(c1);gotoxy(20,9);printf("%d",c1);}实验三选择结构程序设计一:目的要求1.熟悉用关系运行与逻辑运行符的应用;2.掌握if语句与switch语句的使用;3.上机前按实验要求预习编写出完整的程序,才允许上机。二:实验内容与步骤在书店买书,以100本为限。如果买1本不打折扣;买2本打折10%;买3本折扣为15%,买3本以上折扣为20%。设书本数为x,单价为20.00元。请使用elseif多分支结构或if嵌套结构设计实现该算法的C程序。从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。请使用switch语句实现上述功能。(提示:将成绩整除10,把score转变为处于1~10之间的整数,从而转化成switch语句中的case标号)三:选做实验实验指导书56页第二章选择结构的任意实验解答:一、#include<conio.h>#include<stdio.h>main(){intn;floatx,y;clrscr();printf("PleaseEnterTheNumber:");gotoxy(25,1);scanf("%d",&n);x=20.00;y=0; if(n<0) printf("Sorry,youputthewrongnumber!"); elseif(n==0) printf("Pleasebuyatleast1book!"); elseif(n==1){ y=x;printf("------Youshouldpay:%.2f",y*n);} elseif(n==2){ y=x*0.9;printf("------Youshouldpay:%.2f",y*n);} elseif(n==3){ y=x*0.85;printf("------Youshouldpay:%.2f",y*n);} elseif(n<=100){ y=x*0.8;printf("------Youshouldpay:%.2f",y*n);} elseif(n>100) printf("Sorry,youcanbuylessthen100books.");}二、#include<stdio.h>#include<conio.h>main(){intt;floatn;clrscr();printf("PleaseEnterTheScore:");gotoxy(24,1);scanf("%f",&n);t=n/10; if(n<0) printf("PleaseWriteTheRightScore!"); elseif(n>100) printf("IsHeAGod?"); else switch(t) { case10:printf("A+");break; case9:printf("A");break; case8:printf("B");break; case7:printf("C");break; case6:printf("D");break; default:printf("E");break; }}

实验四循环控制一:目的要求1.熟悉用while语句,do-while语句和for语句实现循环的方法;2.掌握在程序设计中用循环方法实现各种算法;3.掌握计算程序运行所占机时的计算方法;4.上机前按实验要求预习编写出完整的程序,才允许上机。二:实验内容与步骤目标:100匹马驮100担货;假设:大马一匹驮3担,中马一匹驮2担,小马两匹驮一担;组合方法1:大马、中马、小马每种不能少于一匹;组合方法2:对马匹种类无限制,可以缺少一种或缺二种问题: 1.采用组合方法1,用while求解,输出所有组合法,输出组合的总数?2.采用2种组合,用do-while求解,输出所有组合法,输出组合的总数?3.采用2种组合,用三重或二重for循环求解,输出所有组合法,输出组合的总数?4.除打印结果和多少种组合法外,还要分别打印三种算法所费机时。提示:计算一种算法所占机时的程序提示:#include<time.h>#include<conio.h>#include<dos.h>main(){clock_tstart,end;/*time_tstart,end;*/inti,big,middle,small,ncount;clrscr();start=clock();/*start=time();*/big=1;middle=1;small=2;ncount=0;printf("Thisawhileprogram\n");while(big<=33){.}end=clock();/*end=time();*/printf("Thenumofmethod1is:%d\n",ncount);printf("andthetimeis:%5.1ftime\n",difftime(end,start));/*printff(“”Thedifferenceis:%5.1fsecond\n”,difftime(end,start)/18.2);*/……}解答:一、#include<time.h>#include<conio.h>#include<dos.h>main(){clock_tstart,end;/*time_tstart,end;*/inti,big,middle,small,ncount,n;clrscr();start=clock();/*start=time();*/big=1;middle=1;small=2,i=0,n=0;ncount=0;printf("Thisawhileprogram\n");while(big<=33){for(small=2;small<=100;small=small+2) for(middle=1;middle<=100;middle++){n=big*3+middle*2+small/2;i=big+middle+small; if(n==100&&i==100) { printf("Big=%d,Middle=%d,Small=%d,n=%d,i=%d\n",big,middle,small,n,i); ncount++; }}big++;/*printf("n=%d",n);printf("big=%dsmall=%dmiddle=%d",big,small,middle);printf("\n");*/}end=clock();printf("Thenumofmethod1is:%d\n",ncount);printf("andthetimeis:%5.1ftime\n",difftime(end,start));}二、#include<time.h>#include<conio.h>#include<dos.h>main(){clock_tstart,end;/*time_tstart,end;*/inti,big,middle,small,ncount,n;clrscr();start=clock();/*start=time();*/big=0;middle=0;small=0,i=0,n=0;ncount=0;printf("Thisawhileprogram\n");do{for(small=0;small<=100;small=small+2) for(middle=0;middle<=100;middle++){n=big*3+middle*2+small/2;i=big+middle+small; if(n==100&&i==100) { printf("Big=%d,Middle=%d,Small=%d,n=%d,i=%d\n",big,middle,small,n,i); ncount++; }}big++;/*printf("n=%d",n);printf("big=%dsmall=%dmiddle=%d",big,small,middle);printf("\n");*/}while(big<=34);end=clock();printf("Thenumofmethod1is:%d\n",ncount);printf("andthetimeis:%5.1ftime\n",difftime(end,start));}三、#include<time.h>#include<conio.h>#include<dos.h>main(){clock_tstart,end;/*time_tstart,end;*/inti,big,middle,small,ncount,n;clrscr();start=clock();/*start=time();*/big=0;middle=0;small=0,i=0,n=0;ncount=0;printf("Thisawhileprogram\n");for(big=0;big<=34;big++){for(small=0;small<=100;small=small+2) for(middle=0;middle<=100;middle++){n=big*3+middle*2+small/2;i=big+middle+small; if(n==100&&i==100) { printf("Big=%d,Middle=%d,Small=%d,n=%d,i=%d\n",big,middle,small,n,i); ncount++; }}/*printf("n=%d",n);printf("big=%dsmall=%dmiddle=%d",big,small,middle);printf("\n");*/}end=clock();printf("Thenumofmethod1is:%d\n",ncount);printf("andthetimeis:%5.1ftime\n",difftime(end,start));}

实验五函数目的要求掌握函数的定义和调用方法;掌握函数实参与行参的对应关系的,以及“值传递”的方式;掌握求最大公约数和最小公倍数的方法;按实验内容要求完成全程程序设计后才允许上机。实验内容与步骤设计一个函数f,求二个数的最大公约数intf(intx,inty);设计一个函数g,求二个数的最小公倍数intg(intx,inty);从键盘输入三个浮点数,求三个数中最大数和最小数的差值。函数的定义要求在main()中实现下列操作a=inNumber();b=inNumber();c=f(a,b);d=g(a,b);输出a,b,c,d。解答:一、#include<stdio.h>#include<math.h>voidmain(){inta,b,c,d; clrscr();a=inNumber();b=inNumber();c=f(a,b);d=g(a,b); printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}intf(intx,inty){inti,t,a;floatp1,p2;if(x>=y) t=y;else t=x; for(i=1;i<=t;i++) { p1=x%i; p2=y%i; if(p1==0&&p2==0) { a=i; } }returna;}intg(intx,inty){inti,t,p1,p2,a;if(x>=y) t=x;else t=y; for(i=t;i<=(x*y);i++) { p1=i%x; p2=i%y; if(p1==0&&p2==0) { a=i;break; } }returna;}intinNumber(intx){inta;a=0;while(a==0){scanf("%d",&x);if(x>0)a=1;else{printf("Wrong!\n");a=0;}};returnx;}二、#include<stdio.h>voidmain(){floata[3],x,y;inti,j;clrscr();for(i=0;i<3;i++) scanf("%f",&a[i]); for(i=0;i<3;i++) for(j=0;j<2;j++) if(a[j]>a[j+1]) { x=a[j]; a[j]=a[j+1]; a[j+1]=x; }y=a[2]-a[0];printf("\ny=Max{a[i]}-Min{a[i]}:\n\t%.3f\n\t(%f)",y,y);}

实验六数组目的要求掌握数组的定义、赋值和输入输出的方法;掌握清屏函数clrscr()的调用方法;掌握产生随机数函数randomize()的初始化及调用方法;上机前按实验要求预习,完成全部程序设计后才允许上机。实验内容与步骤已知二维数组a[5][5],完成下列要求输入数据a[i][j]=random(100);/*产生100以内随机数*/显示数组各元素,要求整齐排列;将第1与第5行对调后,再显示之;求出每行元素的最大值,并指出其行号和列号。输入随机数的要求#include<stdlib.h>#defineRMAX5#definecMAX5#definenMAX100main(){./*变量初始化说明*/.clrscr();/*调清屏函数清屏*/randomize();/*在初始化后调用产生随机数函数*/..a[i][j]=random(nMAX);...}解答:#include<stdlib.h>#defineRMAX5#definecMAX5#definenMAX100main(){inta[5][5],i,j,temp[1][5],t,max,x,y;/*定义变量为整型(我的程序里面有些定义的变量没用,懒得删除了)*/clrscr();/*清屏*/randomize();/*在初始化后调用产生随机数函数*/for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=random(nMAX);/*给数组a[i][j]赋随机值*/for(i=0;i<5;i++){ for(j=0;j<5;j++) printf("%d\t",a[i][j]);/*输出数组a[i][j]*/ printf("\n");/*在输出完一行后自动换行(不理解的话可以暂时删掉这句话,然后运行程序看结果)*/} for(j=0;j<5;j++)/*这个循环是用于换行的*/ { temp[0][j]=a[0][j];/*将数组a的第一行的每个值都赋予temp(这里的temp是一个1*5的数组)*/ a[0][j]=a[4][j];/*将数组a的第一行的每个值替换成第五行的值*/ a[4][j]=temp[0][j];/*将数组a的第五行的每个值替换成temp的值*/ } printf("\n");/*输出一个回车*/for(i=0;i<5;i++){ for(j=0;j<5;j++) printf("%d\t",a[i][j]);/*将换行后的新数组a输出出来*/ printf("\n");/*在输出完每一行后自动换行*/}for(i=0;i<5;i++){max=a[i][0];/*定义一个最大值变量max,令其暂时等于第i行的第一个数*/ for(j=0;j<5;j++)/*让max和该行的所以数比较,如果有某个数大于max,max变为该数的值*/ if(a[i][j]>max) { max=a[i][j]; } for(j=0;j<5;j++)/*令max和第i行的每个数进行比较,输出所有等于max的数及该数的坐标*/ if(max==a[i][j])printf("\na[%d][%d]=%d",i,j,max);}}

实验七指针目的要求掌握指针的定义和使用指针变量;学会使用字符串的指针和指向数组的指针变量;学会使用指向函数的指针变量;按实验内容要求完成全程程序设计后才允许上机。实验内容与步骤设计一个函数,它有三个形参被查找的字符串str;待查找的字符xCh;在字符串str中xCh出现的位置i=0,1,…它的返回值是在str中xCh出现的次数(若str中无xCh,则返回值=0)上机要求键入待查的字符xCh;键入被查的字符串str;调用该函数;打印它的返回值和出现的位置;允许重复执行,每次以清屏开始(用循环语句控制重复执行)。提示xCh在str出现位置应设计为一整型指针,以便记下0~N个位置(整数)。#include<stdio.h>voidmain(){chartemp;intrun(),j;int(*prun)();temp='Y'; while(temp!='N'||temp!='n') { if(temp=='Y'||temp=='y') { prun=run; j=(*prun)(); if(j==0) { printf("CanNotFindThexCh!j=%d",j); } else { printf("\nj=%d",j); } printf("\nParden>Y/N:"); fflush(stdin); temp=getch(); } if(temp=='N'||temp=='n') break; if(temp!='Y'&&temp!='y') { printf("Wrong!YoucanonlyputY(N)ory(n)\nPleaseputagain(Y/N):"); fflush(stdin); temp=getch(); } }}intrun(charxCh,charstr[100],inti){intj;char*p;clrscr(); printf("xCh="); xCh=getch(); printf("%c\nstr=",xCh); gets(str); p=&str[0]; i=0; j=0; while(*p) { if(*p==xCh) { j++; printf("xCh:%d\t",i); } p=p+1; i++; } returnj;}Mian()版:#include<stdio.h>voidmain(){inti,j;charxCh,str[100],*p,temp;temp='Y';/*给temp赋初值Y,防止第一个while循环无法运行*/ while(temp!='N'||temp!='n')/*如果temp不等于n或N时,进行循环*/ { if(temp=='Y'||temp=='y')/*当temp为y或Y时,进行下列循环,用于进行题目要求的操作*/ { clrscr();/*清屏*/ printf("xCh=");/*在屏幕输出提示xCh=*/ xCh=getch();/*从屏幕读取一个字符赋给xCh(getch()和getchar()的区别:前者只要输入一个字符就结束输入过程,后者需要按回车或空格后才结束输入过程)*/ printf("%c\nstr=",xCh);/*在屏幕xCh=后面输出刚才输入的xCh的值,并提示用户输入str(因为我们用getch(),输入完字符后会自动结束xCh的输入进入下一指令的执行(在本题中,下一指令是:printf("%c\nstr=",xCh);),而不在屏幕输出刚才输入的字符)【不理解的话把该句改成{printf("\nstr=");}看看输出结果就知道了】*/ gets(str);/*输入str*/ p=&str[0];/*将指针地址指向str这个字符串的首字符位置*/ i=0; j=0; while(*p)/*当p所指向的字符不为空字符时,进行判断循环*/ { if(*p==xCh)/*当p所指向的字符为所需寻找的xCh时,进行以下操作*/ { i++;/*i自加1,用于累计str中xCh的数目*/ printf("xCh:%d\t",j);/*输出xCh在str中出现的位置*/ } p=p+1;/*指针地址移向str的下个字符*/ j++;/*j用于记录此时p的位置,在str中第一个字符时=0,第二个时=1,以此类推*/ } if(i==0)/*当str中没有xCh这个字符时,i=0*/ { printf("CanNotFindThexCh!i=%d",i);/*在屏幕中提示无法找到str中的xCh,并输出i=0*/ } else { printf("\ni=%d",i);/*\n为换行*/ } printf("\nParden>Y/N:");fflush(stdin);/*清空计算机缓存*/ temp=getch();/*从屏幕中读取一个字符赋给temp*/ } if(temp=='N'||temp=='n')/*当temp为N或n时*/ break;/*跳出循环*/ if(temp!='Y'&&temp!='y')/*当输入的temp不为Y、y、N、n时*/ { printf("Wrong!YoucanonlyputY(N)ory(n)\nPleaseputagain(Y/N):");fflush(stdin); temp=getch(); } }}/*fflush(stdin)*/实验八结构体与共用体目的要求掌握结构体类型变量与数组的定义和使用;学会使用指针变量和结构体指针数组;按实验内容要求完成全程程序设计后才允许上机。实验内容与步骤设计一个结构structstudent{longno; /*学号*/charname[10]; /*姓名*/charsex; /*性别*/intage; /*年龄*/floatscore; /*平均成绩*/}完成下列任务:输入实际学生人数n(2<n<4);输入每个学生的信息,组成结构数组,并输出;统计男、女生人数并输出;计算全班平均成绩并输出;将低于全班平均成绩的学生信息按行输出上机要求可划分为若干个函数,或写成一个main();要求输出格式有提示及相应数据。#include<stdio.h>structstudent { longno; /*学号*/ charname[10]; /*姓名*/ charsex; /*性别(gender)*/

温馨提示

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

评论

0/150

提交评论