首页 > 精品范文库 > 1号文库
C语言实验报告
编辑:莲雾凝露 识别码:10-937145 1号文库 发布时间: 2024-03-06 15:15:29 来源:网络

第一篇:C语言实验报告

郑州轻工业学院 实 践 报 告

实现内容:

OJ1123最佳校友(数组)、OJ1158又是升序(指针)、OJ1180成绩统计(结构)、OJ1203做幻方(文件)

号:541507020140 学生姓名:王红旭

专业班级:电子信息科学与技术15-01 所在院系:计算机与通信工程学院 指导教师:王秉政

成绩:

实践名称:上机实验课

来源课程:[0404230]C程序设计进阶 实践时间:202_.03-05 实践地点:科学校区实验楼301

报告撰写时间:202_.05.10

1123最佳校友(数组)1 实践目的

为了方便数组的管理和使用,提高程序设计的效率。实践要求

熟练使用数组解决问题。使用的技术、知识点、工具等

C语言程序设计书本教材,数组等。需求分析和功能描述

要求;北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。系统总体设计

#include int main(){ int a[100]={0};int i,n,max,k;while(scanf(“%d”,&n),n>=0)

a[n]++;max=a[0];for(i=1;i<100;i++){

if(a[i]>max)

max=a[i];} k=0;for(i=0;i<100;i++){

if(a[i]==max)

{

if(k==0)

printf(“%d”,i);

else

printf(“ %d”,i);

k++;

} }

} printf(“n”);return 0;

1158又是升序(指针)实践目的

指针可以表示复杂的数据结构,能动态分布内存,及方便地址使用字符串,可作为函数间传递的参数,也可以作为函数返回值,为函数之间各类型数据的传递提供简捷便利的方法。实践要求

熟练使用指针 使用的技术、知识点、工具等

C语言程序设计书本教材,指针等 需求分析和功能描述

将输入的四个整数按由大到小的顺序输出。

已定义如下swap函数,可实现形参pa和pb所指内存单元的内容交换。请务必使用本函数实现两个变量内容的互换。void swap(int *pa, int *pb){ int t;t=*pa;*pa=*pb;*pb=t;} 5 系统总体设计

#include #include

void swap(int *pa, int *pb);int main(){

int a[10];

int i, j, n=4;

for(i=0;i<4;i++)

scanf(“%d”, &a[i]);

for(i=0;i

for(j=i;j

if(a[i]

swap(&a[i], &a[j]);

for(i=0;i

printf(“%d%c”, a[i], i!=n-1 ? ' ' : 'n');

return 0;}

void swap(int *pa, int *pb){

int t;

t=*pa;

*pa=*pb;

*pb=t;}

1180成绩统计(结构)实践目的

数组在一定情况下不能更好的完成要求,使用结构可以更好的将数据关联起来,更好的解决问题。实践要求

熟练使用结构 使用的技术、知识点、工具等

C语言程序设计书本教材,结构等 需求分析和功能描述

从键盘输入若干个学生的信息,每个学生信息包括学号、姓名、3门课的成绩,计算每个学生的总分,输出总分最高的学生的信息。系统总体设计

#include typedef struct {

char ID[20];

char name[20];

int a;

int b;

int c;}STUDENT;//int inputArr int main(){

STUDENT stu, first;

int T=0, n=0, i=0;

scanf(“%d”, &n);

first.a = first.b = first.c =-1;

for(i = 0;i < n;i++)

{

scanf(“%s %s %d %d %d”, stu.ID, stu.name, &stu.a, &stu.b, &stu.c);

if(stu.a + stu.b + stu.c > first.a + first.b + first.c)

first = stu;

}

printf(“%s %s %d %d %dn”, first.ID, first.name, first.a, first.b, first.c);

return 0;}

1203做幻方(文件)实践目的

文件是处理大数据,并可以储存数据,防止数据消失。实践要求

熟练使用文件 使用的技术、知识点、工具等

C语言程序设计书本教材,文件等 需求分析和功能描述

Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐^_^ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.5 系统总体设计

#include #include #define N 30 int sqr(int m);

int main(){

int m;

while(scanf(“%d”, &m), m!= 0)

{

sqr(m);

}

return 0;}

int sqr(int m){

int a[N][N] = {0};

int x=0, y=0;

int times, p, q, fmt;

int i, j;

x = m / 2;

y = m1;

}

}

fmt = log10(times);

if(fmt == 0)

{

for(i = 0;i < m;i++)

{

for(j = 0;j < m1]);

printf(“n”);

j++)

}

} } else if(fmt == 1){

for(i = 0;i < m;i++)

{

for(j = 0;j < m1]);

printf(“n”);

} } else if(fmt == 2){

for(i = 0;i < m;i++)

{

for(j = 0;j < m1]);

printf(“n”);

} } printf(“n”);return 0;

第二篇:C语言实验报告

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

一、实验目的

1.了解所用的计算机系统。

2.了解在该系统上如何进行编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序了解C程序的特点。

二、实验内容和步骤

1.熟悉所用的系统。了解Windows资源管理器的使用方法:文件的查看、复制、运行等方法,Visual C++所在目录,文本文件的建立方法。2.进入Visual C++,并新建一个C++源程序文件。

3.熟悉Visual C++的集成环境,了解各菜单项有哪些子菜单。4.输入下面的程序(教材中的例1.1),注意区分大小写。

#include void main(){ printf(“This is a C program.n”);} 编译并运行程序。结果为:

5.关闭工作区,新建一个程序,然后对教材中的例1.2重复4中的操作(即只将程序改为例1.2中的程序,其它操作步骤相同)。其程序为:

#include int main(){ int a,b,sum;a=123;b=456;sum=a+b;printf(“sum is %dn”,sum);return 0;} 运行结果为:

6.关闭工作区,新建一个程序,然后输入并运行一个需要在运行时输入数据的程序

#include void main(){int a,b,c;int max(int x,int y);

printf(“input a and b:n”);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“nmax=%dn”,c);} int max(int x,int y){int z;if(x>y)z=x;else z=y;return(z);}(1)运行程序,若程序有错,则修改错误后继续运行程序,当没有错误信息时输入:2,5并按Enter键,查看运行结果。

其运行结果为:

