求和
#include<stdio.h>
int main()
{
int n;
double sum=0.0,sign=1.0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum+=sign/i;
sign=-sign;//变号
}
printf("f(%d)=%f",n,sum);
return 0;
}
正序分解整数
输入一个非负整数,正序输出它的每位数字
输入:13425
输出:1 3 4 2 5
//最后一位后面没有空格
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int mask=1;
int f=x;
while(f>9)
{
f/=10;
mask*=10;
}
int t=x;
do
{
int d=t/mask;
printf("%d",d);
if (mask>9)
{
printf(" ");
}
t=t%mask;
mask/=10;
}while(mask>0);
printf("\n");
return 0;
}
求最大公约数(辗转相除法)
输入两个数a,b
输入:12 18
输出:6
如果b=0,计算结束,a就是最大公约数;
否则,计算a除以b的余数,让a=b,而b等于那个余数;
回到第一步。
#include<stdio.h>
int main()
{
int a,b;
int t;
scanf("%d %d",&a,&b);
while(b!=0){
t=a%b;
a=b;
b=t;
}
printf("%d",a);
return 0;
}
求符合给定条件的整数集
给定不超过6 的正整数A 考虑从A开始的连续4 个数字。请输出所有由它们组成的无重复数字的3 位数。
输入格式:
输入在一行中给出A。
输出格式·
输出满足条件的的3位数, 要求从小到大, 每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:
2
输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
#include<stdio.h>
int main()
{
int a,cnt=0;
scanf("%d",&a);//!!!取值&
for(int i=a;i<=a+3;i++){
for(int j=a;j<=a+3;j++){
for(int k=a;k<=a+3;k++){
if(i!=j&&i!=k&&j!=k){
cnt++;
printf("%d%d%d",i,j,k);
if(cnt==6){//等于和赋值
printf("\n");
cnt=0;
}else
printf(" ");
}
}
}
}
return 0;
}
水仙花数
水仙花数是指一个N位正整数( N>=3 , 它的每个位上的数字的N次幂之和等于它本身。例如:153 = 1^3 + 5^3 ^+ 3^3 。本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N ( 3 < = N < = 7 ) 。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例·
3
输出样例·
153
370
371
407
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i=1;
int first=1;
while(i<n){
first*=10;
i++;
}
//遍历100-999
i=first;
while(i<first*10){
int t=i;
int sum=0;
do
{
int d=t%10;
t/=10;
int j=1;
int p=d;
for(int j=1;j<n;j++)
{
p*=d;
}
sum+=p;
}while(t>0);
if(sum==i)
{
printf("%d\n",i);
}
i++;
}
return 0;
}
语句if ( 1<=n<=10 );是可以通过编译的,但是没有什么意义。
首先看括号内部的表达式1<=n<=10。连接三个字符的是关系运算符,优先级相同,那么就遵循从左到右的运算顺序。1<=n的结果是0或1,肯定是小于10的。那么表达式1<=n<=10的结果就是1。
/* */会被替换为什么
在把代码翻译成汇编代码前,有一个步骤叫预处理。在预处理当中会把注释代码干掉。
可以使用以下命令来进行预处理:
gcc -E hello.c -o hello.i
hello.i 里面就是预处理后的代码。
一条语句前的注释 => 等长的空格;
一条语句中的注释 => 一个空格;
一条语句后的注释 => 直接删除。