m=a[i];
if(n>a[i])
n=a[i];
}
printf(最高成绩为%d分,最低成绩为%d分。
\n”,m,n);
}
8.输出100以内所有能够同时被5和7整除的整数。
#include
voidmain()
{
intt=1,i;
for(i=1;iv=100;i++)
{
if((i%5==0)&&(i%7==0))printf(%d”,i);
}
printf(\n”);
}
9.求100~200间的全部素数(质数)。
#include
voidmain()
{
inti,j,n;
for(i=100;iv200;i++)
{
for(j=1,n=O;jv=i;j++)
if(i%j==0)
n=n+1;
if(n==2)
printf(%d”,i);
}
printf(\n”);
}
10.输入一行字符,分别统计其中英文字母、数字和其它字符的个数。
#include
voidmain()
{
charc;
intl=0,s=0,o=0;
printf(请输入一行字符!
\n”);
while((c=getchar())!
='n'
{
if((c>='A')&&(cv='')||(c>='a')&&(cv='')
l++;
elseif((c>='0')&&(cv=‘9')
s++;
else
o++;
}
printf(字母个数为%d,数字个数为%d,其它字符为%d。
\n”,l,s,o);
}
11.有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,…,编写程序求这个数列的前20项之
和。
#includevstdio.h>
voidmain()
{
inta=2,b=1,c,i;
floats;
s=1.0*a/b;
for(i=2;iv=20;i++)
{
c=b;
b=a;
a=a+c;
s=s+1.0*a/b;
}
printf(这个数列的前20项之和为%f。
\n”s);
}
12.编写程序,计算1!
+2!
+3!
+•……+n!
的值,其中n的值由用户输入。
#include
voidmain()
{
intn,s=1,m=0,i,j;
printf(请输入n的值!
\n”;scanf(%d”&n);
for(i=1;iv=n;i++)
{
for(j=1;jv=i;j++)
s=s*j;
m=m+s;
s=1;
}
printf(值为%d。
\n”m);
}
13•请编写一程序,将所有“水仙花数”打印出来,并打印出其总数。
“水仙花数”是一个
其各位数的立方和等于该整数的三位数。
#include
voidmain()
{
inta,b,c,m=0,i;
for(i=100;ivl000;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
printf(%d”,i);
m=m+1;
}
}
printf(“n”);printf(一共有%d个数符合!
\n",m);
}
14.输出如下图形。
*
***
*****
#include
voidmain()
{
inti,j;
for(i=1;iv=4;i++)
{
for(j=1;jv=(4-i);j++)
printf(
for(j=1;jv=(2*i-1);j++)
printf(*”);
printf(\n”);}
}
15.请编写一程序,打印出九九乘法口诀表(例:
1*1=1)。
#include
voidmain()
{
inti,j;
for(i=1;iv=9;i++)
{
for(j=1;jv=i;j++)
printf(%dx%d=%2d”,j,i,i*j);
printf(\n”);
}
}
16.用起泡法(冒泡法)对八个数由大到小排序(从小到大)
#includevstdio.h>
voidmain()
{
inta[8],i,j,t;
for(i=0;iv=7;i++)
{
printf(请输入a[%d]的值”,i);
scanf(%d”&a[i]);
}
for(i=0;iv=7;i++)for(j=0;jv=(7-i);j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
for(i=0;iv=7;i++)
printf(%d”a[i]);
printf(\n”;
}
17.将一个n*m二维数组的行和列元素互换,存到另一个m*n的二维数组中,并输出其结
果。
#include
voidmain()
{
inta[20][20]={0},b[20][20]={0},i,j,m,n;
printf(请输入m、n的值!
\n”;
scanf(%d,%d”&m,&n);
for(i=0;i{
printf(请输入a[%d][%d]的值”,i,j);
scanf(%d”&a[i][j]);
}
for(i=0;ifor(i=0;i{
for(j=0;jprintf(%d”,b[i][j]);
printf(\n”;
}
}
18.编程完成下述功能:
从键盘输入一个n*n(最大为20*20)矩阵的各元素的值,求出该
矩阵两条对角线上各元素值之和并打印出结果。
#include
voidmain()
{
inta[20][20]={0},t=0,i,j,n;
printf(请输入n的值!
\n”;
scanf(%d”&n);
for(i=0;ifor(j=0;j{
printf(请输入a[%d][%d]的值”i,j);
scanf(%d”&a[i][j]);
}
for(i=0;ivn;i++)
t=t+a[i][i]+a[i][n-1-i];
if((n%2)!
=0)
t=t-a[(n-1)/2][(n-1)/2];
printf(两对角线元素之和为%d\n”t);
}
19.求Fibonacci数列中前20个数,Fibonacci数列的前两个数为1,1,以后每一个数都是
前两个数之和。
Fibonacci数列的前n个数为1,1,2,3,5,8,13,用数组存放数列的前20个数,并输出之(按一行5个输出)。
#include
voidmain()
{
intFibonacci[20],i,j;
Fibonacci[0]=1;
Fibonacci[1]=1;
for(i=2;iv=19;i++)
Fibonacci[i]=Fibonacci[i-1]+Fibonacci[i-2];
for(i=0;iv=19;i++)
{
printf(%d”,Fibonacci"]);
if((i+1)%5==0)
printf(\'n”;
}
}
20.使用递归法求n!
(函数)
#include
intf(intx)
{
intm;
if(x==0||x==1)
m=1;
else
m=x*f(x-1);
return(m);
}
voidmain()
{
intn,y;
printf(请输入n的值!
\n”;
scanf(%d”&n);
y=f(n);
printf(%d!
的值为%d\n”n,y);
}
逻辑运算符的混合运算:
1、x=y=z=O;
c=++x||++y&&++z;
printf("x=%d,y=%d,z=%d",x,y,z);
结果:
x=1,y=0,z=0
解释:
由于第一个是“或”运算符,当++z为1时,它具有短路特性,屏蔽掉后面的运算符。
2、x=y=z=O;
c=(++x||++y)&&++z;
printf("x=%d,y=%d,z=%d",x,y,z);
结果:
x=1,y=0,z=1
解释:
由于在c的左边的逻辑表达式中的第一项含有“()”,所以(++x||++y)作为一个整体一一作为一个数,所以先算括号里面的,然后由于“&&的运算符的特性,再算++z,而对于括号里的再由于“”的短路特性,只算了“++x”,由于它为“1”所以“++y”就被屏蔽了。
3、x=y=O
c=x&&++y||++z;
结果:
c=1,x=0,y=0,z=1
解释:
注意逻辑运算符的运算顺序是自左向右,所以对于左边第一个“&&运算
符,首先算出它的逻辑值,再和后面的“||”运算,作为c的结果。
根据优先级的顺序和“&&的短路特性,由于开始x=0,则整个“&&的逻辑表达式的逻辑值就是0,而且++y也被屏蔽掉了,再由于后面的“||”的特性,根据++z,可知c=1,z=1。
4、x=y=z=0;
c=x||++y&&z;
结果:
c=0,x=0,y=1,z=0
解释:
如果“||”前为“1”则整个表达式即c=1;若“||”
前为“0”时,那么根据”的特性,该表达式的值由后面的逻辑值确定。
对于后面的逻辑表达式,根据“&&'的特性,由于++y=1而z=0,可知c=0,y=1。
5、x=y=z=0;
c=x||++y&&++z;
结果:
c=1,x=0,y=1,z=1
解释:
结合上一题可知,由于x=0,则该表达式的值由后面的表达式确定,根据
“&&的特性,由于“++y”的值为“1”则继续再算“&&后面的“++z”,由于“++z”的值也为“1”所以c=1,y=1,z=1o
6、x=y=z=0;
c=x&&++y&&++z;
结果:
c=0,x=0,y=0,z=0
解释:
首先根据运算符的优先级,运算从左至右,对于第一个“&&,由于x=0,则这个逻辑运算符的逻辑值为“0”且屏蔽了后面的“++y”再于逻辑运算符的逻辑值为“0”且后面为“&&',根据它的短路特性后面的“++z”被屏蔽了。
所以整个表达式的值即c=O,x=O,y=O,z=O。
最后,总结一下关于类似c=++x&&++y||++z这类任何形式的逻辑表达试,均相当于c=(++x&&++y)||++z,但同时要结合其“&&、和“||”不同的短路特性以及其内部的短路特性,可以正确地算出其逻辑值。