(2)将程序的第三行改为:int a;b;c;然后按F9看结果如何,将其修改为int a,b,c;将子程序max的第3,4行合并为一行,运行程序,看结果是否相同。将程序的第三行改为:int a;b;c;运行结果为:

将子程序max的第3,4行合并为一行,运行程序,其结果相同,结果为:

7.运行一个自己编写的程序,程序的功能是输出两行文字。其程序为:

#include void main(){ printf(“我是中国人!n”);printf(“我深深的爱着我的祖国!n”);} 运行结果为:

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

一、实验目的

1.掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

2.掌握不同数据类型之间赋值的规律。

3.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。

4.进一步熟悉C程序的编辑、编译、连接和运行的过程。

二、实验内容和步骤

1.输入并运行下面的程序 #include void main(){char c1,c2;c1='a';c2='b';printf(“%c %c”,c1,c2);}(1)运行此程序 其结果为:

(2)加入下面的一个语句作为“}”前的最后一个语句:

printf(“%d,%dn”,c1,c2);其结果为:

(3)将第3行改为:

int c1,c2;然后再运行程序,并观察结果是否相同。相同,其结果为:

(4)将第3行改为int c1,c2;将第4,5行依次改为:

c1=a;c2=b;c1=“a”;c2=“b” c1=300;c2=400;每改为一次后运行程序,观察结果。其程序为:

#include void main(){int c1,c2;c1='a',c2='b';c1=300;c2=400;printf(“%c %cn”,c1,c2);printf(“%d %dn”,c1,c2);} 其结果为:

2.分析教材第3章习题3.5中的程序的运行结果,然后输入该程序并运行,将运行结果与前面分析的结果对比。其程序为:

#include int main(){int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“%f %e”,&x,&y);scanf(“%c %c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);return 0;} 其运行结果为:

3.输入并运行下面的程序

#include void main(){int a,b;unsigned c,d;long e,f;a=100;b=-100;e=50000;f=32767;c=a;d=b;printf(“%d,%dn”,a,b);3

printf(“%u,%un”,a,b);printf(“%u,%un”,c,d);c=a=e;d=b=f;printf(“%d,%dn”,a,b);printf(“%u,%un”,c,d);} 请对照程序和运行结果分析: 运行结果为:

(1)将一个负整数赋给一个无符号的变量,会得到什么结果。画出它们在内存中的表示形式。

(2)将一个大于32767的长整数赋给一个整型变量,会得到什么结果。画出它们在内存中的表示形式。

(3)将一个长整数赋给无符号的变量,会得到什么结果。画出它们在内存中的表示形式。4.输入习题3.10(1)运行程序,注意i,j,m,n的值。(2)将第4,5行改为:

m=i++;n=++j;再运行。(3)将程序改为:

#include void main(){int i,j;i=8;j=10;printf(“%d,%dn”,++i,++j);i=8;j=10;printf(“%d,%dn”,i++,j++);i=8;j=10;printf(“%d,%dn”,++i,i);i=8;j=10;printf(“%d,%dn”,i++,i);} 运行程序并分析运行结果。其结果为:

5.按习题3.6的要求编程并上机运行:

要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为’C’,'h', 'i','n', 'a',经过计算,使c1、c2、c3、c4、c5分别变为:'G','l','m',r','e',并输出.程序提示:

main函数算法如下:

定义char型变量 c1,c2,c3,c4,c5;给字符型变量赋值 c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;输出c1,c2,c3,c4,c5 其程序为: #include int main(){char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“password is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;} 其运行结果为:

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

一、实验目的

1.掌握C语言中使用最多的一种语句――赋值语句的使用方法。2.掌握各种类型数据的输入输出方法,能正确使用各种格式输出符。

二、实验内容和步骤

1.掌握各种格式输出符的使用方法。#include void main(){int a,b;float d,e;char c1,c2;5

double f,g;long n,m;unsigned p,q;a=61;b=62;c1='a';c2='b';d=3.56;e=-6.87;f=3156.890121;g=0.123456789;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);}(1)运行此程序并分析运行结果。其结果为:

(2)在此基础上,修改程序的第9-14行:

a=61;b=62;c1=a;c2=b;f=3156.890121;g=0.123456789;d=f;e=g;p=a=m=50000;q=b=n=-60000;运行程序,分析运行结果。其结果为:

(3)将9-14行改为以下的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,3156,890121,0.123456789,50000,-60000,32768,40000 其结果为:

2.按习题3.8的要求编写程序并运行:

设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积,圆球表面积、圆球体积、圆柱体体积。用scanf输入数据,输出计算结果,输出时要有文字说明,取小数后2位数字。其程序为:

#include int main(){float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h:”);scanf(“%f,%f”,&r,&h);l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;printf(“圆周长为:l=%6.2fn”,l);printf(“圆面积为:s=%6.2fn”,s);printf(“圆球面积为:sq=%6.2fn”,sq);printf(“圆球体积为:vq=%6.2fn”,vq);printf(“圆柱体积为:%6.2fn”,vz);return 0;} 其运行结果为:

3.编写程序,用getchar函数输入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。其程序为:

#include void main(){ char c1,c2;printf(“请输入两个字符: c1,c2 :”);

c1=getchar();c2=getchar();printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c%cn”,c1,c2);} 其运行结果为:

实验四 选择结构程序设计

一、实验目的

1.了解C语言表示逻辑值的方法。

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

二、实验内容

本实验要求编程解决以下问题,然后上机调试运行程序。

x1x1x101.y2x13x11x10

用scanf函数输入x的值,求y的值。

其程序为:

#include void main(){ int x,y;printf(“请输入x:n”);scanf(“%d”,&x);if(x<1)y=x;else if(x<10)y=2*x-1;

else y=3*x-11;printf(“x=%d,y=%dn”,x,y);} 运行结果为:

2.给出一个百分制的成绩,要求输出成绩等级A,B,C,D,E,90分及以上为A,80-89为B,70-79为C,60-69为D,60分以下为E。要求从键盘输入成绩,然后输出相应等级,分别用if语句和switch语句实现。(1)使用if语句的程序如下: #include void main(){ float score;char grade;printf(“请输入学生成绩:n”);scanf(“%f”,&score);if(score>=90)grade='A';else if(score>=80)grade='B';else if(score>=70)grade='C';else if(score>=60)grade='D';else grade='E';printf(“成绩是%-5.1f,相应的等级是%cn”,score,grade);} 运行结果为:

