美文网首页
C语言初学者之代码路程(一)

C语言初学者之代码路程(一)

作者: Berry_chen | 来源:发表于2020-04-12 15:47 被阅读0次

1.使用辗转相除法求两个数的最大公约数和最小公倍数

int a,b,c,d,i,gcm,lcm,temp;
scanf("%d%d",&a,&b);
c=b;
d=a;//c、d用来保存原始的a b 的值
//判断输入a b 的大小,如果a < b,交换值。
if(a<b){
    temp=a;
    a=b;
    b=temp;
}
//辗转相除法
do{
    i=a%b;
    if(i==0)
    break;
    a=b;
    b=i;
}while(i != 0);
gcm=b;
lcm=d*c/gcm;//最小公倍数
printf("最大公约数gcm为%d\n",gcm);
printf("最小公倍数lcm为%d\n",lcm);

2.求几位数并且逆序输出

int num,n,h_num,t_num,n_num;
scanf("%d",&num);
if(num>999){
    n=0;
}else if(num>99){
    n=3;
    printf("这是一个%d位数\n",n);
}else if(num>9){
    n=2;
    printf("这是一个%d位数\n",n);
}else {
    n=1;
    printf("这是一个%d位数\n",n);
}
switch(n){
    case 3:h_num=num/100;t_num=num/10%10;n_num=num%10;printf("%d\n",h_num);printf("%d\n",t_num);printf("%d\n",n_num);printf("逆序输出为%d%d%d\n",n_num,t_num,h_num);break;
    case 2:t_num=num/10;n_num=num%10;printf("%d\n",t_num);printf("%d\n",n_num);printf("逆序输出为%d%d\n",n_num,t_num);break;
    case 1:printf("%d\n",num);
    case 0:printf("输入数值超过范围\n");
}

3.求解三角形面积
需要用到sqrt函数,需引入math.h头文件

#include <math.h>
  //解法1
double a, b, c, x;
scanf("%lf %lf %lf", &a, &b, &c);
x = (a+b+c)/2;
if(a+b>c && a+c>b && b+c>a){
    printf("%.3f", sqrt(x*(x-a)*(x-b)*(x-c)));
}else{
    printf("输入数值不能构成三角形\n");
}
//解法2
if(a<b){
    if(b<c){
        (a+b) > c ? printf("%.3f", sqrt(x*(x-a)*(x-b)*(x-c))): printf("输入数值不能构成三角形\n");
    }else{
        (a+c) > b ? printf("%.3f", sqrt(x*(x-a)*(x-b)*(x-c))): printf("输入数值不能构成三角形\n");
    }
}else if(a>c){
    (c+b) > a ? printf("%.3f", sqrt(x*(x-a)*(x-b)*(x-c))): printf("输入数值不能构成三角形\n");
}

4.打印水仙花数(水仙花数:一个3位数,每位数字的立方和等于该数本身)

   int a,b,c,t;
   for(int num=100;num<1000;num++){
      a=num/100;
      b=num/10%10;
      c=num%10;
      t=a*a*a+b*b*b+c*c*c;
      if (t == num)
      printf("%d\t",num);
  }

程序运行结果如下:


水仙花数

5.求解兔子数量问题--Fibonacci 数列问题

int f1=1,f2=1;
printf("%12d\t%12d\t",f1,f2);//打印第一二个月的兔子数量
for(int i=1;i<=20;i++){    //一次算出两个月的数量,所以只需算20次
    f1=f2+f1;             //将第三个月的兔子数量赋给f1
    f2=f1+f2;             //将第四个月的兔子数量赋给f2
    if(i%3==0){
        printf("\n");        //控制输出6个数换行
    }
    printf("%12d\t%12d\t",f1,f2);
}

程序运行结果如下:


运行结果

