一、大小写的转换
题目要求:实现字母大小写,多组输入输出。
所遇到的问题:对于getchar()内的判断条件无从下手;对于ascll表掌握不全;
实现代码如下:
1. #include<stdio.h> 2. 3. int main() 4. 5. { 6. 7. int ch = 0; 8. 9. while ((ch = getchar()) != EOF)//EOF意为-1。本语句即只要输入项是字符即可打印 10. 11. { 12. 13. //因为回车也算一个字符,所以在输入第一个字符换行后,getchar会读取换行的回车键 14. 15. //换行的回车被读取,若防止回车被读取,可在其前面多读取一次消耗回车 16. 17. getchar(); 18. 19. putchar(ch + 32); 20. 21. printf("\n"); 22. 23. } 24. 25. return 0; 26. 27. 28.
对于大小字母转换,ascll值相差32,具体使用请参考详细的ascll表。
二、缩进二进制
题目要求:我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。
输出描述:十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。
1. #include <stdio.h> 2. int main() { 3. int a=1234; 4. printf("0%o 0X%X",a,a); 5. return 0; 6. }
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
关于进制
1.十进制: 都是以0-9这九个数字组成,不能以0开头。
2.二进制: 由0和1两个数字组成。
3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。
进制转换博主还没有接触,这一题所用的知识点就这么多
三、进制A+B
题目要求:输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。
1. #include <stdio.h> 2. int main() { 3. int a,b; 4. scanf("%x %o",&a,&b); 5. //十六进制Hexadecimal一般以0x开头,例如0xFF。八进制Octal,一般以0开头,例如07。 6. printf("%d",a+b); 7. return 0; 8. }
这题解题思路与上题大概一致,都用了“%x” “%o”进行简单转换;
四、2的n次方的计算
题目要求:
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
1. #include <stdio.h> 2. int main() 3. { 4. int n; 5. scanf("%d",&n); 6. printf("%d",2<<(n-1)); 7. //在2进制中,2的表示为00000010 8. //我们只使用移位符来完成2的n次方,仅需使这个1往左移动。 9. //如4:00000100;8:00001000 10. //要注意为什么这里是(n-1) 11. //因为2本身已经在第二位了,是2的1次方。 12. return 0; 13. }
对于二进制的写法博主大大没有掌握,但有另一种解题方法进行2n次方的计算
1. #include <stdio.h> 2. #include<math.h> 3. //#include<math.h> 是包含math头文件的意思, .h是头文件的扩展名(header file),这一句声明了本程序要用到标准库中的 math.h文件。math.h头文件中声明了常用的一些数学运算,比如乘方,开方运算等等 4. int main() { 5. int a, b; 6. scanf("%d",&a); 7. b=pow(2,a); 8. //乘方的应用 9. printf("%d",b); 10. return 0; 11. }
也可以这样写
1. #include <stdio.h> 2. int main() 3. { 4. int x; 5. scanf("%d",&x); 6. int i,y; 7. for(i=0;i<x;i++) 8. { 9. y=y*2; 10. } 11. printf("%d",y); 12. return 0; 13. }
五、统计成绩
描述
输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。
数据范围:1≤�≤100 1≤n≤100 , 成绩使用百分制且不可能出现负数
输入描述:
两行,
第1行,正整数n(1≤n≤100)
第2行,n科成绩(范围0.0~100.0),用空格分隔。
输出描述:
输出一行,三个浮点数,分别表示,最高分,最低分以及平均分(小数点后保留2位),用空格分隔。
1. int main() 2. { 3. int n,i=0; 4. scanf("%d",&n); 5. float a=0,b=0,c=100.1,d=0; 6. //成绩范围为(0.0-100.0),因为后面c与a要进行比较,需给c一个较大值,也可以给其他值,只要大于100就可以; 7. for (i;i<n;++i) 8. { 9. scanf("%f",&a); 10. if(a>b)b=a; 11. //a与b进行比较,如果a>b,则将a值赋给b,依次类推得出最大值; 12. if(a<c)c=a; 13. //与最大值同理 14. d=a+d; 15. 16. } 17. printf("%.2f %.2f %.2f",b,c,d/n); 18. //"%.2f"是为了保留两位小数 19. return 0; 20. }
以上就是小bit遇到的问题,并已得到解决。希望这篇博客能激励自己也激励和博主一样的小bit。
长风破浪会有时,直挂云帆济沧海。