1.1 C语言输出
#include
int main()
{
printf("%d\n",1+2);
return 0;
}
1.2 C计算与输出基础
#include
#include
int main()
{
printf("%.1f\n",8.0/5.0);
printf("%.8f\n",1+2*sqrt(3)/(5-0.1));
return 0;
}
1.3 a+b
#include
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
1.4 圆柱体面积
#include
#include
int main()
{
const double pi=acos(-1.0);
double r,h,s1,s2,s;
scanf("%1f%1f",&r,&h);
s1=pi*r*r;
s2=2*pi*r*h;
s=s1*2.0+s2;
printf("Area=%.3f\n",s);
return 0;
}
1.5 三位数翻转
//输入一个三位数,分离出百位、十位、个位,反转后输出。
#include
int main()
{
int n;
scanf("%d",&n);
printf("%d%d%d\n",n%10,n/10%10,n/100);
/*第一个n%10是个位数,如123除10后取余得3。
第二个n/10%10,是十位数,如123除10为12.3再除10取余为2。
第三个n/100是百位数,如123除100后得1.23,而%d输出为整数,所以为1。
*/
return 0;
}
1.6 三位数翻转-2
#include
int main()
{
int n,m;
scanf("%d",&n);
m=(n%10)*100+(n/10%10)*10+(n/100);
printf("%03d\n",m); //%03d若不足3位在左边用0补齐
return 0;
}
1.7 交换变量(赋值法)
#include
int main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=a;
a=b;
b=t;
printf("%d %d",a,b);
return 0;
}
1.8 交换变量(输出法)
#include
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d\n",b,a);
return 0;
}
1.9 鸡兔同笼
/*鸡a,兔b,n只,m腿;
a+b=n,2a+4b=m,联立得
a=(4n-m)/2
b=n-a
*/
#include
int main()
{
int a,b,n,m;
scanf("%d%d",&n,&m);
a=(4*n-m)/2;
b=n-a;
if(m%2==1||a<0||b<0) //m是奇数,或者a小于0,或者b小于0
printf("No answer\n");
else
printf("%d %d\n",a,b);
return 0;
}
2.1 循环输出
#include
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
printf("%d\n",i);
return 0;
}
2.2 aabb完全平方数
/*形如aabb的四位完全平方数(前两位数字相等,后两位数字相等)
完全平方数:一个数如果是另一个整数的完全平方,称此数为完全平方数
如:0,1,4,9,16等 3*3=9 9为完全平方数*/
#include
#include
int main()
{
for(int a=1;a<=9;a++)
for(int b=0;b<=9;b++)
{
int n=a*1100+b*11;
int m=floor(sqrt(n)+0.5); //floor(x)返回不超过的大整数,此处+0.5为减小浮点数运算存在的误差
if(m*m==n) printf("%d\n",n);
}
}
2.3 aabb完全平方数-2
/*形如aabb的四位完全平方数(前两位数字相等,后两位数字相等)
完全平方数:一个数如果是另一个整数的完全平方,称此数为完全平方数
如:0,1,4,9,16等 3*3=9 9为完全平方数*/
#include
#include
int main()
{
for(int a=1;a<=9;a++)
for(int b=0;b<=9;b++)
{
int n=a*1100+b*11;
int m=floor(sqrt(n)+0.5); //floor(x)返回不超过的大整数,此处+0.5为减小浮点数运算存在的误差
if(m*m==n) printf("%d\n",n);
}
}
2.4 3n+1问题
/*大于1的自然数n,
若n为奇数,将n变为3n+1
否则变为n/2,变换若干次后最终变为1.
求变换次数n*/
#include
int main()
{
int n,count=0;
scanf("%d",&n);
while(n>1)
{
if(n%2==1)
n=n*3+1;
else
n/=2;
count++;
}
printf("%d\n",count);
return 0;
}
/*此时存在溢出问题
可改为
int n2,count=0;
scanf("%d",&n2);
long long n=n2;
*/
2.5 近似计算
/*计算
π/4=1-1/3+1/5-1/7+....
直到最后一项小于10的-6次方
*/
#include
int main()
{
double sum=0;
for(int i=0;;i++)
{
double term=1.0/(i*2+1);
if(i%2==0) sum+=term;
else sum-=term;
if(term<1e-6) break;
}
printf("%.6f\n",sum);
return 0;
}
2.6 阶乘之和
#include
int main()
{
int n,s=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int factorial=1;
for(int j=1;j<=i;j++)
factorial*=j;
s+=factorial;
}
printf("%d\n",s%1000000);
}
//累乘器factorial
2.7 阶乘之和-2
#include
#include
int main()
{
const int MOD=1000000;
int n,S=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int factorial=1;
for(int j=1;j<=i;j++)
factorial=(factorial*j%MOD);
S=(S+factorial)%MOD;
}
printf("%d\n",S);
printf("Time used=%.2f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
2.8 数据统计
#include
#include
int main()
{
const int MOD=1000000;
int n,S=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int factorial=1;
for(int j=1;j<=i;j++)
factorial=(factorial*j%MOD);
S=(S+factorial)%MOD;
}
printf("%d\n",S);
printf("Time used=%.2f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
3.1 逆向输出
#include
#define maxn 105
int a[maxn]; //数组a被声明再外面时,才可开的很大,若在main内,稍大就会异常退出
int main()
{
int x,n=0;
while(scanf("%d",&x)==1)
a[n++]=x; //等同于先赋值a[n]=x,再执行n=n+1,可写成{a[n]=x;n=n+1;}
for(int i=n-1;i>=0;i--)
printf("%d ",a[i]); //用空格隔开数据时要在%d后加空格
/*为何不用
for(int i=n-1;i>=0;i--)
printf("%d\n",a[i]);
因为相邻两个数据间要用空格隔开而非换行,所以分两条语句输出*/
return 0;
}
3.2 开关灯问题
/*memset:作用是在一段内存块中填充某个给定的值,它是对较大结构体或数组进行清零操作的一种最快方法。*/
#include
#include
#define maxn 1010
int a[maxn];
int main()
{
int n,k,first=1; //n为灯编号,k为人数
memset(a,0,sizeof(a)); //快速数组清零,此时所有灯为0及false,all灯关
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++)
for(int j=1;j<=n;j++)
if(j%i==0) a[j]=!a[j];
/*第一个人经过n盏灯时,因为是n%1所以均等于0,非关赋值后全为true,全部打开
第二个人经过n盏灯时,因为是n%2所以只有n为2的倍数时才等于0,此时2的倍数的灯非关赋值,全部打开
第三个人经过n盏灯时,因为是n%3所以只有n为3的倍数时才等于0,此时3的倍数的灯,若为关则非关赋值灯打开,若为开则非开赋值灯关闭
以此类推*/
for(int t=1;t<=n;t++)
if(a[t]) //此时判断真假,若为真(开灯)的序号,直接进入if大循环,若为假(关灯)排除。
{
if(first) first=0; //因为first=1,则真(开)灯进入if,然后first=0,输出灯序号。因为改变first为假所以之后序号灯,均进入else
else printf(" "); //之后进入else的灯都先输出空格,再输出序号
printf("%d",t);
}
printf("\n");
return 0;
}
//first的作用就是使第一个输出的序号不带空格,之后每输出一个序号前面加个空格
3.3 蛇形填数
/*
n*n方阵填入1-n*n.例n=4时方阵为
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
*/
#include
#include
#define maxn 20
int a[maxn][maxn];
int main()
{
int n,x,y,tot=0;
scanf("%d",&n);
memset(a,0,sizeof(a)); //注意,已将所有元素初始化为0及false
tot=a[x=0][y=n-1]=1;
while(tot<n*n)
{
while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot;
while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot;
while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot;
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf("%3d",a[x][y]); //%3d表示以3位固定宽度输出整型数
printf("\n");
}
return 0;
}