循环嵌套:
//输出三个各自的成绩平均数//
//并输出他们大于90的成绩//
#include<stdio.h>
void main()
{
int i,j,a[3][3],sum=0,b[3]; //定义一个二维数组表示三位同学的三门科目//
printf("请输入他们的成绩:\n"); //定义一个数组表示三位同学各自成绩的平均数//
for(i=0;i<3;i++) //外循环(三位同学)//
{
for(j=0;j<3;j++) //内循环三门成绩//
{
scanf_s("%d",&a[j][i]);
sum=sum+a[j][i];
}
b[i]=sum/3;
sum=0;
}
printf("他们各自成绩的平均分为:%d %d %d\n",b[0],b[1],b[2]);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[j][i]>90)
printf("%d ",a[j][i]);//输出大于90的成绩//
}
}
}
效果如图:
任务2:
函数的递归:
#include<stdio.h>
//这是一个求阶乘的函数//
long ff(int n)
{
long f;
if(n<0)
printf("n<0,input error");//定义递归退出的条件//
else if(n==0||n==1)
f=1; //如果输入的值是0或1 返回f=1//
else f=ff(n-1)*n; //递归逐层退回//
return(f);
}
void main()
{
int n;
long y;
printf("请输入一个数字:\n");
scanf_s("%d",&n);
y=ff(n); //主函数调用ff后进入ff函数执行//
printf("%d!=%ld\n",n,y);//输出阶乘的值//
}
效果图如下:
任务三:
位运算:
~是取反符号,比如数字2的二进制数十10 取反后是01
<< >>是左移与右移符号,如 4<<1 相当于100左移一位 1000 得到8相反用4>>1就得到2
&符号是位与运算符,2个数做与运算,都是1时得到1,其他为0 ,如二进制数1010 和1001做运算最后得到1000
|是位或运算,2个数运算只要有一个是1就得到1,如二进制数1010和1001得到进过1011
^异或运算,相同为0不同为1 如二进制数 1010和1001 得到0011;
a&b 相同位的两个数字都为1,则为1;若有一个不为1,则为0。
a|b 相同位只要一个为1即为1。
a ^ b 相同位不同则为1,相同则为0。
~a 取反
a << b 左移b位
a >> b右移b位
程序如下:
#include<stdio.h>
void main()
{
char a='a',b='b';
int p,c,d;p=a;
p=(p<<6)|b;
d=p&0xff;
c=(p&0xff00)>>6;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
效果图:
位运算好多。有些乱,。。。慢慢梳理就好了!