(2)使用switch语句程序如下: #include void main(){ float score;char grade;printf(“请输入学生成绩:n”);scanf(“%f”,&score);switch(int(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';break;}

printf(“成绩是%-5.1f,相应的等级是%cn”,score,grade);} 其运行结果与使用if语句运行结果一样。

3.编程实现:输入一个不多于5位的正整数,要求:(1)输出它是几位数,(2)分别输出每一位数字,(3)按逆序输出各位数字,如原数为321,则应输出123。应准备以下测试数据

要处理的数为1位正整数; 要处理的数为2位正整数; 要处理的数为3位正整数; 要处理的数为4位正整数; 要处理的数为5位正整数;

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

输入的数超过5位; 其程序为:

#include #include int main()10

{ int num,inp,ten,hundred,thousand,ten_thousand,place;printf(“请输入一个整数(0-99999):n”);scanf(“%d”,&num);if(num>99999)printf(“输入的数超过5位!n”);else if(num<0)printf(“输入的数是一个负数!n”);else { if(num>9999)place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;if(num>99999||num<0)printf(“enter num is error!n”);printf(“位数:%dn”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;inp=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,inp);printf(“n反序数字为:”);printf(“%d%d%d%d%d”,inp,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,inp);printf(“n反序数字为:”);printf(“%d%d%d%d”,inp,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d”,hundred,ten,inp);printf(“n反序数字为:”);printf(“%d%d%d”,inp,ten,hundred);break;case 2:printf(“%d,%d”,ten,inp);printf(“n反序数字为:”);11

printf(“%d%d”,inp,ten);break;case 1:printf(“%d”,inp);printf(“n反序数字为:”);printf(“%d”,inp);break;} printf(“n”);return 0;} }

4.编程实现:输入4个整数,要求按由小到大的顺序输出。得到正确结果后,修改程序使之按由大到小的顺序输出。由小到大顺序输出其程序为: #include void main(){int t,a,b,c,d;printf(“请输入四个数:”);scanf(“%d,%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;} 12

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 %dn”,a,b,c,d);} 其运行结果为:

由大到小顺序输出其程序为: 将上面程序第十九行改为:

printf(“%d %d %d %dn”,d,c,b,a);其运行结果为:

5.已知a=12,b=6,要求输入一个算术运算符(+、-、*、/),对a,b进行算术运算,并输出结果。其程序为:

#include int main(){int a=12,b=6,c;char ch;printf(“请输入一个四则运算的符号:n”);scanf(“%c”,&ch);printf(“The result is:”);switch(ch){ case'+':printf(“a+b=%dn”,a+b);break;case'-':printf(“a-b=%dn”,a-b);break;case'*':printf(“a*b=%dn”,a*b);break;case'/':printf(“a/b=%dn”,a/b);break;} return 0;} 其运行结果为:

实验五 循环控制

一、实验目的

熟悉使用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。

二、实验内容

1.上机完成习题6.1:输入两个正整数m和n,求出它们的最大公约数和最小公倍数。

输入时,使m

修改程序使对任何的整数都能得到正确的结果。其程序为:

#include void main(){ int p,r,n,m,temp;printf(“请输入两个正整数 n,m:n”);scanf(“%d,%d”,&n,&m);if(n

2.编写程序利用公式:e1其程序为:

#include

111求e的近似值,精确到小数后6位 1!2!n!

void main(){ int n,i;double e,p,t;printf(“输入n的值:n”);scanf(“&d”,&n);e=1;t=1;p=1;i=1;while(t>=1e-7){e=e+t;i++;p=p*i;t=1.0/p;} printf(“The e is %fn”,e);} 其运行结果为:

3.编程求1到n中能被3或7整除的数之和。分别用for循环语句和while循环语句完成本题。

用for循环,其程序为: #include void main(){ int i,n,sum=0;printf(“请输入一个整数:n”);scanf(“%d”,&n);for(i=1;i<=n;i++)if(i%3==0||i%7==0)sum=sum+i;printf(“The sum is %dn”,sum);} 其运行结果为:

用while循环语句,其程序为:

#include void main(){ 15

int i=1,n,sum=0;printf(“请输入一个整数:n”);scanf(“%d”,&n);while(i<=n){ if(i%3==0||i%7==0)sum=sum+i;i++;} printf(“The sum is %dn”,sum);}

4.上机完成习题6.10:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少桃子。

在得到正确结果后,修改题目,改为每天早上都吃了前一天剩下的一半加二个,请修改程序,并运行,检查运行结果是否正确。其程序为:

#include void main(){ int day,x=1,x1;for(day=9;day>=1;day--){ x=2*(x+1);x1=x;} printf(“total=%dn”,x1);} 其运行结果为:

实验六 数组

一、实验目的

1.掌握一维数组与二维数组的定义、赋值及输入输出方法。2.掌握字符数组和字符串函数的使用。

3.掌握与数组有关的算法(特别是排序算法)

二、实验内容

1.用选择法对10个整数排序。10个整数用scanf函数输入。其程序为:

#include void main(){int i,j,min,temp,a[11];printf(“enter data:n”);for(i=1;i<=10;i++){printf(“a[%d]=”,i);scanf(“%d”,&a[i]);} printf(“n”);printf(“The orginal numbers:n”);for(i=1;i<=10;i++)printf(“%5d”,a[i]);printf(“n”);for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;} printf(“nThe sorted numbers:n”);for(i=1;i<=10;i++)printf(“%5d”,a[i]);printf(“n”);} 其运行结果为:

2.有15个数存放在一个数组中,输入一个数要求用折半查找法找出该数是数组中的第几个元素的值,如果该数不在数组中,则输出无此数,要找的数用scanf函数输入。其程序为:

#include # define N 15 int main(){int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf(“enter data:n”);scanf(“%d”,&a[0]);i=1;while(ia[i-1])i++;else printf(“enter this data again;n”);} printf(“n”);while(flag){ printf(“input number to look for:”);scanf(“%d”,&number);

