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

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);

运行结果:
运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容