C语言程序设计实验指导(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-08 19:09:42

点击下载

作者:杨曙贤

出版社:高等教育出版分社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C语言程序设计实验指导

C语言程序设计实验指导试读:

前言

C语言是广泛使用的程序设计语言,它因为拥有强大的功能,丰富的数据类型,兼具面向硬件编程的低级语言特性、可移植性好等特性,已成为主流应用的开发软件语言。

C语言程序设计是高校重要的计算机基础课程。在学习该课程的过程中,学生不仅要掌握高级程序设计语言的知识,更重要的是在实践中逐步培养问题求解和实践应用能力。C语言功能强大,编程灵活,特色鲜明,要学好这门课程,不仅要掌握 C 语言的基本概念、语法规则以及基本编程算法,更重要的是进行实践,真正能够利用所学的知识,动手编写程序,解决实际问题。这就要求必须加强这门课程的实践环节,通过大量的不同层次的针对性训练,积累编程经验,提高程序设计能力。

本书着重实践训练,内容详细。每章均由实验目的、实验内容和习题组成。实验目的,说明了本章的主要内容,要掌握的重点;实验内容有本章的常见题型及一些扩展题型,帮助学生提高编写程序的能力及方法;习题有助于学生进行自我检测。

本书凝聚了编者多年在实际软件开发、管理、教学、科研中的经验和体会,既适合作为大中专院校 C 语言程序设计教材的实验指导书,也适合作为参加培训、考试、考级的人员及广大计算机爱好者的自学和参考用书。

本书编者为山西农业大学信息学院信息工程系从事一线教学的老师。全书由杨曙贤担任主编,其中第1章、第3章、第4章、第9章由吕艳阳编写,第2章、第5章、第8章由赵昕编写,第6章、第7章、第10章由席二辉编写。在编写的过程中,得到了专家、同事和朋友的无私帮助和指导,使得书中的内容更加完善,我们对此表示诚挚的谢意。

最后,向对该书的编撰给予大力支持的姚来昌、林凤彩和唐志宏三位教授以及学院教务处的领导和工作人员致以衷心的感谢。

由于编者水平有限,书中疏漏和不足之处在所难免,敬请有关专家和广大读者不吝指正。编者2014年6月第1章熟悉 Visual C++开发环境在程序设计中,C语言的应用很广泛,很多著名软件,如操作系统 UNIX,就是用 C语言写的。不管是操作系统,还是应用软件,都需要良好的开发环境。用一个简陋的开发工具,开发一个大型项目,显然是非常困难的。Visual C++(简称 VC)是 Windows 下的一个功能强大的开发环境。本章重点介绍VC开发环境的使用,其余的将在以后各章陆续介绍。1.1实验目的

1.了解VC开发环境及程序开发过程。

2.了解C语言的语法结构和书写格式。

3.掌握C语言数据类型以及变量的定义和赋值。

4.掌握C语言程序的编辑、编译、链接和运行的过程。1.2实验内容1.2.1 VC 开发环境的使用(1学时)

现在常用的版本 Visual C++ 6.0,虽然已有公司推出汉化版,但只是把菜单汉化了,并不是真正的中文版 Visual C++ 6.0,而且汉化的用词不准确,因此许多人都使用英文版。如果计算机中未安装 Visual C++ 6.0,则应先安装 Visual C++ 6.0 软件。

1.安装 Visual C++ 6.0

Visual C++是 Microsoft Visual Studio 的一部分,因此需要找到 Visual Studio 的光盘,执行其中的setup.exe,并按照屏幕上的提示进行安装即可。

安装结束后,在 Windows 的“开始”菜单中的“程序”子菜单中就会出现 Microsoft Visual Studio 子菜单。在需要使用 Visual C++时,只需从电脑上选择“开始”→“程序”→Microsoft Visual Studio→Visual C++ 6.0(也可以从桌面快捷方式进入)即可。

屏幕上短暂显示 Visual C++ 6.0 的版权界面后,出现 Visual C++ 6.0 的主窗口,如图1-1所示。

Visual C++ 6.0 主窗口的顶部是 Visual C++的主菜单栏,其中包括 9 个菜单项:File(文件)、Edit(编辑)、View(查看)、Insert(插入)、Project(工程)、Build(组建)、Tools(工具)、Window(窗口)、Help(帮助)。以上各项在括号中的是VC6.0中文版中的中文显示,便于读者在使用VC6.0中文版时进行对照。图1-1 VC++ 6.0 主界面

2.编辑程序

单击 File 菜单,在下拉菜单中单击 New,弹出一个对话框,单击此对话框的左上角的File(文件)选项卡,选择 C++ Source File 选项,输入文件名为 ex1.c。

输入并运行以下程序:

#include

void main( )

{printf("This is a c program\n");

}

3.运行程序

单击主菜单栏中的Build(组建),在其下拉菜单中选择Compile(编译)项。

屏幕上出现一个对话框(注:如果事先已经建立了工作区,则不会出现这个对话框),内容是 This build command requires an active project workspace.Would you like to create a default project workspace?(此编译命令要求一个有效的项目工作区,你是否同意建立一个默认的项目工作区?)单击是(Y)按钮,表示同意由系统建立默认的项目工作区,屏幕如果继续出现“将改动保存到…”,单击是(Y)。运行程序(Build 菜单→!Execute 命令),程序运行结果如下。

第二行文本为VC环境自动生成的提示信息,按任意键关闭窗口。1.2.2 简单程序练习(1学时)

1.输入并调试以下程序,输出两个整数。

#include

void main( )

{int c1,c2;c1=97;c2=98;printf("%d %d\n",c1,c2);

}

2.输入并调试以下程序,输出文本内容。

#include

void main( )

{printf("******************\n");printf("This is c program \n");printf("******************\n");

}

3.输入并调试以下程序,对两个整数123、456求和并输出。

#include

void main( )

{inta,b,sum;a=123;b=456;sum=a+b;printf("sum is %d \n", sum );

}1.3习题

1.一个C语言程序是由(  )构成。(A)语句(B)行号(C)数据(D)函数

解析:C语言由函数组成。

答案:D

2.一个C程序的执行是从(  )。(A)本程序的main函数开始,到main函数结束(B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束(C)本程序的main函数开始,到本程序文件的最后一个函数结束(D)本程序文件的第一个函数开始,到本程序main函数结束

解析:main函数是程序执行主函数。

答案:A

3.C语言规定,在一个源程序中,main函数的位置(  )。(A)必须在最开始(B)必须在系统调用的库函数的后面(C)可以任意(D)必须在最后

解析:程序与书写格式无关。

答案:C

4.在C语言中,正确的标识符是由(  )组成的,且由(  )开头的。

解析:C语言有效标识符的构成规则如下:(1)第一个字符必须是字母(不分大小写)或下划线(_),然后跟字母(不分大小写)、下划线(_)或数字组成;(2)标识符中的大小写字母有区别。如,变量Sum、sum、SUM代表3个不同的变量;(3)不能与C编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名。比如,不能将标识符命名为float、auto、break、case等。

答案:字母、数字、下划线, 字母、下划线

5.填空

以下程序对变量a、b、c做运算,并输出结果,请将程序补充完整。

#include

main()

{inta,b,c;______;a=10; b=20; c=30;x=a/b+c;printf("x= %d",______);

}

解析:变量要先定义,后使用。

答案:int x;x

6.程序改错

以下程序对变量a、b做运算,在error注释标记的下一行程序行有一处错误,请改正。

#include

main()

{int a=123,b=456,c;/* error */c=a+bprintf("%d", c);

}

解析:分号是C语言语句结束标志。

答案:c=a+b缺少分号第2章数据类型与基本运算2.1实验目的

1.掌握 C 语言常量的类型以及各类常量(如整型常量、实型常量、字符常量、字符串常量、符号常量)的书写方式。

2.掌握 C 语言变量的数据类型及定义方式。能够对变量正确初始化,理解变量的生存期与作用域的含义。

3.理解不同数据类型间的转换。

4.掌握C语言的算术运算符、赋值运算符、关系运算符、逻辑运算符及其他运算符。

5.理解运算符的优先级和结合性。2.2实验内容2.2.1 基本数据类型运算(1学时)(1)启动VC,单击File选项,在下拉菜单中单击New命令,弹出一个对话框,单击此对话框左上角的 File(文件)选项卡,选择 C++Source File 选项,输入文件名为 ex2.c。在Visual C++ 6.0 环境下编辑、编译和运行如下程序:

#include

void main( )

{int a=1,b=2,c;c = a + b;printf("a=%d,b=%d,c=%d\n",a,b,c);

}

程序的运行结果如下。(2)在 Visual C++ 6.0 环境下编辑、编译和运行如下程序:

#include

void main( )

{int a,b;long int x,y;int c,d;a = 20000;b = 30000;x = a + b;c = 1;d = 4;y = c * d;printf("x=%ld,y=%ld\n",x,y);

}

程序的运行结果如下。

从程序中可发现:x、y是长整型,a、b是基本整型变量。它们之间允许进行运算,运算结果为长整型。但c、d被定义为基本整型,因此最后结果为基本整型。

不同类型的量可以参与运算并相互赋值。(3)在 Visual C++ 6.0 环境下编辑、编译和运行如下程序:

#include

main()

{char a,b,c;a = 97;b = 98;c = 99;printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a,b,c);

}

程序的运行结果如下。

本程序中a、b、c被定义为字符型,但在赋值语句中却赋值为整型。从结果看, a、b、c 值的输出形式取决于 printf 函数格式串中的格式符。当格式符为“d”时,对应输出的变量值为整数;当格式符为“c”时,对应输出的变量值为字符型。2.2.2 字符及转义字符的输出(1学时)(1)在 Visual C++ 6.0 环境下编辑、编译和运行如下程序:

#include

main()

{char a,b,A,B;a = 'a';b = 'b';A = a - 32;B = b - 32;printf("%c,%c\n%c,%c\n",a,b,A,B);

}

程序的运行结果如下。

本例中,a、b定义为字符变量并赋予字符值。C语言允许字符变量参与数值运算,即用字符的ASCII码参与运算。由于大小写字母的ASCII码相差32,因此运算后把小写字母转换成大写字母。(2)在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,写出程序的运行结果。

#include

main()

{printf("a\tb format1\n"); //水平制表printf("a\vb format2\n"); //垂直制表printf("a\bb format3\n"); //退格printf("a\rb\n nextline"); //回车printf("a\'b' format4\n"); //单引号printf("a\"b format5\n"); //单引号printf("a\101 char1\n"); //3位八进制数代表的字符printf("a\x61 char2\n"); //2位十六进制数代表的字符printf("a\\\\n format6"); //反斜杠(\)

}

程序的运行结果如下。2.2.3 数据类型转换(1学时)(1)练习整型、实型、字符型的混合运算,编辑并运行以下程序:

#include

void main( )

{float a=2.0;int b=6,c=3;printf("%f\n", 10+'a'-10*a*b/c-1.5);

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。运行程序(Build菜单→!Execute命令),程序运行结果如下。(2)数据运算。

练习数据类型转换,以及整除运算,编辑并运行以下程序:

#include

void main( )

{int a=2;float x=4.4;printf("%f \n", (float)a );printf("%d \n", (int)x );printf("%f \n", 5/10 );printf("%f \n", (float)5/10 );

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。运行程序(Build菜单→!Execute命令),程序运行结果如下。(3)自增、自减运算。

练习自增、自减运算,编辑并运行以下程序:

#include

void main( )

{int i=8;printf("%d \n",++i);printf("%d \n",--i);printf("%d \n",i++);printf("%d \n",i--);printf("%d \n",-i++);printf("%d \n",-i--);

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。运行程序(Build菜单→!Execute命令),程序运行结果如下。2.3习题

1.以下选项中,合法的标识符是(  )。(A)1-1(B)1—1(C)-11(D)1—

解析:A 选项不能以数字开头,出现非法字符 -,而不是_;B 选项不能以数字开头,属于非法字符;C选项正确;D选项不能以数字开头,出现非法字符。

答案:C

2.以下选项中,不合法的标识符是(  )。(A)print(B)FOR(C)&a(D)_00

解析:C选项出现非法字符&。

答案:C

3.以下选项中,能用作数据常量的是 (  )。(A)o115(B)0118(C)1.5e1.5(D)115L

解析:A选项八进制以0开头而不是以o开头;B选项八进制最大值为7,范围0~7;C选项指数必须为整数;D选项长整型正确。

答案:D

4.以下选项中,不能作为 C 语言合法常量的是(  )。(A)'cd'(B)0.1e+6(C)"\a"(D)'\011'

解析:A选项字符常量只能有一个字符。

答案:A

5.以下选项中,不属于字符常量的是(  )。(A)'C'(B)"C"(C)'\xCC0'(D)'\072'

解析:B选项字符常量以单引号作为标志,其为字符串。

答案:B

6.表达式:4−(9)%2的值是(  )。(A)0(B)3(C)4(D)5

解析:(9)%2=1(取余),4−1=3。

答案:B

7.设变量已正确定义并赋值,以下正确的表达式是 (  )。(A)x=y*5=x+z(B)int(15.8%5)(C)x=y+z+5,++y(D)x=25%5.0

解析:A选项等号左边必须为变量,不可以为表达式,y*5是表达式;B选项%只适用于整型变量;C选项正确;D选项%只适用于整型变量。

答案:C

8.若有定义语句:int x=10;,则表达式 x−=x+x 的值为(  )。(A)−20(B)−10(C)0(D)10

解析:先算右边得20,x−=20,则10−20=−10。

答案:B

9.设有定义:int x=2;,以下表达式中,值不为 6 的是 (  )。(A)x*=x+1 x=x*(x+1)(B)x++,2*x(C)x*=(1+x)(D)2*x,x+=2

解析:逗号表达式的最终结果看最后一个表达式,x+=2,结果为4,所以D选项正确。

答案:D

10.若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是 (  )。(A)x=y==5;(B)x=n%2.5;(C)x+n=I(D)x=5=4+1;

解析:等号左边必为变量,不能为常量或数字,排除C、D选项,%只能用于整数排除B选项,故A选项正确。

答案:A

11.在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,写出程序的运行结果。

#include

main()

{int i,j,k,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d\n%d,%d\n",i,j,m,n);

}

12.在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,根据运行结果思考条件表达式的用法。

#include

main( )

{int a,b,max;printf("Input two number:\n");scanf("%d%d",&a,&b);printf("max = %d\n",a>b?a:b);

}

13.在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,根据运行结果,思考逗号表达式的用法。

#include

main()

{int x,y=7;float z=4;x=(y=y+6,y/z);printf("x=%d\n",x);

}

14.在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,根据运行结果,思考条件表达式的用法。

#include

main( )

{int a,b,max;printf("Input two number:\n");scanf("%d%d",&a,&b);printf("max = %d\n",a>b?a:b);

}第3章输入/输出语句3.1实验目的

1.熟悉VC开发环境,了解各菜单项及其按钮的功能。

2.了解输入/输出语句的格式。

3.了解不同类型数据的输出方法。

4.掌握C语言输入/输出函数的使用。

5.掌握C程序多个变量的输入/输出。3.2实验内容3.2.1 使用 printf 输出数据(1学时)(1)启动VC,单击File选项,在下拉菜单中单击New命令,弹出一个对话框,单击此对话框左上角的 File(文件)选项卡,选择 C++Source File 选项,输入文件名为 ex3.c。(2)练习整型、实型、字符型数据的输出,练习字符串的输出,编辑并运行以下程序:

#include

main( )

{int a=1,b=2;float c=1.2;char ch='a';printf("%d%d\n",a,b);printf("%f\n",c);printf("%c",ch);printf("%s","c program");

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。

运行程序(Build菜单→!Execute命令),程序运行结果如下。

例题:练习十进制、八进制数据的输出,练习数据宽度的控制、小数位数的控制。

参考程序如下:

#include

void main( )

{int m=32767,n=032767;int i=254;int f=12.3456;printf("%d,%o\n",m,n);printf("%10d \n",i);printf("%10f \n",f);printf("%10.2f \n",f);

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。

运行程序(Build菜单→!Execute命令),程序运行结果如下。3.2.2 使用 scanf 输入数据(1学时)(1)输入两个整数,求和并输出计算结果,编辑并运行以下程序:

#include

int main()

{int a, b;scanf("%d%d", &a, &b);printf("sum=%d", a+b);return 0;

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。

运行程序(Build菜单→!Execute命令),程序运行结果如下。

例题:scanf 格式控制字符串中带有普通文本,用户从键盘输入两个整数,求和并输出计算结果。

参考程序如下:

#include

int main()

{int a, b;scanf("a=%d,b=%d", &a, &b);printf("%d", a+b);return 0;

}

scanf格式控制字符串中带有普通文本,需要在输入时连同普通文本一起输入。(2)在VC环境下,测试以下程序:

输入一个小数f,按表达式5.0/9×(f−32)计算后,输出计算结果。

#include

int main()

{float f, c;scanf("%f", &f);c = 5.0/9 * (f−32);printf("%.2f", c);return 0;

}

程序运行结果如下。3.2.3 字符输入/输出函数(1学时)

要求输入一个大写字母,然后输出该字母对应的小写字母,编辑并运行以下程序:

#include

int main()

{char ch;ch = getchar();if(ch >= 'A' && ch <= 'Z'){ch += 32;}putchar(ch);return 0;

}

运行程序,单击主菜单栏中的 Build(组建),在其下拉菜单中选择 Compile(编译)选项。

运行程序(Build菜单→!Execute命令),程序运行结果如下。3.3习题

1.有以下程序:

#include

main()

{int a=1,b=0;printf("%d, ",b=a+b);printf("%d\n",a=2*b);

}

程序运行后的输出结果是(  )。(A)0,0(B)1,0(C)3,2(D)1,2

解析:b=a+b即b=1,a=2*b,a=2。

答案:D

2.程序段:

int x=12;

double y=3.141593;

printf("%d%8.6f",x,y);

的输出结果是(  )。(A)123.141593(C)12,3.141593(D)12 3.141593

解析:“%d%8.6f”原样输出,没有“,”也没有空格,所以x与y相连,小数总共8位,小数点之后6位。

答案:A

3.以下程序段:

int x;

x=11/3;

int y=5;

printf("%%d,%%%d\n",x,y);

程序运行后的结果是(  )。

解析:"%%d,%%%d\n"原样输出,%%d 中第一个%为转义字符,不是输出占位符,所以原样输出%d,然后%%转义只输出一个%,%d\n只有一个占位符,所以只输出x的值为3。

答案:%d,%3

4.若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是(  )。(A)read(a,b,c);(B)scanf(“%d%d%d” ,a,b,c);(C)scanf(“%D%D%D”,&a,%b,%c);(D)scanf(“%d%d%d”,&a,&b,&c);

解析:scanf中赋值必须用&(取地址符),即将输入的字符放在指定位置。

答案:D

5.若变量已正确说明为 float 类型,要通过以下赋值语句 scanf(“%f %f %f”,&a,&b,&c);

给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是(  )。(B)10.0,22.0,33.0

解析:输入时可以空格可以回车,但是不可以出现,

复合语句:多个语句被{}括起来,当成一条语句来执行。

空语句:最后的表示只有一个;

答案:B

6.编写一个程序,从键盘上输入两个数字,然后让它们互换一下。

参考程序如下:

#include

main()

{int a,b;int c;printf("请输入两个数字:");scanf("%2d%3d",&a,&b);printf("qian:%d %d",a,b);c=a,a=b,b=c;printf("后:%d %d",a,b);

}

程序运行结果如下。

7.编写程序,对一个double型数据进行四舍五入运算。要求保留两位有效数字。

输入1234.4567

参考程序1:

#include

main()

{double k=1234.4567;k+=0.005;printf("%7.2f",k);

}

程序运行结果如下。

参考程序2:

#include

main()

{double k=1234.4567;k*=100;k+=0.5;k=(int)k;k/=100;printf("%7.2f",k);

}

程序运行结果如下。

8.编写程序,使从键盘中输入的三位数倒着输出。

参考程序如下:

#include

main()

{int a,three,two,one;printf("请输入一个三位数:");scanf("%d",&a);three=a/100; //取出百位two=a%100/10; //取出十位one=a%10; //取出个位printf("%d%d%d",one,two,three);

}第4章分支结构4.1实验目的

1.了解分支语句 if, if else, switch 格式。

2.了解不同分支语句的输出方法。

3.掌握C语言分支程序的设计方法。

4.根据要求,编写指定分支结构程序。4.2实验内容4.2.1 基本 if 语句练习(1学时)(1)启动 VC,单击 File(文件)菜单,在下拉菜单中单击 New(新建)按钮,弹出一个对话框,单击此对话框左上角的 File(文件)选项卡,选择 C++ Source File 选项,文件名为ex4.c。

输入一个整数,要求判断是否为正数,并判断是奇数还是偶数,编辑并运行以下程序:

#include

int main()

{int x;scanf("%d", &x);if(x > 0){printf("positive\n");}else{printf("non- positive \n");}if(x % 2 == 0){printf("even\n");}else{printf("odd\n");}return 0;

}

运行程序,单击主菜单栏中的Build(组建)按钮,在其下拉菜单中选择Compile(编译)选项。

运行程序(Build菜单→!Execute命令),程序运行结果如下。

再次运行程序,输入10,程序运行结果如下。(2)字符大小写判断。

要求输入一个字母,然后输出该字母是否为大写字母。编辑并运行以下程序。

#include

int main()

{char ch;ch = getchar();if(ch>= 'A' &&ch<= 'Z'){printf("This is a captive character\n");}else{printf("This is not a captive character\n");}return 0;

}

运行程序,单击主菜单栏中的Build(组建)按钮,在其下拉菜单中选择Compile(编译)选项。

运行程序(Build菜单→!Execute命令),程序运行结果如下。

再次运行程序,输入小写a,程序运行结果如下。4.2.2 if else 语句练习(1学时)

1.练习使用if语句,测试以下程序。

输入两个整数,比较大小,并输出其中较大者。

#include

int main()

{int a, b, c;scanf("%d%d", &a, &b);if(a > b){c = a;}else{c = b;}printf("%d", c);return 0;

}

运行结果如下。

2.练习使用 if-else if 语句,测试以下程序。

根据学生成绩,输出“优秀、中等、不及格”的成绩评价。

#include

#include

int main()

{intnum;scanf("%d", &num);if(num>=90){printf("good");}else if(num>=60){printf("middle");}else{printf("fail");}return 0;

}

运行结果如下。4.2.3 switch 语句练习(1学时)

做一个小型计算器,用户从键盘输入两个小数,进行运算操作,输出计算结果。

#include

#include

int main()

{float a, b, c;char op;scanf("%f%c%f", &a, &op, &b);switch(op){case '+': c = a + b; break;case '-': c = a - b; break;case '*': c = a * b; break;case '/': c = a / b; break;default:printf("error");}printf("result=%.2f", c);return 0;

}

运行结果如下。4.3习题

1.以下运算符中优先级最低的是(  )。(A)&&(B)&(C)||(D)|

解析:查看运算符优先级表,可以发现:运算符优先级较高,逻辑或优先级最低,优先级由高到低为&,|,&&,||。

答案:C

2.已知 x=43,ch='A',y=0;则表达式(x >= y&&ch< 'B'&&!y)的值是(  )。(A)0(B)语法错(C)1(D)“假”

解析:逻辑与要求各部分都成立,表达式才成立。x >= y,ch< 'B'都成立,!y 值为 1,表达式成立,取值为1。

答案:C

3.用 C 语言表示算术关系 X <=Y <=Z,表达式为(  )。(A)(X <=Y)&&(Y <=Z)(B)(X <=Y)AND(Y <=Z)(C)(X <=Y <=Z)(D)(X <=Y)&(Y <=Z)

解析:需要用逻辑与将两部分连起来,表示两部分是并的关系。

答案:A

4.如果 int a=3,b=4;则条件表达式"a

解析:先计算表达式 1,若表达式 1 成立,则选择计算表达式 2,并将表达式 2 的值作为整个表达式的值;若表达式 1不成立,则选择计算表达式 3,并将表达式 3的值作为整个表达式的值。在此题中的a

答案:A

5.若 int x=2,y=3,z=4,则表达式 x

解析:考查条件表达式的使用。

答案:B

6.C语言中,关系表达式和逻辑表达式的值是(  )。(A)0(B)0或1(C)1(D)‘T’或’F’

解析:在C语言中,使用0或1表示关系表达式和逻辑表达式的值。

答案:B

7.填空。

输入两个整数 a,b,如果 a>b, 那么两个变量交换数据并输出,请将程序补充完整。

#include

int main()

{int a, b;int tmp;scanf("%d%d ", (1) );if(a > b){(2)a = b;b = tmp;}printf("%d %d", a, b);return 0;

}

解析:考查输入数据和变量交换的写法。

答案:(1)&a,&b(2)tmp=a;

8.改错。

以下程序要求变量的交换,在error注释标记的程序行中有错误,请改正。

main()

{int x=10,y=20 ,t=0;if(x!=y){/* error */x=t;x=y;y=t;}printf("%d,%d\n",x,y);

}

解析:考查变量交换的写法。

答案:t=x;

9.输入两个整数,使用条件运算符(?,:),选择两个整数中较大的数并输出。

解析:如果在条件语句中,只执行较为简单的分支语句时,可使用条件表达式来实现,不仅使程序简捷,也提高了运行效率。

条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:

表达式 1 ? 表达式 2 : 表达式 3

其求值规则为:如果表达式 1 的值为真,则以表达式 2 的值作为整个表达式的值,否则以表达式3的值作为整个条件表达式的值。

答案:

#include

main()

{int a,b,max;printf("\n input two numbers: ");scanf("%d%d",&a,&b);printf("max=%d",a>b?a:b);

}

10.程序设计

在VC环境下,测试以下程序,输入三个整数,按从小到大的顺序依次输出3个数。

解析:以交换的方式,对3个数进行排序。

答案:

#include

int main()

{int a, b, c;int tmp;scanf("%d,%d,%d", &a, &b, &c);if(a > b){tmp = a;a = b;b = tmp;}if(b > c){tmp = b;b = c;c = tmp;}if(a > b){tmp = a;a = b;b = tmp;}printf("%d,%d,%d", a, b, c);return 0;

}第5章循环结构5.1实验目的

1.能用while、do-while、for三种循环语句实现循环结构,编写简单的程序,掌握这三种循环语句。

2.掌握较复杂结构程序的编写,掌握程序调试方法。

3.理解break和continue在循环控制中的区别,并能灵活运用。5.2实验内容5.2.1 循环语句练习(1学时)(1)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。以后每天早晨都吃剩下的一半外加一个,到第十天早晨再想吃时,就剩一个桃子。问第一天共摘了多少桃子。

要求:分别用三种语句编写程序。在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,写出程序的运行结果。三种循环结构分别为:while、do-while 和 for 三种不同的循环结构。其中while和for循环都是先判断,再执行循环体,do-while循环是先执行循环体,再判断循环条件。

在基本循环语句中,可以加break与continue语句。break可以用于switch结构和三种循环结构,用来终止当前结构(终止所在的整个循环)的运行。continue 只能用于循环结构中,终止的只是本次循环,下一次循环还能继续进行。但对三种不同的循环结构,continue 语句执行后转向的位置不同。在一个循环结构的循环体中有另外一个循环结构,这就是循环结构的嵌套。三种循环结构之间可以互相嵌套。

方法1:

#include

int main()

{int x,n;for(x=1,n=2;n<=10;n++){x=2*(x+1);}printf("第一天共摘了%d个\n",x);return 0;

}

方法2:

#include

int main()

{int x,n;x=1;n=2;do{x=2*(x+1);n++;}while(n<=10);printf("第一天共摘了%d个\n",x);return 0;

}

方法3:

#include

int main()

{int x,n;x=1;n=2;while(n<=10){x=2*(x+1);n++;}printf("第一天共摘了%d个\n",x);return 0;

}

程序的运行结果如下。(2)印度国王的奖励:相传古代印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他要什么?达依尔回答:"陛下只要在国际象棋棋盘的第一个格子上放一粒麦子,第二个格子放两粒麦子,以后每个格子的麦子数都依前一格的两倍计算。如果陛下按此法给我 64 格的麦子,就感激不尽,其他什么也不要了。"国王想,"这还不容易!"让人扛了一袋麦子,再扛出一袋还不够,请你为8国王算一下共要给达依尔多少小麦?(设1立方米小麦约1.4×10颗)

#include

main()

{double sum=0,n=1,v;int i;for(i=1;i<=64;i++){sum=sum+n;n=2*n;}v=sum/1.4e8;printf("国王总共要给达依尔%.2lf立方米麦子\n",v);

}

程序的运行结果如下。

3.找出100~500之间能被27整除的数并输出。

在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,写出程序的运行结果。

#include

main()

{int n;for(n=100;n<=500;n++){if(n%27!=0){continue;}printf("%d\n",n);}

}

程序的运行结果如下。

当n不能被27整除时,执行continue语句,结束本次循环。即printf语句只有在n能被27整除的时候,才执行printf的输出结果。5.2.2 循环语句综合应用(1学时)

1.找出30~100之间全部的素数并输出。所谓素数就是只能被1和它本身整除的数。

在 Visual C++ 6.0 环境下编辑、编译和运行如下程序,写出程序的运行结果。

#include

main()

{int i,j;for(i=30;i<=100;i++){for(j=2;j

}

程序的运行结果如下。(1)我们要设计出某数n是否为素数的算法。(2)在(1)的基础上,外面再套一层循环,实现 30~100 之间数字的循环。(3)判断一个数是否能被整除,看其有没有余数即可。(4)break语句表示跳出当前循环。

2.编写程序,输出从公元1600~2014年所有闰年的年号。每输出5个年号换一行。判断公元年是否为闰年的条件如下。(1)公元年数如能被4整除,而不能被100整除,则是闰年。(2)公元年数如能被400整除也是闰年。

#include

int main()

{int year,leap,m;for(year=1600,m=0;year<=2014;year++){if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap){printf("%6d",year);m++;}if(m%5==0)printf("\n");}printf("\n");return 0;

}

程序的运行结果如下。

3.解决用一百元钱买一百只鸡的问题:公鸡每只5元,母鸡每只3元,小鸡3只1元, 100元买100只鸡,求每种鸡各能买多少只?

#include

main()

{int x1,x2,x3;for(x1=0;x1<=20;x1++){for(x2=0;x2<=33;x2++){for(x3=0;x3<=300;x3++){if((x1+x2+x3==100)&&(15*x1+9*x2+x3==300)){printf("公鸡:%d,母鸡:%d,小鸡:%d\n",x1,x2,x3);}}}}

}

程序的运行结果如下。

4.编写程序,打印以下图形:

#include

int main()

{int i,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf(" ");for(k=0;k<=2*i;k++)printf("*");printf("\n");}for(i=0;i<=2;i++){for(j=0;j<=i;j++)printf(" ");for(k=0;k<=4-2*i;k++)printf("*");printf("\n");}return 0;

}

程序的运行结果如下。5.3习题5.3.1 while 语句构成的循环结构

一、选择题

1.以下不构成无限循环的语句或者语句组是 (  )。(A)n=0;

do {++n;} while(n<=0);(B)n=0;

while(1){n++;}(C)n=10;

while(n);{n--;}(D)for(n=0,i=1;;i++)

n+=1;

解析:本题主要考查各种循环语句的掌握情况。选项A中为do-while循环语句,首先执行do后面的语句“++n;”得n=1,while条件表达式为假,退出循环。选项B中,while条件表达式的值始终为1。条件为真,构成无限循环。选项C中“while(n);”语句的循环体为空, n 的值在循环中一直保持不变,构成无限循环。选项 D 中,i=1,for 语句中条件判断语句为空,永远为真,构成无限循环。

答案:A

2.若有以下程序:

main()

{int y=10;while (y--);printf("y=%d\n",y);

}

程序运行后的输出结果是(  )。(A)y=0(B)y=−1(C)y=1(D)while

解析:while语句一般形式为:while(表达式)语句;其语句先判断表达式,后执行语句。而表达式y—先返回y的当前值,再进行−1运算。

答案:B

3.在以下给出的表达式中,与while(E)中的“(E)”不等价的表达式是(  )。(A)(!E=0)(B)(E>0||E<0)(C)(E==0)(D)(E!=0)

解析:选项C表示E条件为假时,“(E==0)”为真。其他都与“(E)”等价。

答案:C

二、填空题

1.以下程序的输出结果是(  )。

#include

main()

{int n=12345,d;while(n!=0){ d=n%10; printf("%d",d); n/=10;}

}

解析:本题考查的重点是对while循环的理解与运用。若n不为0,则n对10进行模运算,并打印出 n%10的值,之后再进行 n/=10运算,直至 n为 0时结束循环。因此,依次输出54321。

答案:54321

2.当执行以下程序时,输入1234567890<回车>,则其中while循环将执行(  )次。

#include

mian()

{char ch;while((ch==getchar())=='0')printf("#");

}

解析:"ch==getchar()"的功能是从终端读入一个字符赋给变量 ch,由于 getchar()只能接收一个字母,所以输入的字符1被赋给ch,即“'1'!='0'”,循环体不执行,直接退出while循环,所以循环体执行的次数为0。

答案:0

3.有以下程序,若运行时从键盘输入 18 11<回车>,则程序的输出结果是(  )。

main()

{int a,b;printf("Enter a,b:");scanf("%d,%d",&a,&b);while(a!=b){ while(a>b) a-=b;while(b>a) b-=a;}printf("%3d%3d\n",a,b);

}

解析:键盘输入后,变量 a=18,b=11,在循环语句 while(表达式)循环体中,表达式控制循环体是否执行,a−=b等价于a=a−b。

答案:1 1

4.有以下程序:

#include

main()

{char c1,c2;scanf("%c",&c1);while(c1<65||c1>90) scanf("%c",&c1);c2=c1+32;printf("%c,%c\n",c1,c2);

}

程序运行输入65回车后,能否输出结果、结束运行(回答能或不能)(  )。

答案:能5.3.2 do-while 语句构成的循环结构

1.有以下程序:

#include

main()

{int i=5;do{if(i%3==1)if(i%5==2){printf("*%d",i);break;}i++;} while(i!=0);

printf("\n");

}

程序运行的结果是(  )。(A)*7(B)*3*7(C)*5(D)*2*6

解析:本题主要考查do-while语句。在do-while构成的循环中,总是先执行一次循环体,然后再求表达式的值。在循环中,如果i的值能满足(i%3==1)&&(i%5==2),那么输出i的值,退出循环。

答案:A

2.若变量已正确定义,有以下程序段:

i=0;

do printf("%d",i); while(i++);

printf("%d",i);

其输出结果是(  )。

解析:本题考查的重点是do-while用法。do-while循环是先执行循环体中的语句,然后再判断 while 中的条件是否为真,如果为真(非零)则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

答案:0 1

3.有以下程序:

main()

{int k=5,n=0;do{switch(k){case 1:case 3: n+=1;k--; break;default; n=0;k--;case 2: case 4: n+=2;k--; break;}printf("%d",n);}while(k>0 && n<5);

}

程序运行后的输出结果是(  )。(A)235(B)0235(C)02356(D)2356

解析:do-while 语句的特点是先执行循环体,然后再判断循环体条件是否成立,当循环条件的值为0时循环结束。本题中执行switch语句,寻找与5匹配的case5分支,没有寻找到则执行default后的语句,n=0,k的值变为4,继续执行switch语句,寻找与4匹配的case4分支,找到后开始执行其后的语句“n+=2;k--;”,n的值为 2,k的值变为 3,遇到 break语句后跳出该switch语句体。执行printf语句输出2;此时n=2,k=3依旧满足do-while循环条件,将用同样的方式再次执行switch语句,直到n=5时不再满足do-while循环条件退出所有的循环。

答案:B5.3.3 for 语句构成的循环结构

一、选择题

1.有以下程序:

#include

main()

{int x=8;for( ;x>0;x--){if(x%3){printf("%d",x--); continue;}printf("%d,",--x);}

}

程序的运行结果是(  )。(A)7,4,2(B)8,7,5,2(C)9,7,6,4(D)8,5,4,2

解析:本题考查for循环语句。x=8,for循环条件为真,8%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值8,然后将x的值减1,此时x=7。然后执行continue语句结束本次循环。执行x--表达式,得x=6,for循环条件为真,6%3=0,则if条件表达式为假,执行第二个输出语句,先将x的值减1得x=5,然后输出x的值5。执行x--表达式,得x=4,for循环条件为真,4%3=1,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值4,然后将x的值减1,此时x=3。然后执行continue语句结束本次循环。执行x--表达式,得x=2,for循环条件为真,2%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值减1,此时x=1。执行x--表达式,得x=0,for循环条件为假,循环结束。

答案:D

2.有以下程序:

#include

main()

{int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf("%d",c[i]);printf("\n");

}

程序的运行结果是(  )。(A)1 2 3 4(B)2 3 4 4(C)4 3 3 2

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载