第三周 格式化输入输出及选择结构1

第三周 易错知识点练习(选做)

1、int x=8; 在C程序中,表达式0<=x<=3的运算结果是( )。
    A、0
    B、1
    C、true
    D、false

2、int x=2,y=2; printf("%d\n", (x=0)&&(y=3)); printf("x=%d y=%d\n ", x,y); 输出结果是( )。
    A、0 x=0 y=3
    B、0 x=0 y=2
    C、1 x=2 y=2
    D、1 x=0 y=2

3、int x=2,y=2; printf("%d ", (x=4)||(y=4)); printf("x=%d y=%d\n ", x,y); 第二个printf的输出结果是( )。
    A、x=4 y=4
    B、x=2 y=2
    C、x=4 y=2
    D、x=2 y=4

4、scanf("%d",&a); if(a<60) printf("a=%d\n",a); printf("OVER\n"); 如果输入50,则输出结果是( )。
    A、a=50
    B、OVER
    C、a=50 OVER
    D、无输出

5、scanf("%d",&a); if(a<60) printf("a=%d\n",a); printf("OVER\n"); 如果输入70,则输出结果是( )。
    A、a=70
    B、OVER
    C、a=70 OVER
    D、无输出

选择题---计分

1、‍ 能正确表示逻辑关系x<=y<=z的C语言表达式为( )
    A、(x<=y)&&(y<=z)
    B、‍ (x<=y)AND(y<=z)
    C、‍ (x<=y<=z)
    D、‍(x<=y)&(y<=z)

2、能正确表示逻辑关系“a大于等于10或a小于等于0”的C语言表达式是 ( )
    A、‍a>=10 or a<=0
    B、‍a>=0|a<=10
    C、a>=10&& a<=0 ‍
    D、a>=10‖a<=0

3、能正确表示逻辑关系“79<X<90”的C语言表达式是( )
    A、‍ ( X>79 ) && ( X<90 )
    B、‍( X>79 )!=( X<90 )
    C、‍79<X<90
    D、(X>79 )||( X<90)

4、设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是( )
    A、‍10<a<15
    B、‍a==11||a==12||a==13||a==14
    C、‍ a>10&&a<15
    D、‍!(a<=10)&&!(a>=15)

5、设x,t均为int型变量,则执行语句“x=10; t=x&&x>10;”后,t的值为( )
    A、‍值不确定
    B、‍10
    C、‍1
    D、‍0

6、下面程序,运行后的输出结果是( ) #include<stdio.h> int main() { int a=1, b = 3, c = 4; if(a<b) a=b; if(a<c) a=c; printf("%d, %d, %d\n", a, b, c); }
    A、4,4,3
    B、4,3,4
    C、‍3,4,3
    D、‍1,3,4

7、语法不正确的语句是( )
    A、if (x>y);
    B、‍if (x=y) {x++;y++;}
    C、‍if (x==y) && (x!=0) x++;
    D、if (x!=y) scanf ("%d", &x);

8、如果整型变量a,b,c的值分别为5,4,3,则语句if(a>b>c) c++; 执行后c的值是( )
    A、5
    B、4
    C、3
    D、2

9、如果整型变量a,b,c的值分别为3,4,5,则语句 if(a<b<c) c++;执行后c的值是( )
    A、‍3
    B、‍4
    C、5
    D、6

10、运行以下程序,如果从键盘上输入5,则输出结果是( ) #include<stdio.h> int main() { int x; scanf("%d", &x); if (x--< 5) printf("%d", x); }
    A、‍3
    B、‍4
    C、‍5
    D、无输出‍

11、C语言语句中,可以用来决定分支流程的表达式是( )
    A、‍任意表达式
    B、只能用逻辑表达式或关系表达式
    C、只能用逻辑表达式
    D、‍只能用关系表达式

12、int x=102,y=12; printf("%2d,%3d\n",x,y); 执行后输出结果是( )
    A、10,012
    B、02, 12
    C、102, 12
    D、102,120

13、设i是 int 型变量 ,j是 float 型变量 , 用下面的语句给这两个变量输入值: scanf("i=%d, j=%f",&i,&j); 为了把 10 和 2.5分别赋给 i 和 j, 则正确的输入为( )
    A、10 2.5< 回车 >
    B、i=10,j=2.5< 回车 >
    C、10 < 回车 > 2.5< 回车 >
    D、x=10 < 回车 > ,y=2.5< 回车 >

14、执行下面语句, int a =1,b=2,c=3; if(a>c) b =c; a=c; c=b; a,b,c的值分别为( )(用逗号分隔)
    A、3,2,2
    B、1,2,3
    C、3,3,2
    D、3,3,3

15、请选出正确的输入语句( )。
    A、double f; scanf("%lf",&f);
    B、float x,y; scanf("%f%f",x,y);
    C、float x; scanf("%f\n",x);
    D、double x; scanf("%f",&x);

16、在printf函数中,浮点型数据输出的格式控制符有( )。
    A、%e
    B、%d
    C、%f
    D、%g

17、下面程序中,( )可以输出变量a,b,c的最大值。
    A、if(a>=b && a>=c ) printf( "最大值为%d\n",a); if(b>=a && b>=c) printf( "最大值为%d\n",b); if(c>=a && c>=b) printf( "最大值为%d\n",c);
    B、max=a; if(b>max) max=b; if(c>max) max=c; printf( "最大值为%d\n",max);
    C、if(a>b>c ) printf( "最大值为%d\n",a); if(b>a>c) printf( "最大值为%d\n",b); if(c>a>b) printf( "最大值为%d\n",c);
    D、if(a>b) max=a; if(c>max) max=c; printf( "最大值为%d\n",max);

18、设a=1, b=2, c=3,关系表达式a+b>=c 的值是( )。

19、设a=1, b=2, c=3,逻辑表达式a && b && c的值是( )。

20、设a=1, b=2, c=3,逻辑表达式a || !b || !c的值是( )。

