c语言实验报告完成版

时间:2019-05-12 02:19:41下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《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位小数。

x1x1xf(x)e1x1

2x1x1#include

#include int main(){ double x,y;printf(“Input x:”);scanf(‚%lf‛, &x);if(x<-1)y= x+1;else if(x<1)y= exp(x);else y=sqrt(x*x+1); printf(“f(%.2f)=%.2fn”, x, y);return 0;} 运行程序,输入-2,显示结果是:-1

输入 0.5,显示结果是:1.65

输入 3,显示结果是:3.16

3.实验程序清单及运行结果

课后习题5.5 有一个函数

/ x

(x<1)y={ 2x-1(1<=x<10)3x-11(x>=10)写一段程序,输入x,输出y Source

#include int main(){ int x,y;scanf(“%d”,&x);if(x<10)

{if(x<1)y=x;else y=2*x-1;} else y=3*x-11;printf(“%dn”,y);return 0;} 课后习题5.6 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘Source

#include int main(){ int t;scanf(“%d”,&t);

if(90<=t&&t<=100)printf(“An”);else if(80<=t&&t<=89)printf(“Bn”);else if(70<=t&&t<=79)printf(“Cn”);

C’、‘D’、‘E’。

else if(60<=t&&t<=69)printf(“Dn”);else if(0<=t&&t<=59)printf(“En”);} 课后习题5.7 给出一个不多于5位的非负整数,要求

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<=100000)

P=I*10/100;else if(I<=200000)

P=10000+(I-100000)*75/1000;else if(I<=400000)

P=17500+(I-200000)*5/100;else if(I<=600000)

P=27500+(I-400000)*3/100;else if(I<=1000000)

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<=20;i++){ x=x1+x2;printf(“%6d”,x);

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<='z'||c>='A'&&c<='Z')

w++;

else if(c==' ')

x++;

else if(c>='0'&&c<='9')

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<=n;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]< a[k],则更新k的值:k =j。找出对应于下标i的最小元素a[k]后,交换a[i]与a[k]。#include int main(){ int i, j, k,n, temp, a[10];printf(“Input n(1~10):”);while(scanf(“%d”,&n), n<=1||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< n-1;i++){ k= i;//设a[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<5;i++)scanf(“%d”, &a[i]);t= a[0];

for(i= 1;i< 5;i++)a[i-1]=a[i];

a[4] = t;

printf(“After rotation:n”);for(i=0;i<5;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<=N;m=m+1){

k=sqrt(m);

for(i=2;i<=k;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;i<10;i++)scanf(“%d”,&a[i]);for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;} for(i=0;i<10;i++)printf(“%dn”,a[i]);}

课后习题7.4 有一个已排好的9个元素的数组,输入一个数要求按原来排序的规律将它插入数组中。

Source

#include int main(){ int a[10];int i,m,j;for(i=0;i<9;i++){ scanf(“%d”,&a[i]);} scanf(“%d”,&m);for(i=0;i<9;i++)if(a[i]>m){ for(j=9;j>=i;j--)a[j+1]=a[j];a[i]=m;break;} else a[9]=m;for(i=0;i<10;i++)printf(“%d n”,a[i]);}

课后习题7.5 输入10个数字,然后逆序输出。

Source

#include int main(){ int a[10],i;

} for(i=0;i<=9;i++)scanf(“%d”,&a[i]);for(i=9;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<=100;k=k+2)

//逐个处理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<=n;i++)if(n%i==0)break;if(i==n)return 1;//n是素数,返回1 else } return 0;// n不是素数,返回0 3.实验程序清单及运行结果

课后习题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<10;i++)scanf(“%d”, &a[i]);p= &a[0];q= &a[9];//p指向首元素,q指向最后一个元素

for(;p!=a[5];p++ , q--)//逐对交换对称元素 { t= *p;*p= *q;*q=t;} for(i=0;i<10;i++)printf(“%d ”, a[i]);printf(“n”);return 0;} 3.实验程序清单及运行结果

以下程序都要求用指针处理。

