1比较大小输入三个数a,b,c,比较输出其中的最大值
第一种方法
#include <stdio.h>
int main(){
long long a,b,c,max;
scanf("%d %d %d",&a,&b,&c);
max=a; //首先假如max=a,然后拿max与b,c比较其大小
if (max>b && max>c) //如果没有这一步,a为最大值但是不能输出其结果
printf("%ld",a);
if(max<b)
printf("%ld",b);
if(max<c)
printf("%ld",c);
return 0;
}
第二种方法
#include <stdio.h>
int main(){
long long a,b,c,max;
scanf("%d %d %d",&a,&b,&c);
if (a>b){ //先比较a,b的大小,再拿其中最大的数去跟第三个数字比较
max=a;
if (c>a)
max=c;
}
else{
max=b;
if(c>b)
max=c;
}
printf("%d",max);
return 0;
}
2数的倒置:输入一个数(12345678),输出这个数的倒置(87654321)
#include <stdio.h>
#include <math.h>
int main(){
long long a,b,sum=0;
int x,i,count=1;
scanf("%d",&a);
b=a;
do{ //计算输入的数字的位数
b=b/10;
count++;
}while(b>9);
for(i=1;i<=count;i++){
x=a%10; //得到每一次循环时输入数字的最后一位上的数
sum+=x*pow(10,count-i); //求数字颠倒后的总和
a/=10; //每一次循环去除输入数字的最后一位
}
printf("%ld",sum);
return 0;
}
或者
#include <stdio.h>
int main(){
long long a,b;
int x,i,count=1;
scanf("%d",&a);
b=a;
do{
b=b/10;
count++;
}while(b>9);
for(i=1;i<=count;i++){
x=a%10;
a/=10;
printf("%d",x); //求数字颠倒后结果可以只需要挨个输出各位上的数没必要求总和
}
return 0;
}
3最大公约数:写一个函数,完成输入两个整数,输出最大公约数的功能
#include <stdio.h>
int MAX(int a,int b){ //创造函数 MAX
int c,i;
if(a<b){
c=a;
a=b;
b=c;
} //保证a>b
for (i=b;i>0;i--){ //最大公约数最大只能为两数中较小的那个,所以i=b
if (a%i==0 && b%i==0)
break;
}
return i; //此时 i 为最大公约数
}
int main(){
int m,n,y;
scanf("%d %d",&m,&n);\
y=MAX(m,n); //函数调用
printf("最大公约数是%d",y);
return 0;
}
第二种
#include <stdio.h>
int MAX(int a,int b){ //创造函数 MAX
int c,d;
if (a<b){
d=a;
a=b; //确保a>b
b=d;
}
if (a%b==0) //b是a的因数
c=b;
else {
while(a%b!=0){ //辗转相除法:第一步,确保输入的两个数a>b;第二步求 c=a%b;如果c==0 ,则b为最大公约数,否则就进行循环将 b赋值给a ,a%b 赋值给b
c=a%b;
a=b;
b=c;
}
}
return c; //return的值为所求
}
int main(){
int m,n,y;
scanf("%d %d",&m,&n);\
y=MAX(m,n); //函数调用
printf("最大公约数是%d",y);
return 0;
}
#include <stdio.h>
int MAX(int a,int b){ //创造函数 MAX
int d;
if (a<b){
d=a;
a=b; //确保a>b
b=d;
}
while(a!=b){ //更相减损法:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
a=a-b;
}
return a;
}
int main(){
int m,n,y;
scanf("%d %d",&m,&n);
y=MAX(m,n); //函数调用
printf("最大公约数是%d",y);
return 0;
}
4附加题首先输入一个数组的大小,如何输入数组的数据,接下来对数组排序后输出提示:冒泡排序与选择排序
#include <stdio.h>
#define lenth 100 /*输入一个数组的大小*/
int main(){
int a[lenth],i,j,k,y;
for(i=0;i<lenth;i++){ /* 如何输入一个数组*/
scanf("%d",&a[i]);
}
for (k=0;k<lenth-1;k++){ /*冒泡排序:比较相邻数字大小,每一次外层结束循环,其对应的最大值 放在最后面。所以外层表示排序所要经历的次数;
而外层一次循环后就把最大值排在最后面,因此内层只需要从j=0到除每一次外层循环后最大数之间排序即lenth-k;*/
for (j=0;j<lenth-1-k;j++){
if (a[j]>a[j+1]){
y=a[j];
a[j]=a[j+1];
a[j+1]=y;
}
}
}
for (i=0;i<lenth;i++){
printf("%d ",a[i]);
}
return 0;
}
#include <stdio.h>
#define lenth 100 /*输入一个数组的大小*/
int main(){
int a[lenth],y;
int i,j,k;
for(i=0;i<lenth;i++){ /* 如何输入一个数组*/
scanf("%d",&a[i]);
}
for (k=0;k<lenth-1;k++){ /*选择排序:按顺序数字依次与其后面的数字比较。每一次外层循环结束后都会得到相应的最小值,所以当循环到lenth-1次时已经把数组最后
两位进行了排序,所以循环次数为lenth-1;内层由于是数与后面进行比较所以初始j等于i+1,又每次都要跟数组最后一位比所以j<lenth*/
for (j=k+1;j<lenth;j++){
if (a[k]>a[j]){
y=a[k];
a[k]=a[j];
a[j]=y;
}
}
}
for (i=0;i<lenth;i++){
printf("%d ",a[i]);
}
return 0;
}