第一篇:C语言程序设计实验教案
C语言程序设计实验教案
目
录
实验一visual c++编译环境的使用..............................................................................2 实验二 顺序程序设计...............................................................................................6 实验三 选择结构程序设计........................................................................................9 实验四 循环结构程序设计......................................................................................13 实验五 函数...........................................................................................................17 实验六 指针...........................................................................................................22 实验七 数组...........................................................................................................25 实验八 结构体........................................................................................................32
实验一visual c++编译环境的使用
实验目的:
1.掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。
2.掌握c语言程序设计的基本框架,能够编写简单的c程序。3.了解程序调试的思想,能找出并改正c程序中的语法错误。实验内容:
1.在“我的电脑”上新建一个文件夹,用于存放c程序,文件夹名字可以是学号姓名。2.调试示例,在屏幕上显示一个短句“Hello World!”。
源程序
#include
Hello World!基本步骤:(要求熟练掌握)1)启动VC++ “开始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++6.0”进入VC++编程环境。2)新建文件(*.cpp)
“文件”->“新建”,单击“文件”选项卡,选择“C++Source Files”,修改文件保存“目录”和“文件”(文件名),单击“确定”。
3)编辑和保存(注意:源程序一定要在英文状态下输入,即字符标点都要在半角状态下,同时注意大小写,一般都用小写)
在编辑窗口输入源程序,然后执行“文件”->“保存”或“文件”->“另存为” 4)编译(*.obj)
用来检查语法错误
“编译”->“编译”或Ctrl+F7,在产生的工作区队话框中,选择“是”。5)连接(*.exe)“编译”->“构件”或F7 6)运行
“编译”->“执行”或Ctrl+F5 7)关闭程序工作区
“文件”->“关闭工作区” 8)打开文件
“文件”->“打开”
9)查看C源文件、目标文件和可执行文件的存放位置。
源文件在保存目录下,目标文件和可执行文件在“保存目录Debug”中
3.编程,在屏幕上显示一个短句“this is my first c program.”。4.调试示例,在屏幕上显示一个短句“welcome to you!”。源程序(有错误的程序)#include
1)按照实验2中介绍的步骤1)~3)输入上述源程序并保存。
2)编译,“编译”->“编译”(Ctrl+F7),信息窗口中显示编译出错信息,如下图所示。3)找出错误,在信息窗口中依次双击出错信息,编辑窗口就会出现一个箭头指向程序出错的位置,一般在箭头的当前行或上一行,可以找到出错语句。
第4行,出错信息:Welcome是一个未定义的变量,但Welcome并不是变量,出错的原因是Welcome前少了一个双引号。
4)改正错误,重新编译,得下如下图所示出错信息。
出错信息:“}”前少了分号。
5)再次改正错误,在“}”前即printf()后加上“;”(英文状态),生新编译,显示正确 6)连接,“编译”->“构件”(F7),出现如下出错信息。
出错信息:缺少主函数。
7)改正错误,即把“mian”改为“main”后,重新连接,信息窗口显示连接正确。8)运行,“编译”->“执行”(Ctrl+F5),观察结果是否与要求一致。5.改错,改正下列程序中的错误,在屏幕上显示以下3行信息。
**************** Welcome **************** 源程序(有错误的程序)#include
}
实验报告要求
将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。
Printf(“
Welcome”)Printf(“****************n”);
实验二 顺序程序设计
【实验目的】
1.学会顺序程序设计的思想
2.进一步熟悉Turbo C集成编译环境的使用,达到熟练使用的目的 3.熟练掌握各种数据类型的输入输出格式,并学会使用输入输出函数 4.学会使用表达式
【实验内容】
1.在屏幕中输出一行文字“Hello,Welcome!” 说明:
(1)只需要在屏幕中显示一行文字即可 参考程序如下:
#include
printf(“Hello,Welcome!n”);}
2. 输入一个华氏温度,要求输出摄氏温度。公式为
输出要求有文字说明,取两位小数
说明:
(1)摄氏温度F和华氏温度c都应用float类型变量存储(2)注意表达式书写中的各变量的顺序问题(3)输出时只需输出两位小数 参考程序如下:
#include
float F,c;
printf(“input F:”);
scanf(“%f”,&F);
c=5*(F-32)/9;
printf(“c=%.2fn”,c);}
3.输入三角形三边长a、b、c,求三角形周长和l面积s。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明:
(1)程序设计中使用的所有变量均为float类型 c59F32(2)三角形周长公式:labc
abc2(3)三角形面积公式;sp(pa)(pb)(pc),其中
p
(4)注意应保证输入数据能够构成三角形
(5)需要使用开根号函数sqrt,在程序顶部加上#include
#include
float a,b,c,l,s;
float p;
printf(“input a,b,c:”);
scanf(“%f,%f,%f”,&a,&b,&c);
l=a+b+c;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf(“l=%.2fn”,l);printf(“s=%.2fn”,s);}
4.设圆半径r1.5,圆柱高h3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明:
(1)程序设计中使用的所有变量均为float类型(2)圆周长公式:l2r(3)圆面积公式:S1r(4)圆球表面积公式:S24r
V14322(5)圆球体积公式:
r3
(6)圆柱体积公式:V2rh 参考程序如下:
#include
2main(){
float r=1.5,h=3;
float l,s1,s2,v1,v2;
l=2*PI*r;
s1=PI*r*r;
s2=4*PI*r*r;
v1=4*PI*r*r*r/3;
v2=PI*r*r*h;
printf(“l=%.2fn”,l);printf(“s1=%.2fn”,s1);printf(“s2=%.2fn”,s2);printf(“v1=%.2fn”,v1);printf(“v2=%.2fn”,v2);}
实验三 选择结构程序设计
【实验目的】
1.了解C语言的逻辑运算 2.学会使用if语句和switch语句 3.熟练掌握选择结构程序设计方法
【实验内容】 1.有一函数
y x
x1 1x10 2x
13x11
x10
写一程序,输入x,输出y值 说明:
(1)根据输入x的不同求y的值,使用if语句
(2)分别输入三个分段中的三个数,判断输出结果是否正确,测试程序正确与否 参考程序如下:
#include
float x,y;
printf(“input x:”);
scanf(“%f”,&x);
if(x<1)
y=x;
if(x>=1 && x<10)
y=2*x-1;
if(x>=10)
y=3*x-11;printf(“y=%fn”,y);}
2.从键盘输入一个字符,可以是数字、字母、或是标点符号,对输入的字符进行判断,如果是数字则输出“* is a number!”,如果是字母则输出“* is a letter!”,如果是其他的字符怎输出“* is the other!”(*为输入的字符)说明:
(1)从键盘输入一个字符,用char类型变量存储(2)使用if语句作判断(3)判断条件根据输入字符的ASCII码值的范围,具体的ASCII码值参看书后的ASCII码表
参考程序如下:
#include
char c;
printf(“input a char:”);
scanf(“%c”,&c);
if(c>=48 && c<=57)
printf(“%c is a number!n”,c);
else if((c>=65 && c<=90)||(c>=97 && c<=122))
printf(“%c is a letter!n”,c);
else
printf(“%c is the other!n”,c);}
3.输入两个实数a、b,保证变量a中存储的是较大的数,变量b中存储的实较小的数,并按照由大到小的顺序输出。说明:
(1)需要对输入的两个数进行比较,判断是否需要交换两个数(2)按照从大到小的顺序输出两个数 参考程序如下:
#include
float a,b;
float temp;
printf(“input a,b:”);
scanf(“%f,%f”,&a,&b);
if(a
{
temp=a;
} printf(“%f,%fn”,a,b);} 4.输入一年份,判断该年是否是闰年。说明:
(1)判断闰年的条件:能够被4整除,但不能被100整除或者能被100整除,又能被400整除
(2)使用一个变量来代表是否是闰年 a=b;b=temp;10(3)如果是闰年则输出“* is a leap year!”,否则输出“* is not a leap year!”。*代表输入的年份
参考程序如下:
#include
int year;
int flag=0;
printf(“input a year:”);
scanf(“%d”,&year);
if((year%4==0 && year%100!=0)||(year%100==0 && year%400==0))
flag=1;
if(flag==1)
printf(“%d is a leap year!n”,year);
else
printf(“%d is not a leap year!n”,year);}
5.从键盘输入一个月号,显示输出该月号的英文名称 说明:
(1)使用if语句较为麻烦,因为需要做12次比较(2)使用switch语句
(3)如果输入月份超出范围,则应当输出错误信息 参考程序如下:
#include
int month;
printf(“input a month:”);
scanf(“%d”,&month);
switch(month)
{
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf(“January!n”);printf(“February!n”);break;break;printf(“March!n”);break;printf(“April!n”);break;printf(“May!n”);break;printf(“June!n”);break;printf(“July!n”);break;printf(“August!n”);break;printf(“September!n”);break;case 10: printf(“October!n”);break;case 11: printf(“November!n”);break;case 12: printf(“December!n”);break;
} } default: printf(“input error!n”);12
实验四 循环结构程序设计
【实验目的】
1.学会使用while、do-while、for语句 2.熟练掌握循环结构程序设计方法 3.掌握选择结构与循环结构的嵌套
【实验内容】
201.求和说明: n!n1(即求1!+2!+„„+20!)
(1)首先要求出每一项的n!的值
(2)然后把各项相加得到所求的值
(3)存储求和运算结果的变量的初始值应为0(4)存储求积运算结果的变量的初始值应为1 参考程序如下: ①使用while循环
#include
float sum=0;
float mid=1;
int n=1;
while(n!=21)
{
mid=mid*n;
} printf(“sum=%fn”,sum);}
②使用for循环
#include
float sum=0;
float mid=1;
int n;
for(n=1;n<=20;n++)
{
mid=mid*n;n++;sum=sum+mid;
sum=sum+mid;} printf(“sum=%fn”,sum);}
2.求出100到200以内最大的素数和最小的素数,并求出两者的差值 说明:
(1)素数的概念:只能被1和自身整除的正整数
(2)分别求出这个两个素数,并输出,输出格式为:
big one:*
small one:*
最小的素数正序找出
最大的素数倒序找出
(3)求出两者的差,并输出,输出格式为:
result:* 参考程序如下:
#include
int big,small;
int result;
} for(i=200;i>=100;i--){
int i,j;int flag;for(i=100;i<200;i++){ flag=0;for(j=2;j
} if(i%j==0){
} flag=1;break;if(flag==0){
} small=i;break;flag=0;for(j=2;j
{
} if(flag==0){
} big=i;break;if(i%j==0){ flag=1;break;}
} result=big-small;printf(“big:%dn”,big);printf(“small:%dn”,small);printf(“reslut:%dn”,result);}
3.输入两个正整数m和n,求其最大公约数和最小公倍数 说明:
(1)最大公约数:能够被m和n同时整除的最大正整数(2)最小公倍数:m和n相乘的积除以最大公约数
(3)使用for循环,将m和n同时除以1到m(m为m和n两者中较小者),直到找出最大的正整数即为最大公约数(4)输出格式如下:
The greatest common divisor is *!
The least common multiple is *!参考程序如下:
#include
printf(“input m,n:”);
scanf(“%d,%d”,&m,&n);if(m>n){
temp=m;m=n;
n=temp;} for(i=1;i<=m;i++){
if(n%i==0 && m%i==0)
great=i;} least=m*n/great;printf(“The greatest common divisor is %dn”,great);printf(“The least common multiple is %dn”,least);}
4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本书。例如,153是一水仙花数,因为153153 说明:(1)“水仙花数”是三位数,所以范围是从100到999(2)使用for循环
(3)循环中需要把数字的每一位都分离出来,然后求和,同原数字比较,进行判断 参考程序如下:
#include
int i;int temp;for(i=100;i<1000;i++){ a=i/100;b=(i-a*100)/10;c=i%10;temp=a*a*a+b*b*b+c*c*c;if(i==temp)printf(“%dn”,i);
33} }
实验五 函数
【实验目的】
1.掌握C语言函数的定义、声明以及函数的调用方法 2.了解主调函数和被调函数之间的参数传递方式 3.熟练掌握数组作为函数参数的用法
【实验内容】
1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。说明:
(1)判断素数的函数名为Prime(2)传递参数为int类型的变量(3)输出格式为:
* is a prime!或者* is not a prime!参考程序如下:
#include if(num%i==0) { } flag=1;break;} if(flag==0)printf(“%d is a prime!n”,num);else printf(“%d is not a prime!n”,num);} main(){ int num;printf(“input a num:”);scanf(“%d”,&num);Prime(num);} 2.写一个函数,用“冒泡法”对输入的10个数字由小到大顺序排列,并输出。说明: (1)排序的函数名为Sort(2)排序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数(4)使用“冒泡法”排序 参考程序如下: #include } } main(){ int num[10];int i;printf(“input 10 numbers:”);for(i=0;i<10;i++) scanf(“%d”,&num[i]);Sort(num);printf(“the sorted numbers:”);for(i=0;i<10;i++) printf(“%d ”,num[i]);} 3.写一函数,使给定的一个二维数组(5×5)转置,即行列互换。说明: (1)使用5×5的二维数组存放数据 (2)矩阵转置的函数名为Turn(2)转置前后的输入输出都应在主函数中完成(3)使用数组作为函数参数 for(j=0;j<9-i;j++){ } if(num[j]>num[j+1]){ temp=num[j]; } num[j]=num[j+1];num[j+1]=temp;18 参考程序如下: #include } } main(){ int num[5][5]={{1,2,3,4,5},{6,7,8,9,0},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; int i,j;printf(“Before array be turned:n”);for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);for(j=i;j<5;j++){ } temp=num[i][j];num[i][j]=num[j][i];num[j][i]=temp; printf(“n”);} Turn(num);printf(“After array be turned:n”);for(i=0;i<5;i++){ } } 4.写一函数,使输入的字符串反序存放,在主函数中输入和输出字符串。说明: (1)字符串反序的函数名为Reverse(2)反序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数 for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);printf(“n”);19(4)需要使用strlen函数得到字符串长度,需要在源文件头部加入#include #include } } main(){ char str[50];printf(“input a string:”);scanf(“%s”,str);Reverse(str);printf(“After reversed is %sn”,str);} 5.写一函数,将两个字符串连接。 说明: (1)连接两个字符串的函数名为:Connect(2)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和 (3)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边 (4)输出格式为: The connected string is *!(5)使用数组作为函数参数 (6)连接前后的字符串输出都要在主函数中完成,自定义函数只完成连接功能 参考程序如下: #include str1[i]=str2[j];str1[i]=' ';} main(){ char str1[50],str2[20];int i,j;printf(“input string1:”);scanf(“%s”,str1);getchar();printf(“input string2:”);scanf(“%s”,str2);Connect(str1,str2);printf(“The connected string is %sn”,str1);} 6.写一函数,求字符串的长度,并编写主函数。说明: (1)求字符串长度的函数名为:Count(2)字符串结束的标志是’ ’(3)输出格式为: The length of string is *!(4)使用数组作为函数参数 参考程序如下: #include 实验六 指针 【实验目的】 1.掌握C语言指针变量的定义、声明和赋值 2.学会使用指针变量的程序设计 3.掌握指针作为函数参数的用法 【实验内容】 1.使用指针作为函数参数,写一交换两个数的函数 说明: (1)交换两个数的函数名为:Swap(2)使用指针变量作为函数参数 (3)在主函数中输入输出,自定义函数只完成交换功能 参考程序如下: #include 2.使用指针作为函数参数,写一求数组中最大值和最小值的函数。说明: (1)函数名为:MaxAndMin(2)使用指针指向一维数组 (3)最大值和最小值的输出必须要在主函数中 参考程序如下: #include *max=array[0];*min=array[0];for(i=0;i<10;i++){ if(*max } } main(){ int array[10]={0,1,2,3,4,5,6,7,8,9};int max,min;int *p1,*p2;p1=&max;p2=&min;MaxAndMin(array,p1,p2);printf(“max=%dnmin=%dn”,max,min);} 3.找出以下程序的错误,并加以修改。①交换两个数 #include temp=p1; p1=p2; p2=temp;} main(){ int a,b;int *pointer_1,*pointer_2; scanf(“%d,%d”,&a,&b); pointer_1=&a;pointer_2=&b;Swap(pointer_1,pointer_2); } ②输出数组重点全部元素 #include *p++=i; for(i=0;i<10;i++) printf(“a[%d]=%dn”,i,*p++);} 4.写一函数,求出矩阵中的最大值和最小值,要求使用指针作为函数参数。说明: (1)使用二维数组存放矩阵元素(2)只用指针变量指向数组(3)函数名为:ArrayMaxAndMin 参考程序如下: #include *min=*(array+i*n+j);for(i=0;i } if(*max<*(array+i*n+j))*max=*(array+i*n+j);if(*min>*(array+i*n+j))*min=*(array+i*n+j); } } main(){ int array[3][3]={1,2,3,4,5,6,7,8,9};int max,min;int *p,*p1,*p2;p=array;p1=&max;p2=&min;ArrayMaxAndMin(p,p1,p2,3);printf(“max=%dnmin=%dn”,max,min);} 实验七 数组 【实验目的】 1.掌握一维数组和二维数组的定义、赋值和初始化的方法 2.掌握字符数组的使用 3.熟练掌握与数组相关的各种算法 【实验内容】 1.从键盘输入10个整数,对这个十个数进行排序,并输出 说明: (1)将这10个整数存入一个含有10个元素的一维数组中 (2)冒泡法:从第一个数开始依次让相邻的两个数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍比较后,最大的数已放在最后,第二遍只需考虑剩下的数,以此类推直到最后两个数比较后就可以完成排序。(3)比较完成后将数组中元素依次输出 参考程序如下: #include scanf(“%d”,&num[i]);for(i=0;i<=8;i++){ for(j=0;j<9-i;j++){ if(num[j]>num[j+1]){ temp=num[j];num[j]=num[j+1];num[j+1]=temp; } } } printf(“the sorted numbers:”);printf(“%d ”,num[i]);for(i=0;i<10;i++) } 2.从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数 说明: (1)输入时需要用到的输入格式控制字是%s(2)字符串存入一个足够大的字符数组中,保证输入的字符个数不要超过最大个数(3)使用循环控制语句,需要了解字符数组的结束标志是’ ’,作为循环的结束标志(4)输出格式如下: The number of * is *!参考程序如下: #include { if(str[i]==ch)count++;i++;} printf(“The number of %c is %d!n”,ch,count);} 注意: 程序中多了一行getchar(),这并不是多余的,而是因为在输入完字符串后,键入的回车被放入到内存的输入缓冲区中,在输入特殊字符的时候ch得到了上一个回车,而无法得到我们要输入的字符,因此需要使用一行getchar()将缓冲区中的回车读出,相当于清除缓冲区的作用。 3.青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 说明: (1)将10位评委的打分放入一个含有10个元素的一维数组中(2)程序设计重点是排序 (3)排序后只要用中间的8个元素即可(4)输出格式为: The average is *!参考程序如下: #include scanf(“%f”,&score[i]);for(i=0;i<=8;i++){ for(j=0;j<9-i;j++){ if(score[j]>score[j+1]){ } temp=score[j];score[j]=score[j+1];score[j+1]=temp;} } for(i=1;i<=8;i++){ sum=sum+score[i]; } average=sum/8;printf(“The average is %f!n”,average);} 4.将两个字符串连接起来,不要使用strcat函数。 说明: (1)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和 (2)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边 (3)输出格式为: The connected string is *!参考程序如下: #include printf(“input string1:”);scanf(“%s”,str1);getchar();printf(“input string2:”);scanf(“%s”,str2);for(i=0;str1[i]!=' ';i++);for(j=0;str2[j]!=' ';j++,i++) str1[i]=str2[j];str1[i]=' ';printf(“The connected string is %sn”,str1);} 5.已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。说明: (1)需要保证数组的元素据个数比插入前多1(2)需要找到在数组中插入的位置 (3)可倒序查找:假设从小到大排序,从最后一个开始查找,如果要插入元素比当前数组元素小则将该数组元素赋予后边一个元素,继续比较;否则将要插入元素赋予该数组元素的下一个元素,然后break结束循环(4)输入该数组即可 参考程序如下: #include if(a[i]>b)a[i+1]=a[i];else { } a[i+1]=b;break;} printf(“The new sorted array is ”);for(i=0;i<10;i++) } printf(“%d ”,a[i]);6.将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。说明: (1)只要将原来数组中的值以中间值为中心交换 n1(2)交换次数为2次 (3)注意此时的n是数组最后一个元素的下标 参考程序如下: #include temp=num1[i]; num1[i]=num1[9-i];num1[9-i]=temp;} for(i=0;i<(8+1)/2;i++){ temp=num2[i];num2[i]=num2[8-i];num2[8-i]=temp; } printf(“The converted array1 is ”);for(i=0;i<10;i++) printf(“%d ”,num1[i]);printf(“nThe converted array2 is ”);for(i=0;i<9;i++) printf(“%d ”,num2[i]);} 7.求一个3×3矩阵的对角线元素之和 说明: (1)使用3×3的二维数组存储数据 (2)使用for循环嵌套,判断数组中元素是否是对角线元素,如果是则相加(3)对角线元素的特点是行号和列号相同 参考程序如下: #include int array[3][3]={1,2,3,4,5,6,7,8,9};int sum=0;int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++){ } if(i==j)sum=sum+array[i][j];{ } printf(“summary is %dn”,sum);} 8.设计一个较为复杂的一维数组操作程序,实现对一维数组的基本操作 说明: (1)通过输入函数实现对一维数组的输入,可以将数组定义为100个整型元素,输入其中的10个元素 (2)在屏幕上将数组中的10个元素输出 (3)往数组中插入一个元素,并将插入后的11个元素输出(4)从数组中删除一个元素,并将删除后的10个元素输出 (5)从数组中查找一个元素,并将查找后的元素下标输出,如果元素不存在,给出提示 参考程序如下: #include int a[100],i,j;int ins,del,find,pos;printf(“input the data: ”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“The array is ”);for(i=0;i<10;i++)printf(“%d ”,a[i]);printf(“ninsert a data: ”);scanf(“%d”,&ins);for(i=0;i<10;i++){ if(ins for(j=9;j>=i;j--)a[j+1]=a[j];a[i]=ins;break; } } if(i==10) a[i]=ins;printf(“nAfter insert: ”);for(i=0;i<11;i++)printf(“%d ”,a[i]);printf(“ndelete a data: ”);scanf(“%d”,&del);for(i=0;i<11;i++){ if(del==a[i]) { for(j=i;j<10;j++) a[j]=a[j+1];break; } } if(i==11) printf(“nnot foundn”);else { printf(“nAfter delte: ”); for(i=0;i<10;i++)printf(“%d ”,a[i]);} printf(“nfind a data: ”);scanf(“%d”,&find);for(i=0;i<10;i++){ if(find==a[i]) { pos=i; break; } } if(i==10) printf(“nnot foundn”);else printf(“npos=%dn”,pos+1);} 实验八 结构体 【实验目的】 1.掌握C语言结构体变量的定义和使用 2.学会设计简单的结构体程序 【实验内容】 1.有一学生信息包含学号、姓名、性别、年龄、电话等信息,要求设以一个结构体用于存储该学生信息,实现学生信息的输入和显示。说明: (1)使用结构体实现学生信息的存储(2)按照序号顺序排列学生信息(3)实现按照序号查找学生信息 参考程序如下: #include if(i==0)printf(“The first onen”);if(i==1)printf(“The second onen”);if(i==2)printf(“The third onen”);printf(“ input number:”);scanf(“%s”,stu[i].num);printf(“ input name:”);scanf(“%s”,stu[i].name);printf(“ input sex:”);scanf(“%s”,stu[i].sex);printf(“ input age:”);scanf(“%d”,&stu[i].age); } printf(“Which one do you want to see?(1,2,3)”);scanf(“%d”,&choice);choice--;printf(“ The number is %sn”,stu[choice].num);printf(“ The name is %sn”,stu[choice].name);printf(“ The sex is %sn”,stu[choice].sex);printf(“ The age is %dn”,stu[choice].age);} 电子科技大学 计算机 学院 标 准 实 验 报 告 (实验)课程名称 C语言程序设计 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 四 学生姓名: 学 号: 指导教师:刘 勇 实验地点: 计算机学院软件306室 实验日期: ****年**月**日 一、实验室名称: 软件实验室 二、实验项目名称:函数的应用及预处理 三、实验学时:2 四、实验原理: 使用Turbo C软件(简称TC),在微型计算机上,对其程序进行编辑、编译、连接与运行。Turbo C是一个集成环境,它具有方便、直观、易用的界面和丰富的库函数。通过上机练习掌握在TC环境下编辑、编译、连接、和运行C程序的方法和过程。 五、实验目的 1. 掌握C语言中定义函数的方法; 2. 掌握函数传值调用的方法; 3. 掌握函数传址调用的方法; 4. 掌握递归函数的设计方法; 5. 掌握命令行参数的使用方法; 6. 掌握函数在不同文件中的编译、链接方法。 六、实验内容 编程实验,完成以下上机内容,调试运行程序并完成报告 1)、教材第七章习题7.4; 2)、编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出; 3)、教材第七章习题7.11; 4)、教材第七章习题7.15; 5)、教材第七章习题7.24; 6)、求解汉渃塔(tower of Hanoi)问题。在一块平板上立有3根立柱,从左到右分别标记为A,B,C。最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。要求将这些盘从A移到C(可以借助B柱)。条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。(提示:利用函数的递归调用); 七、实验器材(设备、元器件): pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。 软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。 八、实验步骤: 实验编程与运行结果 ⑴ 编写一个求两个整数的最小公倍数的函数,两个整数由键盘输入,用主函数调用这个函数,并输出结果。 程序文件名为7_4.c,源程序清单如下: #include 运行结果: ⑵ 编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出。 程序文件名为testf3.c,源程序清单如下: main(){ int i,j,a[7];int temp;clrscr();for(i=1;i<7;i++){ printf(“nInput a[%d]=”,i);scanf(“%d”,&a[i]);} for(i=1;i<6;i++)for(j=1;j<7;j++){ if(a[j] temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } for(i=1;i<7;i++){ printf(“n%5d”,a[i]);} }_ 运行结果: ⑶ 编写一个通过函数调用把输入的小写字符串变为大写字符串的程序。 程序文件名为7_11.c,源程序清单如下: #include 运行结果: ⑷ 编写一个求三个整数中最小值整数的函数,主程序要求三个整数由命令行参数输入,调用该函数并输出结果。 程序文件名为7_15.c,源程序清单如下: #include #include 运行结果: ⑸ 编写一个程序,先定义一个将字符大写、小写和数字进行分类的带参数宏,然后对从键盘输入的一系列字符进行分类计数,并输出计数的结果,程序遇到字符‘*’结束。 程序文件名为7_24.c,源程序清单如下: #include 运行结果: ⑹ 求解汉渃塔(tower of Hanoi)问题。在一块平板上立有3根立柱,从左到右分别标记为A,B,C。最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。要求将这些盘从A移到C(可以借助B柱)。条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。(提示:利用函数的递归调用) 程序文件名为testf4.c,源程序清单如下: void move(char x,char y){ printf(“%c------%c> ”,x,y);} void hanoi(int n,char one,char two,char three){ if(n==1)move(one,three);else { hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);} } main(){ int m;printf(“Input the number of diskes: ”);scanf(“%d”,&m);printf(“The step to moving %3d diskes: n”,m);hanoi(m,'A','B','C');}_ 运行结果: 九、总结及心得体会: 十、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 电子科技大学 计算机 学院 标 准 实 验 报 告 (实验)课程名称 C语言程序设计 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 四 学生姓名: 学 号: 指导教师:王瑞锦 实验地点: 实验日期: ****年**月**日 一、实验室名称: 软件实验室 二、实验项目名称:函数的应用及预处理 三、实验学时:2 四、实验原理: 使用Turbo C软件(简称TC),在微型计算机上,对其程序进行编辑、编译、连接与运行。Turbo C是一个集成环境,它具有方便、直观、易用的界面和丰富的库函数。通过上机练习掌握在TC环境下编辑、编译、连接、和运行C程序的方法和过程。 五、实验目的 1. 掌握C语言中定义函数的方法; 2. 掌握函数传值调用的方法; 3. 掌握函数传址调用的方法; 4. 掌握递归函数的设计方法; 5. 掌握命令行参数的使用方法; 6. 掌握函数在不同文件中的编译、链接方法。 六、实验内容 编程实验,完成以下上机内容,调试运行程序并完成报告 1)、教材第七章习题7.4; 2)、编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出; 3)、教材第七章习题7.11; 4)、教材第七章习题7.15; 5)、教材第七章习题7.24; 6)、求解汉渃塔(tower of Hanoi)问题。在一块平板上立有3根立柱,从左到右分别标记为A,B,C。最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。要求将这些盘从A移到C(可以借助B柱)。条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。(提示:利用函数的递归调用); 七、实验器材(设备、元器件): pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。 软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。 八、实验步骤: 实验编程与运行结果 ⑴ 编写一个求两个整数的最小公倍数的函数,两个整数由键盘输入,用主函数调用这个函数,并输出结果。 程序文件名为7_4.c,源程序清单如下: #include 运行结果: ⑵ 编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出。 程序文件名为testf3.c,源程序清单如下: main(){ int i,j,a[7];int temp;clrscr();for(i=1;i<7;i++){ printf(“nInput a[%d]=”,i);scanf(“%d”,&a[i]);} for(i=1;i<6;i++)for(j=1;j<7;j++){ if(a[j] temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } for(i=1;i<7;i++){ printf(“n%5d”,a[i]);} }_ 运行结果: ⑶ 编写一个通过函数调用把输入的小写字符串变为大写字符串的程序。 程序文件名为7_11.c,源程序清单如下: #include 运行结果: ⑷ 编写一个求三个整数中最小值整数的函数,主程序要求三个整数由命令行参数输入,调用该函数并输出结果。 程序文件名为7_15.c,源程序清单如下: #include #include 运行结果: ⑸ 编写一个程序,先定义一个将字符大写、小写和数字进行分类的带参数宏,然后对从键盘输入的一系列字符进行分类计数,并输出计数的结果,程序遇到字符‘*’结束。 程序文件名为7_24.c,源程序清单如下: #include 运行结果: ⑹ 求解汉渃塔(tower of Hanoi)问题。在一块平板上立有3根立柱,从左到右分别标记为A,B,C。最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。要求将这些盘从A移到C(可以借助B柱)。条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。(提示:利用函数的递归调用) 程序文件名为testf4.c,源程序清单如下: void move(char x,char y){ printf(“%c------%c> ”,x,y);} void hanoi(int n,char one,char two,char three){ if(n==1)move(one,three);else { hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);} } main(){ int m;printf(“Input the number of diskes: ”);scanf(“%d”,&m);printf(“The step to moving %3d diskes: n”,m);hanoi(m,'A','B','C');}_ 运行结果: 九、总结及心得体会: 十、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 电子科技大学 计算机 学院 标 准 实 验 报 告 (实验)课程名称 C语言程序设计 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 五 学生姓名: 学 号: 指导教师:王瑞锦 实验地点: 实验日期: ****年**月**日 一、实验室名称: 软件实验室 二、实验项目名称:指针 三、实验学时:2 四、实验原理: 使用Turbo C软件(简称TC),在微型计算机上,对其程序进行编辑、编译、连接与运行。Turbo C是一个集成环境,它具有方便、直观、易用的界面和丰富的库函数。通过上机练习掌握在TC环境下编辑、编译、连接、和运行C程序的方法和过程。 指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的变量或函数的值。*和&两个地方要注意: 在程序声明变量的时候的*,只是表明“它是一个整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆; 在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。 这点不要和(*)声明符,(&)操作符混淆。双重指针(指向指针的指针) 指针数组:就是一个整数数组,那个数组的各个元素都是整数,指向某个内存地址。 数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。 指向函数的指针:从二进制角度考虑,数组名是该数组数据段首地址,函数名就是该代码段的首地址,可以用“int *fun()”。在二进制层面,代码段和数据段什么区别? 五、实验目的 1. 掌握指针数组; 2. 掌握数组指针; 3. 掌握指向函数的指针; 六、实验内容 编程实验,完成以下上机内容,调试运行程序并完成报告 1、输入三个整数或者三个字符,按由大到小的顺序输出; 2、* 输入10个整数,将其中最小的数和第一个数对换,把最大的数与最后一个数对换。编写三个程序,1、输入十个数,2.进行处理,3输出十个数*/ 3、*有n个人围城一圈。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那个人 */ 4/*输入一行文字,找出其中大写字母,小写字母,空格,数字以其他的字符各有多少?*/ 5/*将一个5×5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从坐到右,从上到下顺序依次从小到大存放),编写一个函数实现之,用main函数调用 */ 6、/*在主函数中输入10个等长的字符串。用另一个函数对他们排序。然后在主函数输出这个10个已排好序的字符串 */ 7、/*有一个班的4个学生,有5门课程。 1、求第一门课的平均分; 2、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分 3、找出平均分在90分以上或全部课程成绩在85分以上的学生。分别编写三个函数来实现以上三个要求*/ 七、实验器材(设备、元器件): pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。 软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。 八、实验步骤: 实验编程与运行结果 题1 输入三个整数或者三个字符,按由大到小的顺序输出 #include if(n1>n3)swap(p1,p3); if(n2>n3)swap(p2,p3); printf(“Now ,the order is:%d,%d,%dn”,n1,n2,n3);} void swap(int *p1,int *p2) { int temp;temp=*p1;*p1=*p2;*p2=temp; #include swap(str1,str2);if(strcmp(str1,str3)>0) swap(str1,str3);if(strcmp(str2,str3)>0) swap(str2,str3);printf(“Now,the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);} void swap(char *p1,char *p2){ char p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);} 题2./* 输入10个整数,将其中最小的数和第一个数对换,把最大的数与最后一个数对换。编写三个程序,1、输入十个数,2.进行处理,3输出十个数*/ #include input(number);max_min_value(number);output(number);} void input(int *number) { int i; printf(“input 10 numbers:”); for(i=0;i<10;i++) scanf(“%d”,&number[i]); } void max_min_value(int *number) { int *max,*min,*p,temp;max=min=number;for(p=number+1;p if(*p>*max) { max=p; temp=number[9]; number[9]=*max; *max=temp; } else if(*p<*min) { min=p; temp=number[0]; number[0]=*min; *min=temp; } } void output(int *number) { int *p; printf(“Now,they are: ”); for(p=number;p printf(“%d ”,*p); printf(“n”); } 题3*有n个人围城一圈。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那个人 */ #include int i,k,m,n,num[50],*p; printf(“input number of person: n= ”); scanf(“%d”,&n); p=num; for(i=0;i *(p+1)=i+1; //以1至n为序给每人编号 i=0; k=0; m=0; while(m //当退出人数比n-1少时,执行循环体 { if(*(p+i)!=0){ k++;} if(k==3){ *(p+i)=0; k=0; m++;} i++;if(i==n)i=0; //报数到尾后,i恢复为0 } while(*p==0)p++;printf(“The last one is N0.%dn”,*p);} 题4/*输入一行文字,找出其中大写字母,小写字母,空格,数字以其他的字符各有多少?*/ #include int upper=0,lower=0,digit=0,space=0,other=0,i=0; char *p,s[20]; printf(“input string: ”); while((s[i]=getchar())!='n')i++; p=&s[0]; while(*p!='n') { if(('A'<=*p)&&(*p<='Z'))++upper; else if(('a'<=*p)&&(*p<='z'))++lower; else if(*p==' ')++space; else if((*p<='9')&&(*p>='0'))++digit;else ++other;p++; } printf(“upper case:%d lower case: %d ”, upper,lower); printf(“space:%d digit:%d other: %dn,”,space,digit,other);} 5/*将一个5×5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从坐到右,从上到下顺序依次从小到大存放),编写一个函数实现之,用main函数调用 */ #include void change(int *); int a[5][5],*p,i,j; printf(“input martix: n”); for(i=0;i<5;i++) { for(j=0;j<5;j++) scanf(“%d”,&a[i][j]); } p=&a[0][0]; change(p); printf(“Now ,martix: n”); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf(“%d ”,&a[i][j]); printf(“n”); } } void change(int *p) //交换函数的实现 { int i,j,temp;// int pmax,pmin; int *pmax, *pmin; pmax=p; pmin=p; // pmax=a[0][0];// pmin=a[0][0]; for(i=0;i<5;i++) //寻找最大值和最小值 { for(j=i;j<5;j++) { if(*pmax<*(p+5*i+j)) // if(pmax pmax=p+5*i+j;// pmax=a[i][j]; if(*pmin>*(p+5*i+j))// if(pmin)>a[i][j] pmin=p+5*i+j;// pmin=a[i][j]; } } temp=*(p+12); //最大值换给中心元素 *(p+12)=*pmax; *pmax=temp; temp=*p; *p=*pmin; *pmin=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++); { if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; } temp=*pmin; *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) { if(((p+5*i+j)!=(p+4)&&(p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; } temp=*pmin; *pmin=*(p+20); *(p+20)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) { if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; } temp=*pmin; *pmin=*(p+24); *(p+24)=temp; } 6、/*在主函数中输入10个等长的字符串。用另一个函数对他们排序。然后在主函数输出这个10个已排好序的字符串 */ #include void sort(char(*p)[6]); int i; char str[10][6]; char(*p)[6]; printf(“input 10 strings: n”); for(i=0;i<10;i++) scanf(“%s”,str[i]); p=str; sort(p); //调用sort 函数 printf(“Now,the sequence is: n”); for(i=0;i<10;i++) printf(“%sn”,str[i]);} void sort(char(*s)[6])//指向由6个元素组成的一维数组的指针 { int i,j; char temp[6],*t=temp; for(i=0;i<10;i++) for(j=0;j<9-i;j++) { if(strcmp(s[j],s[j+1]>0)) { strcpy(t,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],t); } } } 题15/*有一个班的4个学生,有5门课程。 1、求第一门课的平均分; 2、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分 3、找出平均分在90分以上或全部课程成绩在85分以上的学生。分别编写三个函数来实现以上三个要求*/ # include scanf(“%s”,course[i]);printf(“input No.and scorse:n”);printf(“No.”);for(i=0;i<5;i++) printf(“,%s”,course[i]);printf(“n”);pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){ scanf(“%d”,pnum+i); for(j=0;j<5;j++) scanf(“%f”,pscore+5*i+j);} paver=&aver[0];printf(“nn”);avsco(pscore,paver);avcour1(pcourse,pscore);printf(“nn”);fali2(pcourse,pnum,pscore,paver); // printf(“nn”);good(pcourse,pnum,pscore,paver); // } void avsor(float *pscore,float *paver)// 求每个学生的平均成绩的函数 { int i,j;float sum ,average;for(i=0;i<4;i++){ sum=0.0; for(j=0;j<5;j++) sum=sum+(*(pscore+5*i+j)); average=sum/5; *(paver+i)=average;} } void avcour1(char(*pcourse)[10],float *pscore)//求第一课程的平均成绩的函数 { int i;float sum,average1;sum=0.0;for(i=0;i<4;i++){ sum=sum+(*(pscore+5*i)); average1=sum/4; printf(“course1: %s,average course:%7.2fn”,*pcourse, average1); } } void fali2(char course[5][10],int num[],float *pscore,float aver[4])//找两门以上的课程不及格的学生的函数 { int i,j,k,label;printf(“ =============studet who is fail======================= printf(”No.“);for(i=0;i<5;i++)printf(”%11s“,course[i]);printf(” averagen“);for(i=0;i<4;i++){ label=0; for(j=0;j<5;j++) if(*(pscore+5*i+j)<60.0) {label++;} if(label>=2) { printf(”%d“,num[i]); for(k=0;k<5;k++) printf(”%11.2f“,*(pscore+5*i+j)); printf(”%11.2fn“,aver[i]); } } } void good(char course[5][10],int num[4],float *pscore,float aver[4])//找成绩优秀学生(各门85以上或平均90分以上)的函数 { int i,j,k,n;printf(” =========students whose score is good ==================n“); printf(”No.“);for(i=0;i<5;i++) printf(”%11s“,course[i]); n”); printf(“ averagen”);for(i=0;i<4;i++){ n=0; for(j=0;j<5;j++) if(*(pscore+5*i+j)>85.0)n++; if((n==5)||(aver[i])>=90) { printf(“%d”,num[i]); for(k=0;k<5;k++) printf(“%11.2f”,*(pscore+5*i+j)); printf(“%11.2fn”,aver[i]); } } } 九、总结及心得体会: 十、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: C语言实验指导 实验一 顺序结构程序设计(2学时) 一、实验目的熟悉在VC运行环境下,编辑调试C语言程序的一般步骤。掌握顺序结构程序设计的基本思想和基本方法。 二、实验要求 1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。2. 在VC运行环境下,编辑录入源程序。 3. 调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。4. 掌握如何根据出错信息查找语法错误。 5.最后提交带有注释的源程序文件(扩展名为.c)。要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。 6.源程序注释信息可以包括以下几方面内容: ⑴ 程序功能描述。 ⑵ 程序版本号、创作日期。 ⑶ 作者信息描述:班级、学号、姓名。 ⑷ 问题分析描述。 ⑸ 算法设计描述。 ⑹ 关键语句注释说明。 ⑺ 调试运行过程中出现的错误及改正方法。 ⑻ 输入数据样例。 ⑼ 输出数据样例。 三、实验内容 以下两题,任选其一解答。 你知道淄博到北京的地面距离是多少千米吗,淄博到纽约的地面距离又是多少千米呢?说不上来了吧。还是让我们编一个程序来计算一下吧。 1.已知地球的平均半径为6371千米,假设在地球的同一纬度上,有两个处于不同经度的城市A、B,编程序求出这两个城市之间的地面距离。 输入数据样例:例如,欲求北纬30度上东经10度到东经50度的距离,输入格式应为:30 10 50 参考测试数据: 输入:0 0 180 输出:20015.08 输入:30 0 90 输出:8397.7 2输入:60 0 45 输出:2453.20 2.地球的平均半径为6371千米,已知地球上两个城市A、B的经度和纬度,编程序求出这两个城市之间的地面距离。 提示:球面上两点之间的最短距离,等于过这两点以球心为圆心的圆上,这两点之间劣弧的长度。(即这两点与球心之间的连线构成的夹角所对球面劣弧的长度)。 建议你自己一步步推导出公式,而不要照搬网上的现成公式。 四、常见问题 疑问1:这分明是两道数学题啊,能否将数学公式提供给我们呢,我们的主要任务不是编写程序吗? 答:建立数学模型也是编程序的一部分。学会分析解决现实中遇到的问题,是我们学习的重要目标。 疑问2:这个问题好像属于球面几何的范畴,用平面几何可以求解吗? 答:这个问题的确涉及到球面几何,但是也的确可以利用投影以及平面几何方法来求解。 实验二 选择结构程序设计(2学时) 一、实验目的 掌握选择结构程序设计的一般方法及选择结构程序的调试方法。 二、实验要求 1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。2. 在VC运行环境下,编辑录入源程序。 3. 调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。4. 掌握如何根据出错信息查找语法错误。 5.最后提交带有充分注释的源程序文件(扩展名为.c)。要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。 6.源程序注释信息可以包括以下几方面内容: ⑴程序功能描述。 ⑵程序版本号、创作日期。 ⑶作者信息描述:班级、学号、姓名。 ⑷问题分析描述。 ⑸算法设计描述。 ⑹关键语句注释说明。 ⑺调试运行过程中出现的错误及改正方法。 ⑻输入数据样例。 ⑼输出数据样例。 三、实验内容 你知道你生日那天是星期几吗,还有你知道你爸爸生日那天是星期几吗?你可能会说:可以查万年历啊。那么,不查万年历你能计算出来吗? 以下两题,任选其一解答。 1.编程序实现:输入一个年份y,求出从公元1年1月1日到y年1月1日,总共有多少天,并求出y年的1月1日是星期几。 2.编程序实现:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。 四、常见问题 疑问1:闰年的规律是不是四年一闰? 答:四年一闰是儒略历(儒略也就是凯撒大帝)的置闰规则。我们现在使用的是格里高利历,置闰规则是每400年97闰。 疑问2:公元1年1月1日是星期几呢? 答:星期一。 疑问3:据说从儒略历改为格里高利历时,将1582年10月4日的下一天定为格里高利历的10月15日,中间销去了10天,这会不会影响星期几的计算? 答:这个调整是对儒略历误差的纠正,并不会影响总天数和星期几的计算。 疑问4:这里计算总天数,好像要用到循环程序吧? 答:其实根据闰年的置闰规则,不使用循环也可以计算出来总天数。当然,你想使用循环编写该程序也是可以的。 实验三 循环结构程序设计(2学时) 一、实验目的掌握循环结构程序设计的一般方法及循环结构程序的调试方法。 二、实验要求 1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。2. 在VC运行环境下,编辑录入源程序。 3. 调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。4. 掌握如何根据出错信息查找语法错误。 5.最后提交带有充分注释的源程序文件(扩展名为.c)。要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。 6.源程序注释信息可以包括以下几方面内容: ⑴程序功能描述。 ⑵程序版本号、创作日期。 ⑶作者信息描述:班级、学号、姓名。 ⑷问题分析描述。 ⑸算法设计描述。 ⑹关键语句注释说明。 ⑺调试运行过程中出现的错误及改正方法。 ⑻输入数据样例。 ⑼输出数据样例。 三、实验内容 以下两题,任选其一解答。 1. 海萍夫妇为了彻底告别“蜗居”生活,痛下决心贷款60万元购买了一套三居室。若贷款月利率为0.5%,还款期限为120个月,还款方式为等额本金还款法(即贷款期限内每期以相等的额度偿还贷款本金,贷款利息随本金逐期递减)。试求出每个月还款的本金、每个月的利息以及总利息分别是多少元。 2. 若还款方式采用等额本息还款法(即贷款期限内每期以相等的额度偿还贷款本息,贷款利息随本金逐期递减)。试求出每个月还款的本金、每个月的利息以及总利息分别是多少元。 四、常见问题 疑问1:等额本息还款法每个月的还款额怎么计算,应该有个公式吧,要不然怎么计算出来每个月应还的利息与本金? 答:的确有一个计算公式。当然你可以自己推导出来(这样你会很有成就感!),要不然就从网上搜索出来。 实验四 循环程序综合应用(4学时) 一、实验目的: 掌握循环结构程序设计的一般方法及循环结构程序的调试方法,能够综合运用顺序、选择和循环结构解决一般难度的实际应用问题。 二、实验要求 1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。2. 在VC运行环境下,编辑录入源程序。 3. 调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。4. 掌握如何根据出错信息查找语法错误。 5.最后提交带有充分注释的源程序文件(扩展名为.c)。要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。 6.源程序注释信息可以包括以下几方面内容: ⑴程序功能描述。 ⑵程序版本号、创作日期。 ⑶作者信息描述:班级、学号、姓名。 ⑷问题分析描述。 ⑸算法设计描述。 ⑹关键语句注释说明。 ⑺调试运行过程中出现的错误及改正方法。 ⑻输入数据样例。 ⑼输出数据样例。 三、实验内容 以下两题,任选其一解答。 1.编程序实现如下功能:输入任意一个年份和月份,按以下格式输出该月份的公历日历。 要求由程序计算出来该月份的1日是星期几,并用循环控制打印。打印样例如下: 2012年日历 ========== 9月 ---------日 一 二 三 四 五 六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 27 28 29 30------------------------- 2.编程序实现如下功能:输入任意一个年份,按以下格式输出该年份全年的公历日历。要求由程序计算出来每个月份的1日是星期几,并用循环控制打印。 四、常见问题 疑问1:如何控制某个月1日的打印位置? 答:先由程序计算出来该月份的1日是星期几,然后控制在打印“1”之前打印相应个数的空格。 疑问2:如何控制每周和每月的打印换行? 答:可以根据当前这一天的打印位置控制每周的打印换行,并根据该月份的天数控制每月的打印换行。 实验五 字符串处理综合应用(4学时) 一、实验目的 掌握字符串处理的一般方法及字符串处理应用程序的调试方法,能够综合运用选择、循环结构和数组、指针解决一般难度的实际应用问题。 二、实验要求 1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。2. 在VC运行环境下,编辑录入源程序。 3. 调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。4. 掌握如何根据出错信息查找语法错误。 5.最后提交带有充分注释的源程序文件(扩展名为.c)。要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。 6.源程序注释信息可以包括以下几方面内容: ⑴程序功能描述。 ⑵程序版本号、创作日期。 ⑶作者信息描述:班级、学号、姓名。 ⑷问题分析描述。 ⑸算法设计描述。 ⑹关键语句注释说明。 ⑺调试运行过程中出现的错误及改正方法。 ⑻输入数据样例。 ⑼输出数据样例。 三、实验内容 以下两题,任选其一解答。 1.编程实现,输入一个整数的小写金额值(即不考虑角和分),转化为大写金额值并输出。先实现基本功能,如输入1002300,可以输出“壹佰零拾零万贰仟叁佰零拾零元整”。 2.编程实现,输入一个小写金额值,转化为大写金额值输出。要求实现相对完善的功能,如输入1002300.90,应该输出“壹佰万贰仟叁佰元零玖角整”。 四、常见问题 疑问1:如何才能分离出整数中的每一位数字? 答:可以利用整数的求余数和除法运算实现数字的分离,同时将分离出的数字存入到一个事先定义好的数组中,每个数组元素只存储一位数字。 疑问2:若不能确定整数的实际位数,如何控制分离过程? 答:可以通过循环控制数字的分离过程,每循环一次分离出来当前的最末一位,然后去掉最末一位,直至分离出所有的位。 疑问3:如何控制给某位数字添加合适的数量单位,如万、仟、佰、拾、元? 答:可以根据该数字在原小写数值中的位置进行控制,如第0位单位为“元”,第1位单位为“拾”,依此类推。 实验六 文件应用程序设计(2学时) 一、实验目的掌握文件应用程序设计的一般方法及其调试方法。 二、实验要求 1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。2. 在VC运行环境下,编辑录入源程序。 3. 调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。4. 掌握如何根据出错信息查找语法错误。 5.最后提交带有充分注释的源程序文件(扩展名为.c)。要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。 6.源程序注释信息可以包括以下几方面内容: ⑴程序功能描述。 ⑵程序版本号、创作日期。 ⑶作者信息描述:班级、学号、姓名。 ⑷问题分析描述。 ⑸算法设计描述。 ⑹关键语句注释说明。 ⑺调试运行过程中出现的错误及改正方法。 ⑻输入数据样例。 ⑼输出数据样例。 三、实验内容 以下两题,任选其一解答。 1. 海萍夫妇为了彻底告别“蜗居”生活,痛下决心贷款60万元购买了一套三居室。若贷款月利率为0.5%,还款期限为120个月,还款方式为等额本金还款法(即贷款期限内每期以相等的额度偿还贷款本金,贷款利息随本金逐期递减)。试求出每个月还款的本金、每个月的利息以及总利息分别是多少元。要求将输出结果写入到数据文件中。 2. 若还款方式采用等额本息还款法(即贷款期限内每期以相等的额度偿还贷款本息,贷款利息随本金逐期递减)。试求出每个月还款的本金、每个月的利息以及总利息分别是多少元。要求将输出结果写入到数据文件中。 C语言程序设计实验 (二)[实验1] 1.实验题目 下列各题的算法用传统流程图及N-S流程图两种方式表示: (1)输出图形(顺序结构) ★★★★★★★★ ★★★★★★★★ ★★★★★★★★ ★★★★★★★★ (2)判断用户输入的字符是数字字符、字母字符还是其它字符。(选择结构) (3)运用循环结构打印如下图形(for循环结构)。 ◆ ◆◆◆ ◆◆◆◆◆ ◆◆◆◆◆◆◆ ◆◆◆◆◆◆◆◆◆ (4)输入任意数N,求P的值(P=N!)(当型循环结构) (5)输出1~N间20个不能被3整除的数列(直到型循环结构) (6)计算并打印九九表。(直到型循环结构) 2.实验目标 (1)熟练掌握流程图表示算法的方法。 (2)熟练掌握结构化程序设计的三种基本结构。 [实验2] 变量的变化情况。 1.实验题目 有以下程序 #include #definea 3*2+1 #defineA a*a+a #defineb(3*2+1) #defineB(b)*(b)+(b) main() { int x1,x2; int y1,y2; x1=a*a; y1=A*A; x2=b*b; y2=B*B;//换为y2=(A)*(A)结果是否相同 printf(“x=%d tty=%dn”,x1,y1); printf(“x=%dtty=%dn”,x2,y2); }用逐行断点测试方法,体会程序运行时各变量值的变化情况。 2.实验要求 (1)在上机实验之前先将每执行一条语句后变量x1、x2和y1、y2的预期结果写在相应语句旁。 (2)设置4个监视项x1、x2和y1、y2,断点逐行测试执行程序。 (3)每执行一条语句后,对比Watch窗口中变量x1、x2和y1、y2的值与预期的值是否一致,若不一致,请解释原因。 (4)将语句“y2=B*B;”换为“y2=(A)*(A)”,测试结果是否相同,为什么? (5)运行结束后查看输出结果,确认该结果是否与预期的值一致。 3.实验目标 (1)宏定义的正确定义。 (2)宏定义的正确使用。第二篇:《C语言程序设计》实验四
第三篇:《C语言程序设计》实验四
第四篇:C语言程序设计实验安排
第五篇:C语言程序设计实验二