课后习题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<(nub+n);pt++,i++){if(*pt==0){i--;} else if(i%3==0){*pt=0;k++;} } } } main(){ int a[100],*p,n,i;scanf(“%d”,&n);for(p=a,i=1;p

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< 5;i++)

scanf(“%lf%lf”, _p[i].x_ , __p[i].y_);//输入5个点的坐标

for(i=0;i< 5;i++)//统计位于指定圆内的点的个数 if(p[i].x*p[i].x+p[i].y*p[i].y < 9)num++;printf(“ num= %d n”, num);

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<(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]))

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 < t->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));}

第二篇:《Matlab语言》实验报告

《Matlab语言》实验(报告)题库

1、TDOA信号分析类

(1)已给出一段事先采集的信号,该信号为进行TDOA定位使用的基本信号,其格式为GPS+IQ + GPS+IQ …,即每包数据由GPS头文件和IQ信号构成,GPS头文件共58B,其数据格式为

$HT,20130114,084556,N3606.82273,E10343.59311,M1538.7,11,0*,每包IQ数据共8192B,其数据格式为I0,Q0,I1,Q1,I2,Q2…,I2047,Q2047,即I数据2048点、Q数据2048点交叉出现。换言之,每包数据实际内容为:$HT,20130114,084556,N3606.82273,E10343.59311,M1538.7,11,0* I0 Q0 I1 Q1 I2 Q2 … I2047 Q2047,程序前期已实现读取IQ数据文件并进行关键信息读取分解,请根据程序提醒,完成相关功能(数据及程序见“1-实际IQ信号实验”文件夹)。

2、TDOA时差估计仿真类

(2)在TDOA定位技术中,时差估计是一个非常重要的环节。自行仿真2个具有一定时差的信号,用广义互相关法(GCC)计算该2个信号的时差,并与设定时差进行对比分析(需给出详细过程及适当的仿真图)。

(3)在TDOA定位技术中,时差估计是一个非常重要的环节。自行仿真2个具有一定时差的信号,用互模糊函数法计算该2个信号的时差,并与设定时差进行对比分析(需给出详细过程及适当的仿真图)。

(4)在TDOA定位技术中,时差估计是一个非常重要的环节。自行仿真2个具有一定时差的信号,用广义互相关(GCC)结合多项式拟合方法计算该2个信号的时差,并比较广义互相关法估计时差和广义互相关结合多项式拟合方法估计时差的结果,进行分析(需给出详细过程及适当的仿真图)。

(5)在TDOA定位技术中,时差估计是一个非常重要的环节。自行仿真2个具有一定时差的信号,自选方法计算该2个信号的时差,并与设定时差进行对比分析(需给出详细过程及适当的仿真图)。

3、TDOA时差估计实测类

下面三题使用“3-TDOA实测类-数据”。

(6)在TDOA定位技术中,时差估计是一个非常重要的环节。根据提供的TDOA数据,用广义互相关(GCC)计算该2路信号的时差,统计每包数据计算结果,并分析之(需给出详细解决过程及适当的分析图)。

(7)在TDOA定位技术中,时差估计是一个非常重要的环节。根据提供的TDOA数据,用广义互相关(GCC)结合多项式拟合方法计算该2路信号的时差,比较广义互相关法估计时差和广义互相关结合多项式拟合方法估计时差的结果,并分析之(需给出详细解决过程及适当的分析图)。

(8)在TDOA定位技术中,时差估计是一个非常重要的环节。根据提供的TDOA数据,自选方法计算该2路信号的时差,统计每包数据计算结果,并分析之(需给出详细解决过程及适当的分析图)。

4、信号频域分析类

(9)生成一个带有噪声的正弦波信号,信号的频率、幅度,噪声的幅度自行设定。(将带有噪声的正弦信号放入for循环中,利于pause,实现噪声动态变化效果,并在for循环内画出其时域图和幅频图(采样率和采样点数自行设定),观察动态变化情况),最后总结系统采样率和采样点数对仿真信号效果的影响。

(10)自行生成一段时域信号,要求在不同的时间,信号具有不同的频率(即非平稳信号),用短时傅里叶变换对其进行时频分析,并呈现时频分析结果。

(11)自行生成一段时域信号,要求在不同的时间,信号具有不同的频率(即非平稳信号),用小波变换对其进行时频分析,并呈现时频分析结果。

5、信号调制解调类

