飞道的博客

C语言刷题——“C”

372人阅读  评论(0)

各位CSDN的uu们你们好呀,今天,小雅兰要巩固一下之前学过的知识,那么,最好的复习方式就是刷题啦,现在,我们就进入C语言的世界吧

从最简单的开始噢 完完全全零基础都能看懂 题目来源于牛客网

编程语言初学训练营_在线编程+题解_牛客题霸_牛客网


BC1-实践出真知

BC2-我是大V

BC3-有容乃大

BC6-小飞机

BC7-缩短二进制

BC8-十六进制转十进制

BC9-printf的返回值

BC10-成绩输入输出

BC11-学生基本信息输入输出

BC12-字符圣诞树

BC13-ASCII码

BC14-出生日期输入输出

BC15-按照格式输入并交换输出

BC16-字符转ASCII码

BC17-计算表达式的值

BC18-计算带余除法

BC19-反向输出一个四位数

BC28-大小写转换

BC29-2的n次方计算

BC35-判断字母



  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf( "Practice makes perfect!\n");
  5. return 0;
  6. }

 本题是一个没有输入要求的题目,只考察输入,所以只需要准确无误的输出结果就行了。

 在C语言中,以.c为后缀的文件名就是我们的源文件,以.h为后缀的文件名就是头文件

 printf是一个库函数,是为输出操作,必须得引入头文件stdio.h

写主函数,main函数是程序的入口,代码是从main函数的第一行开始执行的!

一个工程中,有且仅有一个main函数

运行:[Fn]+Ctrl+F5   VS

如果执行的结果一闪而过了,那么就要设置项目属性,让执行结果停留在屏幕上


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf( "v   v\n");
  5.     printf( " v v\n");
  6.     printf( " v\n");
  7.     return 0;
  8. }

这道题目还有另外一种写法


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     //一行输出的效果
  5.     printf( "v   v\n v v\n v\n");
  6.     return 0;
  7. }

这个题也是没有输入要求的题目,所以相对比较简单。

题目中只要能够找到输出的规律和掌握 \n的使用就没问题。

这里简单提及:转义字符,可以做一个拓展。


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf( "The size of short is %d bytes.\n", sizeof( short));
  5.     printf( "The size of int is %d bytes.\n", sizeof( int));
  6.     printf( "The size of long is %d bytes.\n", sizeof( long));
  7.     printf( "The size of long long is %d bytes.\n", sizeof( long));
  8.    
  9.     return 0;
  10. }

 计算机中的单位:

这类入门的题目基本都是没有输入操作的。

本题的关键是要掌握C语言的 sizeof 这个操作符。

sizeof 是C语言的一个单目操作符,用来计算不同类型数据所占内存空间的大小,单位是字节。


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf( " ** \n");
  5. printf( " ** \n");
  6. printf( "************\n");
  7. printf( "************\n");
  8. printf( " * * \n");
  9. printf( " * * \n");
  10. return 0;
  11. }

  严格按照合适的图案去打印就行了


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf( "0%o 0X%X", 1234, 1234);
  5.     return 0;
  6. }

根据这道题目的备注可知,这个题目还有一种表现形式


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a= 1234;
  5. printf( "%#o %#X",a,a);
  6. return 0;
  7. }

这里需要我们掌握对个各种数据的格式控制

注意:还是严格按照题目要求的格式输出,才能保证正确性。  

本题考查的就是%d的格式控制域宽指定


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a= 0xABCDEF;
  5. printf( "%15d",a);
  6. return 0;
  7. }

printf函数返回的是:打印在屏幕上的字符的个数 


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a= printf( "Hello world!");
  5. printf( "\n");
  6. printf( "%d\n",a);
  7. return 0;
  8. }

在这里,不能随便在Hello world!后面加\n,因为:\n也算一个字符,最后结果就不准确

这个题目还有更简洁的写法


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf( "\n%d\n", printf( "Hello world!"));
  5.     return 0;
  6. }

更详细地请看我的博客

函数——“C”_认真学习的小雅兰.的博客-CSDN博客

 函数递归+青蛙跳台阶——“C”_认真学习的小雅兰.的博客-CSDN博客


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int score1= 60;
  5. int score2= 80;
  6. int score3= 90;
  7. scanf( "%d %d %d",&score1,&score2,&score3);
  8. printf( "score1=%d,score2=%d,score3=%d",score1,score2,score3);
  9. return 0;
  10. }


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int id= 0;
  5. float C= 0.0;
  6. float math= 0.0;
  7. float English= 0.0;
  8. scanf( "%d;%f,%f,%f",&id,&C,&math,&English);
  9. printf( "The each subject score of No. %d is %.2f, %.2f, %.2f.\n",id,C,math,English);
  10. return 0;
  11. }

这个题的最大坑,也是格式的指定,还有空格的控制,必须和题目要求的输出结果一致,比如:of的后边有2个空格。  

浮点数打印要指定小数点后边的位数为2位。

小数在内存中有可能不能精确保存!

小雅兰就吃了这个题目的亏


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char ch= '0';
  5. scanf( "%c",&ch);
  6. int i= 1;
  7. int j= 0;
  8. int m= 0;
  9. for(i= 1;i<= 5;i++)
  10. {
  11. for(j= 5-i;j> 0;j--)
  12. {
  13. printf( " ");
  14. }
  15. for(m= 0;m<i;m++)
  16. {
  17. printf( "%c ",ch);
  18. }
  19. printf( "\n");
  20. }
  21. return 0;
  22. }

