C语言代码demo (持续更新中)

类型强转

#include <stdio.h>
int main(int argc, char const *argv[])
{
    //这里的操作是相加后,再把小数点去掉
    double a=1.1;
    double b=2.6;
    printf("%d\n",(int)(a+b));
}

类型转换谁的类型长度长,最终就是按谁的类型进行算,比如3.14默认就是double,3.14f声明了他是浮点型

逻辑判断

#include<stdio.h>
void main()
// {
//     //定义变量x
//     int x;
//     //输入x的值
//     scanf("%d",&x);
//     //如果x小于5,输出x的值
//     if(++x<5)
//      printf("%d\n",x);
//     //否则输出x的值
//     else
//      printf("%d\n",x);
//     //将x的值减1
//      x--;
//      //输出x的值
//      printf("%d\n",x);

// }
// {
//     int x=1,y=2;
//     //输出x的值,这里是逻辑判断,如果||只要其中有一个为真就为真,在c中1表示为真,0表示为假
//     printf("%d\n",! x||y);

x*=y+1 //x=x*(y+1)

逗号优先级

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a=2,b=3,c=4,x,y;
    y=((x=a+b),(b+c));
    printf("%d\n",y);   
    //最终答案为5,因为逗号表达式的值为最后一个表达式的值。
    //如果想要得到7,    y=((x=a+b),(b+c));逗号优先级
    return 0;
}

在使用%c格式输入时 空格 tab “专一字符”等键都作为有效字符输入

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int i;
    //%3d表示只输出3列,输入123456,只会输出123
    scanf("%3d",&i);
    printf("%d\n",i);
    return 0;
}

3.非法输入

floor()and ceil()

#include <stdio.h>
#include <math.h>   
int main(int argc, char const *argv[])
{
    /* code */
    //floor()函数返回不大于x的最大整数值。
    //ceil()函数返回不小于x的最小整数值。
    double x=3.14;
    double mi;
    double ma;
    ma=floor(x);
    mi=ceil(x);
    printf("%.2lf\n",ma);
    printf("%.2lf",mi);
    return 0;
}

计算华氏温度

{
    //编程题1 计算华氏温度
    double f,c;
    scanf("%lf",&f);
    c=5*(f-32)/9;
    //%.2f表示保留两位小数
    printf("%.2f摄氏温度等价于%.2f华氏温度\n",f,c);
    return 0;
}

海伦公式计算三角形

{
    //编程题2 输入三角形的三条边长,计算它的面积。
    //这个计算三角形的公式是海伦公式
    int a ,b,c;
    double s,area;
    printf("请输入三角形的三条边长:");
    scanf("%d,%d,%d",&a,&b,&c);
    s=0.5*(a+b+c);
    area=sqrt(s*(s-a)*(s-b)*(s-c)); 
    printf("三角形的面积为:%.2lf\n",area);
    return 0;
}

字母转换

#include <stdio.h>
#include <math.h>   
int main(int argc, char const *argv[])


{
    //编程题3 输入一个大写字母,将其转换为小写字母输出。ACII编码大写和小写字母相差32
   char c;
   scanf("%c",&c);
   printf("%c",c+32);
   return 0;
}

点到直线的距离

#include <stdio.h>
#include <math.h>   
int main(int argc, char const *argv[])


{
    //已知直线L的方程为Ax+By+C=0,求点P(x0,y0)到直线L的距离。
    double A, B, C, x0, y0, d;
    printf("请输入直线L的方程的系数A,B,C:");
    scanf("%lf,%lf,%lf", &A, &B, &C);
    printf("直线L的方程为:%.2lfx%+.2lfy%+.2lf=0\n", A, B, C);
    printf("请输入点P的坐标x0,y0:");
    scanf("%lf %lf", &x0, &y0);
    //fabs()函数用于计算浮点数的绝对值
    d = fabs(A * x0 + B * y0 + C) / sqrt(A * A + B * B);
    printf("点到直线的距离为:%f", d);
   return 0;
}

真假概念

//验证了假为0,正为非0
  int a=4,b=5,c=0;
  printf("%d,%d,%d\n",!a,!b,!c);
  return 0;

短路运算