(12)自行产生正弦信号作为基带信号、载波,试合成AM信号,在AM信号上加高斯白噪声,并将AM信号解调,画出各信号(基带信号、载波、合成的AM信号、解调后的基带信号)时域图及频谱图,并对比总结解调效果。

(13)自行产生正弦信号作为基带信号、载波,试合成FM信号,在FM信号上加高斯白噪声,并将FM信号解调,画出各信号(基带信号、载波、合成的FM信号、解调后的基带信号)时域图及频谱图,并对比总结解调效果。

(14)自行产生一个正弦信号,以此为载波,生成一段2ASK信号,其中数字序列随机生成,画出数字基带序列、正弦信号、2ASK信号的时域图。

(15)自行产生两个不同频率的正弦信号,以此为载波,生成一段2FSK信号,其中数字序列随机生成,画出数字基带序列、两个正弦信号、2FSK信号的时域图。

(16)用Matlab模拟通信系统收发过程,要求:发射站发射FM调制信号,接收站接收该信号,并进行解调,系统参数及传播环境/过程参数自定。

6、信号分离类

(17)自行生成一个含有3个频率(信号频率相近,如200Hz,210Hz,300Hz)的信号,其他参数自定,直接用FFT难以将不同频率信号,尤其频率较近的信号进行分离,试用AR等高阶功率谱方法,将该信号进行分离,并绘制分离前后的频谱图(即信号的FFT图、信号的AR分离图)。

(18)自行生成一个含有不同频率或不同相位的信号,直接用FFT难以将不同频率信号,尤其频率较近或同频率不同相位的信号进行分离,试用MUSIC方法,将该信号进行分离,并绘制分离前后的频谱图(即原信号的FFT图、信号的MUSIC分离图),并总结现象。

(19)自行产生一段含有低频、高频和噪声成分的信号,尝试设计不同的滤波器,将高频信号及噪声滤掉,并绘制滤波前后的信号对比图(含时域、频域图)。

7、深度学习类

(20)设计一个神经网络(可以是任意类型的神经网络),对手写数字进行分类,要求小组内每个成员至少每人手写一个数字,然后识别,并分析识别准确率。

(21)自行找一个预训练好的网络,对日常生活物品进行识别,要求小组内每个成员拍照1~2个物品,通过网络进行识别,并分析识别效果。

第三篇:c语言实验报告

学号:__________ 姓名:__________ 班级:__________ 日期:__________

指导教师:__________ 成绩:__________

实验一 上机操作初步和简单的C程序设计

一、实验目的1、熟悉C语言运行环境Turbo C++3.02、会简单的程序调试

3、熟悉C语言各种类型数据的输入输出函数的使用方法

4、掌握顺序结构程序设计

二、实验内容

1、上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题1.7)

2、编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题1.6)

3、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 3.0中不能输入汉字,只能输入英文或拼音。(习题4.8)

4、运行如下程序,写出运行结果。第一┆范文网www.xiexiebang.com整理该文章,版权归原作者、原出处所有...#include

void main()

{

int a=1,b=2;

a=a+b;b=a-b;a=a-b;

printf(“%d,%dn”,a,b);

}

三、实验步骤与过程

四、程序调试记录

第四篇:C语言实验报告

实验一 C程序的运行环境和运行C程序的办法

1.实验目的