sign=0;

top=0;

bott=N-1;

if(numbera[N-1])

loca=-1;

while((!sign)&&(top<=bott))

{

mid=(bott+top)/2;

if(number==a[mid])

{loca=mid;

printf(“Has found %d,its position is %dn”,number,loca+1);

sign=1;

}

else if(number

bott=mid-1;

else

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);

printf(“continue or not(Y/N)?”);

scanf(“%c”,&c);

if(c=='N'||c=='n')

flag=0;} return 0;} 其运行结果为:

3.将两个串连接起来,不要用strcat函数。其程序为:

#include int main(){ char s1[80],s2[40];int i=0,j=0;printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);while(s1[i]!='')i++;while(s2[j]!='')s1[i++]=s2[j++];s1[i]='';19

printf(“nThe new string is:n”,s1);return 0;} 其运行结果为:

4.找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。至少准备两组测试数据:(1)二维数组有鞍点 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20(2)二维数组没有鞍点 1 2 3 4 11 2 4 6 8 12 3 6 9 10 15 4 8 12 16 7 用scanf函数从键盘输入数组的各元素的值,检查结果是否正确,题目未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。其程序为:

#include # define N 4 # define M 5 int main(){ int i,j,k,a[N][M],max,maxj,flag;printf(“please input matrix:n”);for(i=0;imax){max=a[i][j];maxj=j;} flag=1;for(k=0;k

if(max>a[k][maxj]){flag=0;continue;} if(flag){printf(“a[%d][%d]=%dn”,i,maxj,max);break;} } if(!flag)printf(“It is not exist!n”);return 0;} 其运行结果为:

实验七 函数

一、实验目的

1.掌握定义函数的方法。

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

4.掌握全局变量和局部变量,动态变量、静态变量的概念和使用方法。5.学会对多文件程序的编译和运行。

二、实验内容

1.写出一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应准备以下测试数据:17,34,2,1,0,分别输入数据,运行程序并检查结果是否正确。其程序为:

#include int main(){int prime(int);int n;printf(“input an integer:n”);scanf(“%d”,&n);if(prime(n))printf(“%d is a prime.n”,n);else printf(“%d is not a prime.n”,n);return 0;21

}

int prime(int(n)){int flag=1,i;for(i=2;i

2.用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。(1)把两个函数放在同一个程序文件中。

(2)将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。其程序为:

#include #include int main(){ int alphabetic(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);alphabetic(line[i]);i++)printf(“%c”,line[i]);printf(“n”);return 0;}

int alphabetic(char c)22

{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(alphabetic(string[i]))if(flag){point=i;flag=0;} else

len++;else {flag=1;if(len>=length){len=len;place=point;len=0;} } return(place);} 其运行结果为:

3.用递归法将一个整数n转换成字符串。例如输入483.应输出字符串“483”。n的位数不确定,可以是任意的整数。其程序为:

#include int main(){void convert(int n);int number;printf(“input an integer:”);scanf(“%d”,&number);printf(“output:”);if(number<0){putchar('-');putchar(' ');number=-number;23

} convert(number);printf(“n”);return 0;}

void convert(int n){int i;if((i=n/10)!=0)convert(i);putchar(n%10+'0');putchar(32);} 其运行结果为:

4.求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数用另一个函数根据求出的最大公约数求最小公倍数。分别用下面的两种方法编程。(1)不用全局变量,在主函数中输入两个数和输出结果。(2)用全部变量的方法,数据的传递通过全部变量的方法。不用全局变量其程序为: #include int main(){int hcf(int,int);int lcd(int,int,int);int u,v,h,l;scanf(“%d,%d”,&u,&v);h=hcf(u,v);printf(“H.C.F=%dn”,h);l=lcd(u,v,h);printf(“L.C.D=%dn”,l);return 0;}

int hcf(int u,int v){int t,r;if(v>u){t=u;u=v;v=t;} while((r=u%v)!=0){u=v;v=r;} return(v);24 }

int lcd(int u,int v,int h){ return(u*v/h);} 其运行结果为:

使用全局变量,其程序为: #include int Hcf,Lcd;int main(){void hcf(int,int);void lcd(int,int);int u,v;scanf(“%d,%d”,&u,&v);hcf(u,v);lcd(u,v);printf(“H.C.F=%dn”,Hcf);printf(“L.C.D=%dn”,Lcd);return 0;}

void hcf(int u,int v){int t,r;if(v>u){t=u;u=v;v=t;} while((r=u%v)!=0){u=v;v=r;} Hcf=v;}

void lcd(int u,int v){ Lcd=u*v/Hcf;} 其运行结果为:

5.写一个函数,输入一个十六进制数,输出相应的十进制数。其程序为:

#include # define MAX 1000 int main(){int htoi(char s[]);int c,i,flag,flag1;char t[MAX];i=0;flag=0;flag1=1;printf(“input a HEX number:”);while((c=getchar())!=''&&i='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F'){flag=1;t[i++]=c;} else if(flag){t[i]='';printf(“decimal number %dn”,htoi(t));printf(“continue or not?”);c=getchar();if(c=='N'||c=='n')flag1=0;else {flag=0;i=0;printf(“ninput a HEX number:”);} } } return 0;}

int htoi(char s[]){int i,n;n=0;for(i=0;s[i]!='';i++){if(s[i]>='0'&&s[i]<='9')26

n=n*16+s[i]-'0';if(s[i]>='a'&&s[i]<='f')n=n*16+s[i]-'a'+10;if(s[i]>='A'&&s[i]<='F')n=n*16+s[i]-'A'+10;} return(n);} 其运行结果为:

6、编程实现模拟计算机完成加、减、乘、除运算;加减乘除分别通过调用函数实现 其程序为:

#include float add(float x,float y);float minus(float x,float y);float chen(float x,float y);float chu(float x,float y);void main(){ float a,b,c;char ch;printf(“please enter a and ch and b:n”);scanf(“%f %c %f”,&a,&ch,&b);switch(ch)

{

case'+':c=add(a,b);break;printf(“a+b=%4fn”,c);

case'-':c=minus(a,b);break;printf(“a-b=%4fn”,c);

case'*':c=chen(a,b);break;printf(“a*b=%4fn”,c);

case'/':c=chu(a,b);break;printf(“a/b=%4fn”,c);

default :printf(“enter data error!n”);

} printf(“所求得的结果为:%4fn”,c);