关系运算不短路,逻辑运算才会短路

    //短路运算
  int a=1,b=2,c=3,d=4;
  int m=1 ,n=1;
  //第一括号为真,后面才会运行
  printf("%d,%d,%d\n",(m=a>b)&&(n=c>d),m,n);
  return 0;

    //短路运算
  int a=1,b=2,c=3,d=4;
  int m=100 ,n=100;
  //第一括号为为假,后面才会运行
  printf("%d,%d,%d\n",(m=a>b)||(n=c>d),m,n);
  return 0;

关于闰年的描述

//闰年计算
    int year;
    scanf("%d",&year);
    //能够被400整除或者能够被4整除但是不能被100整除
    if (year%400==0||(year%4==0&&year%100!=0))
    {
        printf("%d is润年",year);
    }
    else
    {
        printf("%d is not a 闰年",year);
    }
}

三目运算符

//三目运算符
{
     int a=1,b=2,max;
     //如果为真就打印a,否则打印b
     max=a>b?a:b;
     printf("%d",max);
}

输入三个整数,按由大到小的顺序输出。

//输入三个整数,按由大到小的顺序输出。
    int a,b,c,t;
    printf("Enter two numbers: ");
    scanf("%d %d %d",&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("The numbers in descending order are: %d %d %d\n",a,b,c);
    return 0;

统计输入的字符数(while)

{
    //统计输入的字符数
    char c;
    int n=0;
    //输入换行符结束
    while ((c=getchar())!='\n')
    {
        /* code */
        n++;
    }
    printf("%d\n",n);
    return 0;
    
    
}

do while

{
  //do while
  int i=1,s=0;
  do{
    s+=i;
    i++;
  }while (i<=100);
  {
    printf("s=%d\n",s);
  }
  
    
    
}

用于判断一个数是否为素数

#include <stdio.h>
#include <math.h>
// 用于判断一个数是否为素数
int main(int argc, char const *argv[])
{
 int i ,k,n;
 printf("请输入一个数字:");
  scanf("%d",&n);
  k=(int)sqrt(n);
  for(i=2;i<=k;i++)
  {
    if(n%i==0)
    break;
  }
  if(i<=k){
    printf("%d不是素数\n",n);
  }
  else{
    printf("%d是素数\n",n);
  }
return 0;
}

指针

对于学习 c 语言,最令人头疼的就是指针
首先这个名字就很让人不解,但是对于抽象问题我们就要试着具体化的解释出来

指针的理解:

假设你在邮局里面放了货物,邮局给你一张条子,这张条子记录着你存放货物的地址,你可以通过这张条子去提取你的货物,这张条子就是指针
问题 1:邮局为什么不直接给你货物 (效率问题,直接给你货物,相当于你把值当成参数进行传递,那么计算机就需要 new 一个很大对象,给计算机很大的压力)
问题 2:假如我拿着这个地址去提货发现货物已经被提走了(内存泄漏)
问题 3:假如给的这个地址让我不小心丢失了,那么货物就会一直存在哪里,占用内存
问题 4:假如邮局给错了地址,你拿着这个地址胡乱提
问题一例子:


这个时候传递的就是内存地址,而你拿着地址去去提货而已,未完待续?

#include <stdio.h>
int main(int argc, char const *argv[])



{
    /* code */
    // 定义两个int变量
    int a , b;
    // 定义两个指针变量
    int *pointer_1,*pointer_2;
    // 初始化两个值
    a=100; b=10;
    // 把a,b的地址赋值给两个指针变量
    pointer_1=&a;
    pointer_2=&b;
    printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);
    printf("a=%d,b=%d\n",a,b);
    printf("&a=%d,&b=%d\n",&a,&b);
    printf("*pointer_1=%d,*pointer_2=%d\n",pointer_1,pointer_2);
    return 0;
}

#include <stdio.h>
int main(int argc, char const *argv[])




   