每一行的输出是前边空格,后边 1

本题的难点就是精确的控制空格的个数和 1的个数。

 


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int arr[]={ 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33};
  5. //arr是数组,数组是用下标来访问的!
  6. //计算数组元素的个数
  7. int sz= sizeof(arr)/ sizeof(arr[ 0]);
  8. int i= 0;
  9. for(i= 0;i<sz;i++)
  10. {
  11. printf( "%c",arr[i]);
  12. }
  13. return 0;
  14. }

这里得了解清楚ASCII编码,如果采用ASCII编码,每个字符都有一个对应的数字,这个数字被称为这个字符的ASCII码,如果把这个数字按照%c打印,打印的就是字符。


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int year= 0;
  5. int month= 0;
  6. int date= 0;
  7. scanf( "%4d%2d%2d",&year,&month,&date);
  8. //%4d就是读取4位整数
  9. //输出不够2位时,左边拿0填充
  10. printf( "year=%d\nmonth=%02d\ndate=%02d\n",year,month,date);
  11. return 0;
  12. }

本题的难点在于如何按照指定域宽读取数据,如何按照指定格式打印数据。  


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int a = 0;
  5.     int b = 0;
  6.     scanf( "a=%d,b=%d", &a, &b);
  7.     int c = a;
  8.    a = b;
  9.    b = c;
  10.     printf( "a=%d,b=%d\n",a, b);
  11. }

输入和输出格式的控制,如果格式控制串中有非格式字符则输入时也要输入该非格式字符。

 


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     char ch = 0;
  5.     scanf( "%c", &ch);
  6.     printf( "%d\n",ch);
  7.     return 0;
  8. }

直接按照%d打印,就是字符对应的ASCII码值


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int a = 40;
  5.     int c = 212;
  6.     int ret = ( -8+ 22)*a -10+c/ 2;
  7.     printf( "%d\n", ret);
  8.     return 0;
  9. }

 按照操作符的优先级直接设计表达式,计算输出就行。

 


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int a = 0;
  5.     int b = 0;
  6.     scanf( "%d %d", &a, &b);
  7.     int m = a/b;
  8.     int n = a%b;
  9.     printf( "%d %d\n", m, n);
  10.    
  11.     return 0;
  12. }

掌握 % 和 / 两个操作符的使用,按照格式输出就行。


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int n = 0;
  5.     //输入数据
  6.     scanf( "%d", &n);
  7.     //获取每一位
  8.     while(n)
  9.   {
  10.         printf( "%d", n% 10);
  11.        n /= 10;
  12.   }
  13.     return 0;
  14. }

 这里得掌握操作符 % 和 / 的基本使用和特点。其次是循环的使用。

 在这道题目中,我们要知道两个函数——getchar、putchar

 

getchar——获取一个字符、输入一个字符

putchar——打印一个字符、输出一个字符 

多组输入——一般使用while循环,本题就是while((ch=getchar())!=EOF)

EOF——end of file——文件结束标志——通常是为文件的末尾

然后,这道题目与ASCII码值也有密切的关系,大写字母的ASCII码值加上32就是小写字母的ASCII码值


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int ch= 0;
  5. while((ch= getchar())!=EOF)
  6. {
  7. putchar(ch+ 32);
  8. printf( "\n");
  9. getchar(); //读取\n
  10. }
  11. return 0;
  12. }

getchar 清理缓冲区的问题,这里得理解输入缓冲区的问题。getchar拓展_认真学习的小雅兰.的博客-CSDN博客


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

 << 左移操作符 移动的是二进制位 向左移动多少位 就表示2的几次方

int a=1;

a<<1;

//00000000000000000000000000000001

//00000000000000000000000000000010——左移一位 2^1

a<<2;

//00000000000000000000000000000001

//00000000000000000000000000000100——左移两位 2^2

 


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char ch= 0;
  5. while((ch= getchar())!=EOF)
  6. {
  7. if((ch>= 'a'&&ch<= 'z')||(ch>= 'A'&&ch<= 'Z'))
  8. {
  9. printf( "YES\n");
  10. }
  11. else
  12. {
  13. printf( "NO\n");
  14. }
  15. getchar(); //处理\n
  16. }
  17. return 0;
  18. }

这个题目还有另外一种写法,使用我们的库函数

isalpha——是专门用来判断一个字符是不是字母的

是字目就返回非0的值,不是字母就返回0


  
  1. #include<stdio.h>
  2. #include<ctype.h>
  3. int main()
  4. {
  5.     int ch = 0;
  6.     while((ch= getchar()) != EOF)
  7.   {
  8.         //使用库函数
  9.         if( isalpha(ch))
  10.             printf( "YES\n");
  11.         else
  12.             printf( "NO\n");
  13.         getchar();
  14.   }    
  15.     return 0;
  16. }

1. 本地是多组输入,一定要注意循环输入的问题

2. 字符的判断可以自己写,也可以借助于库函数,要熟悉库函数都有哪些。


好啦,小雅兰今天的复习就到这里啦,后续还会继续复习噢

 


转载:https://blog.csdn.net/weixin_74957752/article/details/129019134
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场