4月29日作业
1.使用for循环打印99乘法表
作业代码如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,j;
for (i=0; i<=8; i++) //控制行
{
for (j=0; j<=8; j++) //控制列
{
if(j>=i)//如果列大于行
printf("%d*%d=%d\t",i+1,j+1,(j+1)*(i+1));
}
printf("\n");
}
return 0;
2、将data第[4]位清0,保持其他位不变
将data第[7]位置1,保持其他位不变
将data第[31:28]位清0,保持其他位不变
将data第[7:4]位置1,保持其他位不变
将data第[15:11]位修改位10101,保持其他位不变
作业代码如下;
#include <stdio.h>
#define set0(data,i) ((data|(1<<i))^(1<<i))//通过或运算之后异或来实现指定位数置 0
#define set1(data,i) (data|(1<<i)) //通过或运算来实现指定位数置1
int main(int argc, char *argv[])
{
int data,temp1,temp2,temp3,temp4,temp5;
char k = !1;
data = 0xffffffff;
temp1 = set0(data,4);
temp2 = set1(data,7);
temp3=temp4=temp5=data;
for(int i=1;i<=31;i++)
{
if(i>=28&&i<=31)
{
temp3 = set0(temp3,i);
}
if (i<=7&&i>=4)
{
temp4 = set1(temp4,i);
}
if(i>=11&&i<=15)
{
switch (k=!k)//每进一次进行取反
{
case 0 : temp5 = set0(temp5,i);break;
case 1 : temp5 = set1(temp5,i);break;
}
}
}
printf("%#x,%#x,%#x,%#x,%#x",temp1,temp2,temp3,temp4,temp5);
return 0;
}
3、终端输入行数,打印金字塔
作业代码如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a,i,k,j;
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(j=1;j<=((2*a)+1)/2-i;j++)//打印空格
{
printf(" ");
}
for(k=1;k<=(2*i)-1;k++)//打印*号
printf("*");//注意这里for作用范围
printf("\n");
}
return 0;
}
4月30号作业
1、打印字母图形
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,j,k;
char temp = 'F';
for (i=0;i<6;i++)
{
temp = 'F';
for(int c = 0;c<i;c++)//打印_
printf("_");
for(int c = 0;c<i+1;c++)
printf("%c",temp--);//打印字母
printf("\n");
}
return 0;
}
2、输出1000-10000中的四叶玫瑰数(四叶玫瑰数,各位数字的四次方和等于其本身
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
int a,b,c,d;
for (int i=1000; i<=9999; i++)
{
a = i/1000;
b = i/100%10;
c = i/10%10;
d = i%10;
if(pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4)==i)
{
printf("%d,",i);
}
}
return 0;
}
3、题目:有 1、2、3、4个数字,能组成多少互不相同且无重复的三位? 都是多少?
第一种
#include <stdio.h>
#include <math.h>
int num=0;
int main(int argc, char *argv[])
{
for (int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(j!=i)
for(int k=1;k<=4;k++)
{
if(k!=j&&k!=i)
{
printf("%d%d%d ",i,j,k);
num++;
}
}
}
}
printf("zongshu:%d",num);
return 0;
}
第二种
```c
#include <stdio.h>
#include <math.h>
int num=0;
int main(int argc, char *argv[])
{
for (int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
for(int k=1;k<=4;k++)
{
if(k==j||k==i)
{
continue;
}
printf("%d%d%d ",i,j,k);
num++;
}
}
}
printf("zongshu:%d",num);
return 0;
}
4、输入三个整数x、y和z,请把这三个数由小到大输出
```c
#include <stdio.h>
int main(int argc, char *argv[])
{
int a,b,c;
int num[3],temp;
for(int i=0;i<3;i++)
{
scanf("%d",&num[i]);
}
for (int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
if(num[i]>num[i+1])
{
temp=num[i];
num[i]=num[i+1];
num[i+1]=temp;
}
}
}
for(int i=0;i<3;i++)
printf("%d ",num[i]);
return 0;
}
5、思考交换两个数的方法
#include <stdio.h>
int main(int argc, char *argv[])
{
int temp,a,b;
scanf("%d%d",&a,&b);
temp = a;
a=b;
b=temp;
printf("%d %d",a,b);//第一种
a=a+b;
b=a-b;
a=a-b;
printf("%d %d",a,b);//第二种
a=a^b;
b=a^b;
a=a^b;
printf("%d %d",a,b);//第三种
return 0;
}
5月1号作业
1、输出3-100内的质数(质数的因子只有1和它本身)
#include <stdio.h>
int main(int argc, char *argv[])
{
int ff;
for(int i=3;i<=100;i+=2)
{
for(int j=2;j<i;j++)
{
if(i%j==0)
{
ff=0;//标志位
break;
}
ff=1;
}
if(ff==1)//使用标志位
{
printf("%d ",i);
ff=0;//使用完毕清除标志位
}
}
return 0;
}
2、输入两个正整数m和n,求其最大公约数和最小公倍数
#include <stdio.h>
int main(int argc, char *argv[])
{
int m,n,max,gongyue;
scanf("%d%d",&m,&n);
max = m>n?m:n;
for(int i=1;i<max;i++)
{
if(m%i==0&&(n%i)==0)
{
gongyue=i;
}
}
printf("gongyue=%d;gongbei=%d\n",gongyue,m*n/gongyue);
return 0;
}
3、输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数
(提示:使用while循环,条件为输入的字符不是’\n’)
#include <stdio.h>
int main(int argc, char *argv[])
{
char e;
int a=0,b=0,c=0,d=0;
while((e=getchar())!='\n')
{
if(e>='A'&&(e<='Z')||(e>='a')&&(e<='z'))
a++;
else if(e==' ')
b++;
else if(e>='0'&&e<='9')
c++;
else
d++;
}
printf("letter:%d,number:%d,space:%d,other:%d\n",a,b,c,d);
return 0;
}
5月2号作业
1、一个数如果恰好等于它的因子和,这个数就叫“完美数”,求100内的所有完美数
#include <stdio.h>
int main(int argc, char *argv[])
{
int sum=0;
for (int i=1;i<=100; i++)
{
sum=0;
for(int j=1;j<i;j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum==i)
{
printf("%d ",i);
}
}
return 0;
}
2、我国古代数学家张丘建在《算经》一书中曾提出过著名的 “百钱买百鸡” 问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
#include <stdio.h>
int main(int argc, char *argv[])
{
int x,y,z;
for(int i=0;i<=20;i++)
for(int j=0;j<=34;j++)
for(int k=0;k<100;k+=3)
{
if((5*i+3*j+k/3)==100&&(i+j+k==100))
{
printf("gongji:%d,muji;%d,kunkun:%d\n",i,j,k);
}
}
return 0;
}
3、实现前10位斐波那契数列
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i=0,j=1;
printf("1 ");
for(int c=1;c<10;c++)
{
printf("%d ",j=i+j);
i=j-i;
}
return 0;
}
4、买一件上衣59元,买一件裤子70元,如果成套买的话,一套120.假设我买了m个上衣和n个裤子,问:需要花多少钱?
#include <stdio.h>
int main(int argc, char *argv[])
{
int m,n;
scanf("%d%d",&m,&n);
printf("It costs %d yuan\n",m>n?(n*120)+(m-n)*59:(m*120)+(n-m)*70);
return 0;
}
5月3号作业
1、终端输入行数,打印倒金字塔
#include <stdio.h>
int main(int argc, char *argv[])
{
int hang;
scanf("%d",&hang);
for(int i=0; i<hang;i++)
{
for(int j=0;j<i;j++)//打印空格
{
printf(" ");
}
for(int j=0;j<((hang-i-1)*2+1);j++)//打印*号 当前行打印数为(总行数减当前行)*2+1
{
printf("*");
}
printf("\n");//换行符
}
return 0;
}
2、使用break关键字,完成求[3-100]中的质数
#include <stdio.h>
int main(int argc, char *argv[])
{
int sign=1;
for(int i=3;i<=100;i++)
{
sign=1;//标志位置位
for(int j=2;j<i;j++)
{
if(i%j==0)
{
sign=0;//表示不是质数
break;
}
}
if(sign==1)
{
sign=0;//使用过后要复位(清除标志)
printf("%d ",i);
}
}
return 0;
}
3、已知一维数组int arr[5];终端输入数组中元素,并求出最大值
#include <stdio.h>
int main(int argc, char *argv[])
{
int arr[5],max;
for(int i=0;i<5;i++)
{
scanf("%d",&arr[i]);
switch (i)
{
case 0 : max=arr[0];break;//处理第一个元素
default : max = arr[i]>max?arr[i]:max;//比较元素大小 留下大的给max变量
}
}
printf("%d\n",max);
return 0;
}
4、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include <stdio.h>
int main(int argc, char *argv[])
{
float sum=0,fin=0,dangqian=100;//浮点数以防除不尽
for(int i=0;i<10;i++)
{
sum+=dangqian+fin;//这一次加上下一次弹起的距离,第一次执行表示下来的100米
fin=dangqian/2;//反跳的距离
dangqian/=2;//下一次的当前值
}
printf("zonggong:%fm zuihou:%fm",sum,fin);
return 0;
}