6.使用冒泡排序法对输入的数字进行排序
冒泡排序法的关键在于:如果有N个数字,那么总共就需要比较N-1趟,每一趟中两个数字比较的次数是N减趟数。比如:
我们用n来代表有n个数字,j来代表趟数,第一趟 j=1,第二趟 j=2,依次类推,有n个数字就需要总的趟数 j=n-1。i来表示每一趟中两个数字比较的总次数,比如第一趟(j=1)两个数字相互比较总次数 i=4(i=n-j=5-1),第二趟(j=2)两个数字相互比较总次数 i=3(i=n-j=5-2)。(引入次数i只是为了方便理解,在实际程序中“比较次数i”并不是我们要得到的,我们要得到的是输出排序完的数字)
举个例子吧,输入的数字有5个(n=5),总共需要比较的趟数4趟(j=n-1=5-1=4),第一趟(j=1)两个数字互相比较总次数4次(i=5-1),第二趟(j=2)两个数字互相比较总次数3次(i=5-2),依次到第四趟的时候,两个数字互相比较的总次数1次,至此排序也就完成了。采用两个for循环嵌套使用来分别控制总趟数 j 和每一趟的总次数 i

int a[5];          //定义一维数组存放输入值
int i=0,j =0,t;     //i用来表示数组下标,j用来表示趟数,t作为交换值的中间变量
printf("请输入5个数字:\n");
//获取键盘输入的5个值
for(i=0;i<5;i++){
  scanf("%d",&a[i]);
}
for(j=0;j<4;j++){               //输入5个数字,需进行4趟排序,所以j<4;如果j原始值为1,条件就为j<5  (趟数比输入数字少1)
    for(i=0;i<4-j;i++){         //每趟排序的次数比趟数少一次,如第一趟需对比4次,第二趟需对比3次    (总趟数4-第几次趟数j)
        if(a[i]>a[i+1]){
            t=a[i];             //相邻两个数进行比较
            a[i]=a[i+1];
            a[i+1]=t;
        }
    } 
}
printf("进行排序后为:\n");
for(i=0;i<5;i++){
    printf("%d\t",a[i]);
}
printf("\n");

程序运行结果:


运行结果

7.求一个3*3矩阵对角线元素之和。

int a[3][3];
int i,j;
printf("请输入9个数字:");
for(i=0;i<3;i++){
    for(j=0;j<3;j++){
        scanf("%d",&a[i][j]);
        printf("%5d",a[i][j]);
    }
    printf("\n");
}
printf("对角线元素之和为:%d\n",a[0][0]+a[1][1]+a[2][2]);
/*
int sum=0;
for(i=0;i<3;i++){
    sum += a[i][i];           //求对角线元素之和的第二种方法
}
printf("对角线元素之和为:%d\n",sum);
*/

输出结果如图:


3*3矩阵对角线之和

8.将一个数组中的值按逆序重新存放。

int a[5]={8,5,4,2,1};
int b,i;
for(int j=0;j<4;j++)
for(i=0;i<4-j;i++){
    b=a[i];
    a[i]=a[i+1];
    a[i+1]=b;
    
}
for(i=0;i<5;i++){
    printf("%d\t",a[i]);
}
输出结果如图: 逆序输出

(其实就是冒泡排序法的思路,只是冒泡排序时,需要将值交换后插入位置,而这个不用,只是简单的交换顺序而已)
8.编程实现从键盘输入一句话保存在数组中,统计其包含的英文字母个数并输出统计结果。

    char strl[81];
    char c;//定义字符c,用来存放输入字符串的每个字符
    int i,num=0;
    gets(strl);//输入一个字符串到字符数组,并得到一个函数值(也就是字符数组的起始地址)
    for(i=0;(c=strl[i]) !='\0';i++){      //如果输入的是换行,结束循环
        if(c >='a'&& c <= 'z' || c >='A' && c <='Z'){
            num++;
        }
    }
   
    printf("字母个数为%d\n",num);
运行结果: 运行结果

9.输入一行字符,统计其中有多少个单词,单词之间以空格隔开

    char strl[81];
    char c;//定义字符c,用来存放输入字符串的每个字符
    int i,num=0,word=0;
    gets(strl);//输入一个字符串到字符数组,并得到一个函数值(也就是字符数组的起始地址)
    for(i=0;(c=strl[i]) !='\0';i++){      //如果输入的是换行,结束循环
        if(c == ' '){
            word=0;
        }else if(word == 0){
            word=1;
            num++;      //num+1,表示增加一个单词
        }
    }
   
    printf("单词个数为%d\n",num);
运行结果: 运行结果

相关文章

网友评论

      本文标题:C语言初学者之代码路程(一)

      本文链接:https://www.haomeiwen.com/subject/xfuvmhtx.html