(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。(2)了解在该系统上如何编辑、编译、连接和运行一个C程序。(3)通过运行简单的C程序,初步了解C源程序的特点。(2)进入所用的集成环境。

(3)熟悉集成环境的界面和有关菜单的使用方法。(4)输入并运行一个简单的、正确的程序。

①根据本书介绍的方法对源程序进行编译,观察屏幕上显示的编译信息。若出错则返回修改,无错则连接。② 编译连接无错,运行程序,观察分析运行结果。(5)输入并编译一个有错误的C程序。

(6)输入并运行一个需要在运行时输入数据的程序。(7)运行一个自己编写的程序

心得体会:了解了C程序的运行环境和运行C程序的办法。在学校机房选用的是Turbo C。

实验二 数据类型、运算符和表达式

1.实验目的

(1)掌握C语言数据类型、熟悉如何定义一个整型、字符型和实型的变量,以及对他们的赋值方法。(2)掌握不同数据类型之间的赋值规律。

(3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。2.实验内容和步骤(1)输入并运行下面程序: #include void main(){char c1,c2;c1='a';c2='b';printf(“%c %cn”,c1,c2);} ①运行此程序,结果为:a b

②在上面printf语句下面再增加一个printf语句: printf(“%d %dn”,c1,c2);再运行,并分析结果,结果为97 98 ③将第三行改为 int c1,c2;再使之运行,并观察结果,结果为97 98 ④再将第4、5行改为;c1=a;c2=b;再使之运行,并观察结果,结果为运行出错。⑤再将第4、5行改为:

(1)检查所用计算机系统是否已安装了C编译系统并确定它所在的子目录。

c1=”a”;c2=”b”;再使之运行,并观察结果,结果为404 406 ⑥再将第4、5行改为: c1=300;c2=400;再使之运行,并观察结果,结果为300 400;

心得体会:在编写C程序时,有些细小的错误会影响结果的正确性。所以编写的时候要仔细小心。初步编写完成要回过头来再检查一遍

实验三 最简单的C程序设计

1.实验目的

(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。(2)掌握各种类型数据的输入输出方法,能正确使用各种格式转换符。2.实验内容和步骤

(1)通过下面的程序掌握各种格式转换符的正确使用方法。①输入以下程序 #include void main(){int ‘a’,’b’;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61,b=62 c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=32768,q=40000 printf(“a=%d,b=%dnc1=%c,c2=%cnd=%6.2f,e=%6.2fn”,a,b,c1,c2,d,e);printf(“f=%15.6f,g=%15.12fnm=%ld,n=%ldnp=%u,q=%un”,f,g,m,n,p,q);getch();} ②运行此程序并分析结果 a=61,b=62 c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=32768,q=40000 ③在此结果上,将程序9~14行改为: a=61,b=62

c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=32768,q=40000 运行程序,分析结果a=-15536,b=5536 c1==,c2=> d=3157.89,e= 0.12 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=50000,q=5536 ④改用scanf函数输入程序而不用赋值语句,scanf函数如下

scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q)输入的数据如下:

61,62,a,b,3.56,-6.87,3157,89.121,0.123456789,50000,-60000,37678,40000 运行结果如下:

61,62,a,b,3.56,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000 a=61,b=62 c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=37678,q=40000 ⑤在④的基础上将printf改为:printf(“a=%d,b=%dnc1=%c,c2=%cnd=%15.6f,e=%15.12fn”,a,b,c1,c2,d,e);printf(“f=%f,g=%fnm=%d,n=%dnp=%d,q=%n”,f,g,m,n,p,q);a=61,b=62 c1=a,c2=b d= 3.560000,e=-6.869999885559 f=3157.890121,g=0.123457 m=-15536,n=0 p=5536,q=-1

⑥将p,q改用%o格式符输出a=61,b=62 c1=a,c2=b d= 3.560000,e=-6.869999885559 f=3157.890121,g=0.123457 m=-15536,n=0 p=12640,q=177777

⑦将scanf函数中的%lf和%ld改为%f和%d,运行程序分析结果: c1=a,c2=b d= 3.560000,e=-6.869999885559 f=0.000000,g=0.000000

m=-15536,n=1824 p=5536,q=1983(2)按习题4.8要求编写程序,并上机运行。题目为:设半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出结果。输出时要有文字说明,取小数点后两位数字。#include main(){ float r,h,L,S,S1,V,V1,pi=3.1415926;printf(“r= ”);scanf(“%f”,&r);printf(“h= ”);scanf(“%f”,&h);L=2*pi*r;S=pi*r*r;S1=4*pi*r*r;V=4/3*(pi*r*r*r);V1=S*h;printf(“L=%6.2fnS=%6.2fnS1=%6.2fnV=%6.2fnV1=%6.2fn”,L,S,S1,V,V1);printf(“*********n”);printf(“copyrightn”);printf(“*********n”);getch();结果:L=9.42 S=7.07 S1=28.26 V=14.13 V1=21.20(3)编程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符。

上机运行程序,比较用printf和putchar函数输出字符的特点。代码:#include void main(){char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf(“%c,%c”,c1,c2);getch();} 结果:ab aba,b 比较,一个putchar函数只可以输出一个字符,而一个print函数可以输出多个字符,并可以用符号连接。

心得体会:如何在代码中使用不同的函数从而简化代码,优化代码需要我们多加练习,多加体会。

实验四 逻辑结构程序设计

1.实验目的

(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

(2)学会正确使用逻辑运算符和逻辑表达式。(3)熟练掌握if语句和switch语句。(4)结合程序掌握一些简单的算法。(5)学习调试程序。2.实验内容

(1)习题5.5。有一函数: y=x

(x<1)y=2x-1

(1≦x<10)y=3x-11(x≥10)用scanf函数输入x的值,求y的值。

运行程序,输入的x(分别为x<1,1~10,x≥10这3中情况),检查输出值的准确性。# include void main(){ int x,y;printf(“x:”);scanf(“%d”,&x);if(x<1){y=x;printf(“x=%3d, y=x=%dn”,x,y);} else if(x<10){y=2*x-1;printf(“x=%3d,y=2*x-1=%dn”,x,y);} else {y=3*x-11;printf(“x=%3d,y=3*x-11=%dn”,x,y);

} } 运行结果:x: ⑵ 给出一个百分制绩,要求输入成绩ABCDE。90分以上的为A,81~89分为B,70~79分为C,60~69分为D,60分以下的为E。① 实现编号程序,要求分别用IF和switch语句来实现。运行结果,并检查结果。

② 在运行一次,输入值为负值,这显然时输入错误,修改程序,是只能正确处理结果,当输入数据>100或<0是,通知用户输入错误,程序结束。# include void main(){float score;char grade;printf(“input student's score:”);scanf(“%f”,&score);switch((int)(score)){case 100: case 90:grade='A';break;case 80:grade='B';break;

case 70:grade='C';break;case 60:grade='D';break;case 50: case 40: case 30: case 20: case 10: case 00:grade='E';break;} printf(“score is %5.1fthe grade is %cn”,score,grade);getch();}(3)给一个不多于5为的正整数,要求1:起哦出他是几位数,2:粉笔输出每一位数字3;按逆顺序输出各个数字,例如原数321,应输出123,·要处理的数为1位正整数; ·要处理的数为2位正整数; ·要处理的数为3位正整数; ·要处理的数为4位正整数; ·要处理的数为5位正整数。