21、输入一个考试分数(0至100范围内),如果分数小于60分,则输出“不及格”;大于90分输出“优秀”;大于等于60并且小于等于90,则输出“合格”。(有1个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main() { int x; printf("请输入分数(0-100): "); scanf("%d",&x); if(x<60) printf( "不及格\n"); if(x>90) printf( "优秀\n"); printf( "合格\n"); //注意分数在一个区间内,C语言中该如何描述 return 0; }

22、我国的邮政编码由六位阿拉伯数字组成,前第三位代表邮区,厦门市的邮政编码前三位为361 。 下面的程序功能:如果输入的邮政编码前3位是361,则输出“厦门市的邮件”;如果不是361,则输出“不是厦门市的邮件”。 请完善程序(有2个空,答案一行写一个,不要添加多余的空格). #include <stdio.h> int main() { int code; printf("请输入邮政编码: "); scanf(" %*3d",&code); //用scanf函数截取输入邮政编码的前3位 if(361 code ) printf( "厦门市的邮件\n"); if (361!=code) printf( "不是厦门市的邮件\n"); return 0; } 需要更多样例参考的同学可查阅课件 “ 选择结构初步 ” 里的最后一个文档 “ 习题解析 ”中第2题

第一周 C语言简介

选择题

1、下面的叙述正确的是()。
    A、一个C的源程序必须包含1个以上的main函数
    B、在C的源程序中,main函数不是必须的
    C、一个C的源程序可以由一个或多个函数组成
    D、printf函数是程序执行的起始位置

2、C程序是从()开始执行的。
    A、return语句
    B、主函数
    C、文件开始的注释部分
    D、放在最前面的函数

3、关于C程序的叙述,正确的是( )。
    A、一条语句可以写在多行,也可以多条语句写在一行
    B、一行只能写一条语句
    C、从//开始的程序都是注释内容
    D、/* */只能写在一行,其中的内容为注释部分

4、以下正确的printf语句是()。
    A、‍printf ("This is a C program.")
    B、‍printf ("This is a C program.);
    C、‍printf ("This is a C program.\n");
    D、‍printf "This is a C program.";

5、/* 程序功能:打印输出hello world #include <stdio.h> int main() { printf("Hello, world\n"); return 0; } 上面程序的运行结果是( )
    A、程序出错,不能运行
    B、Hello, world
    C、程序功能:打印输出hello world
    D、"Hello, world\n"

6、设有程序“1.cpp”,编译后运行该程序,执行的是( )文件。
    A、1.cpp
    B、1.obj
    C、1.exe
    D、1.c

7、下面程序的错误是() #include <stdio.h> int mian() { printf("hello world") return 0; }
    A、printf("hello world") 后面少分号
    B、主函数名写错
    C、多了return 0;
    D、main()后面少分号

8、输出结果为500+200=700的语句是()。
    A、printf("500+200=%d,500+200");
    B、printf("500+200=%d",500+200);
    C、printf("500+200=700");
    D、print 500+200=700;

9、输出结果为25*64=1600的语句是()。
    A、printf("25*64=%d",25*64);
    B、printf("25*64=1600");
    C、printf("25*64=%d, 25*64");
    D、print 25*64=1600;

10、下面是关于C程序注释的叙述,其中正确的是( )。
    A、/*……*/可以注释多行,也可以注释一行
    B、从//开始的程序都是注释内容
    C、/* */与//注释的范围没有区别
    D、//是行注释,从//开始至行尾为注释内容

判断题(本周语法汇总)

1、编写C程序时,main函数必不可少。

2、printf("\n"); 可实现换行

3、C的每条语句结束处必须用分号。

4、注释语句不影响程序的运行。

5、若使用printf输出结果,则必须在程序前添加#include <stdio.h>

6、C程序中的标点符号(如分号;)必须用英文的标点符号。

第二周 C语言基础语法

语法知识选择题

1、下列浮点数的表示中不正确的是( )。
    A、22.3
    B、.719e22
    C、e23
    D、12. e2

2、合法的C语言标识符是( )
    A、2a
    B、sum
    C、int
    D、a*b

3、不合法的C语言标识符是 ( )。
    A、_8_
    B、j2_KEY
    C、4d
    D、Double

4、下列定义变量的语句中错误的是( )。
    A、int x1;
    B、float y1;
    C、double z1;
    D、Double a1;

5、在C语言中,要求运算数必须是整型的运算符是( )。
    A、%
    B、/
    C、+
    D、-

6、下面( )语句正确地描述了计算公式
    A、y = ax*x*x/x – b;
    B、y = ax*x*x/(x – b);
    C、y = (a*x*x*x)/(x – b);
    D、y = a*x*x*x/x – b;

7、下面( )是合法的赋值语句 .
    A、i=1;
    B、‍i+1=5;
    C、5=i;
    D、i *3=i+1;

8、下面程序的输出是( ) 。 #include <stdio.h> int main() { int x=10,y=3; printf("%d",y=x/y); return 0; }
    A、0
    B、1
    C、3
    D、不确定的值

9、下面程序的输出是( ) 。 #include <stdio.h> int main() { int a= 5; printf("a=%d\n",++a+2); return 0; }
    A、a=6
    B、8
    C、a=5
    D、a=8

10、78%10的结果是( )。
    A、78
    B、8
    C、7
    D、10

11、下面程序的输出是( ) 。 #include <stdio.h> int main() { int a=8; printf("%d\n",(a++)*2); return 0; }
    A、8
    B、9
    C、16
    D、18

12、下面程序的输出是( ) 。 #include <stdio.h> int main() { int a=3; printf("%d\n",(a--)*7); return 0; }
    A、21
    B、2
    C、3
    D、14

13、下面程序的输出是( ) 。 #include <stdio.h> int main() { int b=3,a= 3; printf("%d,%d\n",b,a--); return 0; }
    A、3,2
    B、2,3
    C、3
    D、3,3

14、i=1; 执行( )语句后,变量i的值不会发生变化。
    A、i+5;
    B、--i;
    C、i=2*i;
    D、i=6;

15、int x; scanf("%d",&x); 下面( )可以获得x的个位数。
    A、x%10;
    B、x/10;
    C、x/100-x/10;
    D、x-x/10;

16、语句float x=3.0 ,y=4.0;下列表达式中y的值为9.0的是( )。
    A、y/=x*27/4
    B、y+=x+2.0
    C、y-=x+0.8
    D、y*=x-3.0

17、有关运算符的正确描述是( )
    A、单目运算符优先级高于双目运算符
    B、赋值运算符是左结合的
    C、所有运算符都是左结合的
    D、赋值号的运算优先级是最低的

18、下面( )语句正确地描述了方程
    A、‍y = a * x * x * x + c;
    B、y = a * x * x * (x + c);
    C、y = (a * x * x * x) + c;
    D、y = (a * x) * x * (x + c);

19、下面( )能完成变量a,b的值的交换。
    A、t=a; a=b; b=t;
    B、a=b; b=a;
    C、a=b;
    D、a=a+b; b=a-b; a=a-b;

20、( )可以使整型变量i的值加1 。
    A、i++;
    B、++i;
    C、i=i+1;
    D、i+=1;

21、int y,a; scanf("%d",&y); 输入任意整数,下面( )中,a是y的百位数。
    A、a=y/100%10;
    B、a=y%1000/100;
    C、a=y%100;
    D、a=y/100;
    E、a=y/10000%10;
    F、a=y/1000%10;

第二周 易错知识点练习1(选做)

1、当x是41.0时,算术表达式5/9*(x-32)的运算结果是( )。
    A、5
    B、5.0
    C、0
    D、4.9

2、
    A、
    B、3.14159*r^2/(a+b)
    C、3.14159*r*r/(a+b)
    D、

3、当x是41.0时, printf("%f",5.0/9*(x-32)); 输出结果是( )。
    A、5
    B、5.000000
    C、0.000000
    D、4.900000

4、x为int型,表达式 (x=1)+2的值是( ),x的值是( )。
    A、出错,1
    B、1,1
    C、3,1
    D、1,3

5、int a=10,b=100; printf("%d,%d\n,", a++,++b); printf("%d", a); 程序的输出结果是( )。
    A、10,101 11
    B、11,100 11
    C、10,101 10
    D、10,100 10

6、在C语言中,下面( )是正确的赋值表达式。
    A、x+1=2
    B、x=2
    C、2=x
    D、b=a=2

第十周 一维数组

一维数组选择题

1、以下数组定义中,错误的是( )。
    A、int a[]={1,2,3};
    B、int a[5]={1,2,3};
    C、int a[3]={1,2,3,4};
    D、int a[5],b;

2、设有定义 int a[10]=;则说法正确的是( )。
    A、数组a有10个元素,各元素的值为0
    B、数组a有10个元素,其中a[0]的值为0,其他元素的值不确定
    C、数组a有1个元素,其值为0
    D、数组初始化错误,初值个数少于数组元素个数

3、执行下面的初始化语句,( )保存的不是字符串。
    A、char str[10]= { 'S' ,'t', 'r' ,'i','n', 'g','\0'};
    B、char str[10]= "String";
    C、char str[6]= { 'S' ,'t', 'r' ,'i','n', 'g'};
    D、char str[]= { 'S' ,'t', 'r' ,'i','n', 'g',0};

4、设有以下定义,则数组s1和s2( )。 char s1[]={ 'S' ,'t', 'r' ,'i','n', 'g'}; char s2[]= "String";
    A、长度相同,内容也相同
    B、长度不同,但内容相同
    C、长度相同,但内容不同
    D、长度不同,内容也不同

5、设已定义 char str[6]= { 'a','b','\0','c','d','\0'}; 执行语句 printf(("%s",str) 后,输出结果为( )。
    A、a
    B、ab
    C、abcd
    D、ab\0cd\0

6、引用数组元素时,数组元素下标不可以是( )。
    A、字符常量
    B、整型变量
    C、字符串
    D、算术表达式

7、已定义字符数组s1和s2,以下错误的输入语句是( )。
    A、scanf("%s%s ", &s1,&s2);
    B、gets(s1,s2) ;
    C、gets(s1); gets(s2);
    D、scanf("%s%s ", s1,s2);

8、int a[10]={1,2,3}; 则a[2]的值为( )。
    A、2
    B、3
    C、1
    D、0

9、int a[5]={1,2,3}; 则a[4]的值为( )。
    A、0
    B、3
    C、没有确定的值
    D、2

10、下面( )是字符串结束符。
    A、'\0'
    B、end
    C、'\t'
    D、enter

11、下面( )是错误的数组定义。
    A、int a[2*i];
    B、int a[10];
    C、int b[10+10];
    D、float x[15-5];

12、设有定义 int a[3]; 下面数组元素的赋值中,错误的是( )。
    A、a[1]=1;
    B、a[0]=2;
    C、a[3]=3;
    D、a[2]=100;

13、定义int a[5]; 下面( )不可以给5个数组元素赋值。
    A、a={1,2,3,4,5};
    B、for(i=0;i<5;i++) a[i]=i;
    C、for(i=0;i<5;i++) scanf("%d",&a[i]);
    D、a[0]=1;a[1]=1;a[2]=2;a[3]=3;a[4]=4;

14、定义int b[6]; 下面( )可以输出数组的所有元素的值。
    A、for(i=0;i<6;i++) printf("%d",b[i]);
    B、for(i=1;i<=6;i++) printf("%d",b[i]);
    C、printf("%d",b);
    D、printf("%d",b[5]);

15、有长度为10的一维整型数组a,由键盘输入它的值(10个不等的数),求a数组中最小元素的值及其在数组中的位置。 输入样例: 16 9 56 23 24 75 6 81 36 35 输出样例: 最小元素是 6,是第7个元素 注意:a[0]是数组中的第1个元素。 请完善程序。(有2个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> int main() { int i,a[10],min,k; // k存储位置 for(i=0;i<10;i++) scanf("%d",&a[i]); min=a[0]; // 假设第1个数为最小数 k=1; // k保存最小数的位置,此时为1 for(i=1;i<10;i++) { if(a[i] ) { min=a[i]; // min更新为较小数 // k更新为较小数的位置 } } printf("最小元素是 %d,是第%d个元素",min,k); } 提示:求数组元素的最小值可以参考本周附加例题解析“求最值及其位置”中的数组方法例题 ,注意位置序号与本例的区别

第十一周 二维数组及构造数据类型

二维数组与结构体选择题

1、若已经定义 struct stu { int a; int b; } student; ,则下列输入语句中正确的是 。
    A、scanf("%d",&a);
    B、scanf("%d",&student);
    C、scanf("%d",&stu.a);
    D、scanf("%d",&student.a);

2、设已经定义union u{ char a; int b;} vu; 在VC中存储char 型数据需要1个字节,存储int型数据需要4个字节,则存储变量vu需要 个字节。
    A、1
    B、4
    C、5
    D、8

3、设有定义 enum date {year,month,day} d ;则正确的表达式是 。
    A、year=1
    B、d=year
    C、d="year"
    D、date="year"

4、若已经定义typedef struct stu { int a, b; } student ; ,则下列叙述中正确的是 。
    A、stu 是结构体变量
    B、student 是结构体变量
    C、student 是结构体类型
    D、a和b是结构体变量

5、设有定义 enum date {year,month,day} d ;则下列叙述中正确的是 。
    A、date是类型、d是变量、year是常量
    B、date是类型、d和year是变量
    C、date和d是类型、year是常量
    D、date和d是变量、year是常量

6、下面程序的功能:输入一个3*3的整数矩阵,输出正对角线上元素之和。 #include <stdio.h> int main () { int a[3][3],i,j,sum=0; printf("输入一个3*3的整数矩阵\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); printf("\n对角线上元素之和为:\n"); for(i=0;i<=3;i++) //计算对角线上元素之和 for(j=0;j<3;j++) if(j=i) sum=sum+a[i][j]; printf("%d",sum); return 0; } 请判断:在“计算对角线上元素之和”这段程序中,共有2处错误,对吗? 修改正确后,运行如下图

7、定义行星枚举类型,枚举常量从1开始编号,请填写下面的空格(不要添加多余的空格) enum Planet{Mercury= , Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune}

8、定义一个新的字符类型别名CHAR,请填写空白处(注意不要添加多余的空格 ) typedef CHAR;

9、已知二维数组元素的值,输入行下标和列下标,输出该行列元素的值 。 例如, 输入 1,0 输出 a[1][0]=9 填写程序中空白处,完善程序功能。(有2个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> main() { int a[3][4] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}; int row, col; printf("Input the value of row, col:") ; scanf("%d,%d", &row, &col); printf("a[%d][%d] = %d", row , , ); }

10、已知若干个学生的成绩,每个学生四门课程,要求输出其中有不及格成绩的学生编号。 学生编号由0开始计算。 有多门不及格的学生编号只输出一次。 请根据题意,填写程序空白处。(有2个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> main() { int score[][4]={{60, 70, 80, 90}, {56,70, 45,90},{70, 75, 48, 18}}; int i, j; int flag; //设标志,flag为0,表示未输出该学生编号;flag 为1,表示已输出该学生编号 for(i=0;i<3;i++) { flag = 0; for(j=0;j<4;j++) if ( <60 && flag== ) { printf("%d\t", i); flag = 1; } } }

第四周 选择结构2

多分支选择题

1、分析以下程序, 下列说法正确的是( ) #include<stdio.h> main() { int x=5,a=0,b=0; if(x=a+b) printf("* * * *\n"); else printf("# # # #\n"); } ‍
    A、有语法错,不能通过编译
    B、通过编译,但不能连接
    C、输出* * * *
    D、输出# # # #

2、分析以下程序, 下列说法正确的是( ) #include<stdio.h> main() { int x=6,a=8,b=3; if(x=a+b) printf("* * * *\n"); else printf("# # # #\n"); }
    A、有语法错,不能通过编译
    B、通过编译,但不能连接
    C、输出* * * *
    D、输出# # # #

3、分析以下程序, 下列说法正确的是( ) #include<stdio.h> main() { int x=0,a=0,b=0; if(x==a+b) printf("* * * *\n"); else printf("# # # #\n"); }
    A、有语法错,不能通过编译
    B、通过编译,但不能连接
    C、输出* * * *
    D、输出# # # #

4、运行以下程序,如果从键盘上输入5,则输出结果是( ) #include<stdio.h> int main() { int x; scanf("%d", &x); if ( x--< 5) printf("%d", x); else printf("%d",x++); } 可以参考本周课件“附加例题解析与作业指导”----“选择结构附加例题解析”文档的第一个例题
    A、3
    B、4
    C、5
    D、6

5、运行以下程序,如果从键盘上输入5,则输出结果是( ) #include<stdio.h> int main() { int x; scanf("%d", &x); if ( x--< 5) printf("%d", x); else printf("%d",++x); } 可以参考本周课件“附加例题解析与作业指导”----“选择结构附加例题解析”文档的第一个例题
    A、‍3
    B、‍4
    C、‍5
    D、‍6

6、运行以下程序,如果从键盘上输入9,则输出结果是( ) #include<stdio.h> int main() { int x; scanf("%d", &x); if ( ++x< 10) printf("%d", x); else printf("%d",--x); } 可以参考本周课件“附加例题解析与作业指导”----“选择结构附加例题解析”文档的第一个例题
    A、‍11
    B、‍10
    C、‍9
    D、‍8

7、以下程序的输出是( ) #include<stdio.h> int main() { float x=2.0,y; if (x<0.0) y=0.0; else if (x<10.0) y=1.0/x; else y= 1.0; printf("%f\n", y); }
    A、0.000000‍
    B、‍0.250000
    C、‍0.500000
    D、1.000000‍

8、‍下面程序的运行结果是( )。 #include <stdio.h> main() { int a=12, b= -34, c=56, min=0; min=a; if(min>b) min=b; if(min>c) ‍ min=c; printf("%d", min); } 可以参考本周课件“附加例题解析与作业指导”----“选择结构附加例题解析”文档的最后一个例题
    A、12
    B、-34
    C、‍56
    D、‍0

9、分析以下程序, 输出结果是( ) #include<stdio.h> int main() { int x=5; if(x) printf("* * * *\n"); printf("# # # #\n"); }
    A、* * * * # # # #
    B、# # # #
    C、* * * *
    D、无输出

10、分析以下程序, 输出结果是( ) #include<stdio.h> int main() { int x=5; if(x) x=6; x=7; printf("%d\n",x); }
    A、7
    B、5
    C、6
    D、x

11、按功能键F5进入调试状态后,可以( )。
    A、查出所有的语法错误
    B、设置断点
    C、控制程序一步一步地执行,每执行一步,都可以暂停
    D、观察变量或表达式值的变化

12、下面( )是正确的符号函数程序。 当x>0时,y=1 当x=0时,y=0 当x<0时,y=-1 (提示:按if-else配对规则分析程序,y值的运算结果与符号函数一致,才是正确的程序)
    A、if(x>0) y=1; else if(x==0) y=0; else y=-1;
    B、y=0; if(x!=0) if(x>0) y=1; else y=-1;
    C、y=0; if(x>=0) if(x>0) y=1; else y=-1;
    D、if(x>=0) if(x>0) y=1;else y=0; else y=1;

13、程序功能:输入一个整数,当它是偶数时,输出“该数是偶数”,否则,输出“该数是奇数”。 请完善程序,空格处应填( )。 #include <stdio.h> int main() { int x; printf("请输入x: "); scanf("%d",&x); if(x%2==0) printf( "该数是偶数\n"); //偶数除以2的余数为0 printf( "该数是奇数\n"); return 0; }
    A、else
    B、if(x%2!=0)
    C、if(x/2!=0)
    D、else if(x%2!=0)

14、输入一个考试分数(0至100范围内),如果分数小于60分,则输出“不及格”;否则输出“及格”。(程序有1个空,请选择正确的答案) #include <stdio.h> int main() { int x; printf("请输入分数(0-100): "); scanf("%d",&x); if(x<60) printf( "不及格\n"); printf( "及格\n"); return 0; }
    A、else
    B、if(x>=60)
    C、else if(x>=60)
    D、x>=60

15、读程序,写出运行结果。 #include <stdio.h> main() { int a=1,b=3,c=5; if (c==a+b) printf("yes\n"); else printf("no\n"); }

16、读程序,写出运行结果。 #include <stdio.h> int main() { int x=2, y=-1, z=5; if(x<y) if(y<0) z=0; else z=z+1; printf("%d\n",z); }

17、读程序,写出运行结果。 #include <stdio.h> main() { float a,b,c,t; a=3; b=7; c=1; if(a>b) {t=a;a=b;b=t;} if(a>c) {t=a;a=c;c=t;} if(b>c) {t=b;b=c;c=t;} printf("%5.2f,%5.2f,%5.2f",a,b,c); //注意%5.2f 的输出格式与逗号 }

18、下面是一个旅游自助程序。程序先输出选择菜单, 如果用户输入1,则提示输入租车数量,用变量i保存,然后计算需支付的金额,并输出。 如果用户输入2,则提示输入购票数量,用变量j保存,然后计算需支付的金额,并输出。 如果用户输入其它数,则提示选择错误。 费用计算方法: 租一辆车需支付150元。 门票一张60元,如果购票数>=10,则每张50元。 请完善程序。(程序有2个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main() { int choose,i,j,money; printf("\n\t\t旅游自助服务\n"); printf("\t1---租车\t2---购买门票\n\n"); printf("请选择您需要的服务:"); scanf("%d",&choose); if( ) { printf("请输入租车数量"); scanf("%d",&i); money=150*i; printf("\n您需支付:%d元\n",money); } (choose==2) { printf("请输入购票数量"); scanf("%d",&j); if(j>=10) money=50*j; else money=60*j; printf("\n您需支付:%d元\n",money); } else { printf("选择错误"); } return 0; }

第四周 易错知识点练习(选做)

1、int x=0; if(!x) printf("x为非零\n"); else printf("x为零\n");
    A、x为非零
    B、x为零
    C、0
    D、无输出

2、a= 10; if (a%2==0) ; printf("偶数\n"); else printf("奇数\n"); 程序的运行是( )。
    A、偶数 奇数
    B、奇数
    C、偶数
    D、出错

3、int x=2, y=-1, z=2; if (x<y) if (y<0) z=0; else z+=1; printf("%d\n",z);
    A、3
    B、2
    C、1
    D、0

4、有如下程序段: if (q%p==0) a=q/p; printf("%d=%d*%d",q,p,a); //输出因式分解q=p*a else printf("不能整除"); 如果q=8,p=2,则输出( )。
    A、该段程序有语法错误,不能执行。
    B、q=p*a
    C、8=2*4
    D、不能整除

第五周 循环基础

单循环选择、填空题

1、设有如下程序段,则输出结果为() int k=0,a; for (a=1;a<=1000;a++) k=k+1; printf("k=%d",k); 提示:可参考课件“附加例题解析”文档中的例题
    A、k=1
    B、k=1001‍
    C、k=1000
    D、溢出

2、设有如下程序段,则最后一次输出的是() int a; for (a=1;a<=1000;a++) printf("a=%d",a); 提示:可参考课件“附加例题解析”文档中的例题
    A、‍a=1
    B、‍a=1000
    C、a=1001
    D、溢出‍

3、设有如下程序段,则输出结果是() int a; for (a=1;a<=1000;a++) ; printf("a=%d",a); 提示:可参考课件“附加例题解析”文档中的例题
    A、‍a=a=aaa a= 1 a= 1a=1
    B、a=1000
    C、a=1001
    D、溢出‍

4、设有如下程序段,则输出结果为() int k=0,a; for (a=1;a<=1000;a++) {a=a+1;k=k+1;} printf("k=%d",k);
    A、‍k=1000
    B、‍k=499
    C、k=500
    D、‍k=501

5、int i,j=10; for( i=1; i==j; i++); 的循环次数是() 提示:可参考课件“附加例题解析”文档中的例题
    A、‍0
    B、‍5
    C、‍10
    D、无限

6、int i, j; j=10; for(i=1; i<=j; i++) j--; 程序的循环次数是()
    A、‍0
    B、‍5
    C、‍10
    D、‍无限

7、语句for(x=0,y=0; y!=1&&x<4; x++); 是()
    A、‍无限循环
    B、循环次数不定
    C、循环4次‍
    D、循环3次

8、设有程序段: int k=10; while(k=0)k = k- 1; 则下面叙述正确的是()
    A、‍while循环执行10次
    B、是无限循环
    C、‍循环体语句执行一次
    D、‍循环体语句一次也不执行

9、‍设有程序段: int k=10; while(k==0)k = k- 1; 则下面叙述正确的是()
    A、while循环执行10次
    B、无限循环
    C、循环体语句执行一次
    D、循环体语句一次也不执行

10、‍设有程序段: int k=10; while(k!=0) k = k- 1; 则下面叙述正确的是()
    A、while循环重复执行10次
    B、是无限循环
    C、循环体语句执行一次
    D、‍循环体语句一次也不执行

11、与语句while(!x);等价的语句是()
    A、‍while(x= =0);
    B、‍while(x!=1);
    C、‍while(x!=0);
    D、‍while(x==1);

12、int i=0, j; for( j=10; i<j; j--) i++; 程序的循环次数是()
    A、0‍
    B、5‍语法错误 5
    C、语法错误
    D、无穷多次‍

13、设有程序段,以下说法正确的是() x = -1; do { x = x*x; } while( !x);
    A、‍循环体将执行一次
    B、‍循环体将执行两次
    C、循环体将执行无限次
    D、系统将提示有语法错误‍

14、C语言中while 和do-while 循环的主要区别是()
    A、‍do-while的循环体至少无条件执行一次
    B、‍ while 的循环控制条件比do-while 的循环控制条件严格
    C、‍do-while的循环体比while的循环体少执行1次
    D、‍do-while 的循环体不能是复合语句

15、下列语句不是死循环的是()‍
    A、int i = 1; ‍while(1) i++;
    B、int i =1; for(;;) i++;‍
    C、‍int i =1; do i++; while(1);
    D、‍int i =10; while(i) i--;

16、下面程序的功能是:计算1~10之间的奇数之和及偶数之和,空白处应填 () #include<stdio.h> int main() { int a, b, c, i; a = c = 0; for(i=0; i<=10; i+=2) { a += i; } printf("偶数之和=%d!\n", a); printf("奇数之和=%d!\n", c-11); }
    A、‍c+=i;
    B、c+=i+1;‍
    C、‍b+=i;
    D、b+=i+1;

17、下面程序的功能是() #include<stdio.h> int main() { int x,s=0,i; for(i=1; i<=5; i++) { scanf("%d",&x); s=s+x; } printf("s=%d\n", s); return 0; }
    A、输入任意5个整数,输出这5个数的和
    B、输入任意5个整数,输出这5个数
    C、求1+2+3+4+5的和
    D、输入语句scanf("%d",&x);不能放在循环中,程序出错

18、下面程序的功能是() #include<stdio.h> int main() { int x,s=0,i; scanf("%d",&x); while(x!=0) { s=s+x; scanf("%d",&x); } printf("s=%d\n", s); return 0; }
    A、输入一组整数,以输入0作为结束,求所有数的和并输出
    B、输入一组整数,输出不为0的数
    C、输入一组整数,并输出这些数
    D、程序只输入了一个整数,输出0

19、for (i = 1; i<=10; i++) printf("****"); 循环结束后,i 的值是( )。
    A、0
    B、11
    C、10
    D、****

20、下面( )循环体执行10次。
    A、for(i=1;i<=10;i=i+1) {循环体;}
    B、for(i=2;i<=20;i=i+2) {循环体;}
    C、for(i=0;i<=9;i=i+1) {循环体;}
    D、for(i=10;i>=1;i=i-1) {循环体;}

21、下面( )是正确的判断素数程序(m>1)。
    A、j=0; for (i =2; i<=m-1; i++) if ( m % i != 0) j++; if(j==m-2) printf(“%d是素数\n", m);
    B、j=0; for (i =2; i<=m-1; i++) if ( m % i == 0) j++; if(j==0) printf(“%d是素数\n", m);
    C、flag=0; for (i =2; i<=m-1; i++) if ( m % i == 0) flag=1; if(flag==0) printf(“%d是素数\n", m);
    D、for (i =2; i<=m-1; i++) if ( m % i == 0) i=m+2; if(i==m+3) printf(“%d是素数\n", m);

22、编程:输入一个整数,计算该整数的位数,并输出位数。 输入样例:12345 输出样例:输入的是5位数 请完善程序。(程序有1个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main( ) { int i=0,k,j; scanf("%d",&k); do { k= k/10; i++; }while( ); printf("输入的是%d位数\n", i); } 提示:第二周讨论题-----讨论一类赋值语句的特点,在置顶贴的回复中,有本题的相关内容。这一类赋值语句常用于循环中。

23、编程:输入一个整数,计算该整数的位数,并输出位数。 输入样例:12345 输出样例:输入的是5位数 请完善程序。(程序有1个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main( ) { int i=0,k,j; scanf("%d",&k); do { i++; }while(k!=0); printf("输入的是%d位数\n", i); } 提示:第二周讨论题-----讨论一类赋值语句的特点,在置顶贴的回复中,有本题的相关内容。这一类赋值语句常用于循环中。

第五周 易错知识点练习(选做)

1、下面图中用箭头表示for循环语句的执行顺序,其中( )是正确的。
    A、
    B、
    C、
    D、

2、sum = 0; for (i = 1; i<=10; i++) ; sum = sum + i; printf("%d", sum); 输出结果是( )。
    A、0
    B、11
    C、10
    D、55

3、sum = 0; for (i = 1; i<=10; i++) { sum = sum + i; i++; } printf("%d", sum); 输出结果是( )。
    A、11
    B、55
    C、25
    D、0

4、int i,count=0; for(i=1;i<=20;i++) { if(i%3==0 || i%7==0) printf("%d\t",i); count++; if(count%5==0) printf("\n"); } 程序运行结果是( )。
    A、
    B、
    C、
    D、

5、int i,count=0; for(i=1;i<=20;i++) { if(i%3==0 || i%7==0) { printf("%d\t",i); count++; if(count%5==0) printf("\n"); } } 程序运行结果是( )。
    A、
    B、
    C、
    D、

6、scanf("%d", &m); for (i =2; i<=m-1; i++) if ( m % i != 0) printf(“%d是素数\n", m); 该程序是错误的判定素数程序,下面( )是该程序的输出。
    A、当m为7时,输出: 7是素数
    B、当m为8时,输出: 8是素数
    C、当m为7时,重复输出5行: 7是素数
    D、当m为8时,重复输出4行: 8是素数

第六周 循环进阶

循环进阶选择、填空题

1、运行下面的程序,得到的输出是() #include<stdio.h> int main() { int i, j; for(i=1;i<=2;i++) for(j=1;j<=2;j++) printf("i=%d, j=%d\n",i,j); }
    A、i=1, j=1 i=1 , j=2 i=2 , j=1 i=2 , j=2
    B、i=1, j=1 i=2 , j=1 i=1 , j=2 i=2 , j=2
    C、i=1, j=1 i=2 , j=2 i=1 , j=1 i=2 , j=2
    D、i=1, j=1 i=1 , j=1 i=2 , j=2 i=2 , j=2

2、‍ 运行下面的程序,输出的星号个数一共是() #include<stdio.h> int main() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=i;j++) putchar(' '); putchar('*'); putchar('\n'); } }
    A、4
    B、10
    C、12
    D、16

3、运行下面的程序,输出的星号个数一共是() #include<stdio.h> int main() { int i,j; for(i=1;i<=4;i++) for(j=1;j<=i;j++) putchar(' '); putchar('*'); putchar('\n'); }
    A、4
    B、1
    C、10
    D、0

4、执行下面的程序片段,k的值是() int k=0,i,j; for(i=0;i<5;i++) for(j=0;j<3;j++) k=k+1 ;
    A、3
    B、5
    C、15
    D、8

5、若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是
    A、for( i=1; i<=5; i++ ) { p=1; p*=i; } ‍
    B、i=1; p=1; do { p*=i; i++; } while ( i<=5 );
    C、i=1; p=1; while ( i<=5 ) { p*=i; i++; }
    D、for(i=1,p=1;i<=5;i++) p*=i;‍

6、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是 * *** ***** 慕课题库

* #include <stdio.h> int main() { int i, j; for( i=1; i<=4; i++) { for( j =1; j<= ; j++) putchar('*'); putchar('\n'); } return 0; }
    A、i‍
    B、2*i-1‍
    C、‍2*i+1
    D、i+2‍

7、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是( ) 慕课题库

* ***** *** * #include <stdio.h> int main() { int i, j; for( i=1; i<=4; i++) { for( j =1; j<= ; j++) putchar('*'); putchar('\n'); } return 0; }
    A、2*i-1
    B、2*i+1
    C、2*(5-i)-1
    D、‍2*(5-i)+1

8、鸡兔同笼,共有98个头,386只脚,编程求鸡、兔各多少只。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int x, y; for (x=1; x<98; x++) { _____(1)____ if ( __‍ (2) ___ ) { printf("x = %d, y = %d", x, y); } } return 0; }
    A、(1) y = 98 - x; (2) 2*x+4*y == 386; ‍
    B、(1) y = 98 - x; (2) 2*x+4*y <= 386;
    C、(1) x = 98 - y; (2) 2*x+4*y == 386;
    D、(1) x = 98 - y; (2) 2*x+4*y <= 386;

9、打印所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153是“水仙花数”,因为。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int i, j, k, n; printf("result is:"); for (n=100; ___(1)____ ; n++) { i = n / 100; //得到百位 j = ____(2)______ ; k = n % 10; //得到个位 if ( ______(3)______‍) { printf("%d\t ",n); //输出结果 } } printf("\n"); return 0; }
    A、‍(1) n<=1000 (2) n / 10 (3) i*100+j*10+k = i*i*i+j*j*j+k*k*k
    B、‍(1) n<=1000 (2) (n - i * 100) / 10 (3) i*100+j*10+k == i*i*i+j*j*j+k*k*k
    C、‍(1) n<1000 (2) n / 10 (3) i*100+j*10+k == i*i*i+j*j*j+k*k*k
    D、‍(1) n<1000 (2) (n - i * 100) / 10 (3) i*100+j*10+k == i*i*i+j*j*j+k*k*k

10、下面程序的功能是() #include<stdio.h> int main() { int x,s,i; scanf("%d",&x); s=x; for(i=1; i<=6; i++) { scanf("%d",&x); if(s<x) s=x; } printf("s=%d\n", s); return 0; } 提示:可参考课件“附加例题解析”中文档“求最值及其位置”,帮助理解。
    A、输入6个整数,输出这些数的和
    B、输入7个整数,输出其中的最小数
    C、输入7个整数,输出其中的最大数
    D、输入6个整数,输出第1个数

11、阅读下面的程序,该程序完成的功能有( ) #include <stdio.h> int main() { int number,min; int i,n=1; printf("请输入第1个数"); scanf("%d",&number); min=number; //只有1个数时,最小数就是这个数,设min初值为第1个数 for(i=2;i<=8;i++) { printf("请输入第%d个数",i); scanf("%d",&number); if(min>number) //min与新输入的数比,如果更大,则 { min=number; // min更新为较小的数 n=i; // n更新为较小数的位置 } } printf("第%d个数最小,为%d\n",n,min); //输出最小数的位置与最小数 return 0; } 提示:可参考课件“附加例题解析”中文档“求最值及其位置”,帮助理解。
    A、输出8个数中的最小数
    B、输出最小数的位置
    C、求7个数最小数
    D、将输入的8个数由大至小排序

12、下面( )仅输出m的大于1的最小因子。
    A、for (i =2; i<=m-1; i++) if ( m % i == 0) { printf("%d is 最小因子\n", i); break; }
    B、for (i =2; i<=m-1; i++) if ( m % i == 0) { printf("%d is 最小因子\n", i); continue; }
    C、for (i =2; i<=m-1; i++) if ( m % i == 0) { printf("%d is 最小因子\n", i); }
    D、i=2; while ( m % i != 0) i++; printf("%d is 最小因子\n", i);

13、程序功能:输入n的值(n<11),计算1!+2!+3!+......+n!,并输出计算结果。 请完善程序。(程序有1个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main() { int i, n; long sum=0,fac=1; //fac存储每个加项(阶乘)的值 printf("请输入n的值:"); scanf("%d",&n); for( i=1; i<=n; i++) { //后一加项与前一加项的关系 sum=sum+fac; } printf("和为%ld\n",sum); return 0; } 提示:可以参考“累加和”中讲解的最后一个例题

14、编写作图程序:输入一个整数n,输出由n行上三角形与n+1行下三角形组成的如下菱形。 输入样例: 5 输出样例: (程序有3个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> int main() { int n,i, j; scanf("%d",&n); for(i=1;i<= n;i++) //输出n行上三角形 { for(j=1;j<= n-i+1;j++) //输出每行*号前的空格 (1) for(j=1;j<= (2) ;j++) //输出第i行的*号 putchar('*'); putchar('\n'); } for(i=1;i<= (3) ;i++) //输出n+1行下三角形 { for(j=1;j<=i-1;j++) putchar(' '); for(j=1;j<= 2*n+3-2*i;j++) putchar('*'); putchar('\n'); } return 0; } 提示: n行上三角形的编程,可以参考本周教学内容:循环的嵌套中讲解的最后一个例题 n+1行下三角形的编程与上三角类似,如何用公式表示第i行*的个数,可参考循环的嵌套小节中的“问与答”文档

15、编程输出如下图的九九乘法口诀表: (程序有2个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main( ) { int i,j; printf("\t\t\t\t乘法口诀表\n\n"); for( i=1;i<=9;i++) //外循环输出9行 { for( j=1;j<= (1) ; j++) //内循环每行输出 i 列 printf("%d*%d=%d\t",i,j, (2) ); //输出乘法表 printf("\n"); //输出一行后换行 } return 0; } 提示: 1、注意规律,第 i 行第 j 列输出的是: i*j=i*j的积; 2、可以参照本周教学内容:循环的嵌套中输出直角三角形的例题,试试将输出字符'*'的语句替换为输出一条乘法口诀。

第六周 易错知识点练习(选做)

1、求:1-1/2+1/3-1/4+...+1/99-1/100 下面( )是正确的。
    A、sum=0; sign=1.0; for(i=1;i<=100;i++) { term =sign/ i; sum += term; sign=-sign; }
    B、sum=0; for(i=1;i<=100;i++) { sum =sum+(-1)^(i+1)* (1./i); }
    C、sum=0; for(i=1;i<=100;i++) { sum =sum+pow(-1,i+1)* (1.0/i); }
    D、sum=0; for(i=1;i<=100; i=-i) { term =1./ i; sum += term; i++; }

2、下面( )求2+4+6+...+100之和,即1-100间所有偶数和。
    A、
    B、
    C、
    D、
    E、

第七周 基本数据类型

选择题

1、下列( )是合法的字符常量。
    A、"c"
    B、c
    C、'char'
    D、'\n'

2、下列合法的字符串常量是( )。
    A、56
    B、'56'
    C、"56"
    D、'\t'

3、已知字母A的ASCII码为十进制的65,下面程序的输出是( )。 int main() { char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c",ch1,ch2); }
    A、67,D
    B、B,C
    C、C,D
    D、不确定的值

4、设有以下程序段,则输出结果是( )。 char c1='b', c2='e'; printf("%d,%c\n",c2-c1,c2-'a'+'A');
    A、2, M
    B、3,E
    C、2, E
    D、输出结果不确定

5、若变量c为char类型,能正确判断出c为小写字母的表达式是( )。
    A、'a'<=c<='z'
    B、(c>='a') || (c<='z')
    C、('a'<=c) and ('z'>=c)
    D、(c>='a') && (c<='z')

6、有如下程序段,执行该程序段后,x的值为( )。 int a=14,b=15,x; char c='A'; x=(a && b) && (c<'B');
    A、14
    B、false
    C、0
    D、1

7、若有下列类型说明语句: char w; int x ; float y ; double z ; 则表达式w*x+z-y值的正确数据类型为( )。
    A、float
    B、char
    C、int
    D、double

8、若有下列类型说明语句: int x ; double y ; 则表达式x-y值的正确数据类型为( )。
    A、char
    B、int
    C、double
    D、float

9、double x; 正确的输入语句是( )。
    A、scanf("%lf",&x);
    B、scanf("%hf",&x);
    C、scanf("%f",&x);
    D、scanf("%ld",&x);

10、下面( )将十进制数转为八进制数输出。
    A、printf("%o",50);
    B、printf("%d",50);
    C、printf("%x",50);
    D、printf("%c",50);

11、下面( )将十进制转为十六进制输出。
    A、printf("%o",50);
    B、printf("%x",50);
    C、printf("%c",50);
    D、printf("%d",50);

12、下面( )将十六进制数转为八进制输出。
    A、printf("%o",050);
    B、printf("%o",0x50);
    C、printf("%d",050);
    D、printf("%x",50);

13、下面( )类型的取值范围没有负数 。
    A、int
    B、float
    C、double
    D、unsigned

14、下面程序段的输出结果是( )。 unsigned short i=1; while(i>0) { i++; } printf("i=%u\n",i);
    A、死循环,无输出
    B、0
    C、65535
    D、32767

15、如果想更精确地保存12345.67891,应该选用( )型的变量。
    A、double
    B、float
    C、long long int
    D、char

16、编程统计某高速收费站单向通过的车辆数量,该高速为3车道,一次通过的车不超过3辆。 程序功能:通过车辆时,输入相应的数(1-3之间),程序进行累加;当输入字符s时,输出当前通过的车辆总和;当输入e时,输出通过的车辆总数,并结束程序。 程序有一个空,请选择正确的答案。 #include <stdio.h> int main() { char c1; int total=0; printf("\t\t\t\t计数程序\n\n"); //输出提示菜单 printf("s---显示当前通过的车辆总数\t 1-3---新增车辆数\t e---显示通过的车辆总数,并结束程序\n\n"); do { //输入一个字符 if(c1=='s') printf("当前通过的车辆总数是:%d\n",total); else if(c1=='1') total=total+1; else if(c1=='2') total=total+2; else if(c1=='3') total=total+3; }while(c1!='e'); printf("总过的车辆总数是:%d\n",total); return 0; } 输入、输出样例如下图: 完成后,可参与本周的课堂讨论,通过本例深入体会字符输入语句
    A、scanf(" %c",&c1); //%c前有空格
    B、scanf("%c",&c1);
    C、c1=getchar();
    D、getchar();

17、用for循环语句编程输出A~Z之间的所有大写字母,字母之间以空格分隔,要求一行输出8个字符。下面的程序有一个空,请选择恰当的循环语句完善程序。 #include<stdio.h> int main() { char c; int count=0; { printf("%c ", c); count++; if(count%8==0) //每8个字符换行 printf("\n"); } return 0; }
    A、for(c='A'; c<='Z'; c++)
    B、for(c=65; c<=90; c++)
    C、for(c=1; c<=26; c++)
    D、for(c='a'; c<='z'; c++)

第八周 函数

函数的定义、调用选择填空题

1、C语言程序由函数组成。正确的说法是( )
    A、主函数必须写在其他函数之前,函数内可以嵌套定义函数
    B、主函数必须在写其他函数之后,函数内可以嵌套定义函数
    C、主函数必须写在其他函数之前,函数内不可以嵌套定义函数
    D、主函数可以写在其他函数之后,函数内不可以嵌套定义函数

2、以下说法正确的是( )
    A、C语言程序总是从第一个定义的函数开始执行
    B、C语言程序中,被调用的函数必须在main()函数中定义
    C、C语言程序总是从主函数main()开始执行。
    D、C程序中的main()函数必须放在程序的开始处

3、已知函数fun类型为void,则void的含义是( )
    A、执行函数fun后,函数没有返回值
    B、执行函数fun后,可以返回任意类型的值
    C、执行函数fun后,程序结束,不再返回主调函数
    D、以上三个答案都是错误的

4、若有返回值的函数类型和return语句中的表达式类型不一致,则( )
    A、运行时出现不确定结果
    B、返回值的类型以函数类型为准
    C、编译时出错
    D、返回值的类型以return语句中表达式的类型为准

5、下面函数定义正确的是( )。 注意:形参的格式
    A、double fun(double u,v) {return u+v;}
    B、double fun(double u;double v) {return u+v;}
    C、double fun(float u,float v) {return u+v;}
    D、double fun( u,v) { float u,v ;return u+v;}

6、以下函数fun的返回值类型为( )。 fun(double x){ ……}
    A、double
    B、void
    C、int
    D、无法确定类型

7、一个C语言程序的基本组成单位是( )。
    A、主程序
    B、子程序
    C、函数
    D、过程

8、C语言中函数返回值类型由( )决定。
    A、调用该函数的主调函数类型
    B、函数参数类型
    C、return语句中的表达式类型
    D、定义函数时指定的函数类型

9、void area( int length, int width ) { int s; s= length * width ; printf(“长%d,宽%d的长方形面积是%d\n”, length , width ,s); } 有如上求长方形面积函数,正确的调用方法是( )。
    A、c=area(1,2);
    B、area(1,2);
    C、area( );
    D、c=area( );

10、int area( int length, int width ) { int s; s= length * width ; return s; } 有如上求长方形面积函数,正确的调用方法是( )。
    A、c=area(1,2);
    B、area(1);
    C、c=area("12","34" );
    D、area( );

11、编写函数area(int length, int width),函数的功能是:求长方形面积,并打印输出面积值。 下面( )是正确的。
    A、void area( int length, int width ) { int s; s= length * width ; printf(“长方形面积是%d\n”, s); }
    B、int area( int length, int width ) { int s; s= length * width ; printf(“长方形面积是%d\n”, s); }
    C、int area( int length, int width ) { int s; s= length * width ; return s; }
    D、void area( int length, int width ) { int s; s= length * width ; return s; }

12、编写函数area(int length, int width),函数的功能是:求长方形面积,并返回面积值。 下面( )是正确的。
    A、int area( int length, int width ) { int s; s= length * width ; return s; }
    B、void area( int length, int width ) { int s; s= length * width ; return s; }
    C、void area( int length, int width ) { int s; s= length * width ; printf(“长方形面积是%d\n”, s); }
    D、int area( int length, int width ) { int s; s= length * width ; printf(“长方形面积是%d\n”, s); }

13、编写函数计算下面多项式的值,并返回值 编写main,输入x,调用该函数计算多项式的值并显示结果。 请完善下面的程序:(有2个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> double f(double x) { 2*x*x+3*x+1; } int main() { double x; printf("请输入x:"); scanf("%lf",&x); printf("f(%.2f)的值是%.2f",x, ); return 0; }

14、一个正整数如果恰好等于它的除自身外的因数之和,这个数称为“完数”。例如,6的因数有1、2、3,且6=1+2+3,因此6是“完数”。 编写判别完数的函数wanshu(int x):功能判断x是否为完数,如果是,则返回1,不是,则返回0。 编写main()中让x从1循环至1000,并调wanshu函数,如果返回值为1,则输出该数。 请完善下面的程序:(有3个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int wanshu(int x) { int i,r=0; for(i=1;i<x;i++) { if ( ) //判断x能整除i? 即判断i是否是x的因数 r=r+i; //将因数累加进r中 } if (r==x) //判断因数和是否等于x,是则返回1,不是,返回0 return 1; else return ; } int main() { int i; for (i=1;i<=1000;i++) { if ( ) //调用wanshu函数,根据函数值,判断i是否为完数, printf("%d是完数\n",i); } return 0; }

15、编写最小值函数,功能求x,y的最小值,并返回最小值。 main()中输入x,y的值,并调用min函数,输出返回值。 请填空完善程序。(有3个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> int (int x, ) { if(x<y) return x; return y; } int main() { int x,y; printf("请输入2个数"); scanf("%d%d",&x,&y); printf("较小的数是%d",min(x,y)); return 0; }

16、编写求最大公约数函数gcd:功能是求两数的最大公约数,并返回该数。 main函数中调用该函数,并输出最大公约数。 请填空完善程序。(有2个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> int gcd(int m,int n) //求m,n的公约数的函数 { int r; r=m; // r 是公约数,初值为 m while((m%r!=0)||(n%r!=0)) //当 r 不是公约数时,循环直至找到公约数 ; // r 减小1 return r; } int main() { int m,n; printf("请输入两个数"); scanf("%d%d",&m,&n); printf("最大公约数%d\n", ); //调用gcd函数 return 0; }

17、编写求最小公倍数函数sct:功能是求两数的最小公倍数,并返回该数。 main函数中调用该函数,并输出最小公倍数。 请填空完善程序。(有2个空,答案一行写一个,不要添加多余的空格) #include<stdio.h> int sct(int m,int n) //求m,n的公倍数的函数 { int r; r=m; // r 是公倍数,初值为 m while((r%m!=0)||(r%n!=0)) //当 r 不是公倍数时,循环直至找到公约数 ; // r 增加1,用于下次循环测试下一个数 return ; // 返回得到的公倍数 } int main() { int m,n; printf("请输入两个数"); scanf("%d%d",&m,&n); printf("最小公倍数是%d\n",sct(m,n)); return 0; }

函数综合应用选择题

1、已知个人所得税税率表如下: 应交税额=(收入-5000)*税率-速算扣除数。 ------------------------------------------------------------------------------------------------------- 编写求税收函数double tax_fun(double x):x为收入,计算应交税额,并返回该数。 A收入8000元,B收入7000元,C收入12000元,在main函数中调用tax_fun函数,计算出A、B、C的应交税总额。 程序有3个空,请选择应填入的正确答案。 #include<stdio.h> double tax_fun( (1) x) { double y,tax; y=x-5000; //扣除5000元免税金额 if(y<=3000) //按分档税率计算应交税额,结果保存在tax变量中 tax=y*0.03; else if(y<=12000) tax=y*0.1-210; else if(y<=25000) tax=y*0.2-1410; else if(y<=35000) tax=y*0.25-2660; else if(y<=55000) tax=y*0.3-4410; else if(y<=80000) tax=y*0.35-7160; else tax=y*0.45-15160; return (2) ; } int main() { printf("A、B、C三人应缴税总额为%.2lf元 ", (3) ); return 0; }
    A、(1) double (2) tax (3) tax_fun(8000)+tax_fun(7000)+tax_fun(12000)
    B、(1) 不需填 (2) tax_fun (3) tax_fun(8000)+tax_fun(7000)+tax_fun(12000)
    C、(1) int (2) y (3) tax_fun(8000)+tax_fun(7000)+tax_fun(12000)
    D、(1) double (2) tax (3) tax_fun(double 8000)+tax_fun(double 7000)+tax_fun(double 12000)

2、程序功能:输入一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。 #include<stdio.h> int isprime(int n) //判断n是否为素数 { int i, flag=1; for(i=2;i<n;i++) if(n%i==0) { flag=0; i=n; } (1) } int main() { int m,i; scanf("%d",&m); for(i=2;i<m/2+1;i++) if( (2) ) printf("%d+%d=%d\n",i,m-i,m); return 0; } 完成题目的要求,( )是正确的选项。
    A、return flag; isprime(i)==1
    B、return flag; isprime(i)==1 && isprime(m-i)==1
    C、return ; isprime( )==1 && isprime( )==1
    D、空 isprime(i)==1 && isprime(m-i)==1

第九周 函数与变量

选择题

1、以下叙述中错误的是( )。
    A、函数形参是存储类型为自动类型的局部变量
    B、全局变量的存储类别是auto型的。
    C、static int x; 则x会被初始化为0
    D、函数中定义的变量默认是自动变量

2、下列叙述错误的是( )。
    A、形参是局部变量
    B、复合语句中定义的变量只在该复合语句中有效
    C、主函数中定义的变量在整个程序中都有效
    D、其他函数中定义的变量在主函数中不能使用

3、当全局变量与函数内部的局部变量同名时,则在函数内部( )。
    A、全局变量有效
    B、局部变量有效
    C、全局变量与局部变量都有效
    D、全局变量与局部变量都无效

4、以下说法中正确的是( )
    A、形参是全局变量,其作用范围仅限于函数内部。
    B、形参是全局变量,其作用范围从定义之处到文件结束。
    C、形参是局部变量,其作用范围仅限于函数内部。
    D、形参是局部变量,其作用范围从定义之处到文件结束。

5、在一个源文件中定义的全局变量的作用域为( )
    A、本文件的全部范围
    B、本程序的全部范围
    C、本函数的全部范围
    D、从定义该变量的位置开始至本文件结束

6、下面程序的运行结果是( ) #include<stdio.h> void proc (int a); int main ( ) { proc(2); proc(3); } void proc (int a) { static int x; //静态存储 int y=0; x=x+a; y=y+a; printf("%d\t%d\t",x,y) ; }
    A、2 2 3 3
    B、2 2 3 5
    C、2 2 5 3
    D、2 2 5 5

7、下面程序运行中,x被分配---释放存储空间,总共有( )次这样的过程。 #include<stdio.h> void proc (int a); int main ( ) { proc(2); proc(3); } void proc (int a) { static int x; ....; }
    A、1
    B、3
    C、2
    D、0

8、下面程序运行中,x被分配---释放存储空间,总共有( )次这样的过程。 #include<stdio.h> void proc (int a); int main ( ) { proc(2); proc(3); } void proc (int a) { int x; ....; }
    A、1
    B、2
    C、3
    D、4

9、下面程序中,x被分配---释放存储空间,总共有( )次这样的过程。 #include<stdio.h> void proc (int a); int x; int main ( ) { proc(2); proc(3); } void proc (int a) { x=2; ....; }
    A、1
    B、2
    C、3
    D、0

10、下面程序运行中,形参a被分配---释放存储空间,总共有( )次这样的过程。 #include<stdio.h> void proc (int a); int main ( ) { proc(1); proc(2); proc(3); } void proc (int a) { a=2; ....; }
    A、1
    B、2
    C、3
    D、4

11、程序输出结果为( ) #include<stdio.h> void proc (); int main ( ) { int x=1; //定义局部变量x,局部变量只在本函数中有效 proc( ); printf("%d\n",x); } void proc ( ) { int x; //定义局部变量x,局部变量只在本函数中有效 x=2; }
    A、1
    B、2
    C、main,proc函数中都定义了变量x,程序错误
    D、0

12、程序输出结果为( )。 #include<stdio.h> int x=0; //x定义在所有函数之外,为全局变量 void proc (); int main ( ) { x=1; proc( ); printf("%d\n",x); } void proc ( ) { x=2; }
    A、2
    B、0
    C、1
    D、程序错误

13、下面程序的执行结果为( )。 #include<stdio.h> void proc (); int main ( ) { int x=8; //定义局部变量x,局部变量只在本函数中有效 proc( ); printf("%d\n",x); return 0; } void proc ( ) { x=100; }
    A、编译不能通过
    B、8
    C、100
    D、随机数

14、阅读“变量的作用域”的讨论题中程序,其中定义了全局变量 float area1,area2,area3; 下面叙述正确的是()。
    A、area1,area2,area3定义为全局变量,可以将cal函数计算出来的面积值传递给max_3函数
    B、float area1,area2,area3; 语句后的所有函数都可以使用这3个变量
    C、将 float area1,area2,area3; 放在main函数中效果一样
    D、该语句有语法错误

第十二周 指针

选择题

1、设已定义 int a, *p; 下列赋值表达式中正确的是 。
    A、*p=a
    B、p=*a
    C、p=&a
    D、*p=&a

2、设已定义 int x, *p=&x ; 则下列表达式中错误的是 。
    A、*&x
    B、&*x
    C、*&p
    D、&*p

3、若已定义 int a=1,*b=&a; , 则printf("%d\n",*b);的输出结果为 。
    A、a的值
    B、a的地址
    C、b的值
    D、b的地址

4、设已定义 int x, *p ,*p1=&x , *p2=&x ; 则下列表达式中错误的是 。
    A、x=*p1+*p2
    B、p=p1
    C、x =p1+p2
    D、p1=0

5、设有函数定义 void p(int *x){printf("%dn",*x);} 和变量定义int a=3;则正确的函数调用是 。
    A、p(a)
    B、p(*a)
    C、p(&a)
    D、p(int *a)

6、运行以下程序,输出结果为 。 #include <stdio.h> int fun(int a,int *b) { a++; (*b)++; return a+*b; } int main() { int x=1,y=2; printf("%d ",fun(x,&y)); printf("%d ",fun(x,&y)); }
    A、5 5
    B、5 6
    C、6 5
    D、6 6

7、若已定义 int a[]={1,2,3,4},*p=a; 则下面表达式中值不等于2的是 。
    A、*(a+1)
    B、*(p+1)
    C、*(++a)
    D、*(++p)

8、若已定义 int a[]={1,2,3,4},*p; p=a+1; 则p[2]的值是 。
    A、2
    B、3
    C、4
    D、无意义

9、下面程序的运行结果是 。 #include <stdio.h> void fun(int w,int *p) { w=1; *p=5*w; } int main() { int a=8,b=2; fun(a,&b); printf("%d\n%d\n",a,b); return 0; }
    A、8 5
    B、8 2
    C、1 5
    D、1 2

10、下面程序的运行结果是 。 #include <stdio.h> void fun(int a,int *b) { a=4; *b=2*a; } int main() { int a=5,b=2; fun(a,&b); printf("%d\n%d\n",a,b); return 0; }
    A、5 2
    B、5 8
    C、4 2
    D、4 8

11、定义:int x;float y;int *p; 下面对指针变量p赋值正确的是( )。
    A、p=1000;
    B、p=&y;
    C、p=&x;
    D、p=x;

12、int x=1,y=2; int *p1,*p2; p1=&x;p2=&y; 下面与 x=y; 功能不同的语句是( )
    A、*p1=*p2;
    B、*p1=y;
    C、x=*p2;
    D、p1=p2;

13、int n; int *p1; p1=&n; 下面与 n=3; 功能相同的语句是( )
    A、*p1=3;
    B、p1=3;
    C、&p1=3;
    D、3=n;

14、int a[10]; int *p; p=a; 下面( )不正确。
    A、*(a+1)=0;
    B、*(p+1)=1;
    C、a[1]=1;
    D、&a=1;

15、有函数 void swap(int * p1 , int * p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } 下面程序中,( )能正确地调用swap函数,使数组前2个元素的值互换。
    A、#include <stdio.h> int main() { int a[5]={1,2,3,4,5}; swap(&a[0],&a[1]); printf("调用函数后:a[0]=%d\ta[1]=%d\n",a[0],a[1]); return 0; }
    B、#include <stdio.h> int main() { int a[5]={1,2,3,4,5},*p; p=a; swap(p,p+1); printf("调用函数后:a[0]=%d\ta[1]=%d\n",a[0],a[1]); return 0; }
    C、#include <stdio.h> int main() { int a[5]={1,2,3,4,5},*p; swap(a,a+1); printf("调用函数后:a[0]=%d\ta[1]=%d\n",a[0],a[1]); return 0; }
    D、#include <stdio.h> int main() { int a[5]={1,2,3,4,5},*p; swap(a[0],a[1]); printf("调用函数后:a[0]=%d\ta[1]=%d\n",a[0],a[1]); return 0; }