printf(“n”);}

float add(float x,float y){float c;c=x+y;return(c);}

float minus(float x,float y){float d;d=x-y;return(d);}

float chen(float x,float y){float e;e=x*y;return(e);}

float chu(float x,float y){float f;f=x/y;return(f);} 其运行结果为:

实验八

指针

一、实验目的

1.通过实验进一步掌握指针的概念,会定义和使用指针变量。2.能正确使用数组的指针和指向数组的指针变量。3.能正确使用字符串的指针和指向字符串的指针变量。4.能正确使用指向函数的指针变量。

5.了解指向指针的指针的概念及其使用方法。

二、实验内容

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

1. 输入三个整数,按由小到大的顺序输出。运行无错后改为:输入三个字符串,按由小到大的顺序输出。

三个整数按由小到大的顺序输出其程序为: #include int main(){void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf(“input three integer n1,n2,n3:n”);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(“Now ,the order is:%d,%d,%dn”,n1,n2,n3);return 0;} void swap(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;} 其运行结果为:

三个字符按由小到大的顺序输出其程序为: #include #include int main(){void swap(char *,char *);char str1[20],str2[31],str3[20];29

printf(“input three line:n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)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);return 0;}

void swap(char *p1,char *p2){char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);} 其运行结果为:

2.将一个3×3的矩阵转置,用一函数实现。

在一主函数中用scanf函数输入以下矩阵元素: 1

5 7

11 13 15 17

将数组名作为函数参数,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出转置后的矩阵。其程序为:

#include int main(){void move(int *pointer);int a[3][3],*p,i;printf(“input matrix:n”);for(i=0;i<3;i++)scanf(“%d %d %d”,&a[i][0],&a[i][1],&a[i][2]);p=&a[0][0];move(p);printf(“Now, matrix:n”);for(i=0;i<3;i++)30

printf(“%d %d %dn”,a[i][0],a[i][1],a[i][2]);return 0;}

void move(int * pointer){int i,j,t;for(i=0;i<3;i++)for(j=i;j<3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);*(pointer+3*j+i)=t;} } 其运行结果为:

3.有n人围成一个圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。其程序为:

#include int main(){int i,k,m,n,num[50],*p;printf(“input number of person: n=”);scanf(“%d”,&n);p=num;for(i=0;i

i++;if(i==n)i=0;} while(*p==0)p++;printf(“The last one is NO.%dn”,*p);return 0;} 其运行结果为:

4.用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数的原型为:

int strcmp(char *p1,char *p2);设p1指向字符串s1,p2指向字符串s2.要求当两个字符相同时返回0,若两个字符串不相等,则返回返回它们二者第一个不同字符的ASCII码的差值。两个字符串s1,s2由主函数输入,strcmp函数的返回值也由主函数输出。其程序为:

#include int strcmp(char *p1,char *p2);int main(){int m;char str1[20],str2[20],*p1,*p2;printf(“input two strings:n”);scanf(“%s”,str1);scanf(“%s”,str2);p1=&str1[0];p2=&str2[0];m=strcmp(p1,p2);printf(“result:%d,n”,m);return 0;}

strcmp(char *p1,char *p2){int i;i=0;while(*(p1+i)==*(p2+i))if(*(p1+i++)=='')return(0);return(*(p1+i)-*(p2+i));} 其运行结果为:

5.用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数,n和各整数在主函数中输入,最后在主函数中输出。其程序为:

#include void main(){ void sort(int **p,int n);int i,n,data[10],**p,*pstr[10];printf(“Input n:n”);scanf(“%d”,&n);for(i=0;i**(p+j))

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;} } 其运行结果为:

6.用指针实现二维数组的地址和值的输出。其程序为:

#include int main(){int a[3][4],i,j;int *p;printf(“请输入十二个数:n”);for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);for(p=a[0];p

第三篇:C语言实验报告

C语言程序设计(B)

(202_-202_-2)

实验报告2

教学班级:

学号:

姓名:

课程教师:

实验辅导教师:

一、做一个“杨辉三角” 实验前的源程序:

/*杨辉三角*/ #include void fun(int Y[][]){ int i,j,k;for(i=0;i<12;i++){

Y[i][0]=1;

Y[i][i]=1;} for(i=2;i<12;i++){

for(j=1;j

{

Y[i][j]=Y[i-1][j-1]+Y[i-1][j];

}

} } main(){ int i,j,k;int Y[12][12];fun(Y);for(i=0;i<12;i++){

for(k=1;k<=11-i;k++)

printf(“

”);

for(j=0;j<=i;j++)

{

printf(“%6d”,Y[i][j]);

}

printf(“n”);} } 实验错误报告:

--------------------配置: mingw2.95-CUI Debug, 编译器类型: MinGW(Old)--------------------

