实验一 上机操作初步(2学时)
1、输出入下信息:(实验指导书P79) ************************* Very Good
*************************
2、计算两个整数的和与积。(实验指导书P81)
3、从键盘输入一个角度的弧度值x,计算该角度的余弦值,将计算结果输出到屏幕。(书
P3)
4、在屏幕上显示一个文字菜单模样的图案:
================================= 1 输入数据 2 修改数据 3 查询数据 4 打印数据
================================= 5、从键盘上输入两个整数,交换这两个整数。 1、#include
{ printf(“********************\\n”); printf(“ Very Good\\n”); printf(“********************\\n”);
}
2、#include
{ int a,b,c,d;
printf(“Please enter a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; d=a*b;
printf(“%d+%d=%d\\n”,a,b,c); printf(“%d*%d=%d\\n”,a,b,d);
}
3、#include
void main( ) { double x,s;
printf(“Please input value of x:”); scanf(“%lf”,&x); s=cos(x);
printf(“cos(%lf)=%lf\\n”,x,s);
}
1
4、#include
void main( )
{ printf(“==================================\\n”); printf(“ 1 输入数据 2 修改数据\\n”); printf(“ 3 查询数据 4 打印数据\\n”);
printf(“===================================\\n”);
}
5、#include
{ int x,y,t;
printf(“Please enter x and y:”); scanf(“%d%d”,&x,&y);
t=x; x=y; y=t;
printf(“After swap:x=%d,y=%d\\n”,x,y);
}
实验二 简单的C程序设计(4学时)
1、输入r1、r2,求出圆形垫片面积。(实验指导书P84)
2、输入华氏温度h,输出摄氏温度c。(实验指导书P85)
3、从键盘输入一个3位整数,将输出该数的逆序数。(实验指导书P89) 4、输入并运行以下程序,分析运行结果。 #include
printf(“%d,%d\\n”,++i,++j); i=8; j=10;
printf(“%d,%d\\n”,i++,j++); i=8; j=10;
printf(“%d,%d\\n”,++i,i); i=8; j=10;
printf(“%d,%d\\n”,i++,i);
}
5、输入三角形三条边的边长,求三角形的面积。(书P55)
6、输入3个字符型数据,将其转换成相应的整数后,求它们的平均值并输出。(书P55) 1、#include
2
{ float r1,r2;
double s1,s2,s;
printf(“Please enter r1,r2:\\n”); scanf(“%f%f”,&r1,&r2);
s2=r2*r2*PI; s1=r1*r1*PI; s=s2-s1; printf(“s=%lf\\n”,s);
}
2、#include
{ float h,c;
printf(“请输入华氏温度:”); scanf(“%f”,&h);
c=5.0/9*(h-32);
printf(“\\n摄氏温度:%f\\n”,c);
}
3、#include
printf(“请输入一个3位的正整数:\\n”); scanf(“%d”,&x);
a=x/100; /*求x的百位数*/
b=(x-a*100)/10; /*求x的十位数*/ c=x-a*100-b*10; /*求x的个位数*/ y=c*100+b*10+a;
printf(“%d:%d\\n”,x,y); }
4、运行结果:9,11 8,10 9,8 8,8
5、#include
#include
printf(“Please enter a,b,c:”); scanf(“%d,%d,%d”,&a,&b,&c); s=(double)(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
3
printf(“area=%.2lf\\n”,area);
}
6、#include
printf(“Please enter:\\n”);
a=getchar(); b=getchar(); c=getchar(); x=(a+b+c)/3.0;
printf(“(a+b+c)/3=%.2f\\n”,x); }
实验三 选择结构程序设计(2学时)
1、读入3个分别表示箱子长、宽、高的整数值,判断并输出该箱子是立方体还是长方体。(实验指导书P104)
2、输入某一年月,输出该月的天数。(实验指导书P105) 3、有一函数: x (x<1) y= 2x-1 (1≤x<10)
3x-11 (x≥10) 编写程序,输入x值,输出y值。
4、从键盘输入一个字符,如果该字符为小写字母,则转换为大写字母输出;如果该字符
为大写字母,则转换为小写字母输出;如果为其他字符,原样输出。(书P94) 5、输入4个整数,要求按由小到大的顺序输出。 1、#include
{ int l,w,h;
printf(“请输入箱子的长、宽、高:\\n”);
scanf(“%d%d%d”,&l,&w,&h);
if(l==w&&w==h) /*如果长、宽、高相等,则为立方体*/ printf(“该箱子是立方体。”); else
printf(“该箱子是长方体。”); }
2、#include
{ int year,month,days;
printf(“Please enter year and month:\\n”); switch(month)
{ case 2: if(year%4==0&&year0!=0||year@0==0) days=29;
4
else days=28; break;
case 1:case 3:case 5:case 7:case 8:case 10:case 12: days=31; break; case 4: case 6: case 9: case 11: days=30;
}
printf(“%d年%d月有%d天\\n”,year,month,days);
}
3、#include
printf(“Please input x:\\n”); scanf(“%f”,&x); if(x<1) y=x; else if(x<10) y=2*x-1; else
y=3*x-11;
printf(“y=%f\\n”,y);
}
4、#include
{ char x;
printf(“Enter a char:\\n”); x=getchar();
if(x>=‘a’&&x<=‘z’) x=x-32;
else if(x>=‘A’&&x<=‘Z’) x=x+32; putchar(x); }
5、#include
printf(“请输入4个整数:”); scanf(“%d%d%d%d”,&a,&b,&c,&d); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; }
5
if(a>d) { t=a; a=d; d=t; } if(b>c) { t=b; b=c; c=t; } if(b>d) { t=b; b=d; d=t; } if(c>d) { t=c; c=d; d=t; } printf(“排序结果如下:\\n”);
printf(“%d,%d,%d,%d\\n”,a,b,c,d);
}
实验四 循环结构程序设计(4学时)
1、从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结
束输入。(实验指导书P117)
2、求所有的水仙花数。水仙花数是一个3位数的自然数,该数各位数的立方和等于该数
本身。(实验指导书P118)
3、判断输入的某个数是否为素数。若是,输出YES,否则输出NO。(书P123) 4、计算π的近似值。公式如下:π/4=1-1/3+1/5-1/7+??,直到最后一项的绝对值小
于10-6为止。(书P123)
5、计算 s=1!+2!+??+20! 的值并输出。
6、输入10个整数,统计并输出其中正数、负数和零的个数。 1、#include
{ float x,max,min;
printf(“Please input scores:”); scanf(“%f”,&x); max=min=x;
while(x>=0)
{ if(x>max) max=x; if(x } printf(“\\nmax=%f\\nmin=%f\\n”,max,min); } 2、#include void main( ) { int x,y,z; int k=100; while(k<=999) { x=k/100; y=(k-x*100)/10; 6 z=k-x*100-y*10; if(k==x*x*x+y*y*y+z*z*z) printf(“%d\\n”,k); k++; } } 3、#include { int i,x,yes,a; printf(“Enter integer number:”); scanf(“%d”,&x); yes=1; i=2; a=(int)sqrt((double)x); while(yes&&i<=a) { if(x%i==0) yes=0; i++; } printf(“%d”,x); if(yes) printf(“YES\\n”); else printf(“NO\\n”); } 4、#include pi=0; n=1; t=1; while(fabs(t)>=1e-6) { t=sign/n; pi+=t; n+=2; sign=-sign; } pi=pi*4; printf(“pi=%f\\n”,pi); 7 } 5、#include for(n=1;n<=20;n++) { t=t*n; s=s+t; } printf(“1!+2!+??+20!=%f\\n”,s); } 6、#include void main( ) { int x,i,a1=0,b1=0,c1=0; for(i=1;i<=10;i++) { printf(“\\n请输入第%d个数:”,i); scanf(“%d”,&x); if(x>0) a1++; else if(x<0) b1++; else c1++; } printf(“整数有%d个,负数有%d个,零有%d个\\n”,a1,b1,c1); } 实验五 综合实验1:结构化程序设计(2学时) 1、编一程序,对于给定的一个百分制成绩,输出对应A,B,C,D,E表示的的等级成绩。设:90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。(书P93) 2、百马百担问题。(实验指导书P121) 3、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 4、输出如下图案: * *** ***** ******* ***** *** * 1、#include { int score,temp,logic; 8 char grade; logic=1; while(logic) { printf(“Input score:”); scanf(“%d”,&score); if(score>100||score<0) printf(“\\nError,Input again!\\n”); else logic=0; printf(“\\n”); } if(score==100) temp=9; else temp=score/10; switch(temp) { case 9: grade=‘A’;break; case 8: grade=‘B’;break; case 7: grade=‘C’;break; case 6: grade=‘D’;break; default: grade=‘E’; } printf(“Score is %d,the grade is %c.\\n”,score,grade); } 2、#include printf(“各种驮法如下:\\n”); for(m=1;m<=100;m++) for(n=1;n<=100-m;n++) { k=100-m-n; if(k%2==0&&m*3+n*2+k/2==100) { printf(“大马=匹;中马=匹;小马=匹.\\n”,m,n,k); sum++; } } printf(“共有%d种驮法.\\n”,sum); } 9 3、#include int letter=0,space=0,digit=0,other=0; printf(“请输入一行字符:\\n”); while((c=getchar( ))!=‘\\n’) { if(c>=‘a’&&c<=‘z’||c>=‘A’&&c<=‘Z’) letter++; else if(c==‘ ’) space++; else if(c>=‘0’&&c<=‘9’) digit++; else other++; } printf(“字母数=%d,空格数=%d\\n”,letter,space); printf(“数字数=%d,其他字符数=%d\\n”,digit,other); } 4、#include void main( ) { int i,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) printf(“ ”); for(k=0;k<=2*i;k++) printf(“*”); printf(“\\n”); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(“ ”); for(k=0;k<=4-2*i;k++) printf(“*”); printf(“\\n”); } } 实验六 函数程序设计(4学时) 1、从键盘输入三角形的3条边,调用三角形面积函数求出其面积,并输出结果。(实验 指导书P130) 2、输入整数n,输出高度为n的等边三角形。当n=5时的等边三角形如下:(实验指导 书P134) 10 * *** ***** ******* ********* 3、输入并运行以下程序,分析运行结果。 #include int a=5; int b=7; void main( ) { int a=4,b=5,c; c=plus(a,b); printf(“a+b=%d\\n”,c); } plus(int x,int y) { int z; z=x+y; return (z); } 4、求500以内的所有亲密数对。若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数对。(实验指导书P136) 5、输入并运行以下程序,分析运行结果。 #include { static int d=5; d+=p; printf(“%d ”,d); return (d); } void main( ) { int a=3; printf(“%d ”,fun(a+fun(d))); } 6、设计一个函数,输出整数n的所有素数因子。(书P157) 1、#include float area(float a,float b,float c) { float s,p,area; s=(a+b+c)/2; p=s*(s-a)*(s-b)*(s-c); 11 area=sqrt(p); return (area); } void main( ) { float x,y,z,ts; scanf(“%f%f%f”,&x,&y,&z); if(x>0&&y>0&&z>0&&x+y>z&&y+z>x&&x+z>y) { ts=area(x,y,z); printf(“area=%f\\n”,ts); } else printf(“data error!\\n”); } 2、#include void trangle(int n) { int i,j; for(i=0;i { for(j=0;j<=n-i;j++) putchar(‘ ’); /* for(j=0;j<=2*i;j++) putchar(‘*’); /* putchar(‘\\n’); } } void main( ) { int n; printf(“Please enter n:”); scanf(“%d”,&n); printf(“\\n”); trangle(n); } 3、a+b=9 4、#include { if(m%f==0) sum=sum+f; f++; } return sum; } 12 打印每一行的空格*/ 打印每一行的*号*/ void main( ) { int m=3,n,k; while(m<=500) { n=facsum(m); k=facsum(n); if(m==k&&m<=n) printf(“%d,%d\\n”,m,n); m++; } } 5、6 15 15 6、#include } return flag; } void factor(int n) { int i; i=2; while(i<=n) { if((n%i==0)&&prime(i)) { printf(“%d ”,i); n=n/i; continue; } i++; } } void main( ) { int num; printf(“Enter num:”); scanf(“%d”,&num); printf(“prime factor is:\\n”); factor(num); 13 } 实验七 数组程序设计(4学时) 1、下列程序的功能是:输入10个整数,按每行3个数输出这些整数,最后输出10个整 数的平均值。程序中有几处错误,试找出它们后加以修改,并上机验证修改结果。 #include { int i,n,a[10],avg; for(i=0;i scanf(“%d”,a[i]); for(i=0;i { if(i%3==0) printf(“\\n”); printf(“%d ”,a[i]); } for(i=0;i printf(“\\navg=%f\\n”,avg); } 2、写一个函数,对输入的10个整数按从小到大的顺序排序(升序,用冒泡排序实现)。(实验指导书P147) 3、编写程序,判断某一字符串是不是“回文数”,回文数是从左至右或从右至左读起来 都是一样的字符串。(实验指导书P153) 4、输入一个3行3列矩阵的所有元素,然后求出主对角线元素之和。 5、给定某年某月某日,将其转换成这一年的第几天并输出。(实验指导书P152) 6、编写程序,在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found。(书P191) 1、#include { int i,n=10,a[10]; float avg=0; for(i=0;i scanf(“%d”,&a[i]); for(i=0;i { if(i%3==0) printf(“\\n”); printf(“%d ”,a[i]); } for(i=0;i 14 avg=avg/n; printf(“\\navg=%f\\n”,avg); } 2、#include void sort1(int s[ ],int n) { int i,j; int t; for(i=0;i for(j=9;j>=i+1;j--) if(s[j] { t=s[j];s[j]=s[j-1];s[j-1]=t; } } void main( ) { int i,a[10]; printf(“Please input 10 numbers:\\n”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); sort1(a,10); printf(“The sorted 10 numbers:\\n”); for(i=0;i<10;i++) printf(“%d ”,a[i]); } 3、#include #define N 40 void main( ) { char str[N],ch=‘Y’; int i; int len; printf(“Input a string:\\n”); scanf(“%s”,str); len=strlen(str); for(i=0;i if(str[i]!=str[len-1-i]) { ch=‘N’; break; } if(ch==‘Y’) printf(“%s是一个回文数\\n”,str); 15 else printf(“%s不是一个回文数\\n”,str); } 4、#include { int a[3][3],sum; int i,j; sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(“sum=%d\\n”,sum); } 5、#include int day_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int day_year(int year,int month,int day) { int i,j,s=0; if(year%4==0&&year0!=0||year@0==0) i=1; else i=0; for(j=1;j } void main( ) { int y,m,d; printf(“Input year,month and day:\\n”); scanf(“%d%d%d”,&y,&m,&d); printf(“是这年的第%d天\\n”,day_year(y,m,d)); } 6、#include char ch=‘n’; printf(“请输入一个数组:\\n”); for(i=0;i 16 scanf(“%d”,&a[i]); printf(“输出数组:\\n”); for(i=0;i printf(“%d ”,a[i]); printf(“\\n”); printf(“请输入一个数:\\n”); scanf(“%d”,&num); printf(“开始查找\\n”); for(i=0;i printf(“%d在数组的第%d位\\n”,num,i+1); } if(ch==‘n’) printf(“no found\\n”); } 实验八 指针程序设计(2学时) 1、指针基础及指针运算。(实验指导书P168) 2、输入3个整数,按从小到大的次序输出。 (书P234) 3、数据交换。实验要求:1)定义两个函数,分别为void swap1(int a,int b)和void swap2(int *a,int *b),用于交换a,b的值。2)从主函数中分别输入两个整型变量a、b。3)从主函数中分别调用上述两个交换函数,并打印输出交换后a、b的结果。(实验指导书P169) 4、编写一个程序计算字符串长度的函数,模拟C的 void main( ) { int *p,*q,a[N]; int i,tmp; p=a; q=(int *)malloc(N*sizeof(int)); printf(“Please input the first group:”); for(i=0;i scanf(“%d”,p+i); /*使用指针p输入a的N个元素*/ printf(“Please input the second group:”); 17 for(i=0;i scanf(“%d”,&q[i]); /*使用数组输入指针q地址上的N个整数*/ for(i=0;i { tmp=*(p+i); *(p+i)=*(q+i); *(q+i)=tmp; } printf(“Result:\\n”); for(i=0;i printf(“%d ”,*(a+i)); /*按指针输出第一组数*/ printf(“\\n”); for(i=0;i printf(“%d ”,q[i]); /*按数组输出第二组数*/ printf(“The memory address of p,a,q are:%x,%x,%x\\n”,p,a,q); free(q); } 2、#include void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } void main( ) { int n1,n2,n3; int *p1,*p2,*p3; printf(“Please input three integer datas:”); scanf(“%d%d%d”,&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1 printf(“%d %d %d\\n”,n1,n2,n3); } 3、#include void swap1(int x,int y); void swap2(int *x,int *y); void main( ) { int a,b; printf(“Please input a=:”); scanf(“%d”,&a); printf(“Please input b=:”); 18 scanf(“%d”,&b); swap1(a,b); printf(“\\nAfter call swap1:a=%d b=%d\\n”,a,b); swap2(&a,&b); printf(“\\nAfter call swap2:a=%d b=%d\\n”,a,b); } void swap1(int x,int y) { int temp; temp=x; x=y; y=temp; } void swap2(int *x,int *y) { int temp; temp=*x; *x=*y; *y=temp; } 4、#include char *list1=“See no evil,hear no evil.”; char *list2=“blind and deaf?”; n1=strlength(list1); n2=strlength(list2); puts(list1); printf(“The length of list1=%d\\n”,n1); puts(list2); printf(“The length of list2=%d\\n”,n2); } int strlength(char *s) { int n=0; while(*s!=‘\\0’) { n++; s++; } return n; } 实验九 综合实验2:函数、数组、指针的综合应用(2学时) 1、数组元素奇偶排列。实验要求:1)定义一个整型一维数组,任意输入数组的元素,其 中包含奇数和偶数。2)定义一个函数,实现将数组元素奇数排列在左,偶数排列在右 19 的排列。3)在上述定义的函数中,不允许再增加新的数组。4)从主函数中分别调用上述函数,打印输出结果。(实验指导书P172) 2、编写函数lower( )模拟标准函数strlwr( ),调用形式为lower(char *st),其作用 是将字符串st中的大写字母转换成小写。(书P192) 3、编写函数,比较两个字符串是否相等。(书P234) 4、编写函数reverse( )模拟标准函数strrev( ),调用形式为reverse(char *st),其 作用是颠倒字符串st的顺序,即按与原来相反的顺序排列。(书P192) 1、#include void arrsort(int a[ ],int n); void main( ) { int a[N],i; for(i=0;i scanf(“%d”,&a[i]); arrsort(a,N); for(i=0;i printf(“%d ”,a[i]); } void arrsort(int a[ ],int n) { int *p,*q,temp; p=a; q=a+n-1; while(p { while(*p%2) p++; while(!(*q%2)) q--; if(p { temp=*p; *p=*q; *q=temp; } p++,q--; } } 2、#include void lower(char *st) { int i=0; while(str[i]!=‘\\0’) { if(str[i]>=‘A’&&str[i]<=‘Z’) str[i]+=32; i++; } 20 printspace( ); printf(“\\nYour choice:”); scanf(\} void main( ) { int selectnum; struct student stu1[N]; readinformation(stu1); sortselect(&selectnum); while(selectnum!=0) { sort(stu1,selectnum); printinformation(stu1); sortselect(&selectnum); } } 3、#include { FILE *fp_in,*fp_out; char infile[20],outfile[20]; printf(“Enter the infile name:”); scanf(“%s”,infile); printf(“Enter the outfile name:”); scanf(“%s”,outfile); if((fp_in=fopen(infile,“r”)==NULL) { printf(“Can’t open file:%s”,infile); exit(1); } if((fp_out=fopen(outfile,“w”)==NULL) { printf(“Can’t open file:%s”,outfile); exit(1); } while(!feof(fp_in)) fputc(fgetc(fp_in),fp_out); fclose(fp_in); fclose(fp_out); } 4、#include void main( ) { FILE *fp; char str[100]; int i; if((fp=fopen(“test”,“w”))==NULL) 26 { printf(“Cannot open the file.\\n”); exit(0); } printf(“Input a string:”); gets(str); /*读入一行字符串*/ for(i=0;str[i]&&i<100;i++) /*处理该行中的每一个字符*/ { if(str[i]>=‘a’&&str[i]<=‘z’) /*若是小写字母*/ str[i]-=‘a’-‘A’; /*将小写字母转换为大写字母*/ fputc(str[i],fp); /*} fclose(fp); /*fp=fopen(“test”,“r”); /*fgets(str,100,fp); /*printf(“%s\\n”,str); fclose(fp); } 将转换后的字符写入文件*/ 关闭文件*/ 以读方式打开文本文件*/ 从文件中读入一行字符串*/ 27