16铜陵学院c语言学习知识实验报告.doc
C语言程序设计 实验报告20162017学年第二学期班 级 2016级学 号姓 名指导教师黄永青 实验一 Visual C+ 6.0编程环境与C语言程序的调试过程一、实验学时2 学时。二、实验目的1了解在Visual C+ 6.0环境下如何编辑、编译、连接和运行一个C程序;2通过运行简单的C程序,初步了解C源程序的特点。三、预习内容教材C语言程序设计第1章。四、实验内容1请调试、运行下面的程序一。#include <stdio.h>int main( )printf("Hello,World!n");return 0;给出以上程序的运行结果(或其截图): 2请调试、运行下面的程序二。#include <stdio.h>int main( ) int i,j; for(i=1;i<=9;i+) for(j=1;j<=i;j+) printf("%1d*%1d=%2d ",j,i,j*i);printf("n");return 0;给出以上程序运行结果的截图:3请改正下面程序三中的语法错误,然后调试、运行该程序,观察分析运行结果。#include <stdio.h>int main( )int a,b,sum;a=3b=4;sun=a+b;printf("%d+%d=%dn",a,b,sum);return 0;(1) 改正后的程序#include <stdio.h>int main( )int a,b,sum; a=3; b=4; sum=a+b;printf("%d+%d=%dn",a,b,sum);return 0;(2) 以上程序的运行结果(或其截图):五、思考题 1调试C语言程序的步骤有哪些?答:1.编辑2.编译3.连接4.运行 2程序的基本结构有哪三种? 答:顺序结构,选择结构,循环结构指导教师 成绩 年 月 日实验二 数据类型、运算符和表达式一、实验学时2 学时。二、实验目的1掌握整型、实型与字符型这三种基本类型的概念;2掌握常量及变量的使用方法;3. 掌握基本算术运算符及其表达式的使用方法;4. 掌握+、-运算符、赋值运算符及其表达式的使用方法。三、预习内容教材C语言程序设计第2章。四、实验内容 1下面的程序一有语法错误,请调试、运行该程序。#include <stdio.h>int main( )int 2cd=3;float yzl=3.14;char for=A;printf("%dn%fn%cn",2cd,yzl,for);return 0;程序一为什么出错? 答: 1. yzl=3.14不能用float类型,改为double2. 变量命名不能以数字为首位2cd=3;改为cd=3;3.for为循环结构不能作为变量名,改为f=A2观察分析下面程序二的运行结果:#include <stdio.h>int main( )int a=3,b=4,c=8;float x,y=4.0,z;x=a+b/c;z=a+y/c;printf("x=%fnz=%fn",x,z);return 0;以上程序的运行结果(或其截图):3观察分析下面程序三的运行结果:#include <stdio.h>int main( )int a,b,c,d,i,j,m,n;a=b=c=d=3;i=a+;j=+b;m=c-;n=-d;printf("a=%d,b=%d,c=%d,d=%dni=%d,j=%d,m=%d,n=%dn",a,b,c,d,i,j,m,n);return 0;以上程序的运行结果(或其截图):4观察分析下面程序四的运行结果:#include <stdio.h>int main( )int a=4;a+=a-=a*a+a;printf("a=%dn",a);return 0;以上程序的运行结果(或其截图):五、思考题1给变量命名应该注意哪些?答:1.变量名可由字母数字,下划线组成,但首位只能是字母,下划线不能为数字。 2.变量名区分大小写 3.变量名不能与系统标识符同名4.变量名的长度是有限的,视编译而定5.变量命名时尽量简单易记,见名之意2程序二的运行结果中,x和z的值为什么不同?答:x为int类型,x的值为整型小数点部分都为0;即x=3.000000 z为float类型,z的值为浮点型数据,即z=3.5000003程序三的运行结果中,i和j的值为什么不同?m和n的值为什么不同?答:i为a直接赋予i=3j是先b+1=4再将4赋给jm为c直接赋予 n是先d-1=3再将3赋给n4请分析程序四中表达式a+=a-=a*a+a的运算顺序。答:1.a*a=162.16+a=203.a-=16=-164.a+=(-16)=-32 成绩 指导教师 年 月 日实验三 顺序结构程序设计一、实验学时2 学时。二、实验目的1掌握整型、实型与字符型数据输入函数scanf( )的使用;2掌握整型、实型与字符型数据输出函数printf( )的使用;3掌握顺序程序的设计方法。三、预习内容教材C语言程序设计第3章。四、实验内容1下面程序一的功能是:从键盘输入两个整数,输出它们的和。请在横线上填写一条合适的语句,调试、运行该程序。#include <stdio.h>int main( ) int a,b,sum; scanf("%d%d",&a,&b); sum=a+b;printf("%d+%d=%dn",a,b,sum);return 0;给出以上程序的运行结果(或其截图):2观察分析下面程序二的运行结果。#include <stdio.h>int main( ) int a,b,sum;printf("请输入第一个整数:");scanf("%d",&a);printf("请输入第二个整数:");scanf("%d",&b);sum=a+b;printf("%d+%d=%dn",a,b,sum);return 0;给出以上程序的运行结果(或其截图):3下面程序三的功能是:输出三个变量a,b,c的值。请在横线上填写一条合适的语句,使该程序的运行结果为:a=35,b=43.66,c=A#include <stdio.h>int main( ) int a=35;double b=43.6578;char c=A; printf("a=%d,b=%6.2f,c=%cn",a,b,c); return 0;给出以上程序的运行结果(或其截图):4 设圆柱底面圆半径r=1.5m,高h=3m,编写程序,求底面圆的周长和面积、圆柱的表面积和体积。要求用函数scanf( )输入r和h,输出时有文字说明,取小数点后两位。1 给出以上问题的求解算法(用N-S图描述) 给出问题的源代码#include<stdio.h>#define PI 3.14159void main()double r,h,c,s,S,V;scanf("%lf,%lf",&r,&h);c=2*PI*r;s=PI*r*r;S=2*PI*r*r+2*PI*r*h;V=PI*r*r*h;printf("底面圆的周长:c=%6.2f,圆的面积:s=%6.2f,圆柱的表面积:S=%6.2f,圆柱的体积:V=%6.2fn",c,s,S,V); 该程序的运行结果(或其截图)五、思考题 程序一和程序二中输入数据的方式有什么区别?您认为哪种方式较好,为什么? 答:程序一中a,b同时定义;程序二中在输出时可以明确区分a,b,并在编程过程中将其分别定义;我认为程序二更好;因为相较于程序一,程序二编程过程不易出错,且便于输出。成绩 指导教师 年 月 日实验四 选择结构程序设计一、实验学时2 学时。二、实验目的1正确使用关系运算符和关系表达式;2正确使用逻辑运算符和逻辑表达式;3熟练使用if语句实现选择结构程序设计;4熟练使用switch语句实现多分支选择结构程序设计。三、预习内容教材C语言程序设计教程第4章。四、实验内容1下面程序一的功能是:输入学生成绩,若90分成绩100分,输出“Excellent!”;若60分成绩89分,输出“Pass!”;若成绩<60分,输出“Fail!”;若成绩<0分或成绩>100分,输出“Input Error!”。请在横线上填写合适的语句,调试、运行该程序。#include <stdio.h>int main( ) int score;printf("请输入分数(0-100):");scanf("%d", &score );if(score>100|score<0)printf("Input Error!n");else if(score>=90&&score<=100 ) printf("Excellent!n");else if (60<=score&&score<=89 ) printf("Pass!n");else printf("Fail!n"); return 0;程序一运行结果(执行程序4次,分别输入4个不同的成绩,对应4种不同的情况):输入数据205627799运行结果Fail!Input Error!Pass!Excellent!2已知下面的分段函数:请编写程序二,求出并显示y的值,x的值在程序运行时输入。代码如下:#include <stdio.h>void main( ) float x,y; scanf("%f",&x); if(x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-11; printf("%7.2fn",y);程序二运行结果(执行程序3次,分别输入3个不同的x值,对应3种不同的y值):输入数据2010运行结果3.000.0011.003设计一个简单的计算器程序三。程序运行时输入两个实数和一个四则运算符:+、-、*、/(例如,输入:45.6,2.4/),输出计算结果(保留两位小数)。代码如下:#include<stdio.h>void main()float a,b;char ch;scanf("%f,%f%c",&a,&b,&ch);if(ch=+)printf("%.2f+%.2f=%.2fn",a,b,a+b);else if(ch=-)printf("%.2f-%.2f=%.2fn",a,b,a-b);else if(ch=*)printf("%.2f*%.2f=%.2fn",a,b,a*b);else if(ch=/)printf("%.2f/%.2f=%.2fn",a,b,a/b);程序三运行结果(执行程序4次,分别输入4组不同的数据,对应+、-、*、/四种不同的运算):输入数据1,2+3,1-2,2*3,1/运行结果3243成绩 指导教师 年 月 日实验五 循环结构程序设计一、实验学时2 学时。二、实验目的1熟悉循环结构语句while、dowhile及for的执行流程;2熟练掌握用while、dowhile及for语句编写循环结构程序。三、预习内容教材C语言程序设计第5章。四、实验内容1下面程序一的功能是:求和式12-22+32-42+-142+152的值。请在横线上填写合适的语句,调试、运行该程序。#include "stdio.h"void main( ) int sum=0,n=1,sign=1; do sum=sum+sign*n*n; n+=1; sign=sign*(-1); while (n<=15); printf("12-22+32-42+-142+152=%dn", sum );程序一运行结果(或其截图):2编写程序二。输入一个5位正整数,输出该整数的倒序。例如:若输入是12345,则输出为54321。代码如下:#include<stdio.h>void main()int n;scanf("%d",&n);while(n)printf("%d",n%10);n/=10;程序二运行结果(或其截图):3 编写程序三。求数列,的前20项和。代码如下:#include<stdio.h>int main()float a=1,b=1,c=3,sum=0;int i;for(i=1;i<=20;i+)sum+=a/(b*c);a+=1;b+=2;c+=2;printf("%3fn",sum);return 0;程序三运行结果(或其截图):成绩 指导教师 年 月 日实验六 嵌套结构程序设计一、实验学时2 学时。二、实验目的1掌握一个结构里面嵌套一个结构的程序执行过程及设计方法;2掌握break语句在多选一结构程序中的使用方法;3掌握break及continue语句在循环结构程序中的使用方法。三、预习内容教材C语言程序设计第3-5章。四、实验内容1编写程序一,在屏幕上显示九九乘法表:代码如下:#include<stdio.h>void main()int i,j;printf("九九乘法口诀表:n");for(i=1;i<=9;i+)for(j=1;j<=i;j+)printf("%d*%d=%-4d",j,i,i*j);printf("n");2编写程序二,在屏幕上显示图形:代码如下:#include<stdio.h>void main()int i,j,k;for(i=1;i<=4;i+)for(j=1;j<=11-i;j+)printf(" ");for(k=1;k<=2*i-1;k+)printf("*");printf("n");for(i=1;i<=4;i+)for(j=1;j<=i+7;j+)printf(" ");for(k=1;k<=7-2*i;k+)printf("*");printf("n");3编写程序三,输出100以内的所有素数。所谓素数,是指仅能被1和该数本身整除的大于1的整数。代码如下:#include<stdio.h>void main()int i,j;for(i=2;i<=100;i+)for(j=2;j<=(i/2);j+)if(i%j=0)break;if(i%j!=0)printf("%dn",i);程序三运行结果(或其截图):成绩 指导教师 年 月 日实验七 数组一、实验学时2 学时。二、实验目的1掌握一维数组的定义、赋值、输入输出及其应用;2掌握二维数组的定义、赋值、输入输出及其应用;3掌握字符数组的定义、赋值、输入输出及其应用。三、预习内容教材C语言程序设计第6章。四、实验内容1编写程序一。在一个已按从小到大排好序的数列中插入一个数,要求插入该数后的数列仍按小到大排列。例如:原数列是1,3,5,7,9,11,13,15,17,插入数8后变成1,3,5,7,8,9,11,13,15,17。代码如下:#include <stdio.h>#define N 10void main()int i, data, aN = 1, 3, 5, 7, 9, 11, 13, 15, 17 ; printf("原数组a中的数据是:n");for(i = 0; i < N-1; i+)printf ( "%3d", ai ); printf ("n请输入要插入的数(data):"); scanf ( "%d", &data );for(i = N-2; ai > data && i>=0 ; i-) ai+1 = ai; ai+1 = data; printf("插入%d后,数组a中的数据是:n", data);for(i = 0; i < N; i+)printf ( "%3d", ai );printf ("n"); 程序的运行结果(或其截图): 2编写程序二。输出3行4列矩阵中的最大元素值及其行标和列标。要求:矩阵中的每个元素值由键盘输入。代码如下:#include<stdio.h>void main()int i,j;int row,col,max,a34=7,9,12,5,39,54,21,6,17,26,64,1;printf("原二维数组a:n");for(i=0;i<3;i+)for(j=0;j<4;j+)printf("%4d",aij);printf("n");row=col=0;max=a00;for(i=0;i<3;i+)for(j=0;j<4;j+)if(aij>max)max=aij;row=i;col=j;printf("二维数组中最大数值是:%d,位于第%d行,第%d列。n",max,row+1,col+1);程序的运行结果(或其截图):3编写程序三。将一个字符串中的所有英文字母按从小到大排列,重新组成一个字符串。例如:原字符串是:"How do you do?",重新排列后的字符串为:"?Hddoooouwy"。代码如下:#include<stdio.h>#include<string.h>int main()char s100,t;int i,j,sum;printf("Input:n");gets(s);sum=strlen(s);for(i=0;i<sum-1;i+)for(j=0;j<sum-1;j+)if(sj+1<=sj)t=sj;sj=sj+1;sj+1=t;printf("Output:n");puts(s);return 0;程序的运行结果(或其截图):成绩 指导教师 年 月 日实验八 函数一、实验学时2 学时。二、实验目的1熟悉函数的定义方法;2掌握函数的调用方式及主调函数与被调函数间的数据传递方法;3掌握递归算法,会用函数来实现递归算法。三、预习内容教材C语言程序设计第7章。四、实验内容1下面程序一的功能是求三个整数中的最大值。请在横线上填写合适的语句,调试、运行该程序。#include <stdio.h>int max(int a,int b,int c)int m;m=a;if(b>m)m=b;if(c>m)m=c;return(m) ;void main( )int x,y,z,maxi;scanf("%d,%d,%d",&x,&y,&z);maxi= max(x,y,z) ;printf("Max of %d,%d and %d is %d.n",x,y,z,maxi);程序的运行结果(或其截图):2编写程序二。在主函数中输入两个正整数,调用函数求它们的最小公倍数,结果在主函数中输出。代码如下:#include<stdio.h>int min(int m,int n)int s;s=m;while(s%n!=0)s+=m;return(s);void main()int m,n;printf("请输入两个正整数n");scanf("%d,%d",&m,&n);min(m,n);printf("这两个正整数的最小公倍数为:%dn",min(m,n);程序的运行结果(或其截图):3 编写程序三。用递归方法求解猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘了多少个桃子。代码如下:#include"stdio.h"int f(int a)int y;if(a=10)y=1;elsey=f(a+1)*2+2;return y;void main()int n,y;printf("请输入天数:");scanf("%d",&n);y=f(n);printf("第一天小猴共摘了%d个桃子。",y);程序的运行结果(或其截图):成绩 指导教师 年 月 日实验九 变量的作用域与存储方式一、实验学时2 学时。二、实验目的1掌握数组名作函数参数时形参与实参的定义方法;2会使用数组名作函数参数在主调函数与被调函数间传递多个数据;3掌握变量的作用域(局部变量与全局变量);4掌握变量的存储方式(动态存储与静态存储)。三、预习内容教材C语言程序设计第7章。四、实验内容1运行下面的程序一,并分析结果。#include <stdio.h>int x=8,y=3;int max(int a,int b)int c;if(a>b)c=a;elsec=b;return c;void main( )int x=4,maxi;maxi=max(x,y);printf("%dn",maxi);程序的运行结果(或其截图):2运行下面的程序二,并分析结果。#include <stdio.h>int f(int a)static int b=0;b=b+a;return b;void main( )int y1,y2;y1=f(1);y2=f(1);printf("y1=%d,y2=%dn",y1,y2);程序的运行结果(或其截图):3 编写程序三。在主函数中输入10个整数,调用函数sort将它们从小到大排序,排序结果在主函数中输出。代码如下:#include<stdio.h>#define M 10void sort(int a,int n)int i,j,t;for(i=0;i<n-1;i+)for(j=0;j<n-i-1;j+)if(aj>aj+1)t=aj;aj=aj+1;aj+1=t;void main()int dataM;int i;for (i=0;i<M;i+)scanf("%d",&datai);sort(data,M);for(i=0;i<M;i+)printf("%d",datai);printf("n");程序的运行结果(或其截图):成绩 指导教师 年 月 日实验十 编译预处理一、实验学时2 学时。二、实验目的1理解宏的概念,掌握宏的定义;2掌握带参数的宏定义、条件编译的使用;3了解文件包含的概念,掌握其应用方法。三、预习内容教材C语言程序设计第8章。四、实验内容1编写程序一。由键盘输入三个整数,用带参数的宏找出三个整数中的最大者。代码如下:#include<stdio.h>#define max(x,y,z) x>(y>z?y:z)?x:(y>z?y:z)void main()int o,p,q;printf("请输入三个整数:n");scanf("%d,%d,%d",&o,&p,&q);printf("%d%d%d,这三个数中最大的是:%d",o,p,q,max(o,p,q);printf("n");程序的运行结果(或其截图):2编写程序二。定义一个带参数的宏,使得两个参数的值互换,在主函数main( )中输入两个整数作为宏的参数,输出交换后的两个值。代码如下:#include<stdio.h>#define swap(a,b) int t;t=a;a=b;b=t;void main()int a,b;printf("请输入两个整数:n");scanf("%d%d",&a,&b);printf("交换前数字为:a=%d,b=%dn",a,b);swap(a,b)printf("交换后数字为:a=%d,b=%dn",a,b);程序的运行结果(或其截图):3编写程序三。由键盘输入三个实数,用带参数的宏设计输出这三个实数的格式: 第一行输出第一个实数; 第二行输出前两个实数; 第三行输出这三个实数。代码如下:#include "stdio.h"#define N1 printf("%fn",a)#define N2 printf("%f %fn",a,b)#define N3 printf("%f %f %fn",a,b,c)void main()float a,b,c;printf("请输入三个实数:");scanf("%f%f%f",&a,&b,&c);N1;N2;N3;printf("n");程序的运行结果(或其截图):成绩 指导教师 年 月 日实验十一 指针一、实验学时2 学时。二、实验目的1掌握指针和间接访问的概念,会定义和使用指针变量;2能利用指针变量作函数参数得到多个要改变的值;3能正确定义指向数组的指针变量,并能用其对数组进行访问;4能正确定义指向字符串的指针变量,并能用其对字符串进行访问。三、预习内容教材C语言程序设计第9章。四、实验内容1在主函数中输入2个整数,调用swap函数将它们的值交换,结果在主函数中输出。代码如下:#include<stdio.h>void swap(int *p1,int *p2)int t;t=*p1;*p1=*p2;*p2=t;void main()int m,n;printf("输入两个整数:");scanf("%d%d",&m,&n);swap(&m,&n);printf("%d %dn",m,n);程序的运行结果(或其截图): 2在主函数中输入10个整数,调用函数sum求它们的和,结果在主函数中输出(要求:实参用数组名,形参用指针变量)。代码如下:#include"stdio.h"int sum(int *p)int i,sum=0;for(i=0;i<10;i+)sum+=*(p+i);return(sum);void main()int b10,s,j;printf("请输入10个整数:");for(j=0;j<10;j+)scanf("%d",&bj);s=sum(b);printf("以上10个数的和为:%dn",s);程序的运行结果(或其截图):3. 在主函数中输入一个字符串,调用converse函数将该字符串逆序(例如,若原序是:abcdefgh,则逆序后是:hgfedcba),结果在主函数中输出。(要求:实参用字符数组名,形参用指针变量)。代码如下:#include<stdio.h>#include<string.h>void converse(char *s)int i,j;char c;j=strlen(s);for(i=0;i<j/2;i+)c=si;si=sj-i-1;sj-i-1=c;void main()char s100;printf("请输入字符串:");gets(s);converse(s);printf("该字符串倒序后为:%sn",s);程序的运行结果(或其截图):成绩 指导教师 年 月 日