大家好,我是深鱼~
目录
前言:
1.计算平均成绩
2.进制A+B
3. 网购
4.争夺前五名
5.竞选社长
6. 完美成绩
7.最高分数
8.判断是元音还是辅音
9.字母大小写转换
10.三角形判断
&& 总结:
结语:
今天是更新刷题篇的第四天,虽然题目不是很难,但是希望我们能够怀着空杯心态来看这篇文章,静下心来,还是能学到很多新的知识,加油!!!
题目链接:计算平均成绩
题目:
题解:本题要注意最后一行是sum/5.0,5必须要学成小数,或者把sum定义为double类型
#include
int main()
{
//输入
int i=0;
int num=0;
int sum=0;
for(i=0;i<5;i++)
{
scanf("%d",&num);
sum+=num;
}
//计算并输出
printf("%.1lf",sum/5.0);
return 0;
}
题目链接:进制A+B
题目:
题解:
%x是16进制的数据格式
%o是8进制的数据格式
#include
int main()
{
int a,b=0;
scanf("%x %o",&a,&b);
printf("%d\n",a+b);
return 0;
}
题目链接:网购
题目:
题解:本题我们应该学会不断简化代码,本题就是一次一次简化的结果,这个过程就跟数学中的合并同类项一样
flag表示是否有优惠劵,直接-50*flag这样就十分的简洁
要注意的就是price小于0的情况,就需要直接打印0.00
#include
int main()
{
double m,price = 0;//m表示原价
int month, day, flag = 0;//flag表示是否有优惠价
//输入
scanf("%lf %d %d %d", &m, &month, &day, &flag);
//计算
if (month == 11 && day == 11)
price = 0.7 * m - flag * 50;
else if (month == 12 && day == 12)
price = 0.8 * m - flag * 50;
//输出
if (price <= 0)
printf("0.00");
else
printf("%.2lf", price);
return 0;
}
题目链接:争夺前五名
题目:
题解:本题要学会冒泡排序
冒泡排序的思想:两两相邻的元素进行比较,并且有可能的话,需要交换(嵌套循环)
首先就是9进行第一趟冒泡排序
9 8 7 6 5 4 3 2 1 0
8 9 7 6 5 4 3 2 1 0
8 7 9 6 5 4 3 2 1 0
...
8 7 6 5 4 3 2 1 0 9 //这就是一趟冒泡排序
接着就是8进行下一趟冒泡排序,一共就有n-1趟,n为数字的个数
然后本题的思路就是先输入成绩,然后从大到小进行冒泡排序,最后打印前五个
#include
int main()
{
//输入
int n,tmp=0;//n是个数
int arr[50]={0};//存放成绩
scanf("%d",&n);
for(int i=0;i
题解2:使用qsort函数直接进行排序
qsort库函数可以自动排序,但是这个函数要输入4个参数,而且使用前要引头文件#include
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
qsort(被排序数组的初始位置,要排序的数组的元素个数,一个元素所占字节,比较函数)
重点是最后一个参数,比较函数:
如果要升序(elem1
如果要降序(elem1>elem2),则return>0,就要return elem2-elem1
#include
#include
int cmp_int(const void*e1,const void*e2)//这个函数的写法也要学会
{
return *(int *)e2-*(int *)e1;
}
int main()
{
//输入
int n,tmp=0;//n是个数
int arr[50]={0};//存放成绩
scanf("%d",&n);
for(int i=0;i
题目链接:竞选社长
题目:
题解1:本题思路:gets()直接输入字符数组,然后开始遍历buf数组,统计A和B的个数
本题要学会gets()直接输入字符串
注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留\n
#include
int main()
{
char buf[100]={0};
//输入
gets(buf);
//统计
int count_a=0;
int count_b=0;
int i=0;
while(buf[i]!='0')
{
if(buf[i]=='A')
count_a++;
if(buf[i]=='B')
count_b++;
i++;
}
if(count_a>count_b)
printf("A");
else if(count_a==count_b)
printf("E");
else
printf("B");
return 0;
}
题解2:只用一个变量flag,是A就加1,是B就减1,最后看flag是大于小于还是等于0
#include
int main()
{
char buf[100]={0};
//输入
gets(buf);
//统计
int flag=0;
int i=0;
while(buf[i]!='0')
{
if(buf[i]=='A')
flag++;
if(buf[i]=='B')
flag--;
i++;
}
if(flag>0)
printf("A");
else if(flag==0)
printf("E");
else
printf("B");
return 0;
}
题解3:另一种方式输入字符串(ch=getchar())!='0')
#include
int main()
{
int flag=0;
char ch=0;
while(((ch=getchar())!='0')&&ch!=EOF)
{
if(ch=='A')
flag++;
else if(ch=='B')
flag--;
}
if(flag>0)
printf("A");
else if(flag==0)
printf("E");
else
printf("B");
return 0;
}
题目链接:完美成绩
题目:
题解:在这里我们看一下多组输入的另一种方法:
while(~scanf("%d",&a)) 意思还是等于EOF结束
~是C语言中的一个操作符-按位取反
EOF代表是-1 (整形在内存中存储的是补码)
10000000000000000000000000000001 原码
1111111111111111111111111111111111110 反码
1111111111111111111111111111111111111 补码 这个也就代表着-1(也就是EOF)
那么~EOF也就是00000000000000000000000000000000也就是0,0为假,不进入循环
#include
int main()
{
int n=0;
while(~scanf("%d",&n))
//while((scanf("%d",&n))!=EOF)也可以这样写
{
if(n>=90)
printf("Perfect\n");
}
return 0;
}
题目链接:最高分数
题目:
题解1:思路:三个数找出最大的一个只需要比较两次
这里用到了条件操作符exp1?exp2:exp3
解释:满足条件1则输出值为exp2,不满足条件1则输出值为exp3
#include
int main()
{
int n1=0;
int n2=0;
int n3=0;
while(~scanf("%d%d%d",&n1,&n2,&n3));
{
int max=n1>n2?n1:n2;
max=max>n3?max:n3;
printf("%d",max);
}
return 0;
}
题解2:这种做法的思路:输入完比较,首先让第一个数为最大值,然后从第二个数开始进行比较,如果第二个数大,就让第二个数为最大值,以此类推,max与第三个数进行比较
#include
int main()
{
int num[3]={0};
while(~scanf("%d %d %d",&num[0],&num[1],&num[2]));
{
int max=num[0];
int i=0;
for(i=1;i<3;i++)
{
if(num[i]>max)
max=num[i];
}
printf("%d",max);
}
return 0;
}
题解3:直接定义max为INT_MIN,温馨提示:在使用INT_MIN之前要声明:#include
#include
int main()
{
int max = INT_MIN;
int num = 0;
for (int i = 1; i <= 3; i++)
{
scanf("%d", &num);
if (num > max)
max = num;
}
printf("%d", num);
return 0;
}
题目链接:判断是元音还是辅音
题目:
题解1:思路:先把元音放入一个字符数组中,然后输入字母,遍历数组看有没有一样的,有就直接输出Vowel并加上break(跳出整个循环),如果i=10(走完整个循环)还是没有,直接输出Consonant
#include
int main()
{
char ch=0;
char vowel[]="AaEeIiOoUu";
while((ch=getchar())!=EOF)
{
getchar();//处理\n
int i=0;
for( i=0;i<10;i++)
{
if(vowel[i]==ch)
{
printf("Vowel\n");
break;
}
}
if(i==10)
printf("Consonant\n");
}
return 0;
}
题解2:这里介绍strchr函数来找字母
strchr函数是用来判断ch是否在字符串中vowel出现
如果出现了,则返回在vowel字符串中的地址
如果没出现,则返回NULL(空指针)
着这个函数要引头文件#include
#include
#include
int main()
{
char ch=0;
char vowel[]="AaEeIiOoUu";
while((ch=getchar())!=EOF)
{
getchar();//处理\n
if(strchr(vowel,ch))
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
}
return 0;
}
题解3:while(scanf(" %c",&ch)!=EOF)这样输入也可以
注意如果在%c前面加上一个空格,会消除掉前面所有的空白字符,然后读取一个字符,这样的好处就是不用再加一句getchar()来吸收\n
或者:while(scanf("%c\n",&ch)!=EOF)加上一个\n
#include
#include
int main()
{
char ch=0;
char vowel[]="AaEeIiOoUu";
while(scanf(" %c",&ch)!=EOF)
{
if(strchr(vowel,ch))
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
}
return 0;
}
题目链接:字母大小写转换
题目:
题解1:正常版:要知道一个结论就是大写字母和小写字母ASCII值差了32(A的ASCII的值为65,a的ASCII值为72)
#include
int main()
{
char ch='0';
while((scanf("%c",&ch))!=EOF)
{
if(ch>='a'&&ch<='z')
ch-=32;
else if(ch>='A'&&ch<='Z')
ch+=32;
getchar();
printf("%c\n",ch);
}
return 0;
}
题解2:这里介绍四个函数
isupper(ch):判断一个字母是不是大写字母
islower(ch):判断一个字母是不是小写字母
toupper(ch):把一个小写字母转换为大写
tolower(ch):把一个大写字母转换为小写
这些函数都要引头文件:#include
#include
#include
int main()
{
char ch=0;
while(~scanf(" %c",&ch))
{
if(isupper(ch))
{
printf("%c\n",tolower(ch));
}
else if(islower(ch))
{
printf("%c\n",toupper(ch));
}
}
return 0;
}
题目链接:三角形判断
题目:
题解:构成三角形的条件:任意两条边之和大于第三边(所以三种情况都要写)
思路:是三角形进一步判断是什么三角形,不是三角形直接输出不是;如果是三角形,再三条边相等,就是等边三角形(注意==是双目操作符,不能写三个变量相等,而要写为a==b&&b==c)
然后如果不是等边,则可能是两条边相等,这时不用写第三天边不等,因为如果第三天边相等,第一个判断语句就直接输出了,最后就是else普通三角形
#include
int main()
{
int a,b,c=0;
while(~scanf("%d %d %d",&a,&b,&c))
{
if(a+b>c&&a+c>b&&b+c>a)
{
if(a==b&&b==c)
printf("Equilateral triangle!\n");
else if (a==b||a==c||b==c)
printf("Isosceles triangle!\n");
else
printf("Ordinary triangle!\n");
}
else
printf("Not a triangle!\n");
}
return 0;
}
1.%x是16进制的数据格式 %o是8进制的数据格式
2.要学会不断精简自己的代码,而不是写出来了就行了,严格要求自己eg:flag表示是否有优惠劵,直接-50*flag,这样就非常简洁
3.冒泡排序的思想:两两相邻的元素进行比较,并且有可能的话,需要交换(嵌套循环)外层循环代表趟数,内层循环代表一趟冒泡排序中要进行多少元素的比较
4.qsort函数:排序函数
头文件:#include
参数:qsort(被排序数组的初始位置,要排序的数组的元素个数,一个元素所占字节,比较函数)
升序:return<0 即return elem1-elem2
降序:return>0即return elem2-elem1
自定义指针函数的写法:
int cmp_int(const void*e1,const void*e2)
{
return *(int *)e2-*(int *)e1;
}
5.gets()直接输入字符串:缓冲区中不会遗留\n
6.普通变量的多组输入:while(~scanf("%d",&a))
字符的多组输入:while(~scanf("%c\n",&ch))这样就不要写getchar()来吸收\n
7.条件操作符exp1?exp2:exp3(满足条件1则输出值为exp2,不满足条件1则输出值为exp3)
8.strchr函数是用来判断字符是否在字符串中出现
如果出现了,则返回在字符串中的地址
如果没出现,则返回NULL(空指针)
着这个函数要引头文件#include
9.大写字母和小写字母ASCII值差了32(A的ASCII的值为65,a的ASCII值为72)
10.判断大小写和转换大小写字母的函数
isupper(ch):判断一个字母是不是大写字母
islower(ch):判断一个字母是不是小写字母
toupper(ch):把一个小写字母转换为大写
tolower(ch):把一个大写字母转换为小写
这些函数都要引头文件:#include
11.注意==是双目操作符,不能写三个变量相等,而要写为a==b&&b==c
感觉笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢!