计算机2级Word格式文档下载.docx
《计算机2级Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机2级Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
//分解出万位数
qian=x%10000/1000;
//分解出千位数
shi=x%100/10;
//分解出十位数
ge=x%10;
//分解出个位数
if(ge==wan&
shi==qian)/*个位等于万位并且十位等于千位*/
printf("
\n这个数是回文数\n"
else
\n这个数不是回文数\n"
}
综合题:
输入一学生的学号(8位数字)、生日(年-月-日)、性别(M:
男,F:
女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。
voidmain()
longintno;
//学号
intyear,month,day;
//生日(年、月、日)
charsex;
//性别
floatchinese,math,english;
//语文、数学、英语成绩
floattotal,average;
//总分、平均分
printf("
inputthestudent'
sNO:
scanf("
%8ld"
&
no);
sBirthday(yyyy-mm-dd):
%4d-%2d-%2d"
year,&
month,&
day);
fflush(stdin);
//清除键盘缓冲区
sSex(M/F):
sex);
printf("
sScores(chinese,math,english):
%f,%f,%f"
chinese,&
math,&
english);
total=chinese+math+english;
//计算总分
average=total/3;
//计算平均分
\n===NO=======birthday==sex==chinese==math==
english==total==average\n"
%08ld%4d-%02d-%02d%c%-5.1f%-5.1f
%-5.1f%-5.1f%-5.1f\n"
no,year,month,day,sex,
chinese,math,english,total,average);
下一题
例4要求判别键盘输入字符的类别。
可以根据输入字符的ASCII码来判别类型。
ASCII码值小于32的为控制字符。
在0~9之间的为数字,在A~Z之间为大写字母,在a~z之间为小写字母,其余则为其它字符。
charc;
\n请输入一个字符:
c=getchar();
if(c<
32)
\n该字符是一个控制字符。
\n"
elseif(c>
0'
c<
9'
)
\n该字符是一个数字。
\n该字符是一个大写字母。
a'
z'
\n该字符是一个小写字母。
\n该字符是其他字符。
当a的值是1、2、3时,将b的值加2,当a的值是4、5、6时,将b的值减2。
inta,b=4;
%d"
switch(a)
{
case1:
case2:
case3:
b+=2;
break;
case4:
case5:
case6:
b-=2;
default:
b*=2;
}
b=%d\n"
b);
【例1】用while语句求1~100的累计和。
inti=1,sum=0;
while(i<
=100)
{
sum+=i;
i++;
sum=%d\n"
sum);
【习题1】用下列公式计算π的值。
π/4=1-1/3+1/5-1/7+…+(-1)n1/n(精度为|1/n|<
10-6)
分析:
每项由一个分数组成,其中分子为1,分母逐次递增2。
且相邻项的正负号刚好相反。
math.h>
voidmain()
floatpi=0,fenzi=1,fenmu=1,temp=1;
while(fabs(temp)>
=1e-6)
pi=pi+temp;
fenzi=(-1)*fenzi;
fenmu=fenmu+2;
temp=fenzi/fenmu;
piis%f\n"
pi*4);
【习题2】猴子吃桃问题:
第一天吃了总数的一半再加一个;
第二天又吃了剩下的一半又加一个;
以后每天都吃剩下的一半再加一个,直到第10天只剩下1个桃子,问一共有多少桃子?
#include<
{intday,x1,x2;
day=9;
x2=1;
while(day>
=1)
x1=2*(x2+1);
x2=x1;
day--;
total=%d\n"
x1);
计算结果:
total=1534
【例2】猜数游戏。
要求猜一个介于1~10之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。
intnumber=5,guess;
printf(“guessanumbetween1and10:
do
printf(“Inputyouguess:
guess);
if(guess>
number)
printf(“toolarge\n"
elseif(guess<
printf(“toosmall\n"
}while(guess!
=number);
printf(“Bingo!
Answeris%d\n"
number);
【例2】从键盘输入10个数,从中找出最小数并输出。
inta,min,i;
inputthefirstnumber:
min=a;
inputthenextninenumbers:
for(i=1;
i<
10;
i++)
if(a<
min)min=a;
min=%d\n"
min);
【习题3】一个球从100米高处落下,每次落地后弹回原来高度的一半,再落下。
求它在第10次落地时,共经过了多少距离,第10次反弹的高度是多少?
floatsn=100,hn=sn/2;
intn;
for(n=2;
n<
=10;
n++)
{sn=sn+2*hn;
hn=hn/2;
printf(“afterthe10th,thedistanceis%fm\n"
sn);
printf(“afterthe10th,thehighis%fm\n"
hn);
【例】将用户输入的小写字母转换成大写字母,直到输入非小写字母字符。
charc,ch;
while
(1)
c=getchar();
//读取一个字符
if(c>
=‘a’&
c<
=‘z’)//是小写字母
{ch=c-32;
putchar(ch);
}//输出其大写字母
else//不是小写字母
//循环退出
【例】求输入的十个整数中正数的个数及其平均值。
inti,a,num=0;
floatsum=0;
for(i=0;
10;
//输入一整数
if(a<
=0)continue;
//如果为负,则输入下一个整数
num++;
//正数个数增1
sum+=a;
//正数和累加
printf(“%d个正整数的和为:
%.0f\n"
num,sum);
printf(“平均值为:
%.2f\n"
sum/num);
【例1】:
将一张面值为100元的人民币等值换成5元、1元和5角的零钞,要求每种零钞不少于1张,有哪几种组合?
stdlib.h>
inti,j,k,count=0;
//i,j,k分别表示5元,1元和5角的张数
for(i=1;
i<
=20;
i++)
for(j=1;
j<
=100;
j++)//1元的最多为100张
for(k=1;
k<
=200;
k++)//5角的最多为200张
if(i*5+j*1+k*0.5==100)
count++;
%3d%3d%3d\n"
i,j,k);
if(count%5==0)
system("
pause"
【例1】循环嵌套,输出九九乘法表
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
inti,j;
=i;
j++)
printf(“%2d*%2d=%2d”,i,j,i*j);
if(i==j)printf(“\n”);
例2】用“*”打印一个直角三角形图案。
图案如下所示:
*
**
***
****
*****
******
*******
********
*********
**********
inti,j;
*"
if(i==j)printf("
【例1】输入一行字符,统计其中各个大写字母出现的次数。
voidmain()
{charch;
intnum[26]={0},i;
while
(1)//输入字符串,判断统计
ch=getchar();
if(ch!
\n'
{
if(ch>
='
ch<
)//是否为大写字母
num[ch-65]++;
}
else
break;
26;
i++)//输出结果
if(i%9==0)
%c(%d)"
65+i,num[i]);
冒泡法
#defineNUM10
voidmain()
inta[NUM],i,j,t,flag;
input%dnumbers:
\n"
NUM);
NUM;
i++)//输入NUM个整数
a[i]);
i++)//轮次,共NUM-1次
flag=0;
for(j=0;
j<
NUM-i;
j++)//实现一次冒泡操作
if(a[j]>
a[j+1])//交换a[j]和a[j+1]
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=1;
if(flag==0)break;
thesortednumbers:
//输出排好序的数据
%d"
a[i]);
选择排序法
inta[10],i,j,k,x;
Input10numbers:
i<
=9;
k=i-1;
for(j=i;
j++)
if(a[j]<
a[k])k=j;
if((i-1)!
=k)
{x=a[i-1];
a[i-1]=a[k];
a[k]=x;
Thesortednumbers:
1.输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
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之间。
intscore;
chargrade;
printf("
\npleaseinputstudentscore:
scanf("
score);
if(score>
100||score<
0)
\ninputerror!
else
=90)
grade='
;
=80)
B'
=70)
C'
=60)
D'
E'
\nthestudentgrade:
grade);
输入测试数据,调试程序。
测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。
2.有一函数:
x(x<
1)
2x-1(1=<
x<
10)
3x-11(x>
=10)
用scanf函数输入x的值(分别为x<
1,1~10,>
=10三种情况),求相应的y值。
y是一个分段表达式。
要根据x的不同区间来计算y的值。
所以应使用If语句。
intx,y;
printf(“pleaseinputx:
”);
scanf(“%d”,&
if(x<
y=x;
printf(“y=%d\n”,y);
elseif(x<
y=2*x-1;
y=3*x-11;
1.打印下列图案
inti,j;
for(i=1;
=4;
for(j=1;
=4-i;
printf(“”);
=2*i-1;
printf(“*”);
printf(“\n”);
2.判断m是否是素数。
intm,i,k;
m);
k=sqrt(m+1);
for(i=2;
=k;
if(m%i==0)
break;
if(i>
=k+1)
printf(“%disaprimenumber\n”,m);
else
printf(“%disnotaprimenumber\n”,m);
1.输入两个正整数m和n,求其最大公约数和最小公倍数。
(根据定义来做)
intm,n,i,t;
inputm&
n:
%d%d"
m,&
n);
if(m>
n)
t=m;
m=n;
n=t;
for(i=m;
i>
=1;
i--)
if(n%i==0&
m%i==0)break;
最大公约数为%d\n"
i);
for(i=n;
=m*n;
i=i+n)
if(i%m==0)break;
最小公倍数为%d\n"
2.
3.}打印下列图案。
intn,i,j;
inputn:
=(n+1)/2;
for(j=1;
printf("
for(i=(n-1)/2;
4.编一个程序,按以下格式输出乘法九九表:
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
……
1*9=92*9=183*9=27……9*9=81
%2d*%2d=%2d"
j,i,i*j);
5.用for循环结构编程序输出以下图形:
intn,i,j,shang,xia;
shang=(n+1)/2;
xia=(n-1)/2;
=shang;
=shang-i;
for(i=xia;
1.有一个已排好序的数组{1,4,6,9,13,16,19,28,40,100},现输入一个数,要求按原来排序的规律将它插入数组中。
#include