三
#include <stdio.h>
int main()
{
char a[1000];
int i;
for(i = 0; i<1000;i++)
{
a[i] = -1-i;
}
printf("%d\n",strlen(a)) ;
return 0;
}
255
a[i]存放的数字是-1到-128,由于计算机是以二进制补码的方式存放的数据,所以又从-128跳转到127
当字符型数组里面存放0时候字符串默认就结束了,故最后的结果就是128+127
strlen:给出字符串中的字符长度
sizeof:以字节为单位给出对象的大小
不同类型的值混合运算
注意:当int转换成char类型的时候,前面二个字节会丢失,因此就没有意义了,而当char转换成int的时候只需要在前面补上二个字节的0就可以了
float会自动转换成double
bit byte
bit:最小的储存单位,0 1
byte:计算机最小的单位一个byte由8个bit构成
#字节序
大端:高字节存放在低地址,低字节存放高地址
小端:高字节存放在高地址,低字节存放在低地址
break与continue的区别
break:结束循环
continue:结束本次循环,不影响下一次的循环
功能:判断100-200之间的素数,并打印出来
/*****************************************************
> File name: 2.c
> Author: Mr.YUAN
> 日期: 2019-01-24 20:49
>功能:判断100-200之间的素数,并打印出来
*****************************************************/
#include <stdio.h>
int main()
{
int i,j;int flag=1;
for(i=101;i<200;i+=2)
{
for(j=2;j<i;j++)
{
if((i%j)0)
{
flag=0;
break;
}
flag=1;
}
if(flag1)
printf("%d\n",i);
}
return 0;
}
分析:有素数的定义:除了1和他本身以外没有其他的数可以被他整除
打印的范围是100-200
解题思路:方法一:可以用一重循环从100到200,再单独写一个模块判断是否是素数
方法二:用一重循环从100到200,二重循环从2跑到i;在二重循环里面写一个if判断语句,如i%j==0则FLAG=0证明不是素数,如果没有进入这个IF判断语句则证明i是素数
求最大公约数和最小公倍数
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>求最大公约数和最小公倍数
*****************************************************/
#include <stdio.h>
int main()
{
int a,b;
int i,j=0;
int divisor,multiple;
printf(“请输入二个整数:”);
scanf("%d %d",&a,&b);
if(a>b)
{
a^=b;
b^=a;
a^=b;
}
for(i=2;i<=a;i++)
{
if(a%i0 && b%i0)
{
divisor=i;
}
else divisor=1;
}
for(i=b;j0;i++)
{
if(i%a0 && i%b==0)
{
multiple=i;
j=1;
}
}
printf(“divisor is %d\n”,divisor);
printf(“multiple is %d\n”,multiple);
return 0;
}
遇到的问题:
在使用scanf时候,第二个参数没有打&符号,提示的错误:The variable ‘a’ is being used without being initinaalized 变量a没有初始化
逆序输出三位整数
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>逆序输出三位整数
*****************************************************/
#include <stdio.h>
int main()
{
int abc,cba;
int bai,shi,ge;
printf(“please enter a three-digit interge:\n”);
scanf("%d",&abc);
bai=abc/100;
shi=abc%100/10;
ge=abc%10;
cba=ge100+shi10+bai;
printf(“逆序输出的三位数是:%d\n”,cba);
return 0;
}
解决思路:先得到百位十位和个位,再得到新的数
求1-100的和
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>1-100的和
*****************************************************/
#include <stdio.h>
int main()
{
int i,s=0;
printf(“1-100之间的和\n”);
for (i=1;i<=100;i++)
{
s+=i;
}
printf(“1-100之间的和是:%d\n”,s);
return 0;
}
200-300之间不能被三整除的数,五个一行输出
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>200-300之间不能被三整除的数,五个一行输出
*****************************************************/
#include <stdio.h>
int main()
{
int i,count=0;
for (i=200;i<=300;i++)
{
if (i%3!=0)
{
count++;
printf("%d “,i);
if (count==5)
{
count=0;
printf(”\n");
}
}
}
return 0;
}
解决思路:用一个for循环,里面嵌套一个if判断语句,再定义一个count,控制五个一行的输出
1-n有多少个9设N最大为3位数
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>1-n有多少个9设N最大为3位数
*****************************************************/
#include <stdio.h>
int main()
{
int n;
int i,count=0;
int bai,shi,ge;
printf(“请输入一个1-999之间的数:”);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
if (i<10)
{
if (9==i)
{
count++;
}
}
else if(i>=10 && i<=99)
{
shi=i/10;
ge=i%10;
if (9==shi)count++;
if (9==ge)count++;
}
else
{
bai=i/100;
shi=i/10;
ge=i%10;
if (9==bai)count++;
if (9==shi)count++;
if (9==ge)count++;
}
}
printf("%d\n",count);
return 0;
}
修改后的代码:
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>1-n有多少个9设N最大为3位数
*****************************************************/
#include <stdio.h>
int main()
{
int n1,n2,n3;
int i,count=0;
printf("请输入一个数\n");
scanf("%d",&n1);
for (i=1;i<=n1;i++)
{
n2=i;
while(n2>0)
{
n3=n2%10;
n2=n2/10;
if(n3==9) count++;
}
}
printf("%d\n",count);
return 0;
}
解决思路:
假设N是一个0-999的数,用if else语句分成N是一位数,N是二位数和N是三位数,用count计数
有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
*****************************************************/
#include <stdio.h>
int main()
{
int people;
int k, i,j=-1;
int a[1000]={0}; //0 存在 1退出
printf(“please enter how many people range 0 to 1000:”);
scanf("%d",&people);
for(k=0;k<people-1;k++)
{
for (i=1;i<=3;i++)
{
j++;
if(j>=people)j=0;
if (a[j]1)i–;
if(i3)
{
a[j]=1;
printf(“退出的是%d号\n”,j+1);
}
}
}
for (k=0;k<people;k++)
{
if(a[k]==0)
printf("最后存在的是%d号\n",k+1);
}
return 0;
}
解决思路:
用数组下表代表第几个人,数据存放0 1 代表是否出局,一重循环确定每次出局1个人,循环people-1次则循环完成还剩下一个人,二重循环记录3次后谁出局
输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
/*****************************************************
> File name: 3.c
> Author: Mr.miao
> 日期: 2019-01-24 21:09
>输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
*****************************************************/
#include <stdio.h>
int main()
{
int a,p1,p2,i;
int b;
printf(“please enter a ingeter\n”);
scanf("%d",&a);
printf(“please enter two ingeters p1and p2(p1<p2)\n”);
scanf("%d%d",&p1,&p2);
for (i=0;i<=(p2-p1);i++)
{
b=(a>>(p1-i-1));
b=b&1;
printf("%d ",b);
}
return 0;
}