江苏省C语言考试第二课时

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二次课基本语句和选择结构
课时:4
第三部分基本语句
试题分析:本部分内容涉及考点较少,重点掌握scanf语句和printf语句的格式使用。

重点内容:
3.1 表达式语句,空语句,复合语句
1 表达式语句:由各类表达式加;构成。

表达式包括:算术表达式、赋值表达式、逗号表达式等。

举例:
a=b+2; //赋值表达式
i++;//算术表达式
2 空语句:只有一个;表示的语句。

举例:
main()
{ ;
}
3 复合语句:用花括号括起来的语句。

举例:
{a++;b++;printf(“%d%d\n”,a,b);}
3.2 输入输出函数的调用,正确输入数据并正确设计输出格式
1 printf函数(输出函数)
★printf一般格式:printf(格式控制,输出项1,输出项2,……);举例:
pirntf(“a=%d,b=%d”,a,b); //输出整型变量a和b,如果a为10,b为8,输出结果为:
★printf函数中常用格式说明
%后跟输出变量对应的格式字符,d表示十进制整型,f表示浮点数,c表示输出一个字符,s表示输出字符串。

%后先跟数字再跟格式字符,表示输出值的宽度,举例:
pirntf(“a=%5d”,a); //输出变量a,宽度为5,输出结果如下:
2 scanf函数(输入函数)
★scanf函数的一般调用形式
scanf(格式控制,输入项1,输入项2,……);,举例:
int k;float a;double y;
scanf(“%d%f%lf”,&k,&a,&y); //用于从键盘输入三个变量值
%后跟格式字符,包括:c输入一个字符,d输入十进制数,f单精度,lf双精度,o八进制,x十六进制。

★scanf函数输入数据(常考)
考点一:跳过某个输入数据
int x,y,z;
scanf(“%d%*d%d%d”,&x,&y,&z);
如果输入:12 34 56 78<回车>
x为12,y为56,z为78
考点二:插入其他字符
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
正确输入:a=10,b=20.c=30
a为10,b为20,c为30
考点三:不同数据类型输入
int x;char y;int z;
scanf(“%d%c%d”,&x,&y,&z);
正确输入:12a23 //不可输入12 a 23
x为12,y为a,z为23
考点四:指定输入数据所占的宽度
scanf(“%3d%5f%5le”,&k,&a,&y);
如果输入:123456.789.123
k为123,a为456.7,y为89.12
真题解析:
一、选择题
(1)若有定义:int a,b;,通过语句scanf(“%d;%d”,&a,&b);,能把整数3赋给变量a,5付给变量b的输入数据是()(2011年9月选择题16题)
A)3 5 B)3,5 C)3;5 D)35
答案:C
解析:本题考查scanf函数输入格式控制,本题在格式控制里插入其他符号;,所以在输入时需要在两个数之间加入;。

(2)有以下程序段
char name[20];intnum;
scanf("name=%s num=%d",name;&num);
当执行上述程序段,并从键盘输入:name=Lili num=1001<回车>后,name的值为()(2011年3月选择题16题)
A)Lili B)name=Lili C)Lilinum= D)name=Lili num=1001
答案:A
解析:本题考察输入函数scanf用法,当%前有字符串时,在键盘输入时也要输入对应字符串,本题name=和num=都是%前字符串,所以,键盘输入时也要敲入name=和num=,这样本题输入name=Lili num=1001时,分别将Lili赋给name变量,将1001赋给num变量。

考虑scanf其他用法。

二、填空题
(1)若程序中已给整型变量a和b赋值10和20,请写出按以下格式输出a,b值的语句 ______ *****a=10,b=20*****(2011年9月填空题6题)
答案:printf(“*****a=%d,b=%d*****”,a,b);
解析:
(2)有以下程序
#include <stdio.h>
main()
{ int x,y;
scanf(%2d%1d,&x,&y); printf("%d\n",x+y);
}
程序运行时输入:1234567程序的运行结果是________(2010年9月填空题7题)
解析:本题考查scanf函数输入格式控制,%2d表示取数字的前两位(12),%1d表示从第三位开始取一位数字(3),x+y为15,所以输出15。

第四部分选择结构程序设计
试题分析:
选择结构是三大结构之一,重点要掌握if语句和switch语句的使用,每年if语句是必须出现的,switch语句出现较少,但也要会用。

重点内容:
4.1 用if语句实现选择结构
1 if语句
形式一:if(表达式) 语句
程序举例:
输入三个整数,分别赋给a,b,c,然后按从小到大输出。

