1.以下叙述中错误的是( )。
A) 使用三种基本结构构成的程序只能解决简单问题
B) 结构化程序由顺序、分支、循环三种基本结构组成
C) C语言是一种结构化程序设计语言
D) 结构化程序设计提倡模块化的设计方法
2.以下可以将任意一个两位整数n的个位数与十位数对换的表达式为()
A) (n-n/10*10)*10+n/10
B) n-n/10*10+n/10
C) n/10+(n-n/10)
D) (n-n/10)*10+(n/10)
3.以下叙述中错误的是
A) 算法正确的程序可以有零个输入
B) 算法正确的程序最终一定会结束
C) 算法正确的程序可以有零个输出
D) 算法正确的程序对于相同的输入一定有相同的结果
4.若有定义int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y
++)中的条件表达式(x-y) 等价的是( )。
A) (x-y<0||x-y>0)
B) (x-y<0)
C) (x-y>0)
D) (x-y==0)
5.有以下程序
#include
main()
{ int a;
a = (int)1.99*3;
printf("%d\n", a);
}
程序的运行结果是()
A) 3
B) 5
C) 6
D) 结果不确定
6.请选出合法的C语言赋值语句:()
A) a=b=58 B) i++;
C) a=58,b=58 D) k=int(a+b)
7.假设在程序中a,b,c均被定义成整型,并且已赋大于1的值,则下列能正确表
示代数式 1/abc 的表达式是:()
A) 1/a*b*c
B) 1/(a*b*c)
C) 1/a/b/(float)c
D) 1.0/a/b/c
8.请选出以下语句的输出结果:()
printf("%d\n",strlen("\t\"\065\xff\n"));//srelen()为求字符串长度的函数,返回字节数。
A) 5 B) 14 C) 8 D) 输出项不合法,无正常输出
9.请选出以下语句的输出结果:()
printf("%d\n",strlen("\xffff"));
A) 1 B) 2 C) 3 D)5
10.有如下程序段,其输出结果是什么:(
{int a=1,b=3,c=5;
if (c=a+b)
printf ("yes\n");
elseprintf("no\n"); }
A) yes
11. 以下说法中正确的是( )
A) C语言程序总是从第一个的函数开始执行
B) 在C语言程序中,要调用的函数必须在main()函数中定义
C) C语言程序总是从main()函数开始执行
D) C语言程序中的main()函数必须放在程序的开始部分
12.逻辑运算符两侧运算对象的数据类型()
A) 只能是0和1
B) 只能是0或非0正数
C) 只能是整型或字符型数据
D) 可以是任何类型的数据
13. 以下叙述中错误的是()
A)C语句必须以分号结束
B)复合语句在语法上被看作一条语句
C)空语句出现在任何位置都不会影响程序运行
D)赋值表达式末尾加分号就构成赋值语句
14.已知a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c A) 2 B) 0 C) 1 D) -1 15.设变量已正确定义并赋值,以下正确的表达式是( ) A) x=y+z+5,++y B) int(15.8%5) C) x=y*5=x+z D) x=25%5.0 16.若有定义语句:int x=10;,则表达式x-=x+x的值为( ) A) 0 B) -20 C) -10 D) 10 17.有以下程序 #include main( ) { int c, d; c = 10^3; d = 10+3; printf("%d,%d\n", c, d); } 程序运行后的输出结果是() A) 13,13 B) 9,13 C) 10,13 D) 103,13 18.若有定义:int a=7;float x=2.5,y=4.7;则表达式:x+a%3*(int)(x+y)%2/4的值是:() A)2.500000 B)2.7500000 C)3.500000 D)0.000000 19.已知x=43,ch=’A’,y=0,则表达式(x>=y&&ch<’B’&&!y)的值是:() A)0 B)语法错误 C)1 D)”假” 20. 若有以下定义和语句: Inta,b; printf(“%d”,(a=2)&&(b=-2)); 则输出的结果是() A)无输出 B)结果不确定 C)1 D)-1 21. 以下语句的输出结果是() int a=2,b=3; printf(a>b?”***a=%d”:”###b=%d”,a,b); A)输出结果格式错误 B)***a=2 C)###b=2 D)###b=3 22. 下列运算符中,结合方向为自左向右的是() (A)?:(B),(C)+ = (D)+ + 23. 设x、y、z均为int型变量,则执行以下语句后,x、y、z的值为() x=1;y=0;z=2; y++&&++z||++x; A)2、1、3 B)2、0、3 C)2、1、3 D)2、1、2 24.若有以下定义和语句: int y=10; y+=y-=y-y; 则y的值是() A)10 B)20 C)30 D)40 25. 下列表达式中,不满足”当x的值为偶数时值为真,为奇数时值为假”的要求的是() A)x%2==0 B)!x%2!=0 C)(x/2*2-x)==0 D)!(x%2)==0 26.以下能正确定义整型变量a,b和c并为其赋初值1的语句是( ) A) int a=b=c=1; B) inta,b,c=1; C) a=b=c=1; D) int a=1,b=1,c=1; 27.字符串"\t\065\xff\n"中的字符数(不算’\0’)为( ) A) 5 B) 14 C) 8 D) 4 28.若有以下定义: chara;int b; float c;double d; 则表达式a*b+d-c值的类型为( ) A) float B) int C) char(字符型) D) double 29.在C语言中,运算对象必须是整型数的运算符是( ) A) % B) / C) %和\ D) ** 30.以下选项中,当x为大于1的奇数时,值为0的表达式是( ) A) x%2==1 1为真,0为假 B) x/2 C) x%2!=0 D) x%2==0 31.有以下程序 main() { char a='a',b; printf("%c,",++a); printf("%c\n",b=a++); } 程序运行后的输出结果是( ) A) b,b B) b,c C) a,b D) a,c 32.写出下面程序的值. #include void main() { int a=10,b=4; printf("%d \n",a%=(b%=3)); } A)0 B) 1 C) 10 D)2 注连续赋值操作从右向左进行 33.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是() A. ?a?&&?b? B. a<=b C. a||b+c&&b-c D. !((a 34. 请选出可用作C语言用户标识符的一组标识符: A) void B) a3_b3 C) For D) 2a define _123 -abc DO WORD IF Case sizeof 35. 若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是: A)1 B)2 C)2.0 D)2.5 36. 有如下程序 main() { int y=3,x=3,z=1; printf(“%d %d\n”,(++x,y++),z+2); } 运行该程序的输出结果是: A) 3 4 B) 4 2 C) 4 3 D) 3 3 37.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是: A)c=b=a;B)(a=c)‖(b=c); C)(a=c)&&(b=c);D)a=c=b; 38. 在以下一组运算符中,优先级最高的运算符是: A)<= B)= C)% D)&& 39. 有以下程序 #include main() { int a,b,c=246; a=c/100%9; b=(-1)&&(-1); printf("%d,%d\n",a,b); } 输出结果是: A) 2,1 B) 3,2 C) 4,3 D) 2,-1 40. 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为: A)a<>0 B)!a C)a=0 D)a 41、以下选项中,能用作数值常量的是________。 (A)o115 (B)0118 (C)115L (D)1.5e1.5 42、下列叙述中错误的是_______。 (A)一个C 语言程序只能实现一种算法 (B)一个C 函数可以单独作为一个C 程序文件存在 (C)C 程序可以由一个或多个函数组成 (D)C 程序可以由多个程序文件组成 43、设变量已正确定义并赋值,以下正确的表达式是_______。 (A)int(15.8%5) (B)x=y+z+5, ++y (C)x=25%5.0 (D)x=y*5=x+z 44、以下叙述中错误的是_____________。 (A)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 (B)C语言源程序经编译后生成后缀为.obj 的目标程序 (C)用 C 语言编写的程序称为源程序,它以ASCII 代码形式存放在一个文本文件中 (D)C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件 45、按照C 语言规定的用户标识符命名规则,不能出现在标识符中的是___________。(A)大写字母(B)下划线(C)数字字符(D)连接符 46、以下选项中,合法的一组C 语言数值常量是__________。 (A)0x8A 10,000 3.e5 (B).177 4e1.5 0abc (C)028 .5e-3 -0xf (D)12. 0Xa23 4.5e0 7、 47以下选项中不合法的标识符是__________。 (A)print (B)FOR (C)&&a (D)_00 48、若有定义:double a=22;int i=0,k=18;,则不符合C 语言规定的赋值语句是 (A)i=(a+k)<=(i+k); (B)a=a++,i++; (C)i=a%11; (D)i=!a; 49、设有定义:int x=2;,以下表达式中,值不为6 的是 (A)x*=(1+x) (B)x*=x+1 (C)x++,2*x (D)2*x, x+=2 50、有以下程序 #include main() { int x, y, z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d\n",x,y,z); } 程序运行后的输出结果是 (A)2,3,3 (B)2,2,1 (C)2,3,2 (D)2,3,1 填空题 1。函数体由符号____开始,用符号____结束。函数体的前面是____部分,其后是____部分。 2。C语言中的标识符可分为____、____、和预定义标识符三类。 循环习题集锦 一.选择题 1.for(i=0;i<10;i++);结束后,i的值是;(10) A 9 B 10 C 11 D 12 2.下面程序的循环次数是:(D) int k=0; while(k<10) {if(k<1) continue; if(k==5) break; k++; } A. 5 B 6 C 4 D 死循环,不能确定循环次数3.下面程序的输出结果是(10) main() { int s,k; for(s=1,k=2;k<5;k++) s+=k; printf(“%d\n”,s); } A 1 B 9 C 10 D 15 4.要使下面程序输出10个整数,则在下画线处填入正确的数是:(c) for(i=0;i<= ;) printf(“%d\n”,i+=2); A 9 B 10 C 18 D 20 5.运行下面程序:(B) main() { int i=10,j=0; do { j=j+i; i--; }while(i>5); printf(“%d\n”,j); } 输出结果是: A 45 B 40 C 34 D 55 6.运行下面程序 #include “stdio.h” main() { int k=0,a=1; while(k<10) { for( ; ;) { if((k%10)==0) break; else k--; } k+=11; a+=k; } printf(“%d %d\n”,k,a); } 则输出的结果是(C) A 21 32 B 21 33 C 11 12 D 10 11 7.以下叙述正确的是:(D) A.do---while语句构成的循环不能用其他语句构成的循环来代替。B.do---while语句构成的循环只能用break语句退出。 C.用do---while语句构成的循环,在while 后的表达式为非零时结束循环。 D.用do---while语句构成的循环,在while后的表达式为零时结束循环。 8.有如下程序: main() { int x=3; do{ 《数据结构与算法》期末复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i 1. //输出a和b之间的所有素数, 10个素数为一行输出 #include while(a<2||b<2) { printf("重新输入n和m:"); scanf("%d%d",&a,&b); } if(a>b) { t=a;a=b;b=t; } printf("%d和%d之间共有%d个素数",a,b,shuChuSuShu(a,b)); printf("\n\n"); return 0; } 2. //用户输入2个数,输出这2个数之间所有的超素数 //超素数(质数)的概念:7193是素数,719是素数,71是素数,7是素数,则7193是素数#include 一、基本算法 1.交换(两量交换借助第三者) 例1、任意读入两个整数,将二者的值交换后输出。 main() {int a,b,t; scanf("%d%d",&a,&b); printf("%d,%d\n",a,b); t=a; a=b; b=t; printf("%d,%d\n",a,b);} 【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。 假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。 其中t为中间变量,起到“空杯子”的作用。 注意:三句赋值语句赋值号左右的各量之间的关系! 【应用】 例2、任意读入三个整数,然后按从小到大的顺序输出。 main() {int a,b,c,t; scanf("%d%d%d",&a,&b,&c); /*以下两个if语句使得a中存放的数最小*/ if(a>b){ t=a; a=b; b=t; } if(a>c){ t=a; a=c; c=t; } /*以下if语句使得b中存放的数次小*/ if(b>c) { t=b; b=c; c=t; } printf("%d,%d,%d\n",a,b,c);} 2.累加 累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。例1、求1+2+3+……+100的和。 main() {int i,s; s=0; i=1; while(i<=100) {s=s+i; /*累加式*/ i=i+1; /*特殊的累加式*/ } printf("1+2+3+...+100=%d\n",s);} 【解析】程序中加粗部分为累加式的典型形式,赋值号左右都出现的变量称为累加器,其中“i = i + 1”为特殊的累加式,每次累加的值为1,这样的累加器又称为计数器。 第5章循环结构程序设计 练习题 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 第5章循环结构程序设计35 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是_B___。 #include 2008-02-18 18:48 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) 能源与动力工程学院 C语言基本知识 陈斌 目录 第一节概述 第二节基本知识第三节流程控制第四节指针与数组第五节函数 Hello, world! 例10-1 Hello, world! #include 字符集 字符集: 52个字母(C 语言区分大小写) 10个阿拉伯数字 29个特殊字符 ?! + –* / = % ' " # { } [ ] < > ( ) . , ; : ? ~ ^ \| _ & 4个格式符 ?空格、水平制表符(HT )、垂直制表符(VT )、换页符(FF ) 其他字符只能放在注释语句、字符型常量、字符串型常量中 数据类型 数据类型: 基本类型: ?整型、字符、浮点(单精度、双精度)、枚举 构造类型 ?数组、结构体(struct )和联合(union ) 指针类型(*) 空类型(void ) 数据类型 UCHAR_MAX 0~255 1 unsigned char SCHAR_MAX SCHAR_MIN –128~1271signed char CHAR_MAX CHAR_MIN –128~1271char 字符型 LDBL_MAX LDBL_MIN 3.3621031431120935063e-4932~1.189731495357231765e+493210long double DBL_MAX DBL_MIN 2.2250738585072014e-308~1.7976931348623158e+3088double 双精度实型 FLT_MAX FLT_MIN 1.175494351e-038~3.402823466e+38 4 float 单精度实型ULONG_MAX 0~42949672954unsigned long LONG_MAX LONG_MIN –2147483648~21474836474long UINT_MAX 0~4294967295 4unsigned int INT_MAX INT_MIN –2147483648~21474836474int USHRT_MAX 0~65535 2unsigned short SHRT_MAX SHRT_MIN –32768~327672short 整型 最大值最小值范围 字宽类型数据类型 #include 1.定积分近似计算: /*梯形法*/ double integral(double a,double b,long n) { long i;double s,h,x; h=(b-a)/n; s=h*(f(a)+f(b))/2; x=a; for(i=1;i } 3.素数的判断: /*方法一*/ for (t=1,i=2;i 第 5 章循环结构程序 设计 练习题 1.单项选择题 ( 1)语句 while (!e);中的条件!e等价于A。 A. e==0 B. e!=1 C. e!=0 D. ~e ( 2)下面有关for循环的正确描述是D。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在 for循环中,不能用break 语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中D。 A.不能使用do-while语句构成的循环 B. do-while 语句构成的循环必须用break 语句才能退出 C. do-while 语句构成的循环,当while 语句中的表达式值为非零时结束循环 D. do-while 语句构成的循环,当while 语句中的表达式值为零时结束循环 ( 4) C 语言中 while 和 do-while 循环的主要区别是A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 ( 5)以下程序段C。 int x=-1; do { x=x*x; } while (!x); A.是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误( 6)下列语句段中不是死循环的是__C__。 A.i=100; while (1) { i=i%100+1; if (i==20) break; } B.for (i=1;;i++) sum=sum+1; C.k=0; do { ++k; } while (k<=0); D.s=3379; while (s++%2+3%2) s++; C语言常用算法集合 1.定积分近似计算: /*梯形法*/ double integral(double a,double b,long n) { long i;double s,h,x; h=(b-a)/n; s=h*(f(a)+f(b))/2; x=a; for(i=1;i if(n==1||n==2) *s=1; else{ fib(n-1,&f1); fib(n-2,&f2); *s=f1+f2; } } 3.素数的判断: /*方法一*/ for (t=1,i=2;i 1.以下叙述中错误的是( )。 A) 使用三种基本结构构成的程序只能解决简单问题 B) 结构化程序由顺序、分支、循环三种基本结构组成 C) C语言是一种结构化程序设计语言 D) 结构化程序设计提倡模块化的设计方法 2.以下可以将任意一个两位整数n的个位数与十位数对换的表达式为() A) (n-n/10*10)*10+n/10 B) n-n/10*10+n/10 C) n/10+(n-n/10) D) (n-n/10)*10+(n/10) 3.以下叙述中错误的是 A) 算法正确的程序可以有零个输入 B) 算法正确的程序最终一定会结束 C) 算法正确的程序可以有零个输出 D) 算法正确的程序对于相同的输入一定有相同的结果 4.若有定义int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y ++)中的条件表达式(x-y) 等价的是( )。 A) (x-y<0||x-y>0) B) (x-y<0) C) (x-y>0) D) (x-y==0) 5.有以下程序 #include 60.题目:古典问题:有一对兔子,从出生后第3个月 起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总 数 为多少? _________________________________________________________________ _ 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... _________________________________________________________________ __ 程序源代码: main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/ f1=f1+f2;/*前两个月加起来赋值给第三个月*/ f2=f1+f2;/*前两个月加起来赋值给第三个月*/ } } 上题还可用一维数组处理,you try! 61.题目:判断101-200之间有多少个素数,并输出所有素数。 _________________________________________________________________ _ 1 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被 整 除,则表明此数不是素数,反之是素数。 _________________________________________________________________ __ 程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; 5.2 练习题5 1. 单项选择题 (1)语句while (!e);中的条件!e等价于。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是____。 A. i=100; while (1) { i=i%100+1; if (i==20) break; 第5章循环结构程序设计35 } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是____。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是____。 #include 第5章循环结构程序设计 5.1基本知识点 ?while语句的使用格式和注意事项 ?do-while语句的使用格式和注意事项 ?for语句的使用格式和注意事项 ?break和continue语句在循环语句中的应用 ?循环结构的嵌套 ?使用goto语句实现循环结构 ?穷举法程序设计方法 ?迭代程序设计方法 5.2练习题5 1.单项选择题 (1)语句while(!e);中的条件!e等价于A。 A.e==0 B.e!=1 C.e!=0 D.~e (2)下面有关for循环的正确描述是D。 A.for循环只能用于循环次数已经确定的情况 B.for循环是先执行循环体语句,后判定表达式 C.在for循环中,不能用break语句跳出循环体 D.for循环体语句中,可以包含多条语句,但要用花括号括起来(3)C语言中D。 A.不能使用do-while语句构成的循环 B.do-while语句构成的循环必须用break语句才能退出 C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是A。 A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 (5)以下程序段C。 intx=-1; do { x=x*x; } while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误(6)下列语句段中不是死循环的是__C__。 A.i=100; while(1) { i=i%100+1; if(i==20)break; } B.for(i=1;;i++) sum=sum+1; C.k=0; do { ++k; }while(k<=0); D.s=3379; while(s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while(a) { if(b)continue; c; } A.while(a) B.while(c) {if(!b)c;} {if(!b)break;c;} C.while(c) D.while(a) 1、计算n的阶乘(n!),n的取值在1~10之间。分别使用while、do…while和for 语句实现。(三个程序) 给循环变量赋初值 循环条件 循环体 循环变量的增值 2、输入一行字符,分别统计输入了多少个 字母、数字、空格和其他字符。 3、假设函数f(x)=3x2+2x+1,试利用for循环语句分别求出1<=x<=9的f(1)~f(9)各函 数值。 4、有分数序列2/1,3/2,5/3,8/5,13/8, 21/13…求这个数列的前20项和。 (分析提示:每个分子等于前一个数据分子与分母的和,每个分母等于前一个数据的分 子) 5、输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。要求每一行显示5个数,并且统计一共有多少个整数能 被n整除。 6、下面程序的功能是从键盘上输入若干学 生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。 main() { float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while( ①) { if(x>amax) amax=x; if( ②) amin=x; scanf("%f",&x); } printf("\namax=%f\namin=%f\n",amax,a min); } 7、使用循环语句输出以下图形 8、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。 8、一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问 一百只鸡中公鸡、母鸡、小鸡各多少)。 分析: 这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为 三元一次方程组: 100=x*5+y*3+z/3 100=x+y+z 这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围: 1) x的取值范围为1~20 2) y的取值范围为1~33 3) z的取值范围为3~99,步长为3 对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。 2.3顺序结构程序设计 2.3.1 要点导读 1.printf() 与scanf()语句。 printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于stdio.h库文件中。 2.字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。 2.3.2 经典例题分析 1.下列程序运行后输出的结果是。 #include { int a=732; printf(“%d\n”,a); printf(“%2d\n”,a); printf(“%10d\n”,a); printf(“%-10d\n”,a); } 分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m 为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。 答案: 732 732 □□□□□□□732 /*□表示空格*/ 732□□□□□□□ 3.已知char a=‘\103’;则语句printf(“%3d”,a);执行后的输出结果为(□表示空格) 。 A)□67 B)’c’C)67□D)103 分析:’\103’是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf(“%3d”,a);把’\103’转换为十进制数输出,结果占3列。但67占2列,小于要求的3列,所以左补空格,即□67。 答案:C。 4.下列程序运行后结果是。 #include /* ===================================================================== ======== 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为 a1,a2,a4,a3,a5, 则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4, a2,a3,a5就不是稳定的了。 2、内排序和外排序 在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序; 在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序。 3、算法的时间复杂度和空间复杂度 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。 一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。 ===================================================================== =========== */ /* ================================================ 功能:选择排序 输入:数组名称(也就是数组首地址)、数组中元素个数 ================================================ */ /* ==================================================== 算法思想简单描述: 第5章循环结构程序设计 基本知识点 ? while语句的使用格式和注意事项 ? do-while语句的使用格式和注意事项 ? for语句的使用格式和注意事项 ? break和continue语句在循环语句中的应用 ? 循环结构的嵌套 ? 使用goto语句实现循环结构 ? 穷举法程序设计方法 ? 迭代程序设计方法 练习题5 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; }(8)以下程序的输出结果是_B___。C语言循环习题答案
数据结构与算法C语言版期末复习题
C语言循环例题
非常全的C语言常用算法
(完整版)C语言循环结构练习题带答案
C语言经典算法100例(1---30)
西安交大C语言课件第2章
C语言常用算法集合
C语言循环结构练习题带答案.doc
最新C语言常用算法集合汇总
C语言第二章习题
c语言经典算法100例
C语言循环结构练习题
C语言循环结构练习题带答案
c语言循环结构上机习题
C语言习题:顺序、选择、循环
C语言常用排序算法
C语言循环结构练习题带答案