c语言程序设计_c语言程序设计和c++语言程序设计什么区别 - CSDN
c语言程序设计 订阅
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。 展开全文
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
信息
原    型
ALGOL 60语言
外文名
C language programming
特    点
结构化设计
中文名
C语言程序设计
语言类型
高级语言
c语言程序设计简介
随着科技的发展和人工智能时代的来临,计算机中程序设计具有越来越重要的地位。C语言程序设计是程序设计者的入门语言,它使学习者更能容易理解。当然它也能设计出一些高级的应用软件和系统软件。C语言程序设计还能帮助我们学习其它计算机语言如我们熟悉的java语言vb语 言的设计,因此C语言是初学者必备的语言。冯.诺依曼在1945年提出了现代计算机的若干思想,被后人称为冯.诺依曼思想,这是计算机发展史上的里程碑。自1945 年至今大多采用其结构,因此冯.诺依曼被称为计算机之父。他的体系结构计算机由运算器,控制器,存储器,输入设备,输出设备五大部件构成。C语言拥有一套完整的理论体系经过了漫长的发展历史,在编程语言中具有举足轻重的地位。 [1]  C 语言是一种十分强大的语言,可以进行多种方式进行程序的设计,它是一种很有特色的高级语言通过若干个函数组成,它具备构成程序设计的 3 种基本结构顺序,选择和循环结构。C语言编辑简洁明了,运算符丰富且功能强大还有编译预处理功能。此语言的移植性好不同的处理器用不同的编译器编译指令达到移植的效果。 [1] 
收起全文
精华内容
参与话题
  • C语言程序设计50例(经典收藏)

    万次阅读 多人点赞 2020-03-26 11:09:04
    C语言程序设计50例(经典收藏) 本篇文章是对C语言程序设计的50个小案例进行了详细的分析介绍,需要的朋友参考下 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1....

    C语言程序设计50例(经典收藏)

    本篇文章是对C语言程序设计的50个小案例进行了详细的分析介绍,需要的朋友参考下
    【程序1】
    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
          掉不满足条件的排列。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      int i,j,k;
      printf("\n");
      for(i=1;i<5;i++) /*以下为三重循环*/
        for(j=1;j<5;j++)
          for (k=1;k<5;k++)
          {
            if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
            printf("%d,%d,%d\n",i,j,k);
          }
      return 0;
    }
    
    

    ==============================================================
    【程序2】
    题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
       于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
       成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
       40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
       100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
    1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
        long int i;
        int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
        scanf("%ld",&i);
        bonus1=100000*0.1;
        bonus2=bonus1+100000*0.75;
        bonus4=bonus2+200000*0.5;
        bonus6=bonus4+200000*0.3;
        bonus10=bonus6+400000*0.15;
        if(i<=100000)
            bonus=i*0.1;
        else if(i<=200000)
            bonus=bonus1+(i-100000)*0.075;
        else if(i<=400000)
            bonus=bonus2+(i-200000)*0.05;
        else if(i<=600000)
            bonus=bonus4+(i-400000)*0.03;
        else if(i<=1000000)
            bonus=bonus6+(i-600000)*0.015;
        else
            bonus=bonus10+(i-1000000)*0.01;
        printf("bonus=%d",bonus);
        return 0;
    }
    
    

    ==============================================================
    【程序3】
    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
          的结果满足如下条件,即是结果。请看具体分析:
    2.程序源代码:
    代码如下:

    #include <math.h>
    #include <stdio.h>
    int main()
    {
      long int i,x,y,z;
      for (i=1;i<100000;i++)
      {
        x=sqrt(i+100); /*x为加上100后开方后的结果*/
        y=sqrt(i+268); /*y为再加上168后开方后的结果*/
        if(x*x==i+100&&y*y==i+268) /*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
        printf("\n%ld\n",i);
      }
      return 0;
    }
    
    

    ==============================================================
    【程序4】
    题目:输入某年某月某日,判断这一天是这一年的第几天?
    1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
          情况,闰年且输入月份大于3时需考虑多加一天。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      int day,month,year,sum,leap;
      printf("please input year,month,day\n");
      scanf("%d,%d,%d",&year,&month,&day);
      switch(month) /*先计算某月以前月份的总天数*/
      {
        case 1:sum=0;break;
        case 2:sum=31;break;
        case 3:sum=59;break;
        case 4:sum=90;break;
        case 5:sum=120;break;
        case 6:sum=151;break;
        case 7:sum=181;break;
        case 8:sum=212;break;
        case 9:sum=243;break;
        case 10:sum=273;break;
        case 11:sum=304;break;
        case 12:sum=334;break;
        default:printf("data error");break;
      }
      sum=sum+day; /*再加上某天的天数*/
      if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
        leap=1;
      else
        leap=0;
      if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
        sum++;
      printf("It is the %dth day.",sum);
      return 0;
    }
    
    

    ==============================================================
    【程序5】
    题目:输入三个整数x,y,z,请把这三个数由小到大输出。
    1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
          然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      int x,y,z,t;
      scanf("%d%d%d",&x,&y,&z);
      if (x>y)
        {t=x;x=y;y=t;} /*交换x,y的值*/
      if(x>z)
        {t=z;z=x;x=t;} /*交换x,z的值*/
      if(y>z)
        {t=y;y=z;z=t;} /*交换z,y的值*/
      printf("small to big: %d %d %d\n",x,y,z);
      return 0;
    }
    
    

    ==============================================================
    【程序6】
    题目:用号输出字母C的图案。
    1.程序分析:可先用’
    '号在纸上写出字母C,再分行输出。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      printf("Hello C-world!\n");
      printf(" ****\n");
      printf(" *\n");
      printf(" * \n");
      printf(" ****\n");
      return 0;
    }
    
    

    ==============================================================
    【程序7】
    题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
    1.程序分析:字符共有256个。不同字符,图形不一样。      
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      char a=176,b=219;
      printf("%c%c%c%c%c\n",b,a,a,a,b);
      printf("%c%c%c%c%c\n",a,b,a,b,a);
      printf("%c%c%c%c%c\n",a,a,b,a,a);
      printf("%c%c%c%c%c\n",a,b,a,b,a);
      printf("%c%c%c%c%c\n",b,a,a,a,b);
      return 0;
    }
    
    

    ==============================================================
    【程序8】
    题目:输出9*9口诀。
    1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      int i,j,result;
      printf("\n");
      for (i=1;i<10;i++)
      {
        for(j=1;j<10;j++)
        {
          result=i*j;
          printf("%d*%d=%-3d",i,j,result); /*-3d表示左对齐,占3位*/
        }
        printf("\n"); /*每一行后换行*/
      }
      return 0;
    }
    

    ==============================================================
    【程序9】
    题目:要求输出国际象棋棋盘。
    1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      int i,j;
      for(i=0;i<8;i++)
      {
        for(j=0;j<8;j++)
          if((i+j)%2==0)
            printf("%c%c",219,219);
          else
            printf("  ");
        printf("\n");
      }
      return 0;
    }
    

    ==============================================================
    【程序10】
    题目:打印楼梯,同时在楼梯上方打印两个笑脸。
    1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      int i,j;
      printf("\1\1\n"); /*输出两个笑脸*/
      for(i=1;i<11;i++)
      {
        for(j=1;j<=i;j++)
          printf("%c%c",219,219);
        printf("\n");
      }
      return 0;
    }
    
    

    【程序11】
    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
       后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21…
    2.程序源代码:
    代码如下:

    #include <stdio.h>
    int main()
    {
      long f1,f2;
      int i;
      f1=f2=1;
      for(i=1;i<=20;i++)
      {
        printf("%12ld %12ld",f1,f2);
        if(i%2==0) printf("\n"); /*控制输出,每行四个*/
        f1=f1+f2; /*前两个月加起来赋值给第三个月*/
        f2=f1+f2; /*前两个月加起来赋值给第三个月*/
      }
      return 0;
    }
    
    

    ==============================================================
    【程序12】
    题目:判断101-200之间有多少个素数,并输出所有素数。
    1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
          则表明此数不是素数,反之是素数。       
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
      int m,i,k,h=0,leap=1;
      for(m=101;m<=200;m++)
      {
        k=sqrt(m+1);
        for(i=2;i<=k;i++)
        if(m%i==0)
        {
          leap=0;
          break;
        }
        if(leap)
        {
          printf("%-4d",m);
          h++;
          if(h%10==0)
            printf("\n");
        }
        leap=1;
      }
      printf("\nThe total is %d",h);
      return 0;
    }
    
    

    ==============================================================
    【程序13】
    题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
       本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
    1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
      int i,j,k,n;
      printf("'water flower'number is:");
      for(n=100;n<1000;n++)
      {
        i=n/100;/*分解出百位*/
        j=n/10%10;/*分解出十位*/
        k=n%10;/*分解出个位*/
        if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
          printf("%-5d",n);
      }
      return 0;
    }
    

    ==============================================================
    【程序14】
    题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
     重复执行第一步。
    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
      int n,i;
      printf("\nplease input a number:\n");
      scanf("%d",&n);
      printf("%d=",n);
      for(i=2;i<=n;i++)
        while(n!=i)
        {
          if(n%i==0)
          {
            printf("%d*",i);
            n=n/i;
          }
          else
            break;
        }
      printf("%d",n);
      return 0;
    }
    

    ==============================================================
    【程序15】
    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
       60分以下的用C表示。
    1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
      int score;
      char grade;
      printf("please input a score\n");
      scanf("%d",&score);
      grade=score>=90?'A':(score>=60?'B':'C');
      printf("%d belongs to %c",score,grade);
      return 0;
    }
    

    ==============================================================
    【程序16】
    题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
    1.程序分析:利用辗除法。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
      int a,b,num1,num2,temp;
      printf("please input two numbers:\n");
      scanf("%d %d",&num1,&num2);
      if(num1<num2)/*交换两个数,使大数放在num1上*/
      {
        temp=num1;
        num1=num2;
        num2=temp;
      }
      a=num1;b=num2;
      while(b!=0)/*利用辗除法,直到b为0为止*/
      {
        temp=a%b;
        a=b;
        b=temp;
      }
      printf("gongyueshu:%d\n",a);
      printf("gongbeishu:%d\n",num1*num2/a);
      return 0;
    }
    
    

    ==============================================================
    【程序17】
    题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    1.程序分析:利用while语句,条件为输入的字符不为’\n’.
          
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
      char c;
      int letters=0,space=0,digit=0,others=0;
      printf("please input some characters\n");
      while((c=getchar())!='\n')
      {
        if(c>='a'&&c<='z'||c>='A'&&c<='Z')
          letters++;
          else if(c==' ')
            space++;
            else if(c>='0'&&c<='9')
              digit++;
            else
              others++;
      }
      printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
      return 0;
    }
    
    

    ==============================================================
    【程序18】
    题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
       共有5个数相加),几个数相加有键盘控制。
    1.程序分析:关键是计算出每一项的值。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
      int a,n,count=1;
      long int sn=0,tn=0;
      printf("please input a and n\n");
      scanf("%d %d",&a,&n);
      printf("a=%d,n=%d\n",a,n);
      while(count<=n)
      {
        tn=tn+a;
        sn=sn+tn;
        a=a*10;
        ++count;
      }
      printf("a+aa+...=%ld\n",sn);
      return 0;
    }
    
    

    ==============================================================
    【程序19】
    题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
       找出1000以内的所有完数。

    1. 程序分析:请参照程序<–上页程序14.
      2.程序源代码:
      代码如下:
    #include<stdio.h>
    int main()
    {
        static int k[10];
        int i,j,n,s;
        for(j=2;j<1000;j++)
        {
            n=-1;
            s=j;
            for(i=1;i<j;i++)
            {
                if((j%i)==0)
                {
                    n++;
                    s=s-i;
                    k[n]=i;
                }
            }
            if(s==0)
            {
                printf("%d is a wanshu",j);
                for(i=0;i<n;i++)
                    printf("%d,",k[i]);
                printf("%d\n",k[n]);
            }
        }
        return 0;
    }
    
    

    ==============================================================
    【程序20】
    题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
       第10次落地时,共经过多少米?第10次反弹多高?
    1.程序分析:见下面注释
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        float sn=100.0,hn=sn/2;
        int n;
        for(n=2;n<=10;n++)
        {
            sn=sn+2*hn;/*第n次落地时共经过的米数*/
            hn=hn/2; /*第n次反跳高度*/
        }
        printf("the total of road is %f\n",sn);
        printf("the tenth is %f meter\n",hn);
        return 0;
    }
    
    

    【程序21】
    题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
       第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
       的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
    1.程序分析:采取逆向思维的方法,从后往前推断。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        int day,x1,x2;
        day=9;
        x2=1;
        while(day>0)
        {
            x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
            x2=x1;
            day--;
        }
        printf("the total is %d\n",x1);
        return 0;
    }
    
    

    ==============================================================
    【程序22】
    题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
       比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
       三队赛手的名单。
    1.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
        for(i='x';i<='z';i++)
            for(j='x';j<='z';j++)
            {
                if(i!=j)
                for(k='x';k<='z';k++)
                {
                    if(i!=k&&j!=k)
                    {
                        if(i!='x'&&k!='x'&&k!='z')
                        printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
                    }
                }
            }
        return 0;
    }
    
    

    ==============================================================
    【程序23】
    题目:打印出如下图案(菱形)

       *
      ***
     *****
    *******
     *****
      ***
       *
    

    1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
          for循环,第一层控制行,第二层控制列。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        int i,j,k;
        for(i=0;i<=3;i++)
        {
            for(j=0;j<=2-i;j++)
                printf(" ");
            for(k=0;k<=2*i;k++)
                printf("*");
            printf("\n");
        }
        for(i=0;i<=2;i++)
        {
            for(j=0;j<=i;j++)
                printf(" ");
            for(k=0;k<=4-2*i;k++)
                printf("*");
            printf("\n");
        }
        return 0;
    }
    
    

    ==============================================================
    【程序24】
    题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
    1.程序分析:请抓住分子与分母的变化规律。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        int n,t,number=20;
        float a=2,b=1,s=0;
        for(n=1;n<=number;n++)
        {
            s=s+a/b;
            t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
        }
        printf("sum is %9.6f\n",s);
        return 0;
    }
    
    

    ==============================================================
    【程序25】
    题目:求1+2!+3!+…+19!的和
    1.程序分析:此程序只是把累加变成了累乘。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        long long s=0,n,t=1;
        for(n=1;n<=19;n++)
        {
            t*=n;
            s+=t;
        }
        printf("1+2!+3!...+19!=%lld\n",s);
        return 0;
    }
    
    

    ==============================================================
    【程序26】
    题目:利用递归方法求5!。
    1.程序分析:递归公式:fn=fn_1*4!
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        int i;
        int fact(int j);
        for(i=1;i<=5;i++)
            printf("%d!=%d\n",i,fact(i));
        return 0;
    }
    int fact(int j)
    {
        int sum;
        if(j==0)
            sum=1;
        else
            sum=j*fact(j-1);
        return sum;
    }
    
    

    ==============================================================
    【程序27】
    题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        int i=5;
        void palin(int n);
        palin(i);
        printf("\n");
        return 0;
    }
    void palin(int n)
    {
      char next;
      if(n<=1)
      {
        next=getchar();
        printf("\n\0:");
        putchar(next);
      }
      else
      {
        next=getchar();
        palin(n-1);
        putchar(next);
      }
    }
    
    

    ==============================================================
    【程序28】
    题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
       3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后
       问第一个人,他说是10岁。请问第五个人多大?
    1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
          第四人的岁数,依次类推,推到第一人(10岁),再往回推。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    age(int n)
    {
      int c;
      if(n==1) c=10;
      else c=age(n-1)+2;
      return(c);
    }
    int main()
    {
        printf("%d",age(5));
        return 0;
    }
    
    

    ==============================================================
    【程序29】
    题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)
      2.程序源代码:
      代码如下:
    #include<stdio.h>
    int main()
    {
        long a,b,c,d,e,x;
        scanf("%ld",&x);
        a=x/10000;/*分解出万位*/
        b=x%10000/1000;/*分解出千位*/
        c=x%1000/100;/*分解出百位*/
        d=x%100/10;/*分解出十位*/
        e=x%10;/*分解出个位*/
        if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
            else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
                else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
                    else if (d!=0) printf("there are 2, %ld %ld\n",e,d);
                        else if (e!=0) printf(" there are 1,%ld\n",e);
        return 0;
    }
    
    

    ==============================================================
    【程序30】
    题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   
    1.程序分析:同29例
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        long ge,shi,qian,wan,x;
        scanf("%ld",&x);
        wan=x/10000;
        qian=x%10000/1000;
        shi=x%100/10;
        ge=x%10;
        if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/
            printf("this number is a huiwen\n");
        else
            printf("this number is not a huiwen\n");
        return 0;
    }
    
    

    【程序31】
    题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续
       判断第二个字母。
    1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        char letter;
        printf("please input the first letter of someday\n");
        while((letter=getchar())!='Y')/*当所按字母为Y时才结束*/
        {
            switch (letter)
            {
            case 'S':printf("please input second letter\n");
                if((letter=getchar())=='a')
                    printf("saturday\n");
                else if ((letter=getchar())=='u')
                    printf("sunday\n");
                else
                    printf("data error\n");
            break;
            case 'F':printf("friday\n");break;
            case 'M':printf("monday\n");break;
            case 'T':printf("please input second letter\n");
                if((letter=getchar())=='u')
                    printf("tuesday\n");
                else if ((letter=getchar())=='h')
                    printf("thursday\n");
                else
                    printf("data error\n");
            break;
            case 'W':printf("wednesday\n");break;
            default: printf("data error\n");
            }
        }
        return 0;
    }
    
    

    ==============================================================
    【程序32】
    题目:Press any key to change color, do you want to try it. Please hurry up!
    1.程序分析:            
    2.程序源代码:
    代码如下:

    #include "conio.h"
    #include "stdio.h"
    void main(void)
    {
      int color;
      for (color = 0; color < 8; color++)
      {
        textbackground(color);/*设置文本的背景颜色*/
        cprintf("This is color %d\r\n", color);
        cprintf("Press any key to continue\r\n");
        getch();/*输入字符看不见*/
      }
    }
    

    ==============================================================
    【程序33】
    题目:学习gotoxy()与clrscr()函数   
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "conio.h"
    #include "stdio.h"
    void main(void)
    {
      clrscr();/*清屏函数*/
      textbackground(2);
      gotoxy(1, 5);/*定位函数*/
      cprintf("Output at row 5 column 1\n");
      textbackground(3);
      gotoxy(20, 10);
      cprintf("Output at row 10 column 20\n");
      getch();
    }
    

    ==============================================================
    【程序34】
    题目:练习函数调用

    1. 程序分析:
      2.程序源代码:
      代码如下:
    #include<stdio.h>
    void hello_world(void)
    {
        printf("Hello, world!\n");
    }
    void three_hellos(void)
    {
        int counter;
        for (counter = 1; counter <= 3; counter++)
            hello_world();/*调用此函数*/
    }
    int main()
    {
        three_hellos();/*调用此函数*/
        return 0;
    }
    
    

    ==============================================================
    【程序35】
    题目:文本颜色设置
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    void main(void)
    {
      int color;
      for (color = 1; color < 16; color++)
      {
        textcolor(color);/*设置文本颜色*/
        cprintf("This is color %d\r\n", color);
      }
      textcolor(128 + 15);
      cprintf("This is blinking\r\n");
      getch();
    }
    

    ==============================================================
    【程序36】
    题目:求100之内的素数   
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    #include<math.h>
    #define N 101
    int main()
    {
        int i,j,line,a[N],k;
        for(k=2;k<N;k++)
        {
            for(i=2;i<=sqrt(k);i++)
            {
                if(k%i==0)
                    break;
            }
            if(i==(int)sqrt(k)+1)
                printf("%d ",k);
        }
        return 0;
    }
    
    

    ==============================================================
    【程序37】
    题目:对10个数进行排序
    1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
          下次类推,即用第二个元素与后8个进行比较,并进行交换。       
    2.程序源代码:
    代码如下:

    #include<stdio.h>
    int main()
    {
        int a[10],i,j,t;
        printf("请输入10个数:");
        for(i=0;i<10;i++)
            scanf("%d",&a[i]);
        for(i=0;i<9;i++)
            for(j=0;j<9-i;j++)
                if(a[j]>a[j+1])
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
        for(i=0;i<10;i++)
            printf("%d ",a[i]);
        return 0;
    }
    
    

    ==============================================================
    【程序38】
    题目:求一个3*3矩阵对角线元素之和
    1.程序分析:利用双重for循环控制输入二维数组,再将a累加后输出。
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    /* 如果使用的是TC系列编译器则可能需要添加下句 */
    static void dummyfloat(float *x){ float y; dummyfloat(&y);}
    main()
    {
      float a[3][3],sum=0;
      int i,j;
      printf("please input rectangle element:\n");
      for(i=0;i<3;i++)
        for(j=0;j<3;j++)
          scanf("%f",&a[j]);
      for(i=0;i<3;i++)
        sum=sum+a;
      printf("duijiaoxian he is %6.2f",sum);
      getch();
    }
    

    ==============================================================
    【程序39】
    题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

    1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后
           此元素之后的数,依次后移一个位置。
      2.程序源代码:
      代码如下:
    #include<stdio.h>
    int main()
    {
        int a[11]={1,4,6,9,13,16,19,28,40,100},i,j,t,d;
        scanf("%d",&a[10]);
        if(a[0]>a[9])
            d=1;
        else
            d=0;
        for(i=0;i<10;i++)
            for(j=0;j<10-i;j++)
                if(a[j]>a[j+1])
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
        if(d==0)
            for(i=0;i<11;i++)
                printf("%d ",a[i]);
        else
            for(i=10;i>=0;i--)
                printf("%d ",a[i]);
        return 0;
    }
    
    

    ==============================================================
    【程序40】
    题目:将一个数组逆序输出。
    1.程序分析:用第一个与最后一个交换。
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    #define N 5
    main()
    {
      int a[N]={9,6,5,4,1},i,temp;
      printf("\n original array:\n");
      for(i=0;i<N;i++)
        printf("%4d",a);
      for(i=0;i<N/2;i++)
      {
        temp=a;
        a=a[N-i-1];
        a[N-i-1]=temp;
      }
      printf("\n sorted array:\n");
      for(i=0;i<N;i++)
        printf("%4d",a);
      getch();
    }
    

    ==============================================================
    【程序41】
    题目:学习static定义静态变量的用法   
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    varfunc()
    {
      int var=0;
      static int static_var=0;
      printf("\40:var equal %d \n",var);
      printf("\40:static var equal %d \n",static_var);
      printf("\n");
      var++;
      static_var++;
    }
    void main()
    {
      int i;
      for(i=0;i<3;i++)
        varfunc();
      getch();
    }
    

    ==============================================================
    【程序42】
    题目:学习使用auto定义变量的用法
    1.程序分析:      
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    main()
    {
      int i,num;
      num=2;
      for(i=0;i<3;i++)
      {
        printf("\40: The num equal %d \n",num);
        num++;
        {
          auto int num=1;
          printf("\40: The internal block num equal %d \n",num);
          num++;
        }
      }
      getch();
    }
    

    ==============================================================
    【程序43】
    题目:学习使用static的另一用法。   
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    main()
    {
      int i,num;
      num=2;
      for(i=0;i<3;i++)
      {
        printf("\40: The num equal %d \n",num);
        num++;
        {
          static int num=1;
          printf("\40:The internal block num equal %d\n",num);
          num++;
        }
      }
      getch();
    }
    

    ==============================================================
    【程序44】
    题目:学习使用external的用法。
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    int a,b,c;
    void add()
    {
      int a;
      a=3;
      c=a+b;
    }
    void main()
    {
      a=b=4;
      add();
      printf("The value of c is equal to %d\n",c);
      getch();
    }
    

    ==============================================================
    【程序45】
    题目:学习使用register定义变量的方法。
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    void main()
    {
      register int i;
      int tmp=0;
      for(i=1;i<=100;i++)
      tmp+=i;
      printf("The sum is %d\n",tmp);
      getch();
    }
    

    ==============================================================
    【程序46】
    题目:宏#define命令练习(1)   
    1.程序分析:
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    #define TRUE 1
    #define FALSE 0
    #define SQ(x) (x)*(x)
    void main()
    {
      int num;
      int again=1;
      printf("\40: Program will stop if input value less than 50.\n");
      while(again)
      {
        printf("\40:Please input number==>");
        scanf("%d",&num);
        printf("\40:The square for this number is %d \n",SQ(num));
        if(num>=50)
          again=TRUE;
        else
          again=FALSE;
      }
      getch();
    }
    

    ==============================================================
    【程序47】
    题目:宏#define命令练习(2)
    1.程序分析:            
    2.程序源代码:
    代码如下:

    #include "stdio.h"
    #include "conio.h"
    /*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\"*/
    #define exchange(a,b) { \
                            int t;\
                            t=a;\
                            a=b;\
                            b=t;\
                          }
    void main(void)
    {
      int x=10;
      int y=20;
      printf("x=%d; y=%d\n",x,y);
      exchange(x,y);
      printf("x=%d; y=%d\n",x,y);
      getch();
    }
    

    ==============================================================
    【程序48】
    题目:宏#define命令练习(3)   
    1.程序分析:
    2.程序源代码:
    代码如下:

    #define LAG >
    #define SMA <
    #define EQ ==
    #include "stdio.h"
    #include "conio.h"
    void main()
    {
      int i=10;
      int j=20;
      if(i LAG j)
        printf("\40: %d larger than %d \n",i,j);
        else if(i EQ j)
          printf("\40: %d equal to %d \n",i,j);
          else if(i SMA j)
            printf("\40:%d smaller than %d \n",i,j);
          else
            printf("\40: No such value.\n");
      getch();
      }
    

    ==============================================================
    【程序49】
    题目:#if #ifdef和#ifndef的综合应用。

    1. 程序分析:
      2.程序源代码:
      代码如下:
        #include "stdio.h"
        #include "conio.h"
        #define MAX
        #define MAXIMUM(x,y) (x>y)?x:y
        #define MINIMUM(x,y) (x>y)?y:x
        void main()
        {
          int a=10,b=20;
        #ifdef MAX
          printf("\40: The larger one is %d\n",MAXIMUM(a,b));
        #else
          printf("\40: The lower one is %d\n",MINIMUM(a,b));
        #endif
        #ifndef MIN
          printf("\40: The lower one is %d\n",MINIMUM(a,b));
        #else
          printf("\40: The larger one is %d\n",MAXIMUM(a,b));
        #endif
        #undef MAX
        #ifdef MAX
          printf("\40: The larger one is %d\n",MAXIMUM(a,b));
        #else
          printf("\40: The lower one is %d\n",MINIMUM(a,b));
        #endif
        #define MIN
        #ifndef MIN
          printf("\40: The lower one is %d\n",MINIMUM(a,b));
        #else
          printf("\40: The larger one is %d\n",MAXIMUM(a,b));
        #endif
          getch();
        }
    

    很快就

    展开全文
  • C语言程序设计(高清PDF)

    千次下载 热门讨论 2020-07-30 23:30:51
    第1章 程序设计与算法 1 1.1 程序设计语言的发展 1 1.2 C语言的特点 2 1.2.1 C语言是中级语言 2 1.2.2 C语言是结构化语言 3 1.2.3 C语言是程序员的语言 3 1.3 C语言的程序结构 4 1.3.1 基本程序结构 4 1.3.2 函数库...
  • C语言程序设计(第五版)学习笔记

    千次阅读 多人点赞 2019-12-13 18:25:22
    1 最简单的C语言程序 程序总是从main函数开始执行的 在屏幕上输出Hello World! #include<stdio.h> int main(){ printf("Hello World!\n"); return 0; } 求两个整数之和 #include<...

    1 最简单的C语言程序

    程序总是从main函数开始执行的

    • 在屏幕上输出Hello World!
    #include<stdio.h>
    int main(){
    	printf("Hello World!\n");
    	return 0;
    }
    
    • 求两个整数之和
    #include<stdio.h>
    int main(){
    	int a,b,sum;
    	a=12;
    	b=28;
    	sum=a+b;
    	printf("sum=%d\n",sum);
    	return 0;
    }
    
    • 求两个数中的较大数
    #include <stdio.h>
    int max(int a,int b);
    int main(){
    	int a,b,c;
    	printf("请输入两个整数:\n");
    	scanf("%d%d",&a,&b);
    	c=max(a,b);
    	printf("两个数的较大数为:%d\n",c);
    	return 0;
    }
    int max(int a,int b){
    	int z;
    	z=(a>b)?a:b;
    	return z;
    }
    

    2 顺序结构程序设计

    简单的顺序程序设计

    VC++6.0中,编译系统把所有的实数都当成双精度数处理

    • 计算华氏温度(公式为:c=5/9*(f-32))
    #include <stdio.h>
    int main(){
    	float c;
    	float f=64.0;
    	c=5.0/9*(f-32);
    	printf("f=%f\nc=%f\n",f,c);
    	return 0;
    }
    
    • 计算存款1年的本息和
    #include <stdio.h>
    int main(){
    	float p0;	//本金
    	float p1;	//存款1年活期本息和
    	float p2;	//存款1年定期本息和
    	float p3;	//存款两次半年定期本息和
    	int a;
    	printf("请输入想要存入的金额:");
    	scanf("%f",&p0);
    	printf("请选择想要存款的方式:\n");
    	printf("1.存款1年活期,利息为0.0036\n");
    	printf("2.存款1年定期,利息为0.0225\n");
    	printf("3.存款两次半年定期,利息为0.0198\n");
    	scanf("%d",&a);
    	switch(a){
    		case 1:printf("您选择的存款方式为:存款1年活期,利息为0.0036\n存款1年后本息和为:%f\n",p1=p0*(1+0.0036));break;
    		case 2:printf("您选择的存款方式为:存款1年定期,利息为0.0225\n存款1年后本息和为:%f\n",p2=p0*(1+0.0225));break;		   
    		case 3:printf("您选择的存款方式为:存款两次半年定期,利息为0.0198\n存款1年后本息和为:%f\n",p3=p0*(1+0.0198/2)*(1+0.0198/2));break;	
    	}
    	return 0;
    }
    

    不同数据类型间的混合运算

    • 给定一个大写字母,要求用小写字母输出
    #include <stdio.h>
    int main(){
    	char c1,c2;
    	printf("请输入一个大写字母:");
    	scanf("%c",&c1);
    	c2=c1+32;
    	printf("您输入的大写字母为%c\n对应的小写字母为%c\n",c1,c2);
    	return 0;
    }
    

    赋值语句

    • 给出三角形的三边长,求三角形面积
    #include <stdio.h>
    #include <math.h>
    int main(){
    	double a,b,c,s,area;
    	printf("请输入三角形的三条边长:");
    	scanf("%lf%lf%lf",&a,&b,&c);
    	s=(a+b+c)/2;
    	area=sqrt(s*(s-a)*(s-b)*(s-c));
    	printf("三角形的面积为%lf\n",area);
    	return 0;
    }
    

    数据的输入输出

    • 求ax2+bx+c=0方程的根。(假设b2-4ac>0)
    #include <stdio.h>
    #include <math.h>
    int main(){
    	double a,b,c,disc,x1,x2;
    	printf("Plese input a,b,c:");
    	scanf("%lf%lf%lf",&a,&b,&c);
    	disc=b*b-4*a*c;
    	x1=(-b+sqrt(disc))/(2.0*a);
    	x2=(-b-sqrt(disc))/(2.0*a);
    	printf("x1=%lf,x2=%lf\n",x1,x2);
    	return 0;
    }
    
    • 保留双精度型的不同小数位数
    #include <stdio.h>
    int main(){
    	double a;
    	printf("Plese input a number:");
    	scanf("%lf",&a);
    	printf("%f\n",a);
    	printf("%lf\n",a);
    	printf("%7.2f\n",a);
    	printf("%20lf\n",a);
    	return 0;
    }
    

    字符输入输出

    • 输入一个大写字母,显示其对应的小写字母
    #include <stdio.h>
    int main(){
    	char c1,c2;
    	c1=getchar();
    	c2=c1+32;
    	putchar(c1);
    	putchar(c2);
    	putchar('\n');
    	return 0;
    }
    

    3 选择结构程序设计

    选择结构和条件判断

    • 求ax2+bx+c=0的根
    #include <stdio.h>
    #include <math.h>
    int main(){
    	double a,b,c,disc,x1,x2;
    	printf("Please input a,b,c:");
    	scanf("%lf%lf%lf",&a,&b,&c);
    	disc=b*b-4*a*c;
    	if(disc<0)
    		printf("该方程无实数根!\n");
    	else{
    		printf("x1=%f\n",x1=(-b+sqrt(disc))/(2*a));
    		printf("x2=%f\n",x2=(-b-sqrt(disc))/(2*a));
    	}
    }
    

    用if语句实现选择结构

    • 输入两个实数,按从小到大的顺序输出
    #include<stdio.h>
    int main(){
    	float a,b,t;
    	printf("Please input two numbers:");
    	scanf("%f%f",&a,&b);
    	if(a>b){
    		t=a;
    		a=b;
    		b=t;
    	}
    	printf("%5.2f%5.2f\n",a,b);
    	return 0;
    }
    
    • 输入3个数,按从小到大输出
    #include<stdio.h>
    int main(){
    	float a,b,c,t;
    	printf("Please input three numbers:");
    	scanf("%f%f%f",&a,&b,&c);
    	if(a>b){
    		t=a;
    		a=b;
    		b=t;
    	}
    	if(a>c){
    		t=a;
    		a=c;
    		c=t;
    	}
    	if(b>c){
    		t=b;
    		b=c;
    		c=t;
    	}
    	printf("%5.2f\t%5.2f\t%5.2f\n",a,b,c);
    	return 0;
    }
    

    条件运算符和条件表达式

    • 输入一个字母,若是大写字母,转换为小写后输出
    #include <stdio.h>
    int main(){
    	char ch;
    	printf("请输入一个字母:");
    	scanf("%c",&ch);
    	ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
    	printf("%c\n",ch);
    	return 0;
    }
    

    用switch语句实现多分支选择结构

    • 按考试等级输出分数段,A:85-100,B:70-84,C:60-69,D:< 60
    #include <stdio.h>
    int main(){
    	char grade;
    	printf("Please input your grade(A、B、C or D):");
    	scanf("%c",&grade);
    	printf("Your score:");
    	switch(grade){
    		case 'A': printf("85-100");break;
    		case 'B': printf("70-84");break;
    		case 'C': printf("60-69");break;
    		case 'D': printf("<60");break;
    		default : printf("Enter data error!");
    	}
    	printf("\n");
    	return 0;
    }
    
    • 用switch语句处理菜单命令
    #include <stdio.h>
    void action1(int,int);
    void action2(int,int);
    int main(){
    	int a=5,b=6;
    	char ch;
    	/*printf("Please input two numbers:");
    	scanf("%d%d",&a,&b);
    	printf("Please select an actions(A/a or B/b):");*/
    	ch=getchar();
    	switch(ch){
    		case'a':
    		case'A': action1(a,b);break;
    		case'b':
    		case'B': action2(a,b);break;
    		default : putchar('\a');	
    	}
    	return 0;
    }
    void action1(int x,int y){
    	printf("x+y=%d\n",x+y);
    }
    void action2(int x,int y){
    	printf("x*y=%d\n",x*y);
    }
    
    • 输入一个年份,判断是否为闰年
    #include <stdio.h>
    int main(){
    	int month;
    	printf("Please input a month:");
    	scanf("%d",&month);
    	if(((month%4==0)&&(month%100!=0))||(month%400==0))
    		printf("%d年是闰年!\n",month);
    	else
    		printf("%d年不是闰年!\n",month);
    	return 0;
    }
    

    4 循环结构程序设计

    break:结束整个循环,跳出循环体,执行循环之后的语句
    continue:结束本次循环,接着执行下一次循环

    用while语句实现循环

    • 求1+2+3+···+100的和
    #include <stdio.h>
    int main(){
    	int n=1,sum=0;
    	while(n<=100){
    		sum+=n;
    		n++;
    	}
    /*do{
    sum+=n;
    n++;
    }while(i<=100);*/
    	printf("sum=%d\n",sum);
    	return 0;
    }
    

    用break语句提前终止循环

    • 在全系1000名学生中举行慈善募捐,当总数达到10万时结束,统计此时捐款的人数及平均没人捐款的数目
    #include <stdio.h>
    #define SUM 100000
    int main(){
    	float amount,ave,total;
    	int i;
    	for(i=1,total=0;i<=1000;i++){
    		printf("Please input amount:");
    		scanf("%f",&amount);
    		total+=amount;
    		if(total>=SUM)
    			break;
    	}
    	ave=total/i;
    	printf("num=%d\nave=%f\n",i,ave);
    	return 0;
    }
    

    用continue提前结束本次循环

    • 输出100~200不能被3整除的数
    #include <stdio.h>
    int main(){
    	int n;
    	for(n=100;n<=200;n++){
    		if(n%3==0)
    			continue;
    		printf("%d ",n);
    	}
    	printf("\n");
    	return 0;
    }
    
    • 输出一个4*5的矩阵
    #include <stdio.h>
    int main(){
    	int i,j,n=0;
    	for(i=1;i<=4;i++)
    		for(j=1;j<=5;j++,n++){
    			if(n%5==0)
    				printf("\n");
    			printf("%d\t",i*j);
    		}
    	printf("\n");
    	return 0;
    }
    

    5 利用数组处理批量数据

    引用一维数组元素

    • 对10个数组元素依次赋值0-9,再逆序输出
    #include <stdio.h>
    int main(){
    	int n,a[10];
    	for(n=0;n<10;n++)
    		a[n]=n;
    	for(n=9;n>=0;n--)
    		printf("%d  ",a[n]);
    	printf("\n");
    	return 0;
    }
    
    • 用数组来处理Flbonacci数列问题
    #include <stdio.h>
    int main(){
    	int i;
    	int a[20]={1,1};
    	for(i=2;i<20;i++)
    		a[i]=a[i-2]+a[i-1];
    	for(i=0;i<20;i++){
    		if(i%5==0)
    			printf("\n");
    		printf("%7d ",a[i]);
    	}
    	printf("\n");
    	return 0;
    }
    

    冒泡排序

    每次比较相邻两个数,将小的调到前面

    • 输入10个数,将它们按从小到大排序输出(冒泡排序)
    #include <stdio.h>
    int main(){
    	int i,j,t;
    	int a[10];
    	printf("Please input 10 numbers:");
    	for(i=0;i<10;i++)
    		scanf("%d",&a[i]);
    	for(j=0;j<9;j++)
    		for(i=0;i<9-j;i++){
    			if(a[i]>a[i+1]){
    				t=a[i];
    				a[i]=a[i+1];
    				a[i+1]=t;
    			}
    		}
    	for(i=0;i<10;i++)
    	printf("%d ",a[i]);
    	printf("\n");
    	return 0;
    }
    

    引用二维数组

    • 输入一个2行3列的二维数组,将其行列交换位置后输出到另一个数组
    #include <stdio.h>
    int main(){
    	int a[2][3];
    	int b[3][2];
    	int i,j;
    	printf("Please input 6 numbers for array a:");
    	for(i=0;i<=1;i++)
    		for(j=0;j<=2;j++)
    			scanf("%d",&a[i][j]);
    	printf("array a:\n");
    	for(i=0;i<=1;i++){
    		for(j=0;j<=2;j++){
    			printf("%d ",a[i][j]);
    			b[j][i]=a[i][j];
    		}
    		printf("\n");
    	}
    	printf("array b:\n");
    	for(i=0;i<=2;i++){
    		for(j=0;j<=1;j++)
    			printf("%d ",b[i][j]);
    		printf("\n");
    	}
    	return 0;
    }
    

    打擂台法求最值

    • 输入一个3*4的矩阵,输出最大的元素及其行列号(打擂台法)
    #include <stdio.h>
    int main(){
    	int a[3][4];
    	int i,j,row=0,colum=0;
    	int max=0;
    	printf("Please input 12 numbers:");
    	for(i=0;i<3;i++)
    		for(j=0;j<4;j++)
    			scanf("%d",&a[i][j]);
    	for(i=0;i<3;i++)
    		for(j=0;j<4;j++){
    			if(a[i][j]>max){
    				max=a[i][j];
    				row=i;
    				colum=j;
    			}
    		}
    	printf("max=%d\nrow=%d\ncolum=%d\n",max,i,j);
    	return 0;
    }
    

    引用字符数组中的元素

    • 输出一个菱形
    #include <stdio.h>
    int main(){
    	int i,j;
    	char a[][5]={
    		{' ',' ','*'},
    		{' ','*',' ','*'},
    		{'*',' ',' ',' ','*'},
    		{' ','*',' ','*'},
    		{' ',' ','*'}
    	};
    	for(i=0;i<5;i++){
    		for(j=0;j<5;j++)
    			printf("%c",a[i][j]);
    		printf("\n");
    	}
    	return 0;
    }
    
    • 输入一行字符,统计其中有多少单词,单词之间用空格分开
    #include <stdio.h>
    int main(){
    	char string[100];
    	int i,num=0,word=0;
    	char c;
    	gets(string);
    	for(i=0;(c=string[i])!='\0';i++){
    		if(c==' ')
    			word=0;
    		else if(word==0){
    			word=1;
    			num++;
    		}
    	}
    	printf("There are %d words in this line.\n",num);
    	return 0;
    }
    

    6 用函数实现模块化程序设计

    实参和形参间的数据传递

    • 输入两个整数,输出其中较大者
    #include <stdio.h>
    int max(int x,int y);
    int main(){
    	int a,b;
    	printf("Please input two integer numbers:");
    	scanf("%d%d",&a,&b);
    	printf("max is %d\n",max(a,b));
    	return 0;
    }
    int max(int x,int y){
    	int z;
    	z=x>y?x:y;
    	return (z);
    }
    

    函数原型

    • 输入两个实数,用一个函数求出它们之和
    #include <stdio.h>
    float add(float,float);
    int main(){
    	float a,b,c;
    	printf("Please input two numbers:");
    	scanf("%f%f",&a,&b);
    	printf("sum=%.2f\n",c=add(a,b));
    	return 0;
    }
    float add(float x,float y){
    	return (x+y);
    }
    

    函数的嵌套调用

    在调用一个函数的过程中,又调用另一个函数

    • 输入4个整数,找出其中最大的数
    #include <stdio.h>
    int max4(int,int,int,int);
    int max2(int,int);
    int main(){
    	int a,b,c,d,max;
    	printf("Please inout 4 integer numbers:");
    	scanf("%d%d%d%d",&a,&b,&c,&d);
    	max=max4(a,b,c,d);
    	printf("max=%d\n",max);
    	return 0;
    }
    int max4(int a,int b,int c,int d){
    	return max2(max2(max2(a,b),c),d);
    }
    int max2(int a,int b){
    	return (a>=b?a:b);
    }
    

    函数的递归调用

    在调用一个函数的过程中,又直接或间接调用该函数本身

    • 用递归方法求n!
    #include <stdio.h>
    int f(int);
    int main(){
    	int n;
    	printf("Please input an integer number:");
    	scanf("%d",&n);
    	printf("%d!=%d\n",n,f(n));
    	return 0;
    }
    int f(int n){
    	int m;
    	if(n<0)
    		printf("n<0,data is error!\n");
    	else if(n==0||n==1)
    		m=1;
    	else 
    		m=n*f(n-1);
    	return m;
    }
    

    数组元素作函数实参

    数组元素可以作函数实参,不能作函数形参
    数据传输方向是从实参到形参,单向传递

    • 输入10个数,要求输出其中值最大的元素和该数是第几个数
    #include <stdio.h>
    int max(int,int);
    int main(){
    	int a[10],m,n,i;
    	printf("Please input 10 integer numbers:");
    	for(i=0;i<10;i++)
    		scanf("%d",&a[i]);
    	for(i=1,m=a[0],n=0;i<10;i++)
    		if(max(m,a[i])>m){
    			m=max(m,a[i]);
    			n=i;
    		}
    	printf("The largest number is %d\nIt is the %dth number\n",m,n+1);
    	return 0;
    }
    int max(int x,int y){
    	return x>y?x:y;
    }
    

    一维数组名作函数参数

    • 输入10个学生的成绩放入一维数组score中,求平均成绩
    #include <stdio.h>
    float aver(float a[ ],int n);
    int main(){
    	float score[10];
    	int i;
    	printf("Please input 10 scores:");
    	for(i=0;i<10;i++)
    		scanf("%f",&score[i]);
    	printf("The average score is %.2f\n",aver(score,10)); //函数调用数组时,直接用数组名
    	return 0;
    }
    float aver(float a[ ],int n){
    	float sum=a[0];
    	for(int i=1;i<n;i++)
    		sum=sum+a[i];
    	return (sum/10);
    }
    

    选择法排序

    • 用选择法对数组中的10个整数按由小到大排序
    #include <stdio.h>
    void sort(int array[],int n);
    int main(){
    	int i,a[10];
    	printf("Please input 10 integer numbers:");
    	for(i=0;i<10;i++){
    		scanf("%d",&a[i]);
    	}
    	sort(a,10);
    	return 0;
    }
    void sort(int array[],int n){
    	int i,j,t;
    	for(i=0;i<n-1;i++){
    //每比完一次后,最小的数就在第一个,然后从第二个数继续比较,所以j=i+1
    		for(j=i+1;j<n;j++){
    			if(array[i]>array[j]){
    				t=array[j];
    				array[j]=array[i];
    				array[i]=t;
    			}
    		}
    	}
    	for(i=0;i<n;i++)
    		printf("%d ",array[i]);
    	printf("\n");
    }
    

    多维数组名作函数参数

    二维数组作形参时,第2维大小不能省略,且要与实参数组第2维大小相同

    • 输入一个3*4的矩阵,求所有元素中的最大值
    #include <stdio.h>
    int max(int array[][4]);
    int main(){
    	int i,j,a[3][4];
    	printf("Please input 12 integer numbers:");
    	for(i=0;i<3;i++)
    		for(j=0;j<4;j++)
    			scanf("%d",&a[i][j]);
    	printf("The a[3][4] is:\n");
    	for(i=0;i<3;i++){
    		for(j=0;j<4;j++)
    			printf("%d\t",a[i][j]);
    		printf("\n");
    	}
    	printf("Max is %d\n",max(a));
    	return 0;
    }
    int max(int array[][4]){
    	int i,j;
    	int max=array[0][0];
    	for(i=0;i<3;i++)
    		for(j=0;j<4;j++)
    			if(array[i][j]>max)
    				max=array[i][j];
    	return (max);
    }
    

    全局变量

    • 有一个一维数组,内放10个学生的成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分
    #include <stdio.h>
    float Max=0,Min=0;
    float aver(float array[],int n);
    int main(){
    	int i;
    	float a[10],ave;
    	printf("Please input 10 numbers:");
    	for(i=0;i<10;i++)
    		scanf("%f",&a[i]);
    	printf("Max=%.2f\nMin=%.2f\naverage=%.2f\n",Max,Min,aver(a,10));
    	return 0;
    }
    float aver(float array[],int n){
    	float ave;
    	float sum=array[0];
    	int i;
    	Max=Min=array[0];
    	for(i=1;i<n;i++){
    		if(array[i]>Max)
    			Max=array[i];
    		else if(array[i]<Min)
    			Min=array[i];
    		sum+=array[i];
    	}
    	ave=sum/n;
    	return (ave);
    }
    

    全局变量与局部变量同名的情况

    • 调用函数比较两数的大小
    #include <stdio.h>
    int a=3,b=5;
    int max(int,int);
    int main(){
    	int a;
    	a=8;
    	printf("max=%d\n",max(a,b));
    	return 0;
    }
    int max(int a,int b){
    	return a>b?a:b;
    }
    

    7 善于利用指针

    简单使用指针变量

    • 通过指针变量访问整型变量
    #include <stdio.h>
    int main(){
    	int a=100,b=10;
    	int *p1,*p2;
    	p1=&a;
    	p2=&b;
    	printf("a=%d\tb=%d\n",a,b);
    	printf("p1=%d\tp2=%d\n",*p1,*p2);
    	return 0;
    }
    

    引用指针变量

    • 输入a和b两个整数,用指针实现按先大后小的顺序输出a和b
    #include <stdio.h>
    int main(){
    	int a,b;
    	int *p1,*p2;
    	printf("Please input two integer numbers:");
    	scanf("%d%d",&a,&b);
    	p1=&a;
    	p2=&b;
    	if(a<b){
    		p1=&b;
    		p2=&a;
    	}
    	printf("a=%d\tb=%d\nmax=%d\n",a,b,*p1);
    	return 0;
    }	
    

    指针变量作为函数参数

    • 输入a和b两个整数,用指针作为函数参数,实现按先大后小的顺序输出a和b
    #include <stdio.h>
    void swap(int *p1,int *p2);
    int main(){
    	int a,b;
    	int *pointer1,*pointer2;
    	printf("Please input two integer numbers:");
    	scanf("%d%d",&a,&b);
    	pointer1=&a;
    	pointer2=&b;
    	swap(pointer1,pointer2);
    	printf("a=%d\tb=%d\nmax=%d\n",a,b,*pointer1);
    	return 0;
    }
    void swap(int *p1,int *p2){
    	int temp;
    	if(*p1<*p2){
    		temp=*p1;
    		*p1=*p2;
    		*p2=temp;
    	}
    }
    

    通过指针引用数组元素

    • 有一个整型数组a,有10个元素,用指针输出数组中的全部元素
    #include <stdio.h>
    int main(){
    	int a[10],*p;
    	printf("Please input 10 integer numbers:");
    	for(p=a;p<(a+10);p++)
    		scanf("%d",p);
    	for(p=a;p<(a+10);p++)
    		printf("%d  ",*p);
    	printf("\n");
    	return 0;
    }	
    

    9 用户自己建立数据类型

    结构体变量的初始化和引用

    • 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息
    #include <stdio.h>
    struct Student{
    	long int num;
    	char name[20];
    	char sex;
    	char addr[20];
    };
    int main(){
    	struct Student stu={2018140467,"LiaoYuanyang",'M',"淮工宋跳校区"};
    	printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",stu.num,stu.name,stu.sex,stu.addr);
    	return 0;
    }
    
    • 输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩
    #include <stdio.h>
    int main(){
    	struct Student{
    		int num;
    		char name[20];
    		float score;
    	}stu1,stu2;
    	printf("请输入第1个学生的学号、姓名和成绩:");
    	scanf("%d%s%f",&stu1.num,stu1.name,&stu1.score);
    	printf("请输入第2个学生的学号、姓名和成绩:");
    	scanf("%d%s%f",&stu2.num,stu2.name,&stu2.score);
    	printf("The higher score is:\n");
    	if(stu1.score>stu2.score)
    		printf("%d  %s  %6.2f\n",stu1.num,stu1.name,stu1.score);
    	else if(stu1.score<stu2.score)
    		printf("%d  %s  %6.2f\n",stu2.num,stu2.name,stu2.score);
    	else{
    		printf("%d  %s  %6.2f\n",stu1.num,stu1.name,stu1.score);
    		printf("%d  %s  %6.2f\n",stu2.num,stu2.name,stu2.score);
    	}
    	return 0;
    }
    

    用结构体变量和结构体变量的指针作函数参数

    • 有10个学生,每个学生的数据包括学号、姓名、3门课成绩,输入10个学生的数据,要求输出3门课的总平均成绩,以及最高分的学生的数据
    #include <stdio.h>
    #define N 10
    struct Student{
    	int num;
    	char name[10];
    	float score[3];
    	float aver;
    };
    void input(struct Student stu[]);
    struct Student max(struct Student stu[]);
    void print(struct Student stu1);
    int main(){
    	struct Student stu[N],*p;
    	p=stu;
    	input(p);
    	print(max(p));
    	return 0;
    }
    void input(struct Student stu[]){
    	int i;
    	printf("请输入各个学生的学号、姓名和3门课成绩:\n");
    	for(i=0;i<N;i++){
    		scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
    	stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
    	}
    }
    struct Student max(struct Student stu[]){
    	int i,m=0;
    	for(i=1;i<N;i++){
    		if(stu[i].aver>stu[m].aver)
    			m=i;
    	}
    	return stu[m];
    }
    void print(struct Student stu1){
    	printf("\n成绩最高的学生是:\n");
    	printf("学号:%d\n姓名:%s\n三门课成绩:%8.2f%8.2f%8.2f\n平均成绩:%8.2f\n",
    		stu1.num,stu1.name,stu1.score[0],stu1.score[1],stu1.score[2],stu1.aver
    	);
    }
    

    10 基本的代码规范

    程序版式

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    注释规范

    写注释给谁看?
    在这里插入图片描述
    写注释最重要的功效在于传承
    在这里插入图片描述
    好的注释
    在这里插入图片描述
    在哪些地方写注释
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    灵活注释
    在这里插入图片描述

    命名规则

    在这里插入图片描述

    展开全文
  • 谭浩强c语言程序设计(第3版)电子书

    千次下载 热门讨论 2020-07-29 14:21:25
    谭浩强c语言程序设计(第3版)电子书  1 C语言概述  1.1 C语言的发展过程  1.2 当代最优秀的程序设计语言  1.3 C语言版本  1.4 C语言的特点  1.5 面向对象的程序设计语言  1.6 C和C++  1.7 简单的C...
  • C语言程序设计第五版 谭浩强 第五版课后答案

    万次阅读 多人点赞 2020-07-03 10:31:02
    谭浩强 C语言程序设计第五版 第4章课后答案 3.求两个正整数m和n,求其最大公约数和最小公倍数。 #include<stdio.h> void main() { int m, n, t, i, a = 1; scanf("%d%d", &m, &n); if (m < n) ...

    谭浩强 C程序设计第五版 第五版课后答案

    c程序设计

    第一章

    在这里插入图片描述

    1.什么是程序?什么是程序设计?

    • 程序:就是一组能识别和执行的指令,每一条指令使计算机执行特定的操作

    • 程序设计:是指从确定任务到得到结果、写出文档的全过程

    2.为什么需要计算机语言?高级语言有哪些特点?

    • 为什么需要计算机语言:计算机语言解决了人和计算机交流是的语言问题,使得计算机和人都能识别

    • 高级语言有哪些特点:
      2.1 高级语言的数据结构要比汇编和机器语言丰富;
      2.2 高级语言与具体机器结构的关联没有汇编以及机器语言密切;
      2.3 高级语言更接近自然语言更容易掌握;
      2.4 高级语言编写的程序要经过编译或解释计算机才能执行;

    3.正确理解以下名词及其含义:

    (1)源程序,目标程序,可执行程序。

    • ​源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令

    • 目标程序:为源程序经编译可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名

    • 可执行程序:将所有编译后得到的目标模块连接装配起来,在与函数库相连接成为一个整体,生成一个可供计算机执行的目标程序,成为可执行程序

    (2)程序编辑,程序编译,程序连接。

    程序编辑:上机输入或者编辑源程序。

    程序编译:

    • 先用C提供的“预处理器”,对程序中的预处理指令进行编译预处理
    • 对源程序进行语法检查, 判断是否有语法错误,直到没有语法错误未知
    • 编译程序自动把源程序转换为二进制形式的目标程序

    程序连接:将所有编译后得到的目标模块连接装配起来,在与函数库相连接成为一个整体的过程称之为程序连接

    (3)程序,程序模块,程序文件。

    • 程序:一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具

    • 程序模块:可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令

    • 程序文件:程序的文件称为程序文件,程序文件存储的是程序,包括源程序和可执行程序

    (4)函数,主函数,被调用函数,库函数。

    • 函数:将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,来完成一定功能

    • 主函数:又称main函数,是程序执行的起点

    • 被调用函数:由一个函数调用另一个函数,则称第二个函数为被调用函数

    • 库函数:一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是

    ​ 编译器特定的库函数

    (5)程序调试,程序测试。
    • 程序调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程

    • 程序测试:是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行

    4.编写一个C程序,运行时输出

    Hello World!
    这个程序是一些国外C教材中作为第一个程序例子介绍的,一般称为Hello程序。

    代码示例:

    #include <stdio.h>
    
    int main()
    {
    	printf("%s\n", "Hello World!");
    	return 0;
    }
    

    运行截图:

    C程序设计第五版谭浩强第4题答案

    5.编写一个C程序,运行时输出以下图形:

    ****

    ****

    ​ ****

    ​ ****

    代码示例:

    #include <stdio.h>
    
    int main()
    {
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < i; j++)
    		{
    			printf("%s", "  ");
    		}
    		printf("%s\n", "*****");
    	}
    	return 0;
    }
    

    运行截图:

    C语言程序设计第五版谭浩强第5题答案

    6.编写一个C程序,运行时输人a,b,c三个值,输出其中值最大者。

    代码示例:

    #include<stdio.h>
    
    int main()
    {
    	int a, b, c, max;
    	printf("请输入三个数:\n");
    
    	scanf("%d%d%d", &a, &b, &c);
    	if (a > b)
    	{
    		max = a;
    	}
    	else
    	{
    		max = b;
    	}
    
    	if (c > max)
    	{
    		max = c;
    	}
    	printf("三个数中最大的数为:%d", max);
    	return 0;
    
    }
    

    运行截图:

    C语言程序设计第五版谭浩强第6题答案

    7.看懂《C程序设计(第五版)学习辅导》第16章中介绍的用Visual Studio 2010对C程序进行编辑、编译、连接和运行的方法,并进行以下操作:

    (1)建立一个新项目,定名为project1.

    C语言程序设计第五版谭浩强第6题答案

    (2)建立一个新文件,定名为test1。

    C语言程序设计第五版谭浩强课后答案 第二题

    (3)向test1 文件输人源程序(此源程序为读者自己编写的程序)。

    C语言程序设计第五版谭浩强课后答案 第三题

    (4)编译该源程序,如发现程序有错,请修改之,直到不出现“编译出错”为止。

    (5)连接并运行, 得到结果。分析结果。

    C程序设计第五版课后答案

    更多相关文章

    C程序设计第五版谭浩强课后习题答案 第一章
    C程序设计第五版谭浩强课后习题答案 第二章
    C程序设计第五版谭浩强课后习题答案 第三章
    C程序序设计第五版谭浩强课后习题答案 第四章
    C语言程序设计第五版谭浩强课后习题答案 第五章
    C语言程序设计第五版谭浩强课后习题答案 第六章
    C语言程序设计第五版谭浩强课后习题答案 第七章
    C语言程序设计第五版谭浩强课后习题答案 第八章
    C语言程序设计第五版谭浩强课后习题答案 第九章
    C语言程序设计第五版谭浩强课后习题答案 第十章

    展开全文
  • C语言程序设计---读书笔记1

    千次阅读 多人点赞 2019-10-18 16:05:45
    一 写在前面 1、书籍信息 作者:(美)Brian W. Kernighan / (美)Dennis M.... 原作名: The C Programming Language 2、简单叙述 ...1978 : The C Programming Language ,第1版 ...1983 : ANSI 建立 X3J11 委员会 ...

    一  写在前面

    1、书籍信息

    作者:(美)Brian W. Kernighan / (美)Dennis M. Ritchie

    原作名: The C Programming Language

    2、简单叙述

    1978 : The C Programming Language ,第1版

    1983 : ANSI 建立 X3J11 委员会 (标准 C)

    1988 : The C Programming Language ,第2版

    1989 : C89 ,ANSI C 标准出版

    笔记为第二版,译者: 徐宝文 / 李志。

    笔记中的知识点可能来自书中不同的章节。

    解释与思考部分并不全是书中的内容,也包括经验之谈、网上资料。

     

    正文

    二   类型、运算符与表达式

    2.1、变量    (书中关于变量的介绍在第四章也有介绍,此处有第四章的内容)

    2.1.1 命名规则

    变量由字母、数字组成且第一个字母不能是下划线(下划线看作字母)。

    内部名长度不要超过31个字符,外部名不要超过6个字符。

    C语言中的关键字不能用作变量名。

    解释与思考

      内部名:在本文件内使用的变量名;

      外部名:文件之间相互调用的变量(不用刻意理解)

      变量可以按照不同的依据进行分类,接触最多的有三种分类

            ①按照变量类型进行区分,如:  int型变量、long型变量、char型变量等

            ②按照不同关键字进行区分,如: 静态变量(static)自动变量(auto)寄存器变量(register)、外部变量(extern)

                static修饰的变量有两种情况:

                a: 修饰局部变量时,将会改变该变量在程序中分布,会存在于.data和.bss段;

                b: 修饰全局变量时,将会限定该变量只在本文件中使用

                auto修饰的变量存在于栈区

                register修饰的变量存在于寄存器中,不能寻址

                 举例:

                 

                 

                extern修饰的变量有两种情况:

                a:该变量在其他文件中定义,想在本文件中使用,需要加extern声明

                b:  在变量未定义之前就使用,需要在定义时加extern声明

            ③按照变量的作用域区分,如全局变量、局部变量

                全局变量能够作用与程序的始终

                局部变量只能作用于函数体内

    三种变量分类之间相互交叉,可以根据变量的不同修饰词对变量的特点进行判断

                如:静态变量既可以是全局的也可以是局部的;

                       int型变量可以全局的也可以是局部的等等;

                       静态局部变量只能函数内使用,但是存在于 .data 或 .bss段,因此生命周期贯穿程序始终。

     

    2.1.2  变量的声明、初始化、定义

    声明:指明一种数据类型

    初始化:变量名后面紧跟一个等号和一个表达式

    定义:指定变量所占地址空间的长度

    解释与思考

    变量的声明都可以使用限定符进行限定,如: constvolatile等

    const:

    作用是指定的变量不能被修改.

    经常谈及:指针常量、常量指针。

    int * const p; 指针的指向不能变

    const 修饰变量,类型是指针,因此称为指针常量。作用是指针的指向不能改变,但是指向的值可以改变

        

        

        

    const int * p; 指针指向的值不能变

      const 修饰类型,变量是 p,因此称为常量指针。作用是不能使用该指针修改变量的值,但是指针的指向可以改变.

        

        

        

    volatile:

    告诉编译器在每次使用该对象值时,都要重新读取它

    ———————————————————————————————

    2.2、数据类型及长度

    基本类型  char、int、float(单精度浮点型)、double(双精度浮点型)

    修饰词short、long、unsigned、signed

    解释与思考

     short 与 long其实是short int与long int 的缩写,用来满足不同长度的整型数

    short与int至少16位,long至少32位,长度之间应满足 short =< int =< long

    float、double、long double(高精度浮点型)三者之间可以表示为相同的长度或者三种不同的长度,取决于具体实现

    ———————————————————————————————

    2.3、运算符及表达式

    2.3.1 运算符:

    算术运算符:+  -  *  /(取整)  %(取余)

    关系运算符:>   >=   <   <=   ==   !=

    逻辑运算符:&&   ||    !

    自增自减运算符: ++   --

    位运算符: &   |  ^(异或)  <<   >>  ~

    赋值运算符: =   +=   -=   *=   /=   %=

    三元运算符:   ?:(expr1?expr2:expr3)

    sizeof运算符:计算某种类型在内存中的长度

    逗号(,)运算符: 分割一对表达式按从左到右的顺序进行求值

    解释与思考

    • 运算符有优先级之分,同一优先级,结合性相同。但是C语言没有指定同一运算符中多个操作数的计算顺序。例:

         x = f()+ g();

         f()可以在g()之前计算也可以在g()之后计算。因此如果函数f或者g改变了另一个函数所用的值,那么x的结果可能会依赖这两个       函数的计算顺序。为了保证特定的计算顺序,可以把中间结果保存在临时变量中

         类似,C语言也没有指定函数各参数的求值顺序,例:

          printf("%d %d\n", ++n, power(2, n)); 

          在不同的编译器中可能会产生不同的结果,这取决于n的自增运算在power调用之前还是之后。如果想解决这种冲突,可以这        样  

          ++n;

          printf("%d %d\n", n, power(2, n));

         对于三元运算符 (expr1?expr2:expr3)

          首先计算expr1,如果值不等于0(为真),则计算expr2,并以该值作为条件表达式的值,否则计算expr3的值,并以该值作        为表达式的值,expr2和expr3只能有一个表达式被计算

          对于一元二元三元运算符的区分是根据运算符结合操作数的个数决定的。

           例:a++,++就是一元运算符,a+b,+就是二元运算符。

    • 对于a++和++a类似的自增运算:

    效果都是将变量加 1 。

    当作为前缀运算符时,表达式 ++n 先将 n 的值加 1 ,然后再使用 n 的值,

    当作为后缀操作符是,表达式 n++ 是先使用变量 n 的值, 然后再将 n 的值 加 1。

     

    2.3.2 表达式:

    书中没有给出明确的定义。

    表达式可以理解为  运算符+变量或者常量的组合。

    ————————————————————————————

    2.4、变量、数组、结构的初始化

    2.4.1 对变量的初始化

    int i = 0;

    2.4.2 对数组的初始化

    数组初始化可以在声明的后面紧跟一个初始化表达式列表,初始化表达式列表用花括号括起来,各初始化表达式之间通过逗号分隔。

    int arr[5] = {1, 2, 3, 4, 5};

    当省略数组数组长度时,编译器将把括号中初始化表达式的个数作为数组的长度。

    int arr[] = {1, 2, 3, 4, 5};

    如果初始化表达式的个数比数组元素少,则尾部余下的数组成员将被初始化为 0

    int arr[500] = {1, 2};

     

    不管是通过printf 打印还是 gdb 的调试输出信息都可以看出,尾部元素被初始化为0。

     

    2.4.3 对结构的初始化

    对于结构的初始化可以是类型相同的变量,也可以在花括号内按成员依次初始化

     

    三  控制流

    3.1、if-else

    if (表达式)     //表达式为真(非0即真),则执行语句1,表达式值为0,执行else的语句体

    {

         语句1;   //单独有一条语句时,可以省略大括号;下面的else同理

    }

    else             //根据需要该else可要可不要,每个 else 与最近的前一个没有 else 配对的且没有在 {} 体内的 if 进行匹配

    {

        语句2;

    }

    解释与思考

    对于嵌套的 if 语句最好能用合理缩进和相应的 {} 进行逻辑的匹配

    ——————————————

    3.2、else if 语句

    if  (表达式)    

    {

         语句;    //单独有一条语句时,可以省略大括号;下面的else if  和 else同理

    }

    else if  (表达式)              

    {

        语句;

    }

    else if  (表达式)              

    {

        语句;

    }

    else

    {

      语句;

    }

    解释与思考

    这种if语句时编写多路判定的最常用的方法,其中的各个表达式将别一次求值,一旦某个表达式结构为真,则执行与之相关的语句,并且终止整合语句序列的执行。

    ————————————————————————————

    3.3、switch语句

    switch (表达式)

    {

        case 常量表达式: 语句序列;       //语句序列可以是一条也可以是多条

        case 常量表达式: 语句序列;

        default: 语句序列;                    //该分支可要可不要

    }

    解释与思考

    对于没有 break 关键字的 case 分支中,switch 的表达式会匹配每一个 case 的表达式,如果匹配到则会执行相应的语句序列,且会往下继续匹配直到最后一条分支

    ————————————————————————————

    3.4、while与for循环语句

    while(表达式)

    {

        语句;

    }

    for(表达式1;表达式2;表达式3)

    {

        语句;

    }

    解释与思考

    while 和 for 循环语句可以在一定情况下进行相互的转换。

    对于 for 循环表达式1 和表达式3 是赋值表达式或者函数调用,表达式2 是关系表达式。

    三个表达式的关系是:

    ————————————————————————————

    3.5、do-while循环

    do

    {

        语句;

    }

    while(表达式);

    解释与思考

    do-while 循环中,先执行循环体中的语句部分,然后再求表达式的值。如果表达式值为真,则再次执行语句,以此类推。当表达式为假时则循环终止。

    ————————————————————————————

    3.6、break与continue

    break 语句可用于从for、while、do-while 等循环中提前退出,就如同 switch 语句中用break可以提前退出一样,能使程序从switch 语句中或者最内层循环中立即跳出。

    continue 语句可用于使for、while、do-while语句开始下一次循环的执行。

    解释与思考

    在 while、do-while 语句中使用 continue 语句将意味着立即执行判断表达式,然后进行下一次循环

    在 for 循环中使用 continue 语句将意味着控制转移到表达式3部分,然后再进行下一次的判断、循环

    continue语句不用与 switch 语句,某个循环汇包含的 switch 语句中的 continue 语句,将导致下一次循环

    ————————————————————————————

    3.7、goto语句与标号

    C语言提供可随意使用的 goto 语句以及标记跳转位置的标号。

    解释与思考

    标号的命名与变量的命名形式相同,标号后面要紧跟一个冒号

    标号的作用域是 goto 所在的函数内

    goto 只能用于函数内之间的跳转,对于函数之间的跳转应使用setjmp和longjmp

     

    四  函数

    4.1、定义

    返回值类型    函数名(参数声明表)

    {

         声明和语句  

    }

    其中函数定义中的各个部分都可以省略,例如  dummy(){  }; 

    解释与思考

    函数定义中省略返回值类型时,默认为int类型。

    函数之间通信通过参数、函数返回值、以及外部变量进行。

    return语句的后面可以跟任何表达式,必要时表达式转换为函数的返回值类型,函数可以忽略返回值,return 语句不一定需要跟表达式。

    C 语言不允许在函数中定义函数。

    ————————————————————————————

    4.2、递归

    递归并不节省存储器的开销,必须考虑递归的深度,防止栈溢出。

    ————————————————————————————

    4.3、C 预处理器

    预处理器执行宏替换、条件编译以及包含指定文件。

    预处理的过程主要划分为以下几个阶段:

    •   处理三字符序列;
    •   处理反斜杠 \ 符;
    •   注释替换为空白符,执行预处理指令;
    •   处理转义字符

       4.3.1 三字符序列

    ??= #

    ??( [

    ??< {

    ??/ \

    ??) ]

    ??> }

    ??' ^

    ??! |

    ??- ~

         解释与思考

         三字符序列以 ?? 开头另加一个字符来表示其它字符。

         当程序中出现了意想不到的异常现象时,且观察程序周围有 ?? 字符时,可以考虑一下三字符序列。例如:(-trigraphs 是为了       使能三字符的处理)

          

          

     4.3.2 反斜杠 \

    反斜杠 \ 符其实是行连接的作用,通过反斜杠 \ 可以将若干指令合并成一行。

    4.3.3 主要的预处理指令

          宏定义

          形式:

           #define 标识符 记号序列

    例1:

    #define TABSIZE 100

    int table[TABSIZE];

    #define 标识符(标识符表opt) 记号序列

    例2:

    #define ABSDIFF(a, b) ((a)>(b) ? (a)-(b) : (b)-(a))

    解释与思考

    对于 # 和 ## 的处理

    对于 #,如果记号序列中的某个形式参数前面直接是一个 # 符号,相应的形式参数的两边将被加上双引号 “  ,随后形式参           数标识符将被用引号引起来的实际参数替换。

    例如:

            

            

            

    其中, gcc  -E 为gcc 的预处理命令。

    对于 ## ,如果记号序列中包含一个 ## 运算符,在形式参数替换后都要把 ## 以及其前后的空白符都删除掉,以便将相邻记         号连接起来形成一个新记号。

    例如:

            

            

    对于 ## ,宏调用 cat(cat(1,2),3) 没有定义:## 阻止外层调用的参数的扩展,如果引入第二层的宏定义:

    #define xcat(x, y) cat(x,y)

    就可以得到正确的结果,xcat(xcat(1, 2), 3) 将会生成123,因为xcat 自身的扩展不包含 ##

    运算符。

     

    文件包含

    形式:

    #include  <文件名>

    #include  “文件名”

    解释与思考

    对于 <> 和 “” 

    如果是 <> 则在特定的位置查找指定的文件,查找的位置与具体实现相关。

    如果是 ”” 则在源文件所在的位置查找给该文件,如果该位置没有找到该文件,则将会根据 <> 的规则查找该文件。

     

    条件编译

    形式1:

    #if 常量表达式

    #elif 常量表达式

    #else

    #endif  

    形式2:

    #ifdef 标识符

    #endif

    #if defined 标识符

    #endif

    形式3:

    #ifndef 标识符

    #endif

    #if  !defined 标识符

    #endif

     

    pragma

    形式:

    #pragma 记号序列

    将使预处理器执行一个与具体实现相关的操作。

     

    错误信息生成

    形式:

    #error 记号序列

    将使预处理器打印包含该记号序列的诊断信息。

     

    预定义的名字

    __LINE__ 包含当前源文件行数的十进制常量

    __FILE__  包含正在被编译的源文件的名字的字符串的字面值。

    __DATE__ 包含编译日期的字符串字面值,其形式 “Mmm dd yyyy”

    __TIME__ 包含编译的时间的字符串字面值,骑行时为 “hh:mm:ss”

    __STDC__ 整型常量 1

    例如:

            

     

     

    展开全文
  • C语言程序设计50例(经典收藏)(一)

    万次阅读 多人点赞 2018-07-10 10:58:02
    程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。http://www.jiakang021.com组成所有的排列后再去掉不满足条件...
  • 传说中的K&R C,c语言创始人编写,最经典的c编程书籍,没有之一!
  • c语言程序设计教程

    2020-07-30 23:31:22
    本书由9章组成,内容主要包括 :C语言程序设计基础知识、简单的 C程序设计一、程序的控制结构与结构 化程序设计方法 、函数与模块化程序设计方法、数组 与指针一、结构体 与共用体 、关于函数应用的高级话题、文件 ...
  • C语言程序设计期末考试模拟试卷

    千次阅读 2019-04-17 18:49:46
    单项选择题 ...1) 若有以下程序段 int r=8; printf("%d\n",r>>1); 输出结果:是( )。A.4B.8C.16D.2 2) 若有以下语句 typedef struct S { int g; char h; } T; 以下叙述中正确的是(...
  • C语言程序设计第四版谭浩强课后习题答案 完整版下载地址:http://download.csdn.net/download/xw791488540/3778054?utm_source=blogseo第一章 程序设计和C语言 【第15页】 1-5 #include
  • 经典教材--C语言程序设计(第五版)pdf

    万次阅读 2019-07-13 15:45:35
    下载地址:网盘下载 下载地址:网盘下载 转载于:https://www.cnblogs.com/long12365/p/9729993.html
  • C语言程序设计 现代方法(第2版)下载链接: https://pan.baidu.com/s/1XIKYGAxGhRTscgibAj3kgQ 提取码获取方式:关注下面微信公众号,回复关键字: 1129  
  • C语言程序设计初步

    万人学习 2018-10-22 21:38:02
    课程针对没有任何程序设计基础的初学者,全面介绍C语言及利用C语言进行程序设计的方法。课程注重知识的传授,更关注学习者能够通过实践的方式,真正学会利用C语言解决问题,奠定程序设计的基础。为此,专门设计了...
  • C语言程序设计提高视频精讲

    万人学习 2018-12-26 17:50:13
    本课为“C语言程序设计”系列课程中的第二部“提高篇”。在第一部“初步篇”介绍基本的数据结构和控制结构基础上,引入函数和数组,传授模块化设计的方法,目标是使学习者有能力编制出300行左右代码的应用程序。...
  • 计算机程序设计基础(C语言版)pdf

    千次阅读 2018-08-02 13:08:30
    链接:https://pan.baidu.com/s/1CWE8_olpSuIWmpCJXU59LQ 密码:0pe1 本书为完整版,以下为内容截图:  
  • 为什么需要学习C语言

    万次阅读 多人点赞 2016-05-20 00:18:25
    ·C语言可以作为学习计算机程序设计语言的入门语言; ·C语言是编写操作系统的首选语言,与计算机硬件打交道时灵巧且高效; ·C语言具有现代高级程序设计语言的基本语法特征; ·常用的面向对象程序设计语言例如C++...
  • 我要读的C语言书籍(电子版百度云下载)

    万次阅读 多人点赞 2015-07-25 15:23:33
    收藏的C语言电子书,和大家...C程序设计(第四版 ).谭浩强 百度云下载 C程序设计(第四版 )学习辅导 百度云下载 C Primer Plus(第五版) 中文版 百度云下载 写给大家看的C语言书 入门神器 百度云下载 C语言解惑
  • C语言程序设计学习心得体会总结

    万次阅读 2019-01-04 16:35:38
    C语言程序设计学习心得体会总结 通过近几个月来的学习使我对C/C++编程语言有了一个更加深刻的理解,要想去学好C语言,就要真正的把它当成一门语言来学。就像学英语一样,英语有自己的语法规定,词汇搭配,C语言也是...
  • C语言程序设计--进阶篇教学视频

    万人学习 2018-12-27 14:10:09
    该课程为“C语言程序设计”系列课程中的第三部“进阶篇”。作为终结篇C语言教程,介绍了在实际应用中应用广泛的结构体数据表示和处理、利用文件进行输入输出、利用多文件组织项目开发,并结合对程序设计的进一步...
1 2 3 4 5 ... 20
收藏数 233,135
精华内容 93,254
关键字:

c语言程序设计