除此之外,程序还应当对不合法的输入作必要的处理,例如: ·输入负数;

·输入的数超过5位(如123456)代码:#include void main(){long x;int a,b,c,d,e;scanf(“%ld”,&x);if(x>=100000||x<0){printf(“输入错误”);} else if(x>=0&&x<10){printf(“它是一位数,数字为:%d”,x);} else if(x>=10&&x<100){a=x%10;b=x/10;printf(“它是二位数,数字为:%d,%d”,a,b);} else if(x>=100&&x<1000){a=x%10;b=x/10%10;c=x/100;printf(“它是三位数,数字为:%d,%d,%d”,a,b,c);} else if(x>=1000&&x<10000){a=x%10;b=x/10%10;c=x/100%10;d=x/1000;printf(“它是四位数,数字为:%d,%d,%d,%d”,a,b,c,d);} else if(x>=10000&&x<100000){a=x%10;b=x/10%10;c=x/100%10;d=x/1000%10;e=x/10000;printf(“它是五位数,数字为:%d,%d,%d,%d,%d”,a,b,c,d,e);} getch();}

结果:与预期相符。

(4)输入4个整数,要求按由小到大顺序输出。

在得到正确结果后,修改程序使之按由大到小顺序输出。代码1:#include void main(){int a,b,c,d,t;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;} 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(“%d,%d,%d,%d”,a,b,c,d);getch();} 代码2: #include void main(){int a,b,c,d,t;scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);if(a

实验五 循环控制

1.实验目的

(1)熟悉掌握用while语句、do-while语句和for语句实现循环的方法。