{   
    // 定义变量
  int a , b , c;
  // 定义指针变量
  int *pa=&a ,*pb=&b;
  // 定义中间变量
  int *t;
  a=4;
  b=5;
  // 打印出对应的值
  printf("pa=%d pb=%d\n",pa,pb);
  printf("*pa=%d *pb=%d\n",*pa,*pb);
  // 进行交换逻辑
  t=pa,pa=pb,pb=t;
  c=a,a=b,b=c;
  // 打印出对应的值
  printf("pa=%d pb=%d\n",pa,pb);
  // 打印出对应的值
  printf("*pa=%d *pb=%d\n",*pa,*pb);
  printf("a=%d b=%d",a,b);
}

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a,b;
    int *pa,*pb;
    pa=&a;
    pb=&b;
    a=1,b=2;
    printf("a=%d b=%d\n",&a,&b);
    printf("pa=%d pb=%d\n",pa,pb);
    printf("*pa=%d *pb=%d\n",&pa,&pb);
    //这里就说明了pa和pb是指针变量,而&pa和&pb是指针变量的地址,指针变量也是变量,也有地址

    return 0;
}
#include <stdio.h>
int main(int argc, char const *argv[])
{
    //通过交换指针变量的值,来交换指针变量所指向的值
    int a , b ;
    int *pa=&a ,*pb=&b;
    scanf("%d %d",&a,&b);
    printf("pa=%d pb=%d\n",pa,pb);
    int t;
    t=pa,pa=pb,pb=t;
    printf("pa=%d pb=%d\n",pa,pb);
    printf("pa=%d pb=%d\n",*pa,*pb);
    return 0;
}
#include <stdio.h>
int main(int argc, char const *argv[])
{
    //数组指针
    int a[5]={10,20,30,40,50};  
    int *p;
    p=a;
    printf("a[0]=%d\n",*p);
    printf("a[1]=%d\n",*(p+1));
    p++;
    printf("a[1]=%d\n",*p);
    p=p+2;
    printf("a[4]=%d\n",*p);
    return 0;
}

数组

int a[10];
    for(int i=0;i<10;i++)
        scanf("%d",&a[i]);
        printf("\n");
    for(int i=0;i<10;i++)
        printf("%d",*(a+i));
    return 0;

容易考察的点

#include <stdio.h>
int main(int argc, char const *argv[])
{
  int a[5]={10,20,30,40,50};
  int *p,i;
  for(p=a;p<a+5;p++)
  //或者for(p=a,i=0;i<5;i++)
  //printf("%d\n",*(p+i));
  printf("%d\n",*p);

  return 0;
}
#include <stdio.h>
int main(int argc, char const *argv[])
{
   //定义了一个二维数组,然后定义了一个指针变量p,然后用p指向二维数组的第一个元素,然后用p输出二维数组的所有元素
   int a[2][3]={1,2,3,4,5,6};
   int *p;  
   for(int i=0;i<2;i++)
   {
      for(int j=0;j<3;j++)
      {
         p=&a[i][j];
         printf("%d ",*p);
      }
      printf("\n");
   }

   return 0;
}

二维数组

#include <stdio.h>
int main(int argc, char const *argv[])
{
   //定义了一个二维数组,然后定义了一个指针变量p,然后用p指向二维数组的第一个元素,然后用p输出二维数组的所有元素
   int a[2][3]={1,2,3,4,5,6};
   int *p;  
   for(int i=0;i<2;i++)
   {
      for(int j=0;j<3;j++)
      {
         p=&a[i][j];
         printf("%d ",*p);
      }
      printf("\n");
   }

   return 0;
}

第二种写法

#include <stdio.h>
int main(int argc, char const *argv[])
{
   //定义了一个二维数组,然后定义了一个指针变量p,然后用p指向二维数组的第一个元素,然后用p输出二维数组的所有元素
   int a[2][3]={1,2,3,4,5,6};
   int *p;  
   p=&a[0][0];
   for(int i=0;i<2;i++)
   {
      for(int j=0;j<3;j++)
      {
         printf("%d ",*p++);
      }
      printf("\n");
   }

   return 0;
}

运算符的优先级

字符指针

函数指针

#include <stdio.h>
int main(int argc, char const *argv[])
{
  int max(int,int);
  int min(int,int);
  void process(int,int,int(*p)(int,int));
  int a,b;
  printf("please enter two integer numbers:");
  scanf("%d,%d",&a,&b);
  printf("max=");
  process(a,b,max);
  printf("min=") ; 
  process(a,b,min);
  return 0;
  
}
void process(int x,int y,int(*p)(int,int))
{
  int result;
  result=(*p)(x,y);
  printf("%d\n",result);
}
int max(int x,int y)
{
  int z;
  if(x>y) z=x;
  else z=y;
  return(z);
}
int min(int x,int y){
   int z;
   if(x<y)
   z=x;
   else z=y;
   return(z);
}
{
  char *s = "Hello World";
  char a[10]="mn";
  strcat(a,s);
  puts(a);
  return 0;
}

