C语言实验报告

2020-03-03 05:33:45 来源:范文大全收藏下载本文

实验一 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 %d\\n\",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=%d\\n\",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,%d\\n\",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 %c\\n\",c1,c2); printf(\"%d %d\\n\",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=%c\\n\",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,%d\\n\",a,b); 3

printf(\"%u,%u\\n\",a,b); printf(\"%u,%u\\n\",c,d); c=a=e; d=b=f; printf(\"%d,%d\\n\",a,b); printf(\"%u,%u\\n\",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,%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.按习题3.6的要求编程并上机运行:

要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c

2、c

3、c

4、c5这5个变量的值分别为’C’,\'h\', \'i\',\'n\', \'a\',经过计算,使c1、c

2、c

3、c

4、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(\"paword is %c%c%c%c%c\\n\",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=%d\\nc1=%c,c2=%c\\nd=%6.2f,e=%6.2f\\n\",a,b,c1,c2,d,e); printf(\"f=%15.6f,g=%15.12f\\nm=%ld,n=%ld\\np=%u,q=%u\\n\",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.2f\\n\",l); printf(\"圆面积为:s=%6.2f\\n\",s); printf(\"圆球面积为:sq=%6.2f\\n\",sq); printf(\"圆球体积为:vq=%6.2f\\n\",vq); printf(\"圆柱体积为:%6.2f\\n\",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%c\\n\",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

else y=3*x-11; printf(\"x=%d,y=%d\\n\",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,相应的等级是%c\\n\",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,相应的等级是%c\\n\",score,grade); } 其运行结果与使用if语句运行结果一样。

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

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

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

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

#include #include int main() 10

{ int num,indiv,ten,hundred,thousand,ten_thousand,place; printf(\"请输入一个整数(0-99999):\\n\"); scanf(\"%d\",&num); if(num>99999) printf(\"输入的数超过5位!\\n\"); else if(num9999) 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

printf(\"%d%d\",indiv,ten); break; case 1:printf(\"%d\",indiv); printf(\"\\n反序数字为:\"); printf(\"%d\",indiv); 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 %d\\n\",a,b,c,d); } 其运行结果为:

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

printf(\"%d %d %d %d\\n\",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=%d\\n\",a+b);break; case\'-\':printf(\"a-b=%d\\n\",a-b);break; case\'*\':printf(\"a*b=%d\\n\",a*b);break; case\'/\':printf(\"a/b=%d\\n\",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 %f\\n\",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

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

#include void main() { 15

int i=1,n,sum=0; printf(\"请输入一个整数:\\n\"); scanf(\"%d\",&n); while(i

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=%d\\n\",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;ia[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf(\"\\nThe sorted numbers:\\n\"); for(i=1;i

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

{

mid=(bott+top)/2;

if(number==a[mid])

{loca=mid;

printf(\"Has found %d,its position is %d\\n\",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]!=\'\\0\') i++; while(s2[j]!=\'\\0\') s1[i++]=s2[j++]; s1[i]=\'\\0\'; 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]=%d\\n\",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=\'A\'&&c

int longest(char string[]) {int len=0,i,length=0,flag=1,place=0,point; for(i=0;i

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

} 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=%d\\n\",h); l=lcd(u,v,h); printf(\"L.C.D=%d\\n\",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=%d\\n\",Hcf); printf(\"L.C.D=%d\\n\",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; } 其运行结果为:

25

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())!=\'\\0\'&&i=\'0\'&&c=\'a\'&&c=\'A\'&&c

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

n=n*16+s[i]-\'0\'; if(s[i]>=\'a\'&&s[i]=\'A\'&&s[i]

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=%4f\\n\",c);

case\'-\':c=minus(a,b);break; printf(\"a-b=%4f\\n\",c);

case\'*\':c=chen(a,b);break; printf(\"a*b=%4f\\n\",c);

case\'/\':c=chu(a,b);break; printf(\"a/b=%4f\\n\",c);

default :printf(\"enter data error!\\n\");

} printf(\"所求得的结果为:%4f\\n\",c);

27

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); } 其运行结果为:

实验八

28

指针

一、实验目的

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,%d\\n\",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(\"%s\\n%s\\n%s\\n\",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

printf(\"%d %d %d\\n\",a[i][0],a[i][1],a[i][2]); return 0; }

void move(int * pointer) {int i,j,t; for(i=0;i

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.%d\\n\",*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++)==\'\\0\') return (0); return (*(p1+i)-*(p2+i)); } 其运行结果为:

32

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; } } 其运行结果为:

33

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

#include int main() {int a[3][4],i,j; int *p; printf(\"请输入十二个数:\\n\"); for(i=0;i

34

C语言实验报告

C语言实验报告

C语言实验报告

c语言实验报告

C语言实验报告

C语言实验报告

c语言实验报告

c语言 实验报告

c语言实验报告

C语言 实验报告

《C语言实验报告.doc》
C语言实验报告
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文