《嵌入式C程序设计》期末复习资料.docx
《《嵌入式C程序设计》期末复习资料.docx》由会员分享,可在线阅读,更多相关《《嵌入式C程序设计》期末复习资料.docx(31页珍藏版)》请在冰点文库上搜索。
《嵌入式C程序设计》期末复习资料
《嵌入式C程序设计》复习资料
参考答案
适用班级:
计应用ZK1101、计应用ZB1101、游戏软件ZK1101、软件外包ZK1101-02
第一部分基础知识
1、用语句实现以下功能:
(1)变量iNum1与iNum2的和,赋值给iResult
iResult=iNum1+iNum2;
(2)z是x除以2所得的余数
z=x%2;
(3)z是a、b、b三个整数的平均值
z=(a+b+b)/3.0;
(4)v是长宽高分别为x、y、z的长方体的表面积
v=(x*y+y*z+x*z)*2;
(5)Num的值减1
Num--;
(6)y不大于a
y<=a;
(7)a、b、c三个数相等
a==b==c;
(8)i小于j或小于k
i(9)i和j都小于k
i(10)i和j中只有一个小于k
(i=k)||(i>=k&&j(11)i是非负数
i>=0;
(12)i是奇数
(i%2)!
=0
(13)i不能被j整除
(i%j)!
=0
(14)把变量x的值增加10
i+=10;
(15)把变量x的值减少1
i=i--;
(16)将a与b之和的两倍赋值给c
C=2*(a+b);
(17)将a与两倍的b之和赋值给c
C=a+2*b;
(18)把n除以k所得的余数赋值给m
m=n%k;
(19)用b减去a的差去除q,结果赋给p
p=(b-a)/q;
(20)用a与b的和除以c与d的乘积,结果赋给x
x=(a+b)/(c+d);
2、指出下列程序语句的错误,写出正确的程序
(1)
(2)
(3)
intmain(void)
{
x=0;
y=20;
z=x+y;
return0;
}
intmain(void)
{
intiNum1=20;
intiNum2=70;
iNum3=iNum1+iNum2;
return0;
}
intmain(void)
{
inta=20;
intb=70;
unsignedintc=a-b;
return0;
}
(1)
(2)
(3)
intmain(void)
{
intx,y,z;
x=0;
y=20;
z=x+y;
return0;
}
intmain(void)
{
intiNum1=20,iNum3;
intiNum2=70;
iNum3=iNum1+iNum2;
return0;
}
intmain(void)
{
inta=20;
intb=70;
unsignedintc=a-b;
return0;
}
3、选择
(1)已有语句“intix=5,iy;”,不能给iy赋值为2的语句是(B)
A)iy=ix/2;B)iy=iy+2;
C)iy=7%ix;D)iy=5,iy=2;
(2)已有语句“intix=13,iy=6,iz”,执行语句“iz=ix/iy+0.4;”后,iz的值是(A)
A)2.4B)2C)2.0D)2.9
(3)表达式“(int)1.6*2+7/3–4%3”的值是(B)
A)2B)3C)4D)5
(4)已有语句“intiTemp=11;”,则表达式(iTemp++*1/3)的值是(A)
A)3B)4C)11D)12
(5)参与运算的必须是整数的运算符是(A)
A)%B)/C)-D)*
(6)以下选项中,与nResult=nCount++完全等价的表达式是(A)
A)nResult=nCount,nCount=nCount+1
B)nCount=nCount+1,nResult=nCount
C)nResult=++nCount
D)nResult=nResult+(nCount+1)
第二部分顺序结构程序设计
(1)编程,输入一个小写字母,输出其对应的大写字母
#include“stdio.h”
main()
{
charc;
c=getchar()
c=c-32;
printf(“%c”,c);
}
(2)编程,输入一个三位数,把三个数字逆序组成一个新数,再输出。
例如输入369,则输出963。
#include"stdio.h"
main()
{
inta,x,y,z,m;
scanf("%d",&a);
x=a/100;
y=a/10;
z=a%10;
m=z*100+y*10+x;
printf("theendis%d\n",m);
}
(3)某大学内,学生的学号(8位)由学生的公寓号(1位)、楼层号(2位)、寝室号(3位)和床铺号(2位)组合而成。
例如:
某学生住9栋5层104寝室01号床铺,则该生学号为90510401。
再如:
某学生住6栋13层211寝室11号床铺,则该生学号为61321111。
编程,输入学生的公寓号、楼层号、寝室号和床铺号,借助pow函数计算出学号并输出结果。
#include"stdio.h"
#include"math.h"
main()
{
intgynum,lounum,qsnum,chuangnum;
longintxh;
printf("输入公寓号:
");
scanf("%d",&gynum);
printf("输入楼幢号:
");
scanf("%d",&lounum);
printf("输入寝室号:
");
scanf("%d",&qsnum);
printf("输入床位号:
");
scanf("%d",&chuangnum);
xh=gynum*pow(10,7)+lounum*pow(10,5)+qsnum*pow(10,2)+chuangnum*pow(10,0);
printf("%ld\n",xh);
}
第三部分分支结构程序设计
(1)任意输入一个大写字母,若输入的A,则显示Z,若输入B,则显示A,若输入C,则显示B,……,若输入Z,则显示Y。
若输入的不是大写字母,则提示“无效输入”
#include"stdio.h"
intmain()
{
charc;
printf("请输入一个大写字母:
\n");
c=getchar();
if(c>='A'&&c<='z')
if(c=='A')
printf("c=z\n");
else
{
c=c-1;
printf("c=%c\n",c);
}
else
{
printf("无效输入!
\n");
return0;
}
}
(2)从键盘上输入字符,若输入M,则显示“GoodMorning!
”;输入H,显示“Hello!
”;输入N,显示“GoodNight!
”;其他输入无效并提示重新输入。
#include"stdio.h"
intmain()
{
charc;
while
(1)
{
scanf("%c",&c);
if(c=='M')
{
printf("GoodMorning!
\n");
break;
}elseif(c=='H')
{
printf("Hello!
\n");
break;
}elseif(c=='N')
{
printf("GoodNight!
\n");
break;
}
else
{
printf("输入无效,请重新输入!
:
\n");
scanf("%c",&c);
}
}
}
(3)用switch语句编程,输入五分制成绩,输出对应的成绩等级A、B、C、D。
5分为A,4分为B,3分为C,3分以下为D。
#include"stdio.h"
intmain()
{
intscore;
scanf("%d",&score);
switch(score)
{
case5:
printf("A\n");break;
case4:
printf("B\n");break;
case3:
printf("C\n");break;
default:
printf("D\n");break;
}
}
(4)有4个边长2米的方塔,地面的中心分别在(3,3)、(-3,3)、(3,-3)、(-3,-3)。
4个塔的高度分别为10米、11米、12米、13米,塔外无建筑物。
用if–elseif语句编程,输入地面上任意点坐标x和y,显示该点的建筑物高度。
#include"stdio.h"
intmain()
{
intxpoint,ypoint,high;
printf("请输入塔的坐标x:
\n");
scanf("%d",&xpoint);
printf("请输入塔的坐标y:
\n");
scanf("%d",&ypoint);
//(3,3)、(-3,3)、(3,-3)、(-3,-3)
if(xpoint==3&&ypoint==3)
high=10;
elseif(xpoint==-3&&ypoint==3)
high=11;
elseif(xpoint==3&&ypoint==-3)
high=12;
elseif(xpoint==-3&&ypoint==-3)
high=13;
else
{
printf("输入坐标出错:
\n");
return0;
}
printf("塔高为:
%d\n",high);
}
第四部分循环结构程序设计
1、编程,任意输入两个不相等的整数,从较小的数累加到较大的数,输出累加和。
#include"stdio.h"
intmain()
{
intx,y,sum=0;
printf("输入两个数,一个是较小的数,一个是较大的数:
\n");
scanf("%d%d",&x,&y);
while(x<=y)
{
sum=sum+x;
x=x+1;
}
printf("从小较的数累加到较大的数的结果是:
%d\n",sum);
}
2、编程实现30秒倒计时,倒计时结束显示“TimeOut!
”。
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"
main()
{
inti;
for(i=30;i>=0;i--)
{
printf("到计时开始:
%d",i);
Sleep(1000);
system("cls");
}
if(i<0)
{
printf("\ntimeerror!
");
}
}
3、编程,输出显示下面图案,每次只能输出单个星号或单个空格,即输出语句只能用printf("*")、printf("")或printf("\n")。
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(1)
#include"stdio.h"
intmain()
{
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("*");
printf("\n");
}
}
(2)
#include"stdio.h"
intmain()
{
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<=i;j++)
printf("*");
printf("\n");
}
}
(3)
#include"stdio.h"
intmain()
{
inti,j;
for(i=0;i<5;i++)
{for(j=5;j>i;j--)
printf("*");
printf("\n");
}
}
(4)
#include"stdio.h"
intmain()
{
inti,j;
for(i=1;i<=7;i++)
{
if(i<5)
{
for(j=0;j
printf("*");
printf("\n");
}
else
{
for(j=0;j<=7-i;j++)
printf("*");
printf("\n");
}
}
}
(5)
#include"stdio.h"
intmain()
{
inti,j;
for(i=0;i<5;i++)
{
for(j=0;j
printf("");
printf("*\n");
}
}
(6)
#include"stdio.h"
intmain()
{
inti,j;
for(i=0;i<5;i++)
{
for(j=5;j>i;j--)
printf("");
printf("*\n");
}
}
(7)
#include"stdio.h"
intmain()
{
inti,j;
for(i=0;i<5;i++)
{
for(j=0;j
printf("");
for(j=9;j>=2*i+1;j--)//输出*号
printf("*");
printf("\n");
}
}
(8)
#include"stdio.h"
intmain()
{
inti,j,k;
for(i=0;i<7;i++)
{
if(i<4)
{
for(j=0;j
printf("");
printf("*");
for(k=0;k<3-i;k++)
printf("");
printf("*");
for(k=0;k<3-i;k++)
printf("");
printf("*");
printf("\n");
}
else
{
for(j=0;j<6-i;j++)
printf("");
printf("*");
for(k=3;k>6-i;k--)
printf("");
printf("*");
for(k=3;k>6-i;k--)
printf("");
printf("*");
printf("\n");
}
}
}
第五部分数组
1、编程,分别输出显示以下数列的前30个数。
(非必须采用数组)
(1)99、98、97、96、95、94、……
#include"stdio.h"
main()
{
intk=1,i;
for(i=99;i>69;i--)
{
printf("%3d",i);
if(k++%10==0)printf("\n");
}
printf("\n");
}
(2)0、2、4、6、8、10、12、……
#include"stdio.h"
main()
{
intk=1,i,x=0;
for(i=0;i<30;i++)
{
printf("%3d",x);
x+=2;
if(k++%10==0)printf("\n");
}
printf("\n");
}
(3)1、4、7、10、13、16、19、……
#include"stdio.h"
main()
{
intk=1,i,x=1;
for(i=0;i<30;i++)
{
printf("%3d",x);
x+=3;
if(k++%10==0)printf("\n");
}
printf("\n");
}
(4)1、1、2、2、3、3、4、4、……
#include"stdio.h"
main()
{
intk=1,i,x=1;
for(i=0;i<15;i++)
{
printf("%3d%3d",x,x);
x+=1;
if(k++%5==0)printf("\n");
}
printf("\n");
}
(5)5、3、2、1、1、0、1、-1、2、……
#include"stdio.h"
main()
{
inta[30]={5,3},i,k=1;
for(i=2;i<30;i++)
a[i]=a[i-2]-a[i-1];
for(i=0;i<30;i++)
{
printf("%6d",a[i]);
if(k++%10==0)
printf("\n");
}
printf("\n");
}
2、输入10个数(范围:
0-100),逆序输出这10个数。
#include"stdio.h"
main()
{
inta[10],i;
printf("输入10个数:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("逆序输出这10个数:
\n");
for(i=9;i>=0;i--)
printf("%4d",a[i]);
printf("\n");
}
3、输入10个整数(范围:
0-100),输出其中最大值。
#include"stdio.h"
main()
{
inta[10],i,j,max;
printf("输入10个数:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(j=1;j<10;j++)
if(maxmax=a[j];
printf("这十个数中最大数为:
%d\n",max);
}
4、输入10个整数(数字可重复),统计显示其中有多少个正数,多少个负数,多少个零。
#include"stdio.h"
main()
{
inta[10],i,znum=0,fnum=0,zero=0;
printf("输入10个数:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
if(a[i]>0)
znum++;
elseif(a[i]<0)
fnum++;
else
zero++;
}
printf("正整数个数为:
%d,负整数个数为:
%d,0的个数为:
%d\n",znum,fnum,zero);
}
5、输出如下数阵或字符阵。
(1)
(2)
0
0
0
0
0
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
4
4
4
4
4
5
5
5
5
5
6
6
6
6
6
7
7
7
7
7
0
1
2
3
4
10
11
12
13
14
20
21
22
23
24
30
31
32
33
34
40
41
42
43
44
50
51
52
53
54
60
61
62
63
64
70
71
72
73
74
(3)
(4)
0
0
0
0
0
0
0
1
2
3
4
5
0
2
4
6
8
10
0
3
6
9
12
15
0
4
8
12
16
20
0
5
10
15
20
25
(1)
#include"stdio.h"
voidmain()
{
inta[8][5]={0},i,j;
for(i=0;i<8;i++)//输入
for(j=0;j<5;j++)
a[i][j]=i;
for(i=0;i<8;i++)//输出
{
for(j=0;j<5;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
(2)
#include"stdio.h"
voidmain()
{
inta[8][5]={0},i,j;
for(i=0;i<8;i++)//输入
for(j=0;j<5;j++)
a[i][j]=10*i+j;
for(i=0;i<8;i++)//输出
{
for(j=0;j<5;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
(3)
#include"stdio.h"
voidmain()
{
inta[6][6]={0},i,j;
for(i=0;i<6;i++)//输入
for(j=0;j<6;j++)
a[i][j]=i*j;
for(i=0;i<6;i++)//输出
{
for(j=0;j<6;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
(4)
#include"stdio.h"
voidmain()
{
chara[20][20],i,j;
for(i=0;i<20;i++)//输入
{for(j=0;j<20;j++)
{
a[i][0]='*';
a[0][j]='*';
if(i==j)
a[i][j]='*';
elseif(i+j==19)
a[i][j]='*';
else
a[i][j]='';
a[19][j]='*';
}
a[i][19]='*';
}
for(i=0;i<20;i++)//输出
{
for(j=