检查文件依赖性...正在编译 D:Program FilesC-Free Standardsamples杨辉三角.cpp...[Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:4: declaration of `Y' as

multidimensional array [Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:4: must have bounds for all

dimensions except the first [Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:8: `Y' undeclared(first use this

function)[Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:8:(Each undeclared identifier is

reported only once [Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:8: for each function it appears

in.)[Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:4: too many arguments to

function `void fun()' [Error] D:Program FilesC-Free Standardsamples杨辉三角.cpp:23: at this point in file

构建中止 杨辉三角: 7 个错误, 0 个警告

实验后的源程序:

/*杨辉三角*/ #include void fun(int Y[12][12]){ int i,j,k;for(i=0;i<12;i++){

Y[i][0]=1;

Y[i][i]=1;} for(i=2;i<12;i++){

for(j=1;j

{

Y[i][j]=Y[i-1][j-1]+Y[i-1][j];

}

} } main(){ int i,j,k;int Y[12][12];fun(Y);for(i=0;i<12;i++){

for(k=1;k<=11-i;k++)

printf(“

”);

for(j=0;j<=i;j++)

{

} } printf(“%6d”,Y[i][j]);} printf(“n”);

二、用函数的方法 3*3矩阵置换

实验前的源程序:

/*用函数的方法 3*3矩阵置换*/ #include “stdio.h” main(){ void zhihuan();zhihuan();} void zhihuan(){

int a[3][3],b[3][3];int i,j;printf(“请输入一个3*3的矩阵:”);printf(“n”);for(i=0;i<3;i++){ for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);} printf(“您所输入的矩阵是:n”);for(i=0;i<3;i++){

for(j=0;j<3;j++)

{

printf(“ %d ”,a[i][j]);

b[j][i]=a[i][j];

}

printf(“n”);} printf(“n转置后的矩阵排列为:n”);for(i=0 i<3;i++){

for(j=0;j<3;j++)

{

printf(“ %d ”,b[i][j]);

}

} } printf(“n”);实验错误报告:

[Error] D:Program FilesC-Free Standardtemp未命名3.cpp:30: parse error before `<' [Error] D:Program FilesC-Free Standardtemp未命名3.cpp:30: parse error before `)' [Error] D:Program FilesC-Free Standardtemp未命名3.cpp:32: parse error before `;' [Error] D:Program FilesC-Free Standardtemp未命名3.cpp:38: parse error before `}' 构建中止 未命名3: 4 个错误, 0 个警告

实验后的源程序:

/*用函数的方法 3*3矩阵置换*/ #include “stdio.h” main(){ void zhihuan();zhihuan();} void zhihuan(){

int a[3][3],b[3][3];int i,j;printf(“请输入一个3*3的矩阵:”);printf(“n”);for(i=0;i<3;i++){ for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);} printf(“您所输入的矩阵是:n”);for(i=0;i<3;i++){

for(j=0;j<3;j++)

{

printf(“ %d ”,a[i][j]);

b[j][i]=a[i][j];

}

printf(“n”);} printf(“n转置后的矩阵排列为:n”);for(i=0;i<3;i++){

for(j=0;j<3;j++)

}

} { printf(“ %d ”,b[i][j]);} printf(“n”);

三、用函数

输入一个字符串按反序存放

实验前的源程序:

/*输入一个字符串按反序存放*/ #include #include “string.h” void fun(char str){

int length,i;

char temp;length=strlen(str);

length=strlen(str);for(i=0;i<=length/2;i++){

temp=str[i];

str[i]=str[length-i-1];

str[length-i-1]=temp;} } main(){ int i,length;char str[89],temp;printf(“ 请输入一串字符:n”);gets(str);fun(str);printf(“

字符的逆序排列为:n

”);puts(str);} 实验错误报告:

[Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存放.cpp:8: passing `char' to argument 1 of `strlen(const char *)' lacks a cast [Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存放.cpp:10: passing `char' to argument 1 of `strlen(const char *)' lacks a cast [Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存

放.cpp:13: invalid types `char[int]' for array subscript [Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存放.cpp:14: invalid types `char[int]' for array subscript [Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存放.cpp:14: invalid types `char[int]' for array subscript [Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存放.cpp:15: invalid types `char[int]' for array subscript [Error] D:Program FilesC-Free Standardsamples输入一个字符串按反序存放.cpp:24: passing `char *' to argument 1 of `fun(char)' lacks a cast 构建中止 输入一个字符串按反序存放: 7 个错误, 0 个警告

实验后的源程序:

/*输入一个字符串按反序存放*/

#include #include “string.h” void fun(char str[]){

int length,i;

char temp;length=strlen(str);

length=strlen(str);for(i=0;i<=length/2;i++){

temp=str[i];

str[i]=str[length-i-1];

str[length-i-1]=temp;} } main(){ int i,length;char str[89],temp;printf(“ 请输入一串字符:n”);gets(str);fun(str);printf(“

字符的逆序排列为:n

”);puts(str);}

四、用指针的方法 将3*3矩阵转置

实验前的源程序:

/*用指针的方法,将一个3*3整形矩阵转置*/ #include “stdio.h” void Transfer(int(*pointer)[3]){

int t;

int i, j;

for(i=1;i<3;i++)

{

for(j=0;j

{

t=*(*(pointer+j)+i);

*(*(pointer+j)+i)=(*(pointer+i)+j);

*(*(pointer+i)+j)=t;

}

} }

main(){ int i,j;

int a[3][3];

printf(“请输入一个3*3的整形矩阵:n”);

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

scanf(“%d”,&a[i][j]);

}

}

printf(“您所输入的3*3矩阵是:n”);

for(i = 0;i<3;i++){

for(j=0;j<3;j++)

{

printf(“ %d ”,a[i][j]);

}

printf(“n”);

}

Transfer(a);

printf(“转置后的3*3矩阵为:n”);

for(i=0;i<3;i++){

for(j=0;j<3;j++)

} } { printf(“ %d ”,a[i][j]);} printf(“n”);实验错误报告:

正在编译 D:Program FilesC-Free Standardsamples用指针的方法,将一个33整形

矩阵转置.cpp...[Error] D:Program FilesC-Free Standardsamples用指针的方法,将一个33整形矩阵转置.cpp:13: assignment to `int' from `int *' lacks a cast 构建中止 用指针的方法,将一个33整形矩阵转置: 1 个错误, 0 个警告

实验后的源程序:

/*用指针的方法,将一个3*3整形矩阵转置*/ #include “stdio.h” void Transfer(int(*pointer)[3]){

int t;

int i, j;

for(i=1;i<3;i++)

{

for(j=0;j

{

t=*(*(pointer+j)+i);

*(*(pointer+j)+i)=*(*(pointer+i)+j);

*(*(pointer+i)+j)=t;

}

} }

main(){ int i,j;

int a[3][3];

printf(“请输入一个3*3的整形矩阵:n”);

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{

scanf(“%d”,&a[i][j]);

}

}

printf(“您所输入的3*3矩阵是:n”);

for(i = 0;i<3;i++){

for(j=0;j<3;j++)

{

printf(“ %d ”,a[i][j]);

}

printf(“n”);

}

Transfer(a);

printf(“转置后的3*3矩阵为:n”);

for(i = 0;i<3;i++){

for(j=0;j<3;j++)

{

printf(“ %d ”,a[i][j]);

}

printf(“n”);} }

五、用指针 请输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换实验前的源程序:

实验前的源程序:

#include void main(){ int a[10],i,*m,*n;printf(“Input 10 numbers:n”);for(i=0;i<10;i++){ scanf(“%d”,&a[i]);m=n=&a[0];} for(i=0;i<10;i++){ if(a[i]>m)m=&a[i];i=a[10];a[10]=*m;*m=i;

} for(i=0;i<10;i++){ if(a[i]<*n)n=&a[i];i=a[9];a[9]=*n;*n=i;} for(i=0;i<10;i++)printf(“ %d ”,a[i]);} 实验错误报告:

