• C语言-简单的程序设计


    🌞欢迎来到C语言的世界 
    🌈博客主页:卿云阁

    💌欢迎关注🎉点赞👍收藏⭐️留言📝

    🌟本文由卿云阁原创!

    🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

    📆首发时间:🌹2021年10月20日🌹

    ✉️希望可以和大家一起完成进阶之路!

    🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


    目录

    🍈 字符输入函数getchar

     🍉字符输出函数putchar

    🍊格式输入函数scanf

    🍋顺序结构程序设计

    🥒选择结构

    🥬循环结构

    内存原理解析

    显示是4个字节还是几个字节是拖动的效果。

    实际我们电脑是64位的地址总线,程序运行的时候我们一般选择32位的地址总线,32位的数据总线, 

    🍈 字符输入函数getchar

           当C程序执行到getchar();这条语句时,如果缓冲区中没有字符,则等待用户输入,用户输入的字符被存放在缓冲区中,当用户键入Enter键之后,getchar从缓冲区开始取走一个字符并返回该字符的ASCII码值或EOF字符。

            例如顺序从键盘键入ABC三个字符,最后键入一个Enter键(在windows操作系统中,Enter键表示了两个字符'\r'和'\n',在linux系统中,只是一个字符'\n'),如果是windows系统,缓存区中就得到了四个字符('\r'为回车字符,用于触发getchar执行)。

          当缓冲区有数据时,getchar从缓冲区顺序取出一个字符。例如有char ch; ch=getchar();,getchar从缓冲区取出字符的ASCII值并赋给ch。


     🍉字符输出函数

    putchar

    从键盘输入一个字符,并输出到显示器中。

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. char ch;
    5. printf("please input a char:\n"); //这是一条表达式语句,最后有;,下同。
    6. ch=getchar(); //程序执行到此处时,等待用户输入字符,最后按Enter键。
    7. //Enter键结束后,getchar()从缓冲区得到字符并赋给ch
    8. putchar(ch); //ch输出到显示器中。
    9. putchar('\n'); //输出一个换行符常量。
    10. return 0;
    11. }

    🍉

         这里键入一个字符a和Enter键,这个Enter键代表的字符也会进入缓存区,如果要在程序中用getchar输入两个字符'A','B'分别给ch1和ch2变量时,正确的键入是AB+enter,而不是输入A+enter和B+enter


    🍊格式输入函数scanf

         C语言通过scanf函数读取键盘输入,键盘输入又被称为标准输入。当scanf函数读取标准输入时,如果还没有输入任何内容(缓冲区为空的时候),那么scanf函数会被卡住(专业用语为阻塞

    行缓冲:在这种情况下,当在输入和输出中遇到换行符时,将执行真正的I/O操作。这时,我们输入的字符先存放到缓冲区中,等按下回车键换行时才进行实际的I/O操作(scanf进行匹配,实际上回车也放到缓冲区)。典型代表是标准输入缓冲区(stdin)和标准输出缓冲区(stdout)。在键盘输入19和Enter键后,它们均进入到缓冲区,scanf根据格式控制符首先从缓冲区中取出字符'1'、'9'、'\n',再把'1'、'9'、字符解释成十进制的整数,并存入到x变量所在地址中

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. int main(void)
    4. {
    5. int age;
    6. char ch;
    7. scanf("%d", &age);
    8. printf("age=%d\n", age);
    9. scanf("%c", &ch);
    10. printf("ch=%c\n", ch);
    11. return 0;
    12. }

    scanf函数在读取整型数、浮点数、字符串(后面介绍数组时讲解字符串)时,会忽略'\n'(回车符)、空格符等字符(忽略是指scanf函数执行时会首先删除这些字符,然后再阻塞)。scanf函数匹配一个字符时,会在缓冲区删除对应的字符。因为在执行scanf("%c",&c)语句时,不会忽略任何字符,所以scanf("%c",&c)读取了还在缓冲区中残留的'\n'。

    1. #include
    2. int main(void)
    3. {
    4. int age1,age2;
    5. char ch;
    6. scanf("%d",&age1);
    7. printf("age1=%d\n",age1);
    8. scanf("%d",&age2);
    9. printf("age2=%d\n",age2);
    10. return 0;
    11. }

    #从键盘上输入两个数分别赋给a,b

    1. # include
    2. int main(void)
    3. {
    4. int a, b;
    5. printf("Please enter two integers separated by a space:\n"); //提示输入。
    6. scanf("%d%d", &a, &b);
    7. printf("a= %d, b=%d\n", a , b);
    8. return 0;
    9. }

    scanf函数的循环读取

    scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.

    什么是EOF,直接在代码里输入EOF,点击按Ctrl?

    #define EOF    (-1)

    什么情况下scanf会出错?

    在行首的位置ctrl z,回车

    在行首的位置ctrl z,回车

    在行首的位置ctrl z,回车

    1. #include
    2. int main(void)
    3. {
    4. int i;
    5. while(rewind(stdin),(scanf("%d",&i))!=EOF)
    6. {
    7. printf("i=%d\n",i);
    8. }
    9. return 0;
    10. }

    🍋顺序结构程序设计

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main(void)
    4. {
    5. float a, b,c;
    6. float s,area;
    7. printf("Please enter the side lengths a, b, c of the triangle:\n"); //提示输入。
    8. scanf("%f%f%f", &a,&b,&c);
    9. s=(a+b+c)/2;
    10. area=sqrt(s*(s-a)*(s-b)*(s-c));
    11. printf("area=%-7.2f",area);
    12. return 0;
    13. }

     2.从键盘输入一个英文大写字母,要求改用小写字母输出。

    1. #include
    2. #include
    3. int main(void)
    4. {
    5. char a, b;
    6. printf("a=:"); //提示输入。
    7. scanf("%c", &a);
    8. b=a+32;
    9. printf("a->%c",b);
    10. return 0;
    11. }

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main(void)
    4. {
    5. float a,b,c,disc,x1,x2,p,q; // disc存放的结果。
    6. printf("Please enter a, b, and c, separated by spaces:\n");
    7. scanf("%f%f%f",&a,&b,&c);
    8. disc=b*b-4*a*c;
    9. p=-b/(2*a);
    10. q=(float)sqrt(disc)/(2*a); // sqrt得到的值是double型,转换成float。
    11. x1=p+q;
    12. x2=p-q;
    13. printf("\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
    14. return 0;
    15. }

     


    🥒选择结构

    例1 输入两个int型数据,输出它们中的较大者。

    1. #include
    2. int main()
    3. { int a,b,max;
    4. printf("请输入两个数a,b:");
    5. scanf("%d%d",&a,&b);
    6. a=max;
    7. if(b>a)
    8. max=b;
    9. printf("max=%d",max);
    10. }

    例2输入一个整型分数,如果分数在90-100分,输出,80-89,输出,60-79,输出及格,60分以下输出不及格,用switch语句实现编程(假设分数是区间[0,100]上的整数)

    1. #include
    2. int main(void)
    3. {
    4. int score;
    5. scanf("%d",&score);
    6. switch(score/10)
    7. {
    8. case 10:
    9. case 9: printf("优\n");break;
    10. case 8: printf("良\n");break;
    11. case 7:
    12. case 6: printf("及格\n");break;
    13. default: printf("不及格\n");
    14. }
    15. return 0;
    16. }

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. float x,y;
    5. printf("请输入x的值:\n");
    6. x=11;
    7. if (x<=1)
    8. y=x;
    9. else
    10. {
    11. if(x>=10)
    12. y=3*x-11;
    13. else
    14. y=2*x-1;
    15. }
    16. printf("y=%f",y);
    17. return 0;
    18. }

     switch语句

    1.输入1-7的一个整数,输入的是几,就输出英文的星期几(例如如果输入7,则输出Sunday)。

    1. #include
    2. int main(void)
    3. {
    4. int x;
    5. printf("请输入x的值:\n");
    6. scanf("%d",&x);
    7. switch(x)
    8. {
    9. case 1: printf("Monday\n"); break;
    10. case 2: printf("Tuseday\n"); break;
    11. case 3: printf("Wednesday\n"); break;
    12. case 4: printf("Thursday\n"); break;
    13. case 5: printf("Friday\n"); break;
    14. case 6: printf("Saturday\n"); break;
    15. case 7: printf("Sunday\n"); break;
    16. default: printf("error\n");
    17. }
    18. return 0;
    19. }

    2.从键盘输入+-*/中的任意一个字符和两个float型数据,然后把这个两个数做相应的算术操作,并输出结果。

    1. #include
    2. int main(void)
    3. {
    4. float a,b;
    5. char ch;
    6. printf("请输入a,b的值:\n");
    7. scanf("%f%f",&a,&b);
    8. getchar();
    9. printf("请输入需要进行的操作(+-*/):\n");
    10. ch=getchar();
    11. switch(ch)
    12. {
    13. case '+': printf("a+b=%f\n",a+b); break;
    14. case '-': printf("a-b=%f\n",a-b); break;
    15. case '*': printf("a*b=%f\n",a*b); break;
    16. case '/': printf("a/b=%f\n",a/b); break;
    17. default: printf("error\n");
    18. }
    19. return 0;
    20. }

    3.编程输出界面,如图4-3所示。根据界面操作,使程序根据用户选择运行。按1退出,程序结束;按2时计算,当选择计算后,输出如图4-4所示界面,提示按键选择计算平方还是立方,用户按键选择后,提示用户输入计算的数据,并给出结果,如图4-5所示

    1. #include
    2. int main(void)
    3. { char select;
    4. int x;
    5. printf("********************************\n\n");
    6. printf("按1 退出 按2 计算 \n\n");
    7. printf("********************************\n");
    8. printf("请输入您的选择:\n");
    9. select=getch();
    10. setbuf(stdin,NULL);//清空缓冲区
    11. switch(select)
    12. {
    13. case '1': break;
    14. case '2':
    15. printf("按1 平方 按2 立方 \n\n");
    16. printf("请输入您的选择:\n");
    17. select=getchar();
    18. setbuf(stdin,NULL);//清空缓冲区
    19. printf("请输入需要计算X:\n");
    20. scanf("%d",&x);
    21. switch(select)
    22. {
    23. case '1': printf("x*x=%d\n",x*x); break;
    24. case '2': printf("x*x*x=%d\n",x*x*x); break;
    25. }
    26. break;
    27. default: printf("error\n");
    28. }
    29. return 0;
    30. }

     


    🥬循环结构

    求1+2+3+...100的值

    1. #include <stdio.h>
    2. int main(void)
    3. { int i=1;
    4. int sum=0;
    5. while(i<=100)
    6. { sum=sum+i;
    7. i++;
    8. }
    9. printf("sum=%d",sum);
    10. return 0;
    11. }

    例:统计从键盘输入的一行字符的个数。

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. unsigned charNum=0; //用于统计字符的个数,初始化为0
    5. printf("Input a string:");
    6. while(getchar()!='\n') //把从键盘获取的字符与'\n'比较形成表达式。
    7. charNum ++;
    8. printf("Number of characters: %u\n", charNum);
    9. return 0;
    10. }

    例5-3-2 用for语句输出斐波那契数列(Fibonacci Sequence)的前10个数。

    1. include <stdio.h>
    2. int main(void)
    3. {
    4. int predata=1;
    5. int nextdata=1;
    6. int i,temp;
    7. printf("%d %d ",predata,nextdata);
    8. for(i=3;i<=10;i++)
    9. {
    10. temp=nextdata;
    11. nextdata=predata+nextdata;
    12. predata=temp;
    13. printf("%d ",nextdata);
    14. }
    15. return 0;
    16. }

     

    用for语句实现从键盘输入一组字符,并输出出来。 

    1. #include
    2. int main(void)
    3. {
    4. char ch;
    5. for(;(ch=getchar())!='\n';)
    6. {
    7. putchar(ch);
    8. }
    9. return 0;
    10. }

    输入一个long型数据,计算它各个位上数字的和输出。例如输入102,则输出3。

    1. #include <stdio.h>
    2. int main(void)
    3. { long N=301;
    4. int sum=0;
    5. int i;
    6. for(i=1;i<=3;i++)
    7. {
    8. sum+=N%10;
    9. N=N/10;
    10. }
    11. printf("%d",sum);
    12. return 0;
    13. }

    求出用 50元、20元 和 10元换100元有几种方式

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int i,j,z;
    5. for(i=0;i<=2;i++)
    6. for(j=0;j<=5;j++)
    7. for(z=0;z<=10;z++)
    8. {
    9. if(100==50*i+20*j+10*z)
    10. printf("i=%d j=%d z=%d\n",i,j,z);
    11. }
    12. return 0;
    13. }

     输出九九乘法表

    1. #include <stdio.h>
    2. int main(void)
    3. { int i,j;
    4. for(j=1;j<=9;j++)
    5. {
    6. for(i=1;i<=j;i++)
    7. {
    8. printf("%d*%d=%d ",i,j,i*j);
    9. if(i==j)
    10. printf("\n");
    11. }
    12. }
    13. return 0;
    14. }

     

    break语句和continue语句

    找出一个比100大且能被47整除的整数,并输出

    1. #include <stdio.h>
    2. int main(void)
    3. { int i,j;
    4. for(i=100;;i++)
    5. if(i%47==0)
    6. {
    7. printf("%d",i);
    8. break;
    9. }
    10. return 0;
    11. }

    从键盘输入一个整数,判断是否为素数,是就输出Y,不是就输出N

    1. #include
    2. #include
    3. int main(void)
    4. {
    5. int m,k,i;
    6. printf("m:");
    7. scanf("%d",&m);
    8. k=(int)sqrt(m);
    9. for(i=2;i<=k;i++)
    10. {
    11. if(m%i==0)
    12. break;
    13. }
    14. if(i>k)
    15. printf("N");
    16. else
    17. printf("Y");
    18. return 0;
    19. }

    (2)第二种方法

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main(void)
    4. {
    5. int m,k,i;
    6. int flag=0;
    7. printf("m:");
    8. scanf("%d",&m);
    9. k=(int)sqrt(m);
    10. for(i=2;i<=k;i++)
    11. {
    12. if(m%i==0)
    13. {
    14. flag=1;
    15. break;
    16. }
    17. }
    18. if(flag==1)
    19. printf("N");
    20. else
    21. printf("Y");
    22. return 0;
    23. }

    找出100到200之间的素数,并它们输出出来

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main(void)
    4. {
    5. int m,k,i,j;
    6. for(m=100;m<=200;m++)
    7. {
    8. int flag=0;
    9. k=(int)sqrt(m);
    10. for(i=2;i<=k;i++)
    11. {
    12. if(m%i==0)
    13. {
    14. flag=1;
    15. break;
    16. }
    17. }
    18. if(flag!=1)
    19. printf("m=%d\n",m);
    20. }
    21. return 0;
    22. }

    求1!+2!+...+8!的值

    1. #include <stdio.h>
    2. int main(void)
    3. { int i,j;
    4. int sum=0;
    5. for(j=1;j<=8;j++)
    6. { int n=1;
    7. for(i=1;i<=j;i++)
    8. {
    9. n=n*i;
    10. if(i==j)
    11. sum+=n;
    12. }
    13. }
    14. printf("sum=%d",sum);
    15. return 0;
    16. }

    求两个正整数的最大公约数和最小公倍数。

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int m,n;
    5. int i,j;
    6. printf("please input m(m>0) and n(n>0):\n");
    7. scanf("%d%d",&m,&n);
    8. //求最大公约数
    9. int gcd=(m<n?m:n);//求m和n中的最小者
    10. for(i=gcd;i>=1;i--)
    11. {
    12. if(m%i==0&&n%i==0)
    13. {
    14. printf("i=%d\n",i);
    15. break;
    16. }
    17. }
    18. //求最小公倍数
    19. int g=(m>n?m:n);//求m和n中的最小者
    20. for(j=g;;j++)
    21. {
    22. if(j%m==0&&j%n==0)
    23. {
    24. printf("j=%d",j);
    25. break;
    26. }
    27. }
    28. return 0;
    29. }

     

    goto语句

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int y=5,i=-3;
    5. goto label; //goto语句直接跳到label指向的标签语句执行。
    6. for(i=8;i<0;i++)
    7. {
    8. y=20;
    9. label:printf("i=%d ,y=%d\n",i,y); //标签语句。
    10. }
    11. return 0;
    12. }

  • 相关阅读:
    NXP官方Linux内核启动测试
    不适合学习编程的人是你吗?
    11.3-11.4kmp专题训练
    CodeForces_29B
    Qt学习08 启航!第一个应用实例
    给表弟写的Python制作GUI学生管理系统毕设,老师直接给出满分,毕业稳了
    《UML和模式应用(原书第3版)》2024新修订译本部分截图
    保驾“双十一” 博睿数据助力电商零售迎高峰无烦忧
    CentOS7 下载安装卸载 Docker——Docker启动关闭
    湖仓一体(Lakehouse)架构的核心组件之存储层——Lakehouse 架构(三)
  • 原文地址:https://blog.csdn.net/zzqingyun/article/details/127430743