(2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。(3)进一步学习调试程序。2.实验内容

编程序并上机调试运行。

(1)输入两个正整数m和n,求他们的最大公约数和最小公倍数

在运行时,输入的值m>n,观察结果是否正确。

再输入时,使m

修改程序,不论m和n为何值,都能得到正确结果。代码:#include #include void main(){int m,n,i;scanf(“%d,%d”,&m,&n);for(i=fabs(n);i>=1;i--){if(n%i==0&&m%i==0)break;} printf(“%dn”,i);for(i=1;i<=fabs(m*n);i++){if(i%n==0&&i%m==0)break;} if(m*n<0)printf(“%dn”,-i);else printf(“%d”,i);getch();} 结果:与预期结果相符。

(2)输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。

在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。代码:#include void main(){char s;int a,b,c,d,e;a=0;b=0;c=0;d=0;e=0;while((s=getchar())!='n'){if(s>='A'&&s<='Z')a++;else if(s>='0'&&s<='9')b++;else if(s==' ')c++;else if(s>='a'&&s<='z')e++;else d++;} printf(“%d,%d,%d,%d,%d”,a,b,c,d,e);getch();} 结果:与预期结果相符

(3)用牛顿迭代法求方程2x3-4x2+3x=6在1.5附近的根。

在得到正确结果后。请修改程序使所设的x初始值由1.5改变为100、1000、10000,在运行,观察结果,分析不同的x处置对结果有没有影响,为什么?

修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。代码:#include #include void main(){float x1,x0,f,f1;scanf(“%f”,&x1);do {x0=x1;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f/f1;} while(fabs(x1-x0)>=1e-5);printf(“%5.2fn”,x1);getch();} 结果:与预期结果相符,x的初始值对于迭代没有影响。

(4)猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一天共摘了多少桃子。在得到正确结果后,修改题目,改为猴子每天吃了前一天的一半后,再吃两个。请修改程序并运行,检查结果是否正确。代码:#include void main(){int s,i;s=1;for(i=1;i<10;i++)s=2*(s+1);printf(“%d”,s);getch();} 结果1534

代码:#include void main(){int s,i;s=1;for(i=1;i<10;i++)s=2*(s+2);printf(“%d”,s);getch();} 结果2556 心得体会:循环控制也很难,还要多加练习。

实验六 数组

1.实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法;(2)掌握字符数组和字符串函数的使用;(3)掌握与数组有关的算法(特别是排序算法)。2.实验内容

编程序并上机调试运行

(1)用选择法对10个整数排序。10个整数用scanf函数输入 代码:#include void main(){int a[11],i,j,min,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<10;i++)printf(“%d”,a[i]);for(i=0;i<9;i++){min=i;for(j=i+1;j<10;j++)if(a[j]

(1)有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数组是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。代码:#include

void main(){int a[15],i,x,min,max,sign,loca,mid;for(i=0;i<15;i++)scanf(“%d”,&a[i]);for(i=0;i<15;i++)printf(“%3d”,a[i]);scanf(“%d”,&x);max=14;min=0;sign=0;if(xa[14])loca=-1;while((!sign)&&(min<=max)){mid=(max+min)/2;if(x==a[mid]){loca=mid;printf(“%d”,loca+1);sign=1;} else if(x

(2)将两个字符串连接起来,不要用strcat函数。代码:#include void main(){char str1[40],str2[40];int i,j;i=0;j=0;scanf(“%s”,str1);scanf(“%s”,str2);while(str1[i]!='')i++;while(str2[j]!='')str1[i++]=str2[j++];str1[i]='';printf(“%s”,str1);getch();

} 结果:与预期结果相符。

(2)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

应至少准备两组测试数据: ① 二维数组有鞍点,例如: ② 二维数组没有鞍点,例如:

用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。

如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。代码:#include void main(){int a[4][5],i,j,k,max,maxj,flag;for(i=0;i<4;i++)for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=0;j<5;j++)if(a[i][j]>max){max=a[i][j];maxj=j;} flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;} if(flag){printf(“%d”,max);break;}} if(!flag)printf(“no exist”);getch();} 结果:与预期结果相符。

心得体会:数组很重要,要掌握一维、二维数组的定义,并掌握有关算法

实验七 函数

1.实验目的

(1)掌握定义函数的方法;

(2)掌握函数实参与形参的对应关系,以及“值传递”的方式;(3)掌握函数的嵌套调用和递归调用的方法;

(4)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方式;(5)学习对多文件的程序的译和运行。2.实验内容

(1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息; 本程序应当准备以下测试数据:17、34、2、1、0。分别运行并检查结果是否正确。代码:#include main(){int prime(int n);int n;printf(“nintput an integer:”);scanf(“%d”,&n);if(prime(n))printf(“n%d is a prime.n”,n);else printf(“n%d is not a prime.n”,n);getch();}

int prime(int n){int flag=1,i;for(i=2;i void main(){int words(char);int longest(char[]);int i;char line[100];printf(“input one line:n”);gets(line);printf(“the longest word is:”);for(i=longest(line);words(line[i]);i++)printf(“%c”,line[i]);

printf(“n”);getch();} int words(char c){if((c>='a'&&c<='z')||(c>='A'&&c<='z'))return(1);else return(0);} int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)if(words(string[i]))if(flag){point=i;flag=0;} else len++;else {flag=1;if(len>=length){ length=len;place=point;len=0;}} return(place);}

运行结果:input one line: jkjk jiuiw hodyqyd jak the longest word is: hodyqyd

(3)用递归法将一个整数n转换成字符串。代码:#include main(){void convert(int n);int number;printf(“input an integer:”);scanf(“%d”,&number);printf(“output:”);if(number<0)

{putchar('-');number=-number;} convert(number);putchar('n');getch();}

void convert(int n){int i;if((i=n/10)!=0)convert(i);putchar(n%10+'0');}

运行结果:input an integer:123345667899 output:123345667899 心得体会:复杂的代码更需要耐心。

实验八 编译预处理

1.实验目的

(1)掌握宏定义的方法;(2)掌握文件包含处理方法;(3)掌握条件编译的方法。2.实验内容

编程序并上机调试运行。

(1)定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出以交换后的两个值 代码:#include #define swap(a,b)t=b;b=a;a=t main(){int a,b,t;printf(“input two integer a,b”);scanf(“%d,%d”,&a,&b);swap(a,b);printf(“Now,a=%d,b=%dn”,a,b);} 运行结果:与预期结果相符。

(2)用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母。用#define命令来控制是否要译成密码。代码:#include #define MAX 80 #define CHANGE 1 main(){char str[MAX];int i;gets();#if(CHANGE){if(i=0;i='a'&&str[i]<'z'||str[i]>='A'&&str[i]<='Z')str[i]+=1;else if(str[i]++'z'||str[i]=='Z')str[i]-=25;}} #endif print(“output:n%sn”,str);} 运行结果:与预期结果相符。

心得体会:对宏定义、文件包含处理方法、条件变编译的方法还需要多加练习

实验九

指针

1.实验目的

(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;(2)能正确使用数组的指针的指针数组的指针变量;(3)能正确使用字符串的指针和指向字符串的指针变量;(4)了解指向指针的指针的概念及使用方法。2.实验内容

(1)输入3个整数,按由小到大的顺序输出,然后将程序改为;输入3个字符串,按由小到大的顺序输出。代码:#include main(){void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p2;scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2)swap(p1,p2);if(n1>n3)swap(p1,p3);if(n2>n3)swap(p2,p3);printf(“%d,%d,%dn”,n1,n2,n3);} void swap(int *p,int *p){int p;p=*p;*p1=*p2;*p2=p;} 运行结果:与预期结果相符。

(2)原来第几号的人有n个人围成一圈,顺序排号。从第一个人开始报数,凡报道三的人退出圈子,问最后留下的是原来第几号的人。代码:#include main(){int i,k,m,num[50],*p;scanf(“%d”,&n);p=num;for(i=0;i

(3)用指针指向的指针的方法对n个整数进行排序并输出。要求将排序单独写成一个函数。n和个各整数在主函数中输入。最后在主函数中输出。

代码:#include main(){void sort(int **p,int n);int i,n,digit[20],**p,*pstr[20];scanf(“%d”,&n);for(i=0;i**(p+j)){temp=*(p+i);

*(p+i)=*(p+j);*(p+j)=*temp;}}}} 运行结果:与预期结果相符。