#include <stdio.h>
main()
{ int a,b,c,t;
printf(“input a,b,c:”);scanf(“%d%d%d”,&a,&b,&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
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(“a=%d,b=%d,c=%d\,”,a,b,c);
}
如果输入:12 3 44
输出:
形式二:if(表达式) 语句块1
else 语句块2
程序举例:
输入两个数,分别赋给x和y,输出其中最大的数。

#include <stdio.h>
main()
{ int x,y;
printf(“Enter x &y:”);
scanf(“%d%d”,&x,&y);printf(“x,y:%d%d\n”,x,y);
if(x>y)
printf(“max=x=%d\n”,x);
else
printf(“max=y=%d\n”,y);
printf(“**end**\n”);
}
如果输入:5 3
输出:
4.2 用switch语句实现多分支选择结构
switch(表达式)
{
case 常量表达式1:语句1;break;
case 常量表达式2:语句2;break;
……
case 常量表达式n:语句n;break;
default :语句n+1;
}
注意:每个语句后的break;语句不能省,保证执行当前语句后不在执行后面的语句,如果省去break;会导致继续执行后面的语句。

程序举例:
将考试成绩的百分制转换成5分制(A:90~100分,B:80~89分…)。

#include <stdio.h>
main()
{
int score;
printf("Enter a mark:");
scanf("%d",&score);
printf("score=%d",score);
switch(score/10)
{
case 10:
case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break;
case 6:printf("D\n");break;
defalut:printf("E\n");
}
}
当输入:95
屏幕显示:
思考:
(1)如果将case 9:printf("A\n");break;中break;语句省去,当输入95时,输出结果为多少?(2)如果将defalut:printf("E\n");
4.3 选择结构的嵌套
格式一:简单嵌套
if(表达式1)
if(表达式2) 语句1;
else 语句2;
else
语句3;
说明:在使用嵌套时,要考虑if与else配对问题,从里往外嵌套,else与上一个最近的if 成对。

程序举例:
#include <stdio.h>
main()
{ int a=1,b=0;
if(!a) b++;
else if(a==0) if(a) b+=2;
else b+=3;
printf("%d\n",b);
}
输出结果:0
解析:if(!a)与else if(a==0)为一对,if(a)与else为一对,即else与上一个最近的if成对原则。

由于a=1不符合if(!a),也不符合if(a==0),所以,本题没有语句被执行,b仍为0。

格式二:多重嵌套
if(表达式1)
语句1;
else If(表达式2)
语句2;
else if(表达式3)
语句3;
……
else 语句n;
程序举例:
将考试成绩的百分制转换成5分制(A:90~100分,B:80~89分…)。

#include <stdio.h>
main()
{ int score;
printf("Enter score:");scanf("%d",&score);
printf("score=%d:",score);
if(score>=90) printf("A\n");
else if(score>=80) printf("B\n");
else if(score>=70) printf("C\n");
else if(score>=60) printf("D\n");
else printf("E\n");
}
如果输入:95
输出:
真题解析:
一、选择题
(1)有以下程序
#include <stdio.h>
main()
{ int a=1,b=0;
if(--a) b++;
else if(a==0) b+=2;
else b+=3;
p rintf(“%d\n”,b);
}
程序运行后的输出结果是()(2011年9月选择题18题)
A)0 B)1
C)2 D)3
答案:C
解析:本题主要考查多分支if语句和表达式值问题,当a=1时,执行--a后,表达式值为0,a也变为0,不执行b++;;符合第二个分支a==0,执行b+=2;,所以,b=2。

思考:如果--a 改成a--选择哪项?
(2)下列条件语句中输出结果与其他语句不同的是()(2011年9月选择题19题)A)if(a)printf(“%d\n”,x); else printf(“%d\n”,y);
B)if(a==0)printf(“%d\n”,y); else printf(“%d\n”,x);
C)if(a!=0)printf(“%d\n”,x); else printf(“%d\n”,y);
D)if(a==0)printf(“%d\n”,x); else printf(“%d\n”,y);
答案:D
解析:本题主要考查if语句使用,由于B和D项表达式都是a==0,所以,可以排除A
和C项,再假设a=0;,执行A时,输出的是y值,执行B时,a==0表达式值为1,输出的是y值,而D项输出的是x值。

(3)if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是()(2011年3月选择题17题)
A)必须是逻辑值B)必须是整数值
C)必须是正数D)可以是任意合法的数值
答案:D
解析:本题考查if表达式概念,表达式可以是逻辑值,也可以是数值等等。

如果表达式值为非0,就执行if后面语句,如果表达式值为0,就执行else后面语句。

(4)有以下程序
#include <stdio.h>
main()
{ int a=1,b=0;
if(!a) b++;
else if(a==0) if(a) b+=2;
else b+=3;
printf("%d\n",b);
}
程序运行后的输出结果是()(2010年9月选择题18题)
A)0
B)1
C)2
D)3
答案:A
解析:本题考查if语句配对问题,程序代码没有采用锯齿形式,所以,要仔细分清楚if与else配对问题,由代码看出,第一个if与下面靠的最近的else为一对;而if(a)与后面else 配对,由于a为1不符合第一个if分支,执行else,也不符合第二个if分支,所以,本程序三个语句都不执行。

