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