心得体会:指针是非常重要一部分,要多多练习,多多体会。

实验十

结构体和公用体

1.实验目的:

(1)掌握结构体类型变量的定义和使用;(2)掌握结构体类型数组的概念和应用;(3)掌握链表的概念,初步学会对链表进行操作;(4)掌握共用体的概念与使用。2.实验内容

编程序,然后上机调试运行。

(1)有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩、以及最高分的学生的数据,(包括学好、姓名、3门课的成绩、平均分数)。(本题是教材第11章习题11.5)要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。

(2)13个人围成一圈,从第一个人开始顺序报号1、2、3.凡报道“3”者退出圈子,找出最后留在圈子中的人原来的序号(本题是教材第11章习题11.9)。本题要求用链表实现。

(3)建立一个链表,每个节点包括:学好、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等与此年龄,则将此节点删去(本题是教材第11章习题11.11)。(4)输入和运行以下程序: #include union data {int i[2];float a;long b;char c[4];} void main(){scanf(“%d,%d”,&u,i[0],&u.i[1];printf(i[0]=%d,i[1]=%da=%fb=%ldc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c”,u.i[0], u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);} 输入两个整数10000、20000赋给u.i[0]和u.i[1].分析运行结果。然后将scanf语句改为: scanf(“%1d”,&u.b);输入60000赋给b。分析运行结果。