(5)若有定义语句int a, b;double x;则下列选项中没有错误的是()(2010年9月选择题19题)
A)switch(x%2)B)switch((int)x/2.0)
{case 0: a++; break; {case 0: a++; break;
case 1: b++; break; case 1: b++; break;
default : a++; b++; default : a++; b++;
} }
C)switch((int)x%2)D)switch((int)(x)%2)
{case 0: a++; break; {case 0.0: a++; break;
case 1: b++; break; case 1.0: b++; break;
default : a++; b++; default : a++; b++;
} }
答案:C
解析:本题考查switch语句和%、/使用,switch后面表达式值必须为整型(short、int等等),排除B,而%前后必须是整型,x是double型,A项不符合要求,D项中case后面的值也必须为整型,只有C相符合。

要求考生区别和使用这两个运算符:%、/。

(6)以下选项中与if(a= =1) a=b;else a++;语句功能不同的switch语句是:()(2010年3月选择题18题)
A)switch(a)B)switch(a= =1)
{ case 1:a=b;break; { case 0 : a=b;break;
default : a++; case 1 : a++;
} }
C)switch(a)D)switch(a= =1)
{ default : a++;break; { case 1:a=b;break;
case 1:a=b; case 0: a++;
} }
答案:B
解析:本题考查if语句和switch语句,if和switch语句后面的表达式如果是关系表达式,则只有两种值0和1,本题当表达式值为1时执行a=b;为0时执行a++;,B选项,表达式值为1时,执行a++;为0时执行a=b;。

(7)有如下嵌套的if语句
if(a<b)
if(a<c) k=a;
else k=c;
else
if(b<c) k=b;
else k=c;
以下选项中与上述if语句等价的语句是()(2010年3月选择题19题)A)k=(a<b)?a:b;k=(b<c)?b:c;
B)k=(a<b)?((b<c)?a:b):((b<c)?b:c);
C)k=(a<b)?((a<c)?a:c):((b<c)?b:c);
D)k=(a<b)?a:b;k=(a<c)?a;c
答案:C
解析:本题考查if语句嵌套和三目运算符((表达式)?语句1:语句2),首先排除A、D(不可能将k赋两次值),当a<b时,条件为真(非0)执行if (a<c),条件为假(0)执行if(b<c),分析B项:k=(a<b)?((b<c)?a:b):((b<c)?b:c); 当a<b时,条件为真(非0)执行(b<c)与题目相反,所以,只有C项正确。

二、填空题
(1)有以下程序
#include <stdio.h>
main()
{ int x;
scanf("%d",&x);
if(x>15) printf("%d",x-5);
if(x>10) printf("%d",x);
if(x>5) printf("%d\n”,x+5);
}
若程序运行时从键盘输入12<回车>,则输出结果为________()(2011年3月填空题7题)
答案:12 17
解析:本题考查if语句,三个独立if语句构成,只要符合条件均需要执行后面的语句。

(2)以下程序运行后的输出结果是________()(2011年3月填空题10题)#include <stdio.h>
main()
{ int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d %d\n",x,y);
}
答案:
解析:本题考查if语句,如果if后面有两个以上语句,需要加花扩括号“{}”,否则,if只管第一个语句,本题由于没有加“{}”,属于if的只有t=x;语句,而后面两个语句x=y;和y=t;不管if条件为0还是非0,都要顺序执行。

本题x!=y,所以,只执行后面两个语句:x=y;和y=t;即x=y=20;y=0;,执行结果x为20,y为0,输出:20 0。

(3)有以下程序
#include <stdio.h>
main()
{ int a=1,b=2,c=3,d=0;
if (a= =1)
if (b!=2)
if(c!=3) d=1;
else d=2;
else if(c!=3) d=3;
else d=4;
else d=5;
printf("%d\n",d);
}
程序运行后的输出结果是:________()(2010年3月填空题7题)
答案:4
解析:本题考查if语句的嵌套,a=1符合if第一个条件,执行if(b!=2),而b=2,执行else if(c!=3),而c=3,执行else d=4;,printf("%d\n",d);输出的值为4。

(4)以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。

请填空。

()(2010年3月填空题13题)
#include<stdio.h>
main()
{
int x=256;
printf("%d-%d-%d\n", ________,x/10%10,x/100);
}
答案:x%10
解析:本题考查两个除法运算符,%是取余运算符,/是取商运算符(还可以用于正常除)。

相关文档
最新文档