第一篇:C语言实验报告
《C语言程序设计》实验报告
实验名称 ____ C程序的运行环境和运行C程序的方法_学期日期
同组人李江涛指导老师_杨雪松___________成绩___________-------------------------
【实验目的】:
1.了解所用的计算机系统的基本操作方法,学会独立使用该系统
2.了解在该系统上如何编辑、编译、连接和运行一个C程序
3.通过运行简单的C程序,初步了解C源程序的特点
【实验原理及相关知识】:(此处请简短概述一下就可以)
【实验设备】:(正确填写每次实验所用的设备型号)
【实验内容】:(此外按实指导书的要求写自己设计的东西)
【实验过程】:
【实验总结】:(此处写实验完成情况及对相关结果的分析总结)
【实验心得及其他】:
请各位同学认真添写实验报告,不要抄袭,尽量用自己的语言,自己的想法完成实验及
实验报告报告中不要求有过多的原理,主要看的是自己设计的实验内容和过程及完成情况。
第二篇:C语言实验报告
郑州轻工业学院 实 践 报 告
实现内容:
OJ1123最佳校友(数组)、OJ1158又是升序(指针)、OJ1180成绩统计(结构)、OJ1203做幻方(文件)
学
号:541507020140 学生姓名:王红旭
专业班级:电子信息科学与技术15-01 所在院系:计算机与通信工程学院 指导教师:王秉政
成绩:
实践名称:上机实验课
来源课程:[0404230]C程序设计进阶 实践时间:2016.03-05 实践地点:科学校区实验楼301
报告撰写时间:2016.05.10
1123最佳校友(数组)1 实践目的
为了方便数组的管理和使用,提高程序设计的效率。实践要求
熟练使用数组解决问题。使用的技术、知识点、工具等
C语言程序设计书本教材,数组等。需求分析和功能描述
要求;北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。系统总体设计
#include
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
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 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 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程序的运行环境和方法 一、实验目的 1.了解所用的计算机系统。 2.了解在该系统上如何进行编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序了解C程序的特点。 二、实验内容和步骤 1.熟悉所用的系统。了解Windows资源管理器的使用方法:文件的查看、复制、运行等方法,Visual C++所在目录,文本文件的建立方法。2.进入Visual C++,并新建一个C++源程序文件。 3.熟悉Visual C++的集成环境,了解各菜单项有哪些子菜单。4.输入下面的程序(教材中的例1.1),注意区分大小写。 #include 5.关闭工作区,新建一个程序,然后对教材中的例1.2重复4中的操作(即只将程序改为例1.2中的程序,其它操作步骤相同)。其程序为: #include 6.关闭工作区,新建一个程序,然后输入并运行一个需要在运行时输入数据的程序 #include 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 实验二 数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。 2.掌握不同数据类型之间赋值的规律。 3.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。 4.进一步熟悉C程序的编辑、编译、连接和运行的过程。 二、实验内容和步骤 1.输入并运行下面的程序 #include (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 2.分析教材第3章习题3.5中的程序的运行结果,然后输入该程序并运行,将运行结果与前面分析的结果对比。其程序为: #include 3.输入并运行下面的程序 #include 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 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 实验三 最简单的C程序设计 一、实验目的 1.掌握C语言中使用最多的一种语句――赋值语句的使用方法。2.掌握各种类型数据的输入输出方法,能正确使用各种格式输出符。 二、实验内容和步骤 1.掌握各种格式输出符的使用方法。#include 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 3.编写程序,用getchar函数输入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。其程序为: #include 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.学习调试程序的方法。 二、实验内容 本实验要求编程解决以下问题,然后上机调试运行程序。 x1x1x101.y2x13x11x10 用scanf函数输入x的值,求y的值。 其程序为: #include 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 (2)使用switch语句程序如下: #include printf(“成绩是%-5.1f,相应的等级是%cn”,score,grade);} 其运行结果与使用if语句运行结果一样。 3.编程实现:输入一个不多于5位的正整数,要求:(1)输出它是几位数,(2)分别输出每一位数字,(3)按逆序输出各位数字,如原数为321,则应输出123。应准备以下测试数据 要处理的数为1位正整数; 要处理的数为2位正整数; 要处理的数为3位正整数; 要处理的数为4位正整数; 要处理的数为5位正整数; 除此之外,程序还应当对不合法的输出作必要的处理。例如: 输入负数; 输入的数超过5位; 其程序为: #include { 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 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 实验五 循环控制 一、实验目的 熟悉使用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 二、实验内容 1.上机完成习题6.1:输入两个正整数m和n,求出它们的最大公约数和最小公倍数。 输入时,使m 修改程序使对任何的整数都能得到正确的结果。其程序为: #include 2.编写程序利用公式:e1其程序为: #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 用while循环语句,其程序为: #include 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 实验六 数组 一、实验目的 1.掌握一维数组与二维数组的定义、赋值及输入输出方法。2.掌握字符数组和字符串函数的使用。 3.掌握与数组有关的算法(特别是排序算法) 二、实验内容 1.用选择法对10个整数排序。10个整数用scanf函数输入。其程序为: #include 2.有15个数存放在一个数组中,输入一个数要求用折半查找法找出该数是数组中的第几个元素的值,如果该数不在数组中,则输出无此数,要找的数用scanf函数输入。其程序为: #include 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 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 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 prime(int(n)){int flag=1,i;for(i=2;i 2.用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。(1)把两个函数放在同一个程序文件中。 (2)将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。其程序为: #include 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 } 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 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 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 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 { 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 三个字符按由小到大的顺序输出其程序为: #include 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 3 5 7 9 11 13 15 17 将数组名作为函数参数,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出转置后的矩阵。其程序为: #include 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 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 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 {temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;} } 其运行结果为: 6.用指针实现二维数组的地址和值的输出。其程序为: #include C语言程序设计(B) (2010-2011-2) 实验报告2 教学班级: 学号: 姓名: 课程教师: 实验辅导教师: 一、做一个“杨辉三角” 实验前的源程序: /*杨辉三角*/ #include 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 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 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 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 } 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 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 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 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 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 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 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 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语言程序设计实验 学院: 水利土木工程学院 专业: 道路桥梁与渡河工程 班级: 2013级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 void swap(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;} 程序② #include 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 3、将n个数按输入时顺序的逆序排列,用函数实现。 #include printf(“逆序排列为:n”);for(i=0;i 4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。分别在程序中按以下两种情况处理: ① 函数形参用指针变量。 #include ②函数形参用数组名。 #include 四、实验结果: 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语言实验报告