运行结果:与预期结果相符。

心得体会:掌握链表的使用,耐心分析程序中出现的错误与问题。

第五篇:c语言实验报告

c语言实验报告

学号:__________ 姓名:__________ 班级:__________ 日期:__________

指导教师:__________ 成绩:__________

实验一 上机操作初步和简单的C程序设计

一、实验目的

1、熟悉C语言运行环境Turbo C++3.0

2、会简单的程序调试

3、熟悉C语言各种类型数据的输入输出函数的使用方法

4、掌握顺序结构程序设计

二、实验内容

1、上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题1.7)

2、编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题1.6)

3、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 3.0中不能输入汉字,只能输入英文或拼音。(习题4.8)

4、运行如下程序,写出运行结果。

#include

void main(){

int a=1,b=2;

a=a+b;b=a-b;a=a-b;

printf(“%d,%dn”,a,b);}

三、实验步骤与过程

四、程序调试记录

下载c语言实验报告完成版word格式文档
下载c语言实验报告完成版.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言实验报告

    实验二数据类型,运算符和简单的输入输出 姓名 王颖晶 班级 材料2班 学号 22140059 日期2015年3月24日指导老师 赵芳1.实验目的 (1)掌握C语言数据类型,了解字符型数据和整形数......

    c语言实验报告

    1、定义一个求两数中最大值的函数,调用函数实现求a,b,c的最大值。(a,b,c从键盘输入) max(int x,int y) { int z; z=(x>y)?x:y; return(z); } void main() { int a,b,c,m;......

    C语言实验报告模版

    实验报告Ⅰ 指导教师曾宪华实验时间: 2010 年10月日 学院通信与信息工程专业通信类 班级0101105学号2011210150姓名陈环宇 实验室s313 实验目的及要求: (1)掌握选择结构程序设计......

    C语言 实验报告

    C语言程序设计(B) (2010-2011-2) 实验报告 教学班级: 学号: 姓名: 课程教师: 实验辅导教师: 江西理工大学自由编辑的程序 一、实验前的源程序: //任意整数的叠加 #include void main......

    C语言实验报告

    C语言程序设计(B) (2010-2011-2) 实验报告 教学班级: 学号: 姓名:课程教师:王华金 实验辅导教师:王华金 江西理工大学1 P123--五、1、编写函数,找出5*5数组对角线上元素的最小值,并在......

    c语言实验报告

    实验一 熟悉C语言程序的运行环境 一、实验目的 1、了解在该系统上如何编辑、编译、连接和运行一个C 程序; 2、通过运行简单的C程序,初步了解C程序的特点。 二、实验预习1、......

    c语言实验报告

    南昌大学实验报告 学生姓名: 学 号: 专业班级: √ 综合 □ 设计 □ 创新 实验日期: 实验成绩: 实验类型:□ 验证 □一.实验名称 实验3 控制语句 二.实验目的 1.熟练掌握if 、if…el......

    c语言实验报告

    计算机软件技术基础实验报告 实验一:线性表的排序与查找 一.实验内容 a) 键盘输入一组无序数据,添加到线性表中; b) 排序线性表并输出排序结果; c) 键盘输入一个数,并插入到排好......