《C程序设计》
实验报告
学 期:2010--2011学年第二学期 教师姓名: 教研室:
实验1 熟悉C语言程序的运行环境,掌握数据描述
1.1 实验目的
1.了解在开发环境中如何编辑、编译、连接和运行一个C语言程序。 2.通过运行简单的
C语言程序,初步了解C语言程序的结构特点。
3.掌握C语言数据类型的概念,学会使用C语言的相关运算符构成表达式。 1.2 实验预习
1.熟悉Visual C++的启动和退出及Visual C++中的编辑、编译、连接和运行命令。 2.了解下列命令及函数:include、main、printf、scanf。 3.熟悉Visual C++环境下每个菜单项的功能及相关命令对应的操作。 4.各种数据类型变量的定义形式及取值范围;熟悉下列标识符的含义。
int、short (int)、long (int)、unsigned (int)、float、double、char、void 5.各类运算符的优先级和结合规则。 6.常量与变量的区别和联系。 运行环境:
1.双击桌面Visual C++快捷方式进入Visual C++,或通过执行“开始——>程序——>
Microsoft Visual Studio 6.0——> Microsoft Visual C++6.0”或执行文件"C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin\MSDEV.EXE"。 2.单击“文件”菜单的“新建”命令。
3.在打开的“新建”对话框中选择“文件”标签。
4.选择C++ Source File,在目录输入栏选择文件保存位置,然后在文件输入栏中输入文件名,扩展名为.c (例如first.c) ,单击确定按钮。如图所示:
5.在源窗口中输入源程序,如图所示。
1
6.编译程序:按“Ctrl+F7”或通过“编译”菜单中的“编译”命令,或使用工具栏中的相应工具进行编
译 编译 连接 运行
若程序有错则找到出错行修改程序。
7.连接:若程序没有语法错误,则可按功能键F7或执行“编译”菜单中的“构件”命令或通过工具栏中
的相关工具(编译工具右边工具),进行连接生成可执行文件。
8.运行程序:按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的“!”工具运
行程序。 1.3 实验任务
1.输入下面的程序,注意区分大小写。
#include main() {
printf(“I am a student!”); }
2. 预测结果并上机验证
2
3.预测结果并上机验证
4.预测结果并上机验证 (1) main()
{ int a,b; a=b=3;
printf(“a=%d,b=%d”,a,b);
}
(2)若将以上程序进行改写,编辑如下: main() { int a,b; a=3; b=3.1;
printf(“a=%d,b=%d”,a,b); }
由此知,若赋值号左右数据类型不一致时,c语言将按赋值号左边变量类型为准。
5.现有程序如下,分析填空: 3
若将以上程序第4行进行改写,编辑如下: printf(“%d”,a=a+b,b=b+a);
对比以上两程序,结果不同的原因在于输出列表原程序为逗号表达式,所以输出b=b+a的值,而修改后
的仅有一个格式控制符,只能对应输出第一个表达式a=a+b。 6.若有以下程序段,分析c2的值:
int c1=2,c2; c2=1.0/c1*c1;
若将程序段改为:
c2=1/c1*c1;
分析c2所得结果,其中的关键在于除号两端如果都是整型数据,则所得结果截断取整 7.现有程序如下: main()
{ int a=7, b=10; a=a+b; b=a-b; a=a-b; printf(“%d,%d\n”, a, b ); }
程序运行的功能是:交换a、b两数的值 注:可修改a、b两数的值仔细观察。 8. 现有程序如下,分析填空:
9.
现有程序如下,分析填空:
4
10.现有程序如下,分析填空:
11.现有程序如下,分析填空:
12.思考题:改错题(以下程序有多处错误,上机调试。将正确的程序记录在下方。要求不能删减已有内容。)
1.4 实验心得
实验2 顺序结构程序设计与调试
5
2.1 实验目的
1.熟悉C语言的表达式语句、空语句和复合语句。 2.熟悉函数调用语句,尤其是各输入输出函数的调用语句。 3.熟悉顺序结构程序中语句的执行过程。 4.熟悉程序的跟踪调试和变量值的监视。 5.能设计简单的顺序结构程序。 2.2 实验预习
1.熟悉下列函数:putchar、getchar、printf、scanf 2.了解顺序结构程序的执行过程。
3.了解程序的跟踪调试和变量值的监视并能够熟练操作。
单步跟踪调试(逐条语句跟踪调试):
(1)可按功能键F7进行,要监视某变量的值时,就按Ctrl+F7键,然后输入相应的
变量名,就可以在监视消息窗口中查看到该变量的值。
(2)也可逐段运行程序,即每次运行若干条语句。首先利用Ctrl+F8键在各行光标
处设置若干断点,然后按Ctrl+F9键从程序的第一条语句运行到设置的第一个断 点,再按
Ctrl+F9键从设置的第一个断点运行到设置的第二个断点。 4.了解顺序结构程序的一般构成。 2.3 实验任务
1.若有程序 main() { int i,j;
scanf("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n ",i,j); }
要求给i赋5,给j赋10,则应该从键盘输入 i=5,j=10 2.华氏温度,要求输出摄氏温度,公式为:C=
59
(f32)。要求输出结果保留到小数点后两位。已
知程序段中有三处错误,由注释语句/**********found**********/提示下一条语句有错误,请修改程序中的错误并记录程序运行结果。
6
3. 已知程序功能是通过用户输入三角形三边,求取三角形面积。填空,将程序补充完整。求取公式为;S=(a+b+c)/2 area=sqrt(s*(s-a)*(s-b) *(s-c))
4.单步跟踪下面程序的执行,每执行一条语句就查看各变量的值。运行时输入一个三位的整数。单步跟踪程序时填写下表,同时分析程序的功能。
#include”stdio.h” void main() {int n,x1,x2,x3,y;
printf(“please input number n”); scanf(“%3d”,&n); x1=n/100; x2=n/10%10;
7
x3=n%10;
y=x3*100+x2*10+x1; printf(“y=%3d”,y);}
程序的功能是: 将输入的3位整数逆序排列 5. 9
getchar()只能接收单个字符,数字也当字符处理 6. 120,170
7. 826 628 n1 n2 n3 8. a=123,123,|_____| +123 ||| 123,123|||| ,|
b=-45,-45,|_____||_|-45 ||| -45,-45|||| ,|
x=2.547290 ,|_| 2.547290 ,|__||_||__2.55 |||||x=2.547|_||_|,2 .55,3
9. 编辑程序,输入学生语、数、英三门课程成绩(考虑数据类型,整型和实型),并输出其总分和平均分。 整型: main()
{ int c,m,e,sum;
float ave;
scanf("%d,%d,%d",&c,&m,&e); sum=c+m+e; ave=sum/3.0;
printf(“sum=%d\n ave=%f”,sum,ave);
} 实型: main()
{float c,m,e,sum,ave; scanf("%f,%f,%f",&c,&m,&e); sum=c+m+e; ave=sum/3;
printf(“sum=%f\n ave=%f”,sum,ave);
}
8
2.4 实验心得
实验3 选择结构程序设计与调试
3.1 实验目的
1.理解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 2.学会正确使用逻辑运算符和逻辑表达式、关系运算符和关系表达式。 3.学会运用逻辑表达式或关系表达式等表达条件。 4.熟练掌握if语句和switch语句。
5.学习跟踪调试程序,针对具体程序组织输入测试数据,观察程序运行能否得到预期
的输出结果。
6.熟悉选择结构程序段中语句的执行过程。 3.2 实验预习
1.熟悉逻辑运算符和逻辑表达式、关系运算符和关系表达式。 2.熟悉下列语句:if、if-else、switch、break。
3.3 实验任务
1.阅读程序,上机调试并记录程序结果。
以上两题告诉了你什么:1) c中的赋值号与等于运算符应区分。
9
2) 若判断表达式值为0,表示假,执行else分支
2.阅读程序,上机调试并记录程序结果。
3. 阅读程序,上机调试并记录程序结果。
4.若从键盘输入58,判断以下程序输出的结果。
5. 阅读程序,上机调试并记录程序结果。
6. 阅读程序,上机调试并记录程序结果。
7. 阅读程序,上机调试并记录程序结果。
8. 阅读程序,并回答问题
main( )
{ int a,b,max,min; scanf("%d%d",&a,&b); if(a>b) max=a; else max=b;
printf("max=%d\n",max); } 问题:
a、此程序的功能是 输出两数中的最大数 b、请用条件表达式语句(?:)修改程序使之完成相同的功能,
其语句是 printf(“max=%d\n”,a>b?a:b); 9. 有一函数
y = 2(x-1) (1=10)
编程求当分别输入x的值为0.3,3.9,11时,y的值。 main() { float x,y; scanf("%f",&x); if (x
printf("x=%f,y=%f\n",x,y); }
x=0.3时y=-0.7 ;x=3.9时y=5.8;x=11时y=23 10.编辑程序,输入一个不多于3位的正整数,要求:
a)求出它是几位数;分别打印出每一位数字;
b)按逆序打印出各位数字,例如原数为-321,应输出-123。
main()
{ int x,a,b,c,e=0; scanf("%d",&x);
a=x/100; /*a、b、c用于求取各个数位*/ b=x%100/10; c=x%10;
e=c*100+b*10+a; /*e存储x数值的逆序排列数*/ if (a>0) /*if分支用于判断x的大小,并根*/ printf("x>100"); /*据位数决定逆序的最终值*/ else if(b>0)
{ printf("10
{ printf("x
printf("%d,%d,%d",a,b,c); printf("%d",e); }
11. 随机输入3个整型数据作为学生的课程成绩,编程实现由小到大排序输出(对比第三章编程题,比较他们的优缺点)。
main()
{ int a,b,c,e=0;
scanf("%d,%d,%d",&a,&b,&c); if (a>b) {e=a;a=b;b=e;} if(a>c)
{e=a;a=c;c=e;} if(b>c)
{e=b;b=c;c=e;}
printf("%d,%d,%d",a,b,c);} 3.4思考
请思考如何通过改变分支条件将多if嵌套变成无套形式,提高计算机的运算效率。请上网搜索答案,体会程序优化的思路方式。无具体答案。 3.5 实验心得
实验4 循环结构程序设计
4.1 实验目的
1.掌握用while语句、do-while语句和for语句实现循环的方法。
2.理解循环结构程序段中语句的执行过程,进一步练习程序的跟踪调试技术。 3. 掌握在程序设计中用循环的方法实现各种算法(如穷举法、迭代等)。 4. 理解break语句和continue语句的功能和执行过程。 4.2 实验预习
1.熟悉语句:while、do-while、for 、break、continue。 2.熟悉三种循环语句之间的关系和区别。 4.3 实验任务 (一)while循环
1.若输入的值是5,预测结果并上机验证
2.若输入的值是5,预测结果并上机验证,循环执行次数是__5____,考虑若x定义为整型,程序结果是否相同___不同_______ ,为什么_因为要考虑到c中除法的规则
3. 阅读程序,完成下表,程序实现:1+2+„+100 main() {int n,s;
n=____1___; s=____2___; while(___3___) {s+=_____4____; n++;}
printf(“1+2+„+%d=%d\n”,100,_____5___);}
4. 预测结果并上机验证
(二)do„while循环 1. 预测结果并上机验证
2. 输入一串字符串,以字符“#”表示输入结束。统计其中大写字母与小写字母各出现
了多少次。
main()
{ char ch;int lower,upper; lower=upper=0;
while((ch=getchar())!=’#’)
{ if(ch>=’a’&&ch=’A’&&ch
printf(“大写字母个数=%d,小写字母个数=%d”,upper,lower); }
(三)for语句
1. 预测结果并上机验证
2. 预测结果并上机验证
(四)break和
continue语句 1. 预测结果并上机验证
2. 预测结果并上机验证
3. 阅读程序,完成下表,程序实现: 在屏幕上输出1~10之间的所有偶数 main() { int x=1; for(;;)
{if(x>10) _1_; x++; if(x%2) _2_;
printf(“%d”,x);} }
(五)循环嵌套
1. 预测结果并上机验证
2. 预测结果并上机验证
(六)常见题型
1.两段程序均完成求和运算: s=1-1/3+1/5-1/7+….+1/99,阅读程序,完成填空 main()
{int flag; float i,s;
for(i=1,s=0,flag=1;i
{ s=s+_____1______; flag=-flag;}
printf("%f",s);}
main() { float n,s;
for(s=0,n=1;n
2.完成计算。数列表达式s=1+
12
+
13
+
14
+„+
1n
,当n=10时,求s的近似值。已知程序段中有两处错误,
由注释语句/**********found**********/提示下一条语句有错误,请修改程序中的错误并记录程序运行结果。
#include main( ) {float s=0; int n;
/**********found**********/ for(n=1,n
修改程序中的错误并记录程序运行结果。
3. 求3~150之间的所有素数。
#include #include main()
{int s=0,i,n,flag; for(i=3;i
{flag=0; /*语句功能:
(1)*/
for(n=2;(2);(3)) /*表达式功能:判断某个数是否是素数,给出判断区间*/ if(i%n==0)
{flag=1; break;} if(flag==0) s=s+i; }
printf("s=%d\n",s);}
4.以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请填空补充完整。
main() {int i,j;
for(i=0;_______________;i++) {j=i*10+6;
if(_______________) continue; printf(“%d”,j);} }
5. 编程实现九九乘法表。 main()
{ int i,j;
for(i=1;i
printf(“%d*%d=%d”,j,i,i*j); printf(“\n”); } } 4.4 实验心得
实验5 函数定义、调用与编译预处理 20
5.1 实验目的
1.掌握定义函数的方法。
2.掌握函数实参与形参的对应关系,以及“值传递”的方式。 3.了解函数的嵌套调用。
4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 5.理解宏的概念,掌握宏定义。 6.了解文件包含的概念。 5.2 实验预习
1.函数的概念、定义格式、声明格式、调用规则及调用过程中数据传递方法过程,函
数的嵌套调用和递归调用。
2.宏定义和文件包含等编译预处理指令。 5.3 实验任务
1. 预测结果并上机验证
2.预测结果并上机验证
3.预测结果并上机验证
21
4.预测结果并上机验证
5.预测结果并上机验证
6.程序填空
定义两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include
int f1(int m,int n) /*填空位置(1),函数功能:____________________。*/ {int z;
for(z=m;z
22
{ if((z%m==0)&&(z%n==0)) return z; } } main()
{int m,n,t,s,q;
____________________; /*填空位置(2)*/ scanf("m=%d,n=%d",&m,&n); if(m
{t=m; m=n; n=t;} s=f1(m,n);
printf("min=%d\n",s); q=f2(m,n);
printf("max=%d\n",q); }
_____ f2(int m,int n) /*填空位置(3)*/ {int z;
__________; /*填空位置(4),求出m和n的最大公约数并将其作为返回值*/ }
7. 编程实现:编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围内的水仙花数)。 shui(int n,int m) { int i,a,b,c ; for(i=n ;i
if(i==a*a*a+b*b*b+c*c*c)
printf("%d ",i ) ; }
}
8. 编程实现:编辑函数求1!+2!+„„„+n !(由键盘输入范围)。
23
#include long int f(int i) {long int s,a; for(a=1,s=1;a
24
实验6 数组定义与使用
6.1 实验目的
1.掌握一维数组和二维数组的定义、数组元素的引用形式和数组的输入输出方法。 2.了解与数组有关的非数值计算方法,如排序法。
3.了解与数组有关的数值计算方法,如矩阵运算、线性方程求解等。 4.掌握字符数组和字符串函数的使用。
5.掌握函数调用时,数组元素作为函数参数的传递。 6.2 实验预习
1.熟悉循环语句与数组处理语句结合的方法。
2.复习一维数组、二维数组、字符数组的定义、初始化和数组元素的引用。 3.复习数组的应用:批量处理数据排序和矩阵的处理。
4.复习字符串的含义、存储和字符串函数的功能。 6.3 实验任务
1.预测结果并上机验证
2.预测结果并上机验证
25
3.预测结果并上机验证
4.预测结果并上机验证
5.程序填空
(1)在有序数据序列中插入一个数据,插入后仍然保证数据序列的有序性。 原始数据序列为:{5,8,12,15,26,78,92,93,102},需要插入的数据值为25。 算法思想:(1)通过比较,确定需要插入的位置。
(2)从插入位置开始,所有数据依次右移(后移)1位,然后将数据插入
到确定的位置上。
#include #define N 10
int a[N]={5,8,12,15,26,78,92,93,102}; main()
26
{ int i,j,k,data=25; clrscr();
for(i=0;i
{k=i; break;} /*填空位置(1),语句功能是:_______________*/ for(j=N-2;j>=k;j--)
_______________; /*填空位置(2),插入位置之后所有元素依次右移1位*/
_______________; /*填空位置(3),将指定的数据插入到有序序列中*/
for(i=0;i
}
(2) 计算矩阵边界元素的和。
#include #define M 4 #define N 4
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; main()
{int i,j,s=0;
for(i=0;i
for((1)__________;
(2)__________;j++) if((3)____________________) s=s+a[i][j];
printf("sum=%d\n",s); }
27
3.编程题:
(1)编辑程序,将用户输入的任意字符串中的数字字符全部删除,形成新的字符串输出。 main()
{ char s[],t[]; int l,i,n=0;
gets(s); l=strlen(s); for(i=0;i
if(s[i]>=’0’&&s[i]
(2) 输入n个学生成绩,计算他们的平均值并输出所有高于平均成绩的学生成绩。 main() { int n,i;
float a[100],aver=0; sanf(“%d”,&n); for(i=1;i
aver=aver/n;
printf(“%f\n”,aver); for(i=1;i
if(a[i]>aver) printf(“%f ”,a[i]); }
4.综合题: 程序: 顺序排序:
#include
28
main() {
int i, j, tem, A[10]; printf(“输入10个整数:”); for(i=0; i
scanf(“%d”,&A[i]); /*输入*/
for(i=0; i
if(A[j]>A[i]) /* 与擂台上的数比较 */ { /* 大者交换至擂台上 */
tem=A[i]; A[i]=A[j]; A[j]=tem; }
printf(“\n降序排序后的结果是:\n”);
for(i=0; i
选择排序:
#include main() {
int i, j, tem, k, A[10]; printf(“输入10个整数:”);
for(i=0; i
{ k=i; /*最大者下标初值 */ for(j=i+1;j
if(A[j]>A[k]) k=j; /* 调整最大者下标 */ tem=A[i]; A[i]=A[k]; A[k]=tem; /* 交换 */ }
printf(“\n降序排序后的结果是:\n”);
for(i=0; i
冒泡排序:
#include main()
{ int A[10], i, j, temp; printf(“输入10个整数: ”);
29
for(i=0; i
for(j=0; jA[j+1])
{temp =A[j]; A[j] =A[j+1]; A[j+1] =temp;} printf(“\n升序排序结果是:\n”);
for(i=0; i
流程图:
顺序排序: 选择排序: 冒泡排序:
6.4 实验心得
实验7 综合程序设计:综合运用C语言基本知识设计程序
30
7.1 实验目的
通过本次实验,使学生能够灵活运用所学知识,完成程序设计,进一步提高程序设计 的能力。
7.2 实验预习
1.复习函数的相关知识。 2.复习数组的相关知识。
7.3 实验任务
1. 餐饮服务质量调查打分 解法一:
#include #define STUDENTS 40 #define GRADE_SIZE 11 main() {
int i, j, grade;
int score[STUDENTS], count[GRADE_SIZE] = {0}; printf("Please enter the response score of forty students:\n"); for (i=0; i
scanf("%d", &score[i]); }
for ( i=0; i
switch (score[i])
{
case 1: count[1]++; break; case 2: count[2]++; break; case 3: count[3]++; break; case 4: count[4]++; break; case 5: count[5]++; break; case 6: count[6]++; break; case 7: count[7]++; break;
31
case 8: count[8]++; break; case 9: count[9]++; break; case 10: count[10]++; break;
default: printf("input error!\n"); break; }
}
printf("Grade\tCount\tHistogram\n"); for (grade=1; grade
printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j
{
printf("%c", '*' ); }
printf("\n"); } } 解法二:
#include #define STUDENTS 40 #define GRADE_SIZE 11 main() {
int i, j, grade;
int score[STUDENTS], count[GRADE_SIZE] = {0}; printf("Please enter the response score of forty students:\n"); for (i=0; i
scanf("%d", &score[i]); }
for ( i=0; i
{
count [ score[ i ] ] ++; }
printf("Grade\tCount\tHistogram\n"); for (grade=1; grade
32
{
printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j
{
printf("%c", '*' ); }
printf("\n"); } }
2. 大奖赛现场统分 #include #define M 10 #define N 3 void main() {
int i,j,k;
float pf[N][M],sf[N],max,min,sum,temp; system("cls"); for(i=0;i
printf("\n Please enter the %d player's performance:\n",i+1); for( j=0;j
scanf("%f",&pf[i][j]);
}
for(i=0;i
sum=0.0; max=pf[i][0];
min=pf[i][0]; for(j=0;j
if (max
else if(min>pf[i][j]) min=pf[i][j]; sum=sum+pf[i][j]; }
sf[i]=(sum-max-min)/(M-2);
33
printf("\n The %d players's final score is:%.2f", i+1,sf[i]); }
for(i=0;i
for(j=i+1;j
if(sf[k]
if(k!=i) {
temp=sf[i];
sf[i]=sf[k]; sf[k]=temp; }
}
printf("\n The players's final sorted score is:\n"); for(i=0;i
printf("\n %.2f",sf[i]); }
7.4 实验心得
34
《C程序设计》
实验报告
学 期:2010--2011学年第二学期 教师姓名: 教研室:
实验1 熟悉C语言程序的运行环境,掌握数据描述
1.1 实验目的
1.了解在开发环境中如何编辑、编译、连接和运行一个C语言程序。 2.通过运行简单的
C语言程序,初步了解C语言程序的结构特点。
3.掌握C语言数据类型的概念,学会使用C语言的相关运算符构成表达式。 1.2 实验预习
1.熟悉Visual C++的启动和退出及Visual C++中的编辑、编译、连接和运行命令。 2.了解下列命令及函数:include、main、printf、scanf。 3.熟悉Visual C++环境下每个菜单项的功能及相关命令对应的操作。 4.各种数据类型变量的定义形式及取值范围;熟悉下列标识符的含义。
int、short (int)、long (int)、unsigned (int)、float、double、char、void 5.各类运算符的优先级和结合规则。 6.常量与变量的区别和联系。 运行环境:
1.双击桌面Visual C++快捷方式进入Visual C++,或通过执行“开始——>程序——>
Microsoft Visual Studio 6.0——> Microsoft Visual C++6.0”或执行文件"C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin\MSDEV.EXE"。 2.单击“文件”菜单的“新建”命令。
3.在打开的“新建”对话框中选择“文件”标签。
4.选择C++ Source File,在目录输入栏选择文件保存位置,然后在文件输入栏中输入文件名,扩展名为.c (例如first.c) ,单击确定按钮。如图所示:
5.在源窗口中输入源程序,如图所示。
1
6.编译程序:按“Ctrl+F7”或通过“编译”菜单中的“编译”命令,或使用工具栏中的相应工具进行编
译 编译 连接 运行
若程序有错则找到出错行修改程序。
7.连接:若程序没有语法错误,则可按功能键F7或执行“编译”菜单中的“构件”命令或通过工具栏中
的相关工具(编译工具右边工具),进行连接生成可执行文件。
8.运行程序:按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的“!”工具运
行程序。 1.3 实验任务
1.输入下面的程序,注意区分大小写。
#include main() {
printf(“I am a student!”); }
2. 预测结果并上机验证
2
3.预测结果并上机验证
4.预测结果并上机验证 (1) main()
{ int a,b; a=b=3;
printf(“a=%d,b=%d”,a,b);
}
(2)若将以上程序进行改写,编辑如下: main() { int a,b; a=3; b=3.1;
printf(“a=%d,b=%d”,a,b); }
由此知,若赋值号左右数据类型不一致时,c语言将按赋值号左边变量类型为准。
5.现有程序如下,分析填空: 3
若将以上程序第4行进行改写,编辑如下: printf(“%d”,a=a+b,b=b+a);
对比以上两程序,结果不同的原因在于输出列表原程序为逗号表达式,所以输出b=b+a的值,而修改后
的仅有一个格式控制符,只能对应输出第一个表达式a=a+b。 6.若有以下程序段,分析c2的值:
int c1=2,c2; c2=1.0/c1*c1;
若将程序段改为:
c2=1/c1*c1;
分析c2所得结果,其中的关键在于除号两端如果都是整型数据,则所得结果截断取整 7.现有程序如下: main()
{ int a=7, b=10; a=a+b; b=a-b; a=a-b; printf(“%d,%d\n”, a, b ); }
程序运行的功能是:交换a、b两数的值 注:可修改a、b两数的值仔细观察。 8. 现有程序如下,分析填空:
9.
现有程序如下,分析填空:
4
10.现有程序如下,分析填空:
11.现有程序如下,分析填空:
12.思考题:改错题(以下程序有多处错误,上机调试。将正确的程序记录在下方。要求不能删减已有内容。)
1.4 实验心得
实验2 顺序结构程序设计与调试
5
2.1 实验目的
1.熟悉C语言的表达式语句、空语句和复合语句。 2.熟悉函数调用语句,尤其是各输入输出函数的调用语句。 3.熟悉顺序结构程序中语句的执行过程。 4.熟悉程序的跟踪调试和变量值的监视。 5.能设计简单的顺序结构程序。 2.2 实验预习
1.熟悉下列函数:putchar、getchar、printf、scanf 2.了解顺序结构程序的执行过程。
3.了解程序的跟踪调试和变量值的监视并能够熟练操作。
单步跟踪调试(逐条语句跟踪调试):
(1)可按功能键F7进行,要监视某变量的值时,就按Ctrl+F7键,然后输入相应的
变量名,就可以在监视消息窗口中查看到该变量的值。
(2)也可逐段运行程序,即每次运行若干条语句。首先利用Ctrl+F8键在各行光标
处设置若干断点,然后按Ctrl+F9键从程序的第一条语句运行到设置的第一个断 点,再按
Ctrl+F9键从设置的第一个断点运行到设置的第二个断点。 4.了解顺序结构程序的一般构成。 2.3 实验任务
1.若有程序 main() { int i,j;
scanf("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n ",i,j); }
要求给i赋5,给j赋10,则应该从键盘输入 i=5,j=10 2.华氏温度,要求输出摄氏温度,公式为:C=
59
(f32)。要求输出结果保留到小数点后两位。已
知程序段中有三处错误,由注释语句/**********found**********/提示下一条语句有错误,请修改程序中的错误并记录程序运行结果。
6
3. 已知程序功能是通过用户输入三角形三边,求取三角形面积。填空,将程序补充完整。求取公式为;S=(a+b+c)/2 area=sqrt(s*(s-a)*(s-b) *(s-c))
4.单步跟踪下面程序的执行,每执行一条语句就查看各变量的值。运行时输入一个三位的整数。单步跟踪程序时填写下表,同时分析程序的功能。
#include”stdio.h” void main() {int n,x1,x2,x3,y;
printf(“please input number n”); scanf(“%3d”,&n); x1=n/100; x2=n/10%10;
7
x3=n%10;
y=x3*100+x2*10+x1; printf(“y=%3d”,y);}
程序的功能是: 将输入的3位整数逆序排列 5. 9
getchar()只能接收单个字符,数字也当字符处理 6. 120,170
7. 826 628 n1 n2 n3 8. a=123,123,|_____| +123 ||| 123,123|||| ,|
b=-45,-45,|_____||_|-45 ||| -45,-45|||| ,|
x=2.547290 ,|_| 2.547290 ,|__||_||__2.55 |||||x=2.547|_||_|,2 .55,3
9. 编辑程序,输入学生语、数、英三门课程成绩(考虑数据类型,整型和实型),并输出其总分和平均分。 整型: main()
{ int c,m,e,sum;
float ave;
scanf("%d,%d,%d",&c,&m,&e); sum=c+m+e; ave=sum/3.0;
printf(“sum=%d\n ave=%f”,sum,ave);
} 实型: main()
{float c,m,e,sum,ave; scanf("%f,%f,%f",&c,&m,&e); sum=c+m+e; ave=sum/3;
printf(“sum=%f\n ave=%f”,sum,ave);
}
8
2.4 实验心得
实验3 选择结构程序设计与调试
3.1 实验目的
1.理解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 2.学会正确使用逻辑运算符和逻辑表达式、关系运算符和关系表达式。 3.学会运用逻辑表达式或关系表达式等表达条件。 4.熟练掌握if语句和switch语句。
5.学习跟踪调试程序,针对具体程序组织输入测试数据,观察程序运行能否得到预期
的输出结果。
6.熟悉选择结构程序段中语句的执行过程。 3.2 实验预习
1.熟悉逻辑运算符和逻辑表达式、关系运算符和关系表达式。 2.熟悉下列语句:if、if-else、switch、break。
3.3 实验任务
1.阅读程序,上机调试并记录程序结果。
以上两题告诉了你什么:1) c中的赋值号与等于运算符应区分。
9
2) 若判断表达式值为0,表示假,执行else分支
2.阅读程序,上机调试并记录程序结果。
3. 阅读程序,上机调试并记录程序结果。
4.若从键盘输入58,判断以下程序输出的结果。
5. 阅读程序,上机调试并记录程序结果。
6. 阅读程序,上机调试并记录程序结果。
7. 阅读程序,上机调试并记录程序结果。
8. 阅读程序,并回答问题
main( )
{ int a,b,max,min; scanf("%d%d",&a,&b); if(a>b) max=a; else max=b;
printf("max=%d\n",max); } 问题:
a、此程序的功能是 输出两数中的最大数 b、请用条件表达式语句(?:)修改程序使之完成相同的功能,
其语句是 printf(“max=%d\n”,a>b?a:b); 9. 有一函数
y = 2(x-1) (1=10)
编程求当分别输入x的值为0.3,3.9,11时,y的值。 main() { float x,y; scanf("%f",&x); if (x
printf("x=%f,y=%f\n",x,y); }
x=0.3时y=-0.7 ;x=3.9时y=5.8;x=11时y=23 10.编辑程序,输入一个不多于3位的正整数,要求:
a)求出它是几位数;分别打印出每一位数字;
b)按逆序打印出各位数字,例如原数为-321,应输出-123。
main()
{ int x,a,b,c,e=0; scanf("%d",&x);
a=x/100; /*a、b、c用于求取各个数位*/ b=x%100/10; c=x%10;
e=c*100+b*10+a; /*e存储x数值的逆序排列数*/ if (a>0) /*if分支用于判断x的大小,并根*/ printf("x>100"); /*据位数决定逆序的最终值*/ else if(b>0)
{ printf("10
{ printf("x
printf("%d,%d,%d",a,b,c); printf("%d",e); }
11. 随机输入3个整型数据作为学生的课程成绩,编程实现由小到大排序输出(对比第三章编程题,比较他们的优缺点)。
main()
{ int a,b,c,e=0;
scanf("%d,%d,%d",&a,&b,&c); if (a>b) {e=a;a=b;b=e;} if(a>c)
{e=a;a=c;c=e;} if(b>c)
{e=b;b=c;c=e;}
printf("%d,%d,%d",a,b,c);} 3.4思考
请思考如何通过改变分支条件将多if嵌套变成无套形式,提高计算机的运算效率。请上网搜索答案,体会程序优化的思路方式。无具体答案。 3.5 实验心得
实验4 循环结构程序设计
4.1 实验目的
1.掌握用while语句、do-while语句和for语句实现循环的方法。
2.理解循环结构程序段中语句的执行过程,进一步练习程序的跟踪调试技术。 3. 掌握在程序设计中用循环的方法实现各种算法(如穷举法、迭代等)。 4. 理解break语句和continue语句的功能和执行过程。 4.2 实验预习
1.熟悉语句:while、do-while、for 、break、continue。 2.熟悉三种循环语句之间的关系和区别。 4.3 实验任务 (一)while循环
1.若输入的值是5,预测结果并上机验证
2.若输入的值是5,预测结果并上机验证,循环执行次数是__5____,考虑若x定义为整型,程序结果是否相同___不同_______ ,为什么_因为要考虑到c中除法的规则
3. 阅读程序,完成下表,程序实现:1+2+„+100 main() {int n,s;
n=____1___; s=____2___; while(___3___) {s+=_____4____; n++;}
printf(“1+2+„+%d=%d\n”,100,_____5___);}
4. 预测结果并上机验证
(二)do„while循环 1. 预测结果并上机验证
2. 输入一串字符串,以字符“#”表示输入结束。统计其中大写字母与小写字母各出现
了多少次。
main()
{ char ch;int lower,upper; lower=upper=0;
while((ch=getchar())!=’#’)
{ if(ch>=’a’&&ch=’A’&&ch
printf(“大写字母个数=%d,小写字母个数=%d”,upper,lower); }
(三)for语句
1. 预测结果并上机验证
2. 预测结果并上机验证
(四)break和
continue语句 1. 预测结果并上机验证
2. 预测结果并上机验证
3. 阅读程序,完成下表,程序实现: 在屏幕上输出1~10之间的所有偶数 main() { int x=1; for(;;)
{if(x>10) _1_; x++; if(x%2) _2_;
printf(“%d”,x);} }
(五)循环嵌套
1. 预测结果并上机验证
2. 预测结果并上机验证
(六)常见题型
1.两段程序均完成求和运算: s=1-1/3+1/5-1/7+….+1/99,阅读程序,完成填空 main()
{int flag; float i,s;
for(i=1,s=0,flag=1;i
{ s=s+_____1______; flag=-flag;}
printf("%f",s);}
main() { float n,s;
for(s=0,n=1;n
2.完成计算。数列表达式s=1+
12
+
13
+
14
+„+
1n
,当n=10时,求s的近似值。已知程序段中有两处错误,
由注释语句/**********found**********/提示下一条语句有错误,请修改程序中的错误并记录程序运行结果。
#include main( ) {float s=0; int n;
/**********found**********/ for(n=1,n
修改程序中的错误并记录程序运行结果。
3. 求3~150之间的所有素数。
#include #include main()
{int s=0,i,n,flag; for(i=3;i
{flag=0; /*语句功能:
(1)*/
for(n=2;(2);(3)) /*表达式功能:判断某个数是否是素数,给出判断区间*/ if(i%n==0)
{flag=1; break;} if(flag==0) s=s+i; }
printf("s=%d\n",s);}
4.以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请填空补充完整。
main() {int i,j;
for(i=0;_______________;i++) {j=i*10+6;
if(_______________) continue; printf(“%d”,j);} }
5. 编程实现九九乘法表。 main()
{ int i,j;
for(i=1;i
printf(“%d*%d=%d”,j,i,i*j); printf(“\n”); } } 4.4 实验心得
实验5 函数定义、调用与编译预处理 20
5.1 实验目的
1.掌握定义函数的方法。
2.掌握函数实参与形参的对应关系,以及“值传递”的方式。 3.了解函数的嵌套调用。
4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 5.理解宏的概念,掌握宏定义。 6.了解文件包含的概念。 5.2 实验预习
1.函数的概念、定义格式、声明格式、调用规则及调用过程中数据传递方法过程,函
数的嵌套调用和递归调用。
2.宏定义和文件包含等编译预处理指令。 5.3 实验任务
1. 预测结果并上机验证
2.预测结果并上机验证
3.预测结果并上机验证
21
4.预测结果并上机验证
5.预测结果并上机验证
6.程序填空
定义两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include
int f1(int m,int n) /*填空位置(1),函数功能:____________________。*/ {int z;
for(z=m;z
22
{ if((z%m==0)&&(z%n==0)) return z; } } main()
{int m,n,t,s,q;
____________________; /*填空位置(2)*/ scanf("m=%d,n=%d",&m,&n); if(m
{t=m; m=n; n=t;} s=f1(m,n);
printf("min=%d\n",s); q=f2(m,n);
printf("max=%d\n",q); }
_____ f2(int m,int n) /*填空位置(3)*/ {int z;
__________; /*填空位置(4),求出m和n的最大公约数并将其作为返回值*/ }
7. 编程实现:编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围内的水仙花数)。 shui(int n,int m) { int i,a,b,c ; for(i=n ;i
if(i==a*a*a+b*b*b+c*c*c)
printf("%d ",i ) ; }
}
8. 编程实现:编辑函数求1!+2!+„„„+n !(由键盘输入范围)。
23
#include long int f(int i) {long int s,a; for(a=1,s=1;a
24
实验6 数组定义与使用
6.1 实验目的
1.掌握一维数组和二维数组的定义、数组元素的引用形式和数组的输入输出方法。 2.了解与数组有关的非数值计算方法,如排序法。
3.了解与数组有关的数值计算方法,如矩阵运算、线性方程求解等。 4.掌握字符数组和字符串函数的使用。
5.掌握函数调用时,数组元素作为函数参数的传递。 6.2 实验预习
1.熟悉循环语句与数组处理语句结合的方法。
2.复习一维数组、二维数组、字符数组的定义、初始化和数组元素的引用。 3.复习数组的应用:批量处理数据排序和矩阵的处理。
4.复习字符串的含义、存储和字符串函数的功能。 6.3 实验任务
1.预测结果并上机验证
2.预测结果并上机验证
25
3.预测结果并上机验证
4.预测结果并上机验证
5.程序填空
(1)在有序数据序列中插入一个数据,插入后仍然保证数据序列的有序性。 原始数据序列为:{5,8,12,15,26,78,92,93,102},需要插入的数据值为25。 算法思想:(1)通过比较,确定需要插入的位置。
(2)从插入位置开始,所有数据依次右移(后移)1位,然后将数据插入
到确定的位置上。
#include #define N 10
int a[N]={5,8,12,15,26,78,92,93,102}; main()
26
{ int i,j,k,data=25; clrscr();
for(i=0;i
{k=i; break;} /*填空位置(1),语句功能是:_______________*/ for(j=N-2;j>=k;j--)
_______________; /*填空位置(2),插入位置之后所有元素依次右移1位*/
_______________; /*填空位置(3),将指定的数据插入到有序序列中*/
for(i=0;i
}
(2) 计算矩阵边界元素的和。
#include #define M 4 #define N 4
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; main()
{int i,j,s=0;
for(i=0;i
for((1)__________;
(2)__________;j++) if((3)____________________) s=s+a[i][j];
printf("sum=%d\n",s); }
27
3.编程题:
(1)编辑程序,将用户输入的任意字符串中的数字字符全部删除,形成新的字符串输出。 main()
{ char s[],t[]; int l,i,n=0;
gets(s); l=strlen(s); for(i=0;i
if(s[i]>=’0’&&s[i]
(2) 输入n个学生成绩,计算他们的平均值并输出所有高于平均成绩的学生成绩。 main() { int n,i;
float a[100],aver=0; sanf(“%d”,&n); for(i=1;i
aver=aver/n;
printf(“%f\n”,aver); for(i=1;i
if(a[i]>aver) printf(“%f ”,a[i]); }
4.综合题: 程序: 顺序排序:
#include
28
main() {
int i, j, tem, A[10]; printf(“输入10个整数:”); for(i=0; i
scanf(“%d”,&A[i]); /*输入*/
for(i=0; i
if(A[j]>A[i]) /* 与擂台上的数比较 */ { /* 大者交换至擂台上 */
tem=A[i]; A[i]=A[j]; A[j]=tem; }
printf(“\n降序排序后的结果是:\n”);
for(i=0; i
选择排序:
#include main() {
int i, j, tem, k, A[10]; printf(“输入10个整数:”);
for(i=0; i
{ k=i; /*最大者下标初值 */ for(j=i+1;j
if(A[j]>A[k]) k=j; /* 调整最大者下标 */ tem=A[i]; A[i]=A[k]; A[k]=tem; /* 交换 */ }
printf(“\n降序排序后的结果是:\n”);
for(i=0; i
冒泡排序:
#include main()
{ int A[10], i, j, temp; printf(“输入10个整数: ”);
29
for(i=0; i
for(j=0; jA[j+1])
{temp =A[j]; A[j] =A[j+1]; A[j+1] =temp;} printf(“\n升序排序结果是:\n”);
for(i=0; i
流程图:
顺序排序: 选择排序: 冒泡排序:
6.4 实验心得
实验7 综合程序设计:综合运用C语言基本知识设计程序
30
7.1 实验目的
通过本次实验,使学生能够灵活运用所学知识,完成程序设计,进一步提高程序设计 的能力。
7.2 实验预习
1.复习函数的相关知识。 2.复习数组的相关知识。
7.3 实验任务
1. 餐饮服务质量调查打分 解法一:
#include #define STUDENTS 40 #define GRADE_SIZE 11 main() {
int i, j, grade;
int score[STUDENTS], count[GRADE_SIZE] = {0}; printf("Please enter the response score of forty students:\n"); for (i=0; i
scanf("%d", &score[i]); }
for ( i=0; i
switch (score[i])
{
case 1: count[1]++; break; case 2: count[2]++; break; case 3: count[3]++; break; case 4: count[4]++; break; case 5: count[5]++; break; case 6: count[6]++; break; case 7: count[7]++; break;
31
case 8: count[8]++; break; case 9: count[9]++; break; case 10: count[10]++; break;
default: printf("input error!\n"); break; }
}
printf("Grade\tCount\tHistogram\n"); for (grade=1; grade
printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j
{
printf("%c", '*' ); }
printf("\n"); } } 解法二:
#include #define STUDENTS 40 #define GRADE_SIZE 11 main() {
int i, j, grade;
int score[STUDENTS], count[GRADE_SIZE] = {0}; printf("Please enter the response score of forty students:\n"); for (i=0; i
scanf("%d", &score[i]); }
for ( i=0; i
{
count [ score[ i ] ] ++; }
printf("Grade\tCount\tHistogram\n"); for (grade=1; grade
32
{
printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j
{
printf("%c", '*' ); }
printf("\n"); } }
2. 大奖赛现场统分 #include #define M 10 #define N 3 void main() {
int i,j,k;
float pf[N][M],sf[N],max,min,sum,temp; system("cls"); for(i=0;i
printf("\n Please enter the %d player's performance:\n",i+1); for( j=0;j
scanf("%f",&pf[i][j]);
}
for(i=0;i
sum=0.0; max=pf[i][0];
min=pf[i][0]; for(j=0;j
if (max
else if(min>pf[i][j]) min=pf[i][j]; sum=sum+pf[i][j]; }
sf[i]=(sum-max-min)/(M-2);
33
printf("\n The %d players's final score is:%.2f", i+1,sf[i]); }
for(i=0;i
for(j=i+1;j
if(sf[k]
if(k!=i) {
temp=sf[i];
sf[i]=sf[k]; sf[k]=temp; }
}
printf("\n The players's final sorted score is:\n"); for(i=0;i
printf("\n %.2f",sf[i]); }
7.4 实验心得
34