c语言实验报告完成版_c语言实验报告完成
c语言实验报告完成版由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言实验报告完成”。
《高级语言程序设计》
学 生 实 验 报 告
专业:计算机科学与技术 学号: 姓名:实验一 C程序的运行环境和使用方法
1.实验目的1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。2)了解在该系统上如何编辑、编译、连接和运行一个C程序。3)通过运行简单的C程序,初步了解C程序的特点。
2.实验程序清单及运行结果
课后习题1.5 编写一个C程序,输出以下信息:
************************** Very Good!************************** Source
#include int main(){ printf(“**************************n”);printf(“ Very Good!n”);printf(“**************************n”);} 课后习题1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。
Source
#include int main(){ int max(int x,int y);int a,b,c,d;scanf(“%d %d %d”,&a,&b,&c);d=max(a,b);d=max(d,c);printf(“%dn”,d);return 0;} int max(int x,int y){ int z;if(x>y)z=x;else z=y;return z;} 实验二 顺序结构程序设计
1.实验目的1)掌握C语言的数据类型,熟悉如何定义整型、字符型和实型的变量,以及对它们赋值的方法。
2)掌握不同类型的数据之间赋值的规律。
3)学会用C的有关算术运算符,以及包含这些运算符的表达式。4)掌握C语言中使用最多的一种语句——赋值语句的使用方法。
5)掌握scanf()函数、printf()函数的调用方法,掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
6)掌握字符输入输出函数getchar()、putchar()函数的调用方法。
2.运行程序及填空
(一)输入并运行下面的程序,写出运行结果。
#include int main(){ char c1 , c2;c1=97;c2=98;printf(‚%c,%cn‛, c1, c2);printf(‚%d,%dn‛, c1, c2);return 0;} 运行结果:a,b 97,98 【思考题】若将第四行改为:int c1, c2;再使之运行,输出结果一样吗?为什么?
答:一样,因为第六行的printf输出的是%c即字符,任然将c1,c2按照ASCII码字以符形式输出。
(二)程序填空:输入一个十进制整数,输出与之相应的八进制数与十六进制数。
例如:输入31,输出37(八进制)和1F(十六进制)。源程序如下: #include int main(){ long n;printf(“输入一个十进制整数:”);
scanf(“%d”,&n);printf(“对应的八进制整数是 % o n”, n);printf(“对应的十六进制整数是 % X n”, n);return 0;} 运行程序,输入1234567,显示结果如何? 答:输入一个十进制整数:1234567 对应的八进制整数是 4553207 对应的十六进制整数是 12D687 3.实验程序清单及运行结果
课后习题3.7
要将“China”译成密码。
Source
#include int main(){ char c1='C',c2='h',c3='i',c4='n',c5='a';printf(“%c%c%c%c%cn”,c1+4,c2+4,c3+4,c4+4,c5+4);} 课后习题4.8
求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。
Source
#include #define PI 3.14 #include int main(){ float r,h,C1,Sa,Sb,Va,Vb;scanf(“%f%f”,&r,&h);C1=2*PI*r;Sa=PI*r*r;Sb=4*PI*r*r;Va=4.0/3*r*r*r*PI;Vb=PI*r*r*h;printf(“C1=%.2fnSa=%.2fnSb=%.2fnVa=%.2f%nVb=%.2fn”,C1,Sa,Sb,Va,Vb);} 课后习题4.9
输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9。取位2小数。
Source
#include int main(){ float F,c;scanf(“%f”,&F);printf(“c=%.2fn”,c=5*(F-32)/9;);return 0;} 实验三 选择结构程序设计
1.实验目的1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。2)学会正确使用关系运算符、逻辑运算符和相关表达式。3)熟练掌握if语句和switch语句。4)结合程序掌握一些简单的的算法。5)学习调试程序。
2.程序填空
请将下列源程序填写完整。程序说明:输入实数x, 计算并输出下列分段函数f(x)的值,结果保留2位小数。
x1x1xf(x)e1x1
2x1x1#include
#include int main(){ double x,y;printf(“Input x:”);scanf(‚%lf‛, &x);if(x
输入 0.5,显示结果是:1.65
输入 3,显示结果是:3.16
3.实验程序清单及运行结果
课后习题5.5 有一个函数
/ x
(x=10)写一段程序,输入x,输出y Source
#include int main(){ int x,y;scanf(“%d”,&x);if(x
{if(x
#include int main(){ int t;scanf(“%d”,&t);
if(90
C’、‘D’、‘E’。
else if(60
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
Source
#include int main(){ int n,g,s,b,q,w;scanf(“%d”,&n);g=n%10;s=n/10%10;b=n/100%10;q=n/1000%10;w=n/10000;if((w==0)&&(q==0)&&(b==0)&&(s==0)){printf(“1n%dn%d”,g,g);} else if((w==0)&&(q==0)&&(b==0)){printf(“2n%d %dn%d%d”,s,g,g,s);} else if((w==0)&&(q==0)){printf(“3n%d %d %dn%d%d%d”,b,s,g,g,s,b);} else if(w==0){printf(“4n%d %d %d %dn%d%d%d%d”,q,b,s,g,g,s,b,q);} else printf(“5n%d %d %d %d %dn%d%d%d%d%d”,w,q,b,s,g,g,s,b,q,w);}
课后习题5.8 企业发放的奖金根据利润提成。
Source
#include int main(){ int I,P;scanf(“%d”,&I);if(I
P=I*10/100;else if(I
P=10000+(I-100000)*75/1000;else if(I
P=17500+(I-200000)*5/100;else if(I
P=27500+(I-400000)*3/100;else if(I
P=33500+(I-600000)*15/1000;else
P=39500+(I-1000000)*1/100;printf(“%dn”,P);return 0;}
实验四 循环结构程序设计
1.实验目的1)熟悉掌握用while语句、do-while语句和for语句实现循环的方法。2)掌握循环次数不确定的解题技巧,掌握多项式求和问题的解题技巧。3)掌握多重循环的编程技巧。
4)掌握在程序设计中用穷举法、迭代法、递推法求解问题的编程技巧。5)进一步学习调试程序。
2.程序填空
输出菲波那契数列的前20项,要求每行输出10项。#include int main(){ int i,x1,x2,x;x1=x2=1;printf(“%6d%6d”,x1,x2);/*输出前2项*/
for(i= 3;i
if(i%10==0)printf(“n”);x1= x2;x2= x;
/*每行输出10项*/ 9 } return 0;} 3.实验程序清单及运行结果
课后习题6.1
输入两个正整数m和n,求其最大公约数和最小公倍数。
Source
#include int main(){ int x,y,m,n,t;scanf(“%d %d”,&x,&y);m=x;n=y;t=m%n;while(t!=0){
m=n;
n=t;
t=m%n;} printf(“%d %dn”,n,x*y/n);}
课后习题6.2 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
Source
#include int main(){ char c;int w=0,x=0,y=0,z=0;
while((c=getchar())!='n'){
if(c>='a'&&c='A'&&c
w++;
else if(c==' ')
x++;
else if(c>='0'&&c
y++;
else
z++;} printf(“%d %d %d %dn”,w,y,x,z);} 课后习题6.3 Sn=2+22+222+2222+22222+22...2222(最后一项n个2)
Source
#include int main(){ int s,t,i,n,a;a=2;s=0;t=0;scanf(“%d”,&n);for(i=1;i
t=t+a;
s=s+t;
a=a*10;} printf(“%dn”,s);}
课后习题6.10 猴子吃桃问题。求第一天共摘多少桃子。
Source
#include int main(){ int s=1,N,i;scanf(“%d”,&N);for(i=1;i
s=(s+1)*2;} printf(“%dn”,s);}
实验五 数组
1.实验目的1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。2)掌握字符数组和字符串函数的使用。3)掌握与数组有关的算法(特别是排序算法)。
2.程序填空
(一)程序填空:输入一个整数n(1≤n≤10),再输入n个整数,将它们按升序排列后输出。
选择排序基本思想:
(1)由于n最大是10,需要定义一个长度为10的整型数组a;
(2)整个排序只需要确定前n-1个元素(a[0] ~a[n-2]),最后一个元素a[n-1]无需另外处理;
12(3)在确定a[i](i=0,1,…,n-2)时,先将a[i]本身看成最小,即令k=i,并将a[k]与后面的元素a[j](j=i+1, i+2, …, n-1)一一比较,如果a[j] int main(){ int i, j, k,n, temp, a[10];printf(“Input n(1~10):”);while(scanf(“%d”,&n), n=10);//输入正确的n:1≤n≤10
printf(“Input %d numbers:n”, n);
for(i=0;i
scanf(“%d”,&a[i]);//输入n个整型元素
//选择法排序
for(i=0;i
for(j= i+1;j
a[i]=a[k];
a[k]=temp;
//a[i]a[k] temp=a[i];}
for(i=0;i
printf(“%d ”,a[i]);//输出排序后的数组
printf(“n”);return 0;}
【思考题】运行程序,输入n:5,输入5个整数:23-9 14 0-3,显示结果是什么?
如果是按从大到小的降序排列,语句行Line 12 应怎么修改? 答;⑴显示结果Input n(1~10):5 ⑵Line 12 应改为if(a[j]>a[k])k=j;
Input 5 numbers: 23-9 14 0 3-9 0 3 14 23
(修改上面的程序,从在线评测系统中提交调试好的程序,题号1032。)
(二)程序填空:输入5个整数, 将这5个数按逆时针顺序转动一次后再输出,如输入1 2 3 4 5,逆时针转动一次后,输出2 3 4 5 1。
提示:设存放整数的数组为a。要实现数组逆时针转动,只要先将首元素a[0]“搬”至一个变量t中;然后从第1个元素到最后1个元素,依次向前移一位,即a[i-1]= a[i](i= 1, … , 4);最后将存放在t中的首元素放入最后的元素。#include int main(){ int i, t, a[5];printf(“Input 5 integers:n”);for(i=0;i
for(i= 1;i
a[4] = t;
printf(“After rotation:n”);for(i=0;i
printf(“%5d”, a[i]);printf(“n”);return 0; } 14 3.实验程序清单及运行结果
课后习题7.1 用筛法求之N内的素数。
Source
#include #include int main(){ int i,k,m,N;scanf(“%d”,&N);for(m=2;m
k=sqrt(m);
for(i=2;i
if(m%i==0)break;
if(i>=k+1)
printf(“%dn”,m);} } 课后习题7.2
用选择法对10个整数从小到大排序。
Source
#include int main(){ int a[10];int i,j,t;for(i=0;ia[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;} for(i=0;i
课后习题7.4 有一个已排好的9个元素的数组,输入一个数要求按原来排序的规律将它插入数组中。
Source
#include int main(){ int a[10];int i,m,j;for(i=0;im){ for(j=9;j>=i;j--)a[j+1]=a[j];a[i]=m;break;} else a[9]=m;for(i=0;i
课后习题7.5 输入10个数字,然后逆序输出。
Source
#include int main(){ int a[10],i;
} for(i=0;i=0;i--)printf(“%d ”,a[i]);return 0;实验六 函数
1.实验目的1)掌握定义函数的方法。
2)掌握函数实参与形参的对应关系以及“值传递”的方式。3)掌握函数的嵌套调用和递归调用的方法。
4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。5)学习对多文件程序的编译和运行。
2.程序填空
验证哥德巴赫猜想——任何一个大于6的偶数均可表示为两个素数之和。例如:6=3+3,8=3+5,10=5+5,…,18=7+11。要求将6-100之间的偶数均表示为素数之和,一行输出5组。#include #include Int prime(int n);int main(){ int a,b,k;for(k=6;k
//逐个处理6~100之间的偶数k { for(a=2;a
层循环
{ b=k-a;if(prime(a)&&prime(b))break;//如果a,b同为素数, 跳出内 } //内层循环
printf(“%d=%d+%d ”,k,a,b);//输出k=a+b
if(k%5==0)printf(“n”);
//每行输出5组,注意第一行只有3组
} //外层循环 return 0;} //自定义函数prime(n),判断整数n是否是素数,是则返回1,不是则返回0 int prime(int n){ int i;
for(i=2;i
课后习题8.1 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数
Source
#include int main(){ int gcd(int x,int y);int lcm(int x,int y);int a,b;scanf(“%d %d”,&a,&b);printf(“%d %dn”,gcd(a,b),lcm(a,b));} int gcd(int x,int y){ int t;if(y>x){t=x;x=y;y=t;} while(t){
t=x%y;
x=y;
y=t;} return x;} int lcm(int x,int y){ return x*y/gcd(x,y);
}
课后习题8.3 写一个判断素数的函数,在主函数输入一个正整数,输出是否是素数的消息。
Source
#include int main(){ int a;int prime(int x);scanf(“%d”,&a);if(prime(a))printf(“prime”);else printf(“not prime”);} int prime(int x){ int i=2;if(x==1)return 0;while(x%i){i++;} if(i==x)return 1;else return 0;}
课后习题8.5 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。
Source
#include #include char s[1000];int main(){ int len;void transpose(char a[],int n);gets(s);len=strlen(s);transpose(s,len);puts(s);} void transpose(char a[],int n){ int i,j=n/2;char t;for(i=0;i
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;} } 课后习题8.7 写一个函数,输入一个四位数,要求输出这四个数字字符,但要求每两个数字间空格。
Source
#include int main(){ int a,max(int x);
} int max(int x){ scanf(“%d”,&a);max(a);20 if(x/10!=0)max(x/10);printf(“%d ”,x%10);}
实验七 指针
1.实验目的1)通过实验进一步掌握指针的概念、会定义和使用指针变量。2)能正确使用数组的指针和指向数组的指针变量。3)能正确使用字符串的指针和指向字符串的指针变量。4)能正确使用指向函数的指针变量。
5)了解指向指针的指针的概念及其使用方法。
2.程序填空
(一)程序填空:输入三个整数,要求设计2个指针变量p1、p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。#include int main(){ int a,b,c, *p1, *p2, *p3;scanf(‚%d%d%d‛,&a,&b,&c);p1= a>=b?&a:&b;//p1指向a,b中较大者
if(*p1
p2= a>=b?&b:&a;//p2指向a,b中较小者
if(*p2>c)p2=&c;
printf(‚max=%d, min=%dn‛, *p1,*p2);return 0;} 运行结果: 输入 1 2 3 输出 max=3, min=1
(二)程序填空:利用指针,将数组a中的10个整数按相反顺序存放。源程序如下:#include int main(){ int i,t, a[10],*p,*q;printf(“Input 10 integers:”);for(i=0;i
for(;p!=a[5];p++ , q--)//逐对交换对称元素 { t= *p;*p= *q;*q=t;} for(i=0;i
以下程序都要求用指针处理。
课后习题10.1 输入三个整数,按由小到大的顺序输出。
Source
#include int main(){ void change(int *q1,int *q2,int *q3);int a,b,c,*p1,*p2,*p3;scanf(“%d %d %d”,&a,&b,&c);p1=&a;p2=&b;p3=&c;change(p1,p2,p3);printf(“%d %d %d”,a,b,c);} void change(int *q1,int *q2,int *q3){ void swap(int *pt1,int *pt2);if(*q1>*q2)swap(q1,q2);if(*q1>*q3)swap(q1,q3);if(*q2>*q3)swap(q2,q3);} void swap(int *pt1,int *pt2){ int t=*pt1;*pt1=*pt2;*pt2=t;}
课后习题10.2 输入三个字符串,按由小到大的顺序输出
Source
#include #include void swap(char **p1,char **p2){ char *temp;temp=*p1;*p1=*p2;*p2=temp;} int main(){ char str[20],str1[20],str2[20];char *ipoint1,*ipoint2,*ipoint3;char **p1, **p2, **p3;gets(str);gets(str1);gets(str2);ipoint1=str;ipoint2=str1;ipoint3=str2;p1=&ipoint1;p2=&ipoint2;p3=&ipoint3;
if(strcmp(*p1,*p2)>0)swap(p1,p2);if(strcmp(*p1,*p3)>0)swap(p1,p3);if(strcmp(*p2,*p3)>0)swap(p2,p3);printf(“%sn%sn%sn”,*p1,*p2,*p3);} 课后习题10.5 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
Source
#include void check(int nub[],int n){ int *pt,i,j,k;for(k=0,i=1;n-k>1;){for(pt=nub;pt
for(p=a;p
课后习题10.7 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。Source
#include int main(){ int n,m;char a[100],*p;scanf(“%d”,&n);scanf(“%s”,a);scanf(“%d”,&m);printf(“%s”,a+m-1);}
实验八 结构体与共用体
1.实验目的1)掌握结构体类型变量的定义和使用。2)掌握结构体类型数组及指针的定义和使用。3)掌握链表的概念,初步学会对链表进行操作。
2.程序填空
定义一个关于平面点的结构体类型,并定义一个含5个元素的结构体数组,用于存放5个平面点;然后输入这些点的坐标值,并统计位于半径为
3、以原点为圆心的圆之内的点的个数。#include struct point //定义结构体类型 struct point {
Double x,y;};int main(){
int i, num=0;_struct point__ p[5];//定义结构体数组p printf(“Input 5 points: n”);
for(i=0;i
scanf(“%lf%lf”, _p[i].x_ , __p[i].y_);//输入5个点的坐标
for(i=0;i
return 0;} 运行程序,输入
1.0 2.1
-3 4.23
9.0-8
4.5-1
-0.25-1.3
输出num= 2
3.实验程序清单及运行结果
课后习题11.1 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
Source
#include struct date { int year;int month;int day;};int leap_year(int a);int cal_day(struct date a);int leap_year(int a){ if(a%400==0||(a%4==0&&a%100!=0))return 1;else return 0;} int cal_day(struct date a){ int sum=0,b[]={31,28,31,30,31,30,31,31,30,31,30,31};for(int i=0;i2)sum=sum+a.day+leap_year(a.year);else sum=sum+a.day;return sum;} int main(){ struct date a;int n;scanf(“%d%d%d”,&a.year,&a.month,&a.day);n=cal_day(a);printf(“%dn”,n);}
课后习题11.3 现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。编写一个函数input,用来输入一个学生的数据记录。编写一个函数print,打印一个学生的数据记录。
在主函数调用这两个函数,读取N条记录输入,再按要求输出
Source
#include int N;struct Student {
char hao[50];
char name[50];
double score[3];};int main(){ scanf(“%d”,&N);void input(struct Student stu[]);void print(struct Student stu[]);struct Student stu[100],*p=stu;input(p);print(p);return 0;} void input(struct Student stu[]){ int i;for(i=0;i
scanf(“%s %s %lf %lf %lf”,stu[i].hao,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);} } void print(struct Student stu[]){ int i;for(i=0;i
printf(“%s,%s,%.0lf,%.0lf,%.0lfn”,stu[i].hao,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);} } 课后习题11.5
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
Source
#include int main(){ struct S {
char hao[50];
char name[50];
double score[3];};struct S stu[100];int N,i,j,sum1,sum2,sum3,max,k;scanf(“%d”,&N);sum1=0;sum2=0,sum3=0;for(i=0;i
scanf(“%s %s %lf %lf %lf”,stu[i].hao,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);} for(i=0;i
sum1=stu[i].score[0]+sum1;
sum2=stu[i].score[1]+sum2;
sum3=stu[i].score[2]+sum3;} printf(“%.0lf %.0lf %.0lfn”,sum1/N*1.0,sum2/N*1.0,sum3/N*1.0);max=stu[0].score[0]+stu[0].score[1]+stu[0].score[2];for(i=1;i
if(max
max=stu[i].score[0]+stu[i].score[1]+stu[i].score[2],k=i;} printf(“%s %s %.0lf %.0lf %.0lf”,stu[k].hao,stu[k].name,stu[k].score[0],stu[k].score[1],stu[k].score[2]);}
课后习题11.8 已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
Source
#include #include typedef struct Student { int id;float score;Student *next;}*Stu;void creatLink(Stu stu,int n){ Stu q=stu;for(int i=0;iid,&q->score);if(inext=p;q=p;} } q->next=NULL;} Stu sort(Stu stu1,Stu stu2,int n){ Stu head=(Stu)malloc(sizeof(Student));head->next=stu1;Stu q=stu1;while(q->next){ q=q->next;} q->next=stu2;for(int i=0;inext,t=p->next;for(int j=0;jid id){ q=p;p=t;t=t->next;} else { q->next=t;p->next=t->next;t->next=p;q=t;t=p->next;} } } return head->next;} void print(Stu stu){ Stu p=stu;while(p){ printf(“%d %.0fn”,p->id,p->score);p=p->next;} } int main(){ Stu stu1=(Stu)malloc(sizeof(Student));Stu stu2=(Stu)malloc(sizeof(Student));int m,n;scanf(“%d %d”,&m,&n);creatLink(stu1,m);creatLink(stu2,n);print(sort(stu1,stu2,m+n));}