正在编译 D:Program FilesC-Free Standardtemp未命名7.cpp...[Error] D:Program FilesC-Free Standardtemp未命名7.cpp:13: ANSI C++ forbids comparison between pointer and integer 构建中止 未命名7: 1 个错误, 0 个警告

实验后的源程序:

#include void main(){

int a[10],i,*m,*n;

printf(“Input 10 numbers:n”);

for(i=0;i<10;i++)

{

scanf(“%d”,&a[i]);

m=n=&a[0];

}

for(i=0;i<10;i++)

{

if(a[i]>*m)

m=&a[i];

i=a[10];

a[10]=*m;

*m=i;

}

for(i=0;i<10;i++)

{

if(a[i]<*n)n=&a[i];

i=a[9];

a[9]=*n;

*n=i;

}

for(i=0;i<10;i++)

printf(“ %d ”,a[i]);}

六、用指针 求一字符的长度再main中输入在字符串,并输出长度

实验前的源程序:

/*用指针 求一字符的长度 再main中输入在字符串,并输出长度*/ #include int length(char *s){

int i,n=0;

for(i=0;*(s+i)!=;i++)

n++;

return(n);} void main(){

char *s;

char c[20];

s=c;

printf(“请输入字符串:n”);

gets(c);

printf(“ 字符串长度为%dn”,length(s));} 实验错误报告:

正在编译 D:Program FilesC-Free Standardsamples用指针 求一字符的长度 再main中输入在字符串,并输出长度.cpp...[Error] D:Program FilesC-Free Standardsamples用指针 求一字符的长度 再main中输入在字符串,并输出长度.cpp:6: stray '' in program [Error] D:Program FilesC-Free Standardsamples用指针 求一字符的长度 再main中输入在字符串,并输出长度.cpp:6: parse error before `;' 构建中止 用指针 求一字符的长度 再main中输入在字符串,并输出长度: 2 个错

误, 0 个警告

实验后的源程序:

#include int length(char *s){

int i,n=0;

for(i=0;*(s+i)!='';i++)

n++;

return(n);

} void main(){

char *s;

char c[20];

s=c;

printf(“请输入字符串:n”);

gets(c);

printf(“ 字符串长度为%dn”,length(s));}

七、用函数的方法 由实参传来一个字符串,统计此字符中字母、数字、空格、和其他字符的个数,在主函数中输入字符串以及输出上述结果。实验前的源程序:

/*用函数的方法 由实参传来一个字符串,统计此字符中字母、数字、空格、和其他字符的个数,在主函数中输入字符串以及输出上述结果*/ #include int alphabet,number,space,others;void count(char str[]){

int i;

for(i=0;str[i]!='';i++)

if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))

alphabet++;

else if(str[i]>='0'&&str[i]<='9')

number++;

else if(str[i]==32)

space++;

else

others++;} void main(){

void count(char[]);

char str[80];

printf(“输入字符串:n”);

gets(str);

alphbet=0;

number=0;

space=0;

others=0;

count(str);

printf(“字母的个数= %dn数字的个数= %dn空格的个数= %dn其他字符个数= %dn”,alphabet,number,space,others);} 实验错误报告:

检查文件依赖性...正在编译 D:Program FilesC-Free Standardsamples用函数的方法 由实参传来一

个字符串,.cpp...[Error] D:Program FilesC-Free Standardsamples用函数的方法 由实参传来一个字符串,.cpp:25: `alphbet' undeclared(first use this function)[Error] D:Program FilesC-Free Standardsamples用函数的方法 由实参传来一个字符串,.cpp:25:(Each undeclared identifier is reported only once [Error] D:Program FilesC-Free Standardsamples用函数的方法 由实参传来一个字符串,.cpp:25: for each function it appears in.)构建中止 用函数的方法 由实参传来一个字符串,: 3 个错误, 0 个警告

实验后的源程序:

/*用函数的方法 由实参传来一个字符串,统计此字符中字母、数字、空格、和其他字符的个数,在主函数中输入字符串以及输出上述结果*/ #include int alphabet,number,space,others;void count(char str[]){

int i;

for(i=0;str[i]!='';i++)

if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))

alphabet++;

else if(str[i]>='0'&&str[i]<='9')

number++;

else if(str[i]==32)

space++;

else

others++;} void main(){

void count(char[]);

char str[80];

printf(“输入字符串:n”);

gets(str);

alphabet=0;

number=0;

space=0;

others=0;

count(str);

printf(“ 字母的个数=%dn 数字的个数=%dn 空格的个数=%dn 其他字符个数=%dn”,alphabet,number,space,others);}

八、用函数方法 输入一个3*3矩阵求其中元素的最大值 实验前的源程序:

/*用函数方法 输入一个3*3矩阵求其中元素的最大值*/ #include void main(){ int A[3][3];

int i,j;printf(“请输入一个3*3矩阵n”);for(i=0;i<3;i++){

for(j=0;j<3;j++)

{

scanf(“%d”,&A[i][j]);

} } int max(int array[][3]);printf(“max= %dn”,max(A));} int max(int array[][3]){ int i,j,max;max=array[0][0];for(i=0;i<3,i++)

for(j=0;j<3,j++)

if(array[i][j]>max)

max=array[i][j];

return(max);} 实验错误报告:

