国家二级C语言上机试题Word文件下载.docx
《国家二级C语言上机试题Word文件下载.docx》由会员分享,可在线阅读,更多相关《国家二级C语言上机试题Word文件下载.docx(53页珍藏版)》请在冰豆网上搜索。
(4)运行结束后,可以回到“文件”菜单,点击“关闭工作区“选项,
关闭当前文件窗口。
若要编辑新的源程序,可以再次打开“文件”菜单,重新建立文件,步
骤如上所述。
【一般示例】
【例1】编程实现在屏幕上显示如下三行文字
Hello,world!
WolcometotheClanguageworld!
Everyonehasbeenwaitingfor.
程序example.c如下:
main()
{printf("
Hello,World!
\n"
);
printf("
Everyonehasbeenwaitingfor.\n"
}
【例2】输入并运行程序,写出运行结果。
{
inta,b,sum;
a=123;
b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
运行方法同上,最后结果为:
sumis579。
【例3】
输入并运行程序,写出运行结果。
inta,b,c;
scanf(“%d,%d”,&
a,&
b);
c=max(a,b);
printf(“max=%d”,c);
intmax(intx,inty)
intz;
if(x>
y)z=x;
elsez=y;
return(z);
这个程序的功能是对于任意输入的两个整数,输出较大的那个数。
所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出“max=5”。
【作业】
1.参照例题,编写一个C程序,输出以下信息:
****************************
Hello,World!
#include<
stdio.h>
Hello,world!
****************************\n
Hello,World!
\n****************************\n"
2.编写一个C程序,输入a、b、c三个数,输出其中最大者。
试想,如果求四个数中的最大者,则程序该如何编写。
inta,b,c,d;
scanf("
%e,%e,%e"
&
b,&
c);
d=max(a,b);
d=max(b,c);
max=%e"
d);
intmax(intx,inty,intz)
intm;
if(x>
y,x>
z)m=x;
elsem=y;
return(m);
实验二C语言的基础知识
1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。
2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
【一般示例】
【例1】输入并运行下程序,写出运行结果。
mian()
charc1,c2;
c1=97;
c2=98;
printf(“%c%c”,c1,c2);
在此基础上
1)加一个printf语句,并运行之。
printf(“%d,%d”,c1,c2);
2)再将第二行改为:
intc1,c2;
再使之运行。
3)再将第三行改为:
c1=300;
c2=400;
再使之运行,分析其运行结果。
4)再将第3行改为:
c1=a;
c2=b;
再使之运行,(你会发现程序有错误,a,b都没有加单引号,就应该是变量)
5)再将第3行改为:
c1=“a”;
c2=“b”;
再使之运行,(你会发现程序有错误)
在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。
【例2】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
{
charc1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
在该程序中,主要考查对转义字符的掌握情况。
分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
分别作以下改动之后,先分析再运行:
1)将第四行改为:
m=i++;
n=++j;
2)程序改为:
inti,j;
printf(“%d,%d”,i++,j++);
3)在2)的基础上,将printf语句改为:
printf(“%d,%d”,++i,++j);
4)再将printf语句改为:
printf(“%d,%d,%d,%d”,i,j,i++,j++);
5)程序改为:
inti,j,m=0,n=0;
m+=i++;
n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);
此程序主要考查自加、自减运算符以及复合运算符的用法。
1.要将“China”译成密码,密码规律是:
用原来的字母后面第5个字母代替原来的字母。
例如,字母“A”后面第5个是“F”,用“F”代替“A”。
因此,“China”应译为“Hmnsf”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使其分别变为’H’、’m’、’n’、’s’、’f’,并输出。
voidmain()
{charc1,c2,c3,c4,c5;
c1='
C'
;
c2='
h'
c3='
i'
c4='
n'
c5='
a'
c1=c1+5;
c2+=5;
c3+=5;
c4+=5;
c5+=5;
printf("
%c%c%c%c%c"
c1,c2,c3,c4,c5);
2.求下面算术表达式的值。
(1)x+a%3*(x+y)%2/4
设x=2.5,a=7,y=4.7
1》验证程序,要验证表达式的值,x,y,a只能定义为整型变量,或者用强制类型转换。
{intx,y,z,a;
x=2.5;
a=7;
y=4.7;
z=x+a%3*(x+y)%2/4;
%d"
z);
(2)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
2》#include<
{floatx,y,z;
inta,b;
a=2;
b=3;
x=3.5;
y=2.5;
z=(float)(a+b)/2+(int)x%(int)y;
%f"
总结:
一个实数赋值给一个整型变量将自动执行强制类型转换。
重点掌握%和/的知识点。
先自己分析,再试着用程序求解,看得到的结果是否一致。
3.写出下面表达式运算后a的值,设原来a=10。
设a和n已定义成整型变量。
(1)a+=a
(2)a-=2
(3)a*=2+3(4)a/=a+a
(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a
先自
(1)a+=a
a的值为20
(2)a-=2
a的值为8
(3)a*=2+3
a的值为50
(4)a/=a+aa的值为0
(5)a%=(n%=2),n的值等于5
a的值为0
(6)a+=a-=a*=a
a的值为0
己分析,再试着用程序求解,看得到的结果是否一致。
实验三简单的C程序设计
1.理解C语言程序的顺序结构
2.掌握常用的C语言语句,熟练应用赋值、输入、输出语句。
【一般实例】
【例1】按格式要求输入/输出数据
#include"
stdio.h"
inta,b;
floatx,y;
charc1,c2;
scanf(“a=%d,b=%d”,&
scanf(“%f,%e”,&
x,&
y);
scanf(“%c%c”,&
c1,&
c2);
printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n”,a,b,x,y,c1,c2);
1》运行该程序,按如下方式在键盘上输入数据
a=3,b=7↙
8.5,71.82↙
aA↙
请同学们仔细看哈输出结果
2》运行该程序,按如下方式在键盘上输入数据
8.5,71.82aA↙
仔细比较这两次输出的结果有什么不一样?
【例2】输入一个正整数x(100~999),取出x的个位十位百位。
任何一个整数除以10取余都得到这个数的个位,任何一个整数除以10取整都舍去个位。
如:
12%10=2,12/10=1。
{inta,gw,sw,bw;
inputa:
"
a);
gw=a%10;
sw=a/10%10;
bw=a/100;
gw=%d,sw=%d,bw=%d"
gw,sw,bw);
请同学们思考:
设x为整数x=5689,x%100=?
,x/100=?
【例3】输入一个数字字符,将它转换为数字输出。
inta;
charc;
inputc:
%c"
//以字符的形式输入数字就是输入数字字符
a=c-'
0'
//将数字字符转换为数字或者a=c-48;
a=%d"
a);
数字和数字字符这是两个不同的概念,如:
数字0和数字字符‘0’是不同的,因为他们的ASIIC码值不一样。
1、
输入一个四位正整数,求出这个数的各位之和并输出这个数的各位与各位之和。
inta,h,gw,sw,bw,qw;
bw=a/100%10;
qw=a/1000;
h=gw+sw+bw+qw;
gw=%d,sw=%d,bw=%d,qw=%d,h=%d"
gw,sw,bw,qw,h);
2、
输入一个整数(0-9之间),把这个整数转换为它对应的数字字符输出。
{
c=a+'
//将数字转换为数字字符
c=%c"
c);
实验四选择结构程序设计
1.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);
2.学会正确使用逻辑运算符和逻辑表达式;
3.熟练掌握if语句和switch语句。
【例1】已知三个数a,b,c,找出最大值放于max中。
分析:
由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。
第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else形式。
第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。
Max即为a,b,c中的最大值。
#include"
inta,b,c,max;
/*定义四个整型变量*/
scanf(“a=%d,b=%d,c=%d”,&
if(a>
=b)
max=a;
/*a>
=b*/
else
max=b;
/*a<
b*/
if(c>
max)
max=c;
/*c是最大值*/
max=%d"
max);
若输入下列数据,分析程序的执行顺序并写出运行结果
(1)a=1,b=2,c=3
(2)a=2,b=1,c=3
(3)a=3,b=2,c=1
(4)a=3,b=1,c=2
(5)a=3,b=3,c=2
(6)a=2,b=1,c=2
【例2】输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90):
A
80至90分(包括80):
B
70至80分(包括70):
C
60至70分(包括60):
D
60分以下:
E
方法一:
(用if嵌套`)
由题意知如果某学生成绩在90分以上,等级为A;
否则,如果成绩大于80分,等级为B;
否则,如果成绩大于70分,等级为C;
否则,如果成绩大于60分为D;
否则,如果成绩小于60分,等级为E;
但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。
因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。
#include"
floatscore;
chargrade;
\npleaseinputastudentscore:
score);
if(score>
100||score<
0)
\ninputerror!
else
{if(score>
=90)
grade='
A'
else
=80)
B'
{if(score>
=70)
=60)
D'
elsegrade='
E'
}
\nthestudentgrade:
grade);
}
输入测试数据,调试程序。
测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。
方法二:
用switch语句
switch语句是用于处理多分支的语句。
注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。
所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。
则由此可得把score除十取整,化为相应的常数。
floatg;
ints;
charch;
\ninputastudentgrade:
g);
s=(int)g/10;
//对成绩数据取整操作
if(s<
0||s>
10)
{switch(s)
{case10:
case9:
ch='
break;
case8:
case7:
case6:
default:
\nthestudentscort:
ch);
输入测试数据。
【例3】有一函数:
xx<
1
y=2x-11<
=x<
10
3x-1x>
=10
用scanf函数输入x的值(分别为x<
1,1<
10,x>
=10三种情况),求y值。
y是一个分段表达式。
要根据x的不同区间来计算y的值。
所以应使用If语句。
intx,y;
printf(“pleaseinputx:
”);
scanf(“%d”,&
x);
if(x<
1)
y=x;
printf(“y=%d\n”,y);
elseif(x<
{
y=2*x-1;
y=3*x-11;
1.c语言如何表示“真”与“假”?
系统如何判断一个量的“真”与“假”?
在c语言中一切非0的值都代表“真”,用数字0代表“假”;
用if分支语句来判断一个量的“真”或“假”。
if(a)这就表示判断a的值是“真”还是“假”。
2.写出下面各逻辑表达式的值。
设a=3,b=4,c=5(在计算的时候要考虑运算符的优先级问题)
(1)a+b>
c&
&
b==c0
(2)a||b+c&
b-c1
(3)!
(a>
b)&
!
c||11
(4)!
(x=a)&
(y=b)&
00
(5)!
(a+b)+c-1&
b+c/21
3.有3个整数a、b、c,由键盘输入,输出其中最小的数。
inta,b,c,min;
a=%d,b=%d,c=%d"
min=b;
min=a;
if(c<
min)
min=c;
min=%d"
min);
4.给一个不多于5位的正整数,要求:
a.求出它是几位数;
b.分别打出每一位数字;
c.按逆序打出各位数字,例如原数为321,应输出123。
inta,gw,sw,bw,qw,ww;
if(a>
=10000)
{gw=a%10;
sw=a/10%10;
bw=a/100%10;
qw=a/1000%10;
ww=a/10000;
\n该数是%d位数"
5);
\n个位=%d十位=%d百位=%d千位=%d万位=%d"
gw,sw,bw,qw,ww);
\n逆序输出为:
%d%d%d%d%d"
elseif(a>
=1000)
{gw=a%10;
4);
\n个位=%d十位=%d百位=%d千位=%d"
gw,sw,bw,qw);
%d%d%d%d"
=100)
3);
\n个位=%d十位=%d百位=%d
"
%d%d%d"
=10)
{
gw=a%