#include <stdio.h>
int main(int argc, char const *argv[])
{
   int a[10],m,n,i;
   printf("请输入10个整数:\n");
   for(i=0;i<10;i++)
   {
      scanf("%d",&a[i]);
      printf("\n");
      m=a[0];
      n=0;
      if(max(m,a[i])>m)
      {
         m=max(m,a[i]);
         n=i;
      }

   }
   printf("最大值为:%d\n",m);
   printf("最大值的下标为:%d\n",n+1);

}
int max(int x,int y)
{
   return(x>y?x:y);
}

文件的打开和关闭

#include <stdio.h>
int main(int argc, char const *argv[])
{
 //文件打开和关闭
 FILE *fp;
 char ch;
 fp = fopen("test.txt","w");
 if(fp==NULL){
   printf("文件打开失败\n");
   return -1;
 }
 while((ch=getchar())!='#'){
   fputc(ch,fp);
 }
 fclose(fp);

 return 0;

}

文件复制

#include <stdio.h>
int main(int argc, char const *argv[])
{
 //文件复制
  FILE *in,*out;
  char ch;
  in=fopen("test.txt","r");
  if(in==NULL)
  {
    printf("打开文件失败\n");
    return -1;
  }
  out=fopen("testcpy.dat","w");
  if(out==NULL)
  {
    printf("打开文件失败\n");
    return -1;
  }
  while(ch!=EOF)
  {
    ch=fgetc(in);
    fputc(ch,out);
    putchar(ch);
  }
  fclose(in);
  fclose(out);
  return 0;
}

编程题目

回文数

#include <stdio.h>
int main(int argc, char const *argv[])
{
   long ge,shi,bai,qian,wan,x;
    printf("请输入一个五位数:");
    scanf("%ld",&x);
    wan=x/10000;
    qian=x%10000/1000;
    bai=x%1000/100;
    shi=x%100/10;
    ge=x%10;
    if(ge==wan&&shi==qian){
        printf("这是一个回文数\n",x);
    }else{
        printf("这不是一个回文数\n",x);
    }
    return 0;
}

循环嵌套输出

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int f[20]={1,1};
    for (int i=2;i<=20;i++)
    //先求出下标0-19的值
    f[i]=f[i-2]+f[i-1];
    for(int i=0;i<20;i++){
        //输出这20个值,每输出五个换行
    if(i%5==0)
    printf("\n");
    printf("%6d",f[i]);
    }
    printf("\n");


}

使用abs函数进行绝对值的差值计算

#include <stdio.h>

#include <math.h>
int main()
{
    //使用abs函数进行绝对值的差值计算
    int x,y,z;
    scanf("%d,%d",&x,&y);
    z=abs(x-y);
    printf("z=%d",z);

}

九九乘法表

#include <stdio.h>


int main() {
    int i;
    int j;
    for (i=1;i<=9;i++){
     for(j=1;j<=i;j++)
      printf("%d*%d=%-3d",i,j,i*j);
     printf("\n");
}
}

判断等级

#include <stdio.h>


int main() {
  int x;

  scanf("%d",&x);
  if(x>=90)
  printf("成绩等级为A");
  else if (x>=80&&x<=89)
  {
      printf("成绩等级为B");

  }
    else if (x>=70&&x<=79)
  {
      printf("成绩等级为C");

  }
    else if (x>=60&&x<=69)
  {
      printf("成绩等级为D");

  }
    else if (x<60)
  {
      printf("成绩等级为E");

  }
  

}

输入五个字符串,打印出长度最大的那个字符串

#include <stdio.h>
#include <string.h>
int main() {
  //输入五个字符串,打印出长度最大的那个字符串
  char a[5][20];
  int i;
  char *sp;
  for (i=0;i<5;i++)
    gets(a[i]);
    sp=a[0];
  for(i=1;i<5;i++)
    if(strlen(sp)<strlen(a[i]))
         sp=a[i];
      printf("字符串长度最长的那个是:%s",sp);
      

    return 0;
    
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值