正在编译 D:Program FilesC-Free Standardtemp未命名4.cpp...[Error] D:Program FilesC-Free Standardtemp未命名4.cpp:23: parse error before `)' 构建中止 未命名4: 1 个错误, 0 个警告

实验后的源程序:

/*用函数方法 输入一个3*3矩阵求其中元素的最大值*/ #include void main(){ int A[3][3];

int i,j;printf(“请输入一个3*3矩阵n”);for(i=0;i<3;i++){

for(j=0;j<3;j++)

{

scanf(“%d”,&A[i][j]);

} } int max(int array[][3]);printf(“max= %dn”,max(A));} int max(int array[][3]){ int i,j,max;max=array[0][0];for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(array[i][j]>max)

max=array[i][j];

return(max);}

第四篇:C语言实验报告

C语言程序设计实验

--------指针应用实验

========================

山东农业大学实验报告

课程名称: c语言程序设计实验 学院: 水利土木工程学院 专业: 道路桥梁与渡河工程 班级: 202_级2班 姓名:

学号: 20133498

C语言与软件技术基础

实 验 报 告

课程名称 指导老师 班

实验名称 实验时间 姓

实验地点 提交时间 座

一、实验目的和要求

1、掌握指针和间接访问的概念,会定义和使用指针变量。

2、能正确使用数组的指针和指向数组的指针变量。

3、能正确使用字符串的执针和指向字符串的指针变量。

二、实验环境和方法

实验方法:

(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

(三)根据实验内容,编译程序。

实验环境:Windows xp Visual C++6.0

三、实验内容及过程描述

实验内容:编译以下题目的程序并调试运行。

1、输入3个整数,按由大到小的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出。

①先编写一个程序,以处理输入3个整数,按由小到大顺序输出。运行程序,分析结果。②把程序改为能处理输入3个字符串,按由小到大的顺序输出。运行此程序,分析结果。③比较以上两个程序,分析处理整数与处理字符串有什么不同?例如:(a)怎样得到指向整数(或字符串)的指针。(b)怎样比较两个整数(或字符串)的指针。(c)怎样交换两个整数(或字符串)。

2、将一个3×3的整数型二维数组转置,用一个函数实现之。在主函数中用scanf函数输入以下数组元素:

将数组0行0列元素的地址作为函数实参,在执行函数的过程中实现行列互换,函数调用结束后在主函数中输出已转置的二维数组。

请思考: ① 二维数组的指针,某一行的指针、某一元素的指针个代表什么含义?应该怎么表示? ② 怎样表示i行j列元素及其地址。

3、将n个数按输入时顺序的逆序排列,用函数实现。①在调用函数时用数组名作函数实参。

②函数实参改为用指向数组首元素的指针,形参不变。③分析以上二者的不同。

4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。分别在程序中按以下两种情况处理: ①函数形参用指针变量。②函数形参用数组名。实验步骤: ① 进入Visual C++ 6.0集成环境。② 输入自己编好的程序。③ 检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。④ 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。⑤ 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正确,应运行多次,分别检查在不同情况下结果是否正确。以下是各题源代码:

1、输入3个整数,按由大到小的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出。程序①

#include int main(){ void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf(“请输入3个数n1,n2,n3:”);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);return 0;}

void swap(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;} 程序②

#include #include int main(){ void swap(char *,char *);char str1[20],str2[31],str3[20];printf(“请输入3行字符:n”);

printf(“请输入3行字符:n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);printf(“排序结果为:n”);printf(“%sn%sn%sn”,str1,str2,str3);return 0;}

void swap(char *p1,char *p2){char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}

2、将一个3×3的整数型二维数组转置,用一个函数实现之。#include int main(){void move(int * pointer);int a[3][3],*p,i,j;printf(“请输入一个3×3数组:n”);for(i=0;i<3;i++)scanf(“%d %d %d”,&a[i][0],&a[i][1],&a[i][2]);p=&a[0][0];move(p);printf(“转置数组为:n”);for(i=0;i<3;i++)printf(“%d %d %dn”,a[i][0],a[i][1],a[i][2]);return 0;} void move(int * pointer){int i,j,t;for(i=0;i<3;i++)for(j=i;j<3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);*(pointer+3*j+i)=t;} }

3、将n个数按输入时顺序的逆序排列,用函数实现。

#include int main(){void sort(char * p,int m);int i,n;char * p,num[20];printf(“请输入n为:”);scanf(“%d”,&n);printf(“请输入%d个数:n”,n);for(i=0;i

printf(“逆序排列为:n”);for(i=0;i

4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。分别在程序中按以下两种情况处理: ① 函数形参用指针变量。

#include int main(){int length(char * p);int len;char str[20];printf(“请输入一个字符串:n”);scanf(“%s”,str);len=length(str);printf(“该字符串长度为%d.n”,len);return 0;} int length(char * p){int n;n=0;while(* p!=''){n++;p++;} return(n);}

②函数形参用数组名。

#include int main(){int length(char str[]);int len;char str[20];printf(“请输入一个字符串:n”);scanf(“%s”,str);len=length(str);printf(“该字符串长度为%d.n”,len);return 0;} int length(char str[20])int length(char str[20]){int n;char * p;p=str;n=0;while(* p!=''){n++;p++;} return(n);}

四、实验结果:

1、输入3个整数,按由大到小的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出。程序①结果:

结果分析:

本程序应用指针,在swap函数中交换指针p所指向的单元数值,使较小的数放前面从而达到排序的效果。程序②结果:

结果分析:

利用指针指向字符串数组,在strcmp函数中,将两个字符串自左向右逐个字符比较(按ASCCII码值大小比较),直到出现不同字符或遇到’’为止。

③处理整数只需将指针指向整数的存储地址然后进行比较;处理字符串时,字符串是用数组存储的,在进行

大小比较时用指针指向数组首地址或数组名从而得到字符串指针。比较整数用swap函数,比较字符串用strcmp函数。

2、将一个3×3的整数型二维数组转置,用一个函数实现之。

① 二维数组中,某一行的指针是指指向该数组一行中的所有元素可表示为:*(a+i),i表示第i行;某一元素指针代表任意元素的指针*a[i][j],i表示第i行,j表示第j列。② 第i行j列表示为a[i][j],地址表示为&a[i][j]。

3、将n个数按输入时顺序的逆序排列,用函数实现。

结果分析:

用数组名作函数实参与用指向数组首元素的指针作函数实参都是用“值传递”的方法将数值变量的地址传递到函数接收。数组名表示数组首元素的地址,在值传递中把首元素的地址传递到函数接收处,所以函数形参采用指针变量。

4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。①运行结果:

第五篇: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语言实验报告
TOP