一、概念
二、重点代码(书本)
1、输入年份,判断是否是闰年。
2、从键盘输入一元二次方程ax^2+bx+c=0的系数a、b、c,求它的根。
3、输入年份和月份,求该月天数
4、统计学生考试人数,并求出最高分,最低分和平均分
5、输入一个正整数,将它反位组成一个新的数输出(如输入12345,组成54321输出)
6、从键盘上输入两个整数,求它们的最大公约数
7、计算1!+2!+...+n!
8、从键盘上输入一个正整数,判断该数是否为素数
9、求所有水仙花数
10、输出九九乘法表
11、百钱买百鸡,100元买100只鸡,母鸡5元一只,公鸡3元一只,小鸡0.5元一只,问每一种鸡都必须要买的情况下,计算所有购买方法
12、输出100~200之间不能被3整除的数
13、输出半径为1~10的圆的面积,若面积超过100,则不输出
14、求斐波那契数列前40项,该数列的通项公式如下:
15、判断一个正整数是否是回文数。回文数是这样的数:一个正整数从左往右读和从右往左读都是一样的数(如121、123321)
16、求分数数列2/1,-3/2,5/3,-8/5,...前20项之和
17、求二元高次方程2x^3-4x^2+3x+6=0在1.5附近的跟
三、重点题目
1、逻辑运算符两侧运算对象的数据类型是()
A . 只是0或1
B . 只能是0或非0正数
C . 只能是整型或字符型数据
D . 可以是任何合法的类型数据
答案:D
解析:逻辑运算符两侧的运算对象可以是常量、变量、表达式。运算对象的值如果是非0值,表示条件为真;如果是0,表示条件为假,因此运算对象的值可以是任何数据类型。逻辑运算符两侧最终要转换成bool值运算,bool值只有非0(用1表示)和0两个值,所以只要不是0,就被转换为1,所以无论什么类型的值都可以参与运算。
2、有如下程序片段:
int k=2;
while(k=0){
printf("%d",k);
k--;
}
则下列说法正确的是( )
A. 循环执行10次
B. 循环体执行无限次
C. 循环体一次也不执行
D. 循环体执行一次
答案:C
解析:while后面括号里的是赋值表达式k=0,即表达式值为0,循环体没有被执行,应选C
3、一下程序段的循环次数是( )
for(i=2;i==0)
printf("%d",i--);
A. 无限次
B. 0次
C. 1次
D. 2次
答案:B
解析:i的初值为2,条件表达式是判断i与0是否相等,此处表达式的值为0(条件为假),跳出循环。
4、以下程序的输出结果是( )
#include<>
int main()
{
int k=0,m=0,i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
k++;
k-=j;
}
m=i+j;
printf("k=%d,m=%d",k,m);
return 0;
}
A. k=0,m=3
B. k=0,m=5
C. k=1,m=3
D. k=1,m=5
答案:B
解析:外循环执行1次,内循环执行3次,3次内循环执行完后k=3,j=3,执行k-=j;后k=0,即每次执行完内循环后k值都为0,而外循环完成后i=2,因此m=5,k=0。
5、复合语句是用一对大括号{}界定的语句块
6、一个表达式要构成一个C语句,必须用分号;表示结束
7、写出数学式 的C语言表达式:y=x<0?1:x==0?0:-1
8、C语言的语法规定:省略复合语句符号时,else语句总是与距离最近且未配对的if相结合,与书写格式无关。
9、switch语句中,如果没有表达式的值相等的标号,并且存在default标号,则从default标号开始执行,直到switch语句结束。
10、C语言的循环语句包括while、do...while、for三种。
11、至少执行一次循环体的循环语句是do...while语句。
12、continue语句的作用是结束本次循环。
13、break语句可以使程序流程跳出switch语句体,也可以中止本层循环体。
14、以下程序的运行结果是 1 。
#include<>
int main()
{
int i=5;
do
{
switch(i%2)
{
case 0 : i--; break;
case 1 : i--; continue;
}
i--;i--;
printf("%d",i);
}while(i>0);
return 0;
}
注意:do{...}while(i>0)中,如果while刚开始时i满足i>0,只要这轮里有一次i不满足i>0,就会立即停止。
15、以下程序的运行结果是3,1,-1,3,1,-1
#include<>
int main()
{
int i,j;
for(i=0;i<3;i++,i++)
{
for(j=4;j>=0;j--)
{
if((j+i)%2)
{
j--;
printf("%d,",j);
continue;
}
--i;
j--;
printf("%d,",j);
}
}
return 0;
}
解析:j+i为奇数时,执行if结构的语句序列,否则执行if语句的后续语句。i=0,j=4,i+j是4,为偶数,执行--i,j--后i=-1,j=3,输出j。j--后j=2,执行内循环,j+i是1,执行j--后j=1,输出j。执行continue语句,结束本次循环。(解析有待补充)。
16、以下程序的运行结果是 1,-2 。(稍加注意就好)
#include<>
int main()
{
int y=2,a=1;
while(y--!=-1)
do
{
a*=y;
a++;
}while(y--);
printf("%d,%d\n",a,y);
return 0;
}
17、以下程序的功能是输出1~100范围内各位数的乘积大于各位数的和的数,请填空使程序完整。
#include<>
int main ( )
{
int n,k=1,s=0,m;
for (n=1;n<=100;n++)
{
k=1;s=0;
m=n;
while (m!=0)
{
k*=m%10;
s+=m%10;
m=m/10;
}
if (k>s)
printf("%d",n);
}
return 0;
}
解析:因为n为for语句的循环控制变量,而while语句中是对m进行除10取余,因此第一空应该填m=n。while语句进行数位分离(除10取余再整除10,直到该数为0),因此第二空应该填m或m>0。第三空填m=m/10。
18、已知如下公式:
以下程序的功能是根据上述公式输出满足精度要求的eps的pai值,请填空使程序完整。
#include<>
int main()
{
double s=1.0,eps,t=1.0;
int n;
for(n=1;t>=eps;n++)
{
t=t*n/(2*n+1);
s+=t;
}
printf("%lf\n",2*s);
return 0;
}
19、以下程序段的功能是计算1000!的末尾有多少个0,请填空使程序完整。
答案:m%5==0
解析:在求阶乘中,只要有数字能被5整除,就会增加一个0,因此应填m%5==0
20、以下程序接受键盘上的输入,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输入一个空格,请填空使程序完整。
答案: cx=getchar() , cx!=front , cx
解析:从键盘上输入字符,直到回车键,并删除多余的空格字符。因此第一空应该填cx=getchar()。如果当前字符是空格,要判断前一个字符是否为空格,则第二空填cx!=front。如果前一个字符不是空格,说明没有两个连续的空格,直接输出cx。
21、(编程题)输入一个正整数,求它的所有素数因子。
解析:从最小的素数k=2开始,若能整除输入的正整数m,则用m被k整除后的商作为新的数,继续用k去除,若不能被k整除,则k加1继续前面的过程,直到k大于或等于m。程序流程图如图所示:
程序如下:
#include<>
int main()
{
int m,k=2;
printf("输入一个正整数:\n");
scanf("%d",&m);
while(k<m)
if(m%k==0)
{
printf("%4d",k);
m=m/k;
}
else
k++;
printf("%4d\n",m);
return 0;
}
22、键盘输入正整数n和a,求s=a+aa+aaa+...+aa...a(n个a)
#include<>
int main()
{
int a,n,s=0,p=0,i;
scanf("%d %d",&n,&a);
for(i=0;i<=n;i++)
{
p=p*10+a;
s=s+p;
}
printf("%d\n",s);
return 0;
}
23、用二分法求方程2X^3-4X^2+3X-6=0在区间(-10,10)内的根
#include <>
#include <>
int main()
{
float a=-10,b=10,x,f1,f2,f;
f1=(((2*a-4)*a+3)*a)-6;
f2=(((2*b-4)*b+3)*b)-6;
do
{
x=(a+b)/2;
f=(((2*x-4)*x+3)*x)-6;
if(f*f1<0)
{
b=x;
f2=f;
}
else
{
a=x;
f1=f;
}
}while(fabs(f)>=1e-6);
printf("%6.2f\n",x);
return 0;
}
24、编写一个程序,计算的近似值。
25、取出一个无符号的十进制整数中的所有奇数数字,按原来的顺序组成一个新的数。
解析:利用数位分离(除以10取余,整除10),分离出来的数字进行奇数偶数判断,若为奇数,则组成新数的某一位。由于要按原来的顺序组成新数,即先分离出来的是低位,可以不断乘以10,再加上前面组成的数实现。程序流程图如图所示。
#include <>
int main()
{
unsigned long s,t=0,p=1;
scanf("%u",&s);
while(s!=0)
{
if((s%10)%2!=0)
{
t=t+(s%10)*p;
p=p*10;
}
s=s/10;
}
printf("%u\n",t);
return 0;
}