针对C语言入门OJ题(牛客网)
(入门)BC41-你是天才吗?_牛客题霸_牛客网 (nowcoder.com)
解析:
- 关于多组输入的题目,一定要处理好多组数据的输入问题,然后考虑循环如何结束。
- 方法1和方法2,给出了两种不同的多组输入的方法。
- ~ - C语言中的操作符 - 按位取反。
参考代码:
#include <stdio.h> //方法1 int main() { int iq = 0; while(scanf("%d", &iq) != EOF) { if(iq>=140) printf("Genius"); } return 0; }
//方法2 #include <stdio.h> int main() { int iq = 0; //这种写法是因为scanf读取失败返回EOF,EOF是-1, //所以按位取反后的结果是0, 0为假,可以让循环停止。 while(~scanf("%d", &iq)) { if(iq>=140) printf("Genius"); } return 0; }
(入门)BC42-完美成绩_牛客题霸_牛客网 (nowcoder.com)
解析:
- 多组输入。
- 数学中的 90<=score<=100 的写法,在C语言中直接写是有bug的。
参考代码:
//代码一 #include <stdio.h> int main() { int score = 0; while(scanf("%d", &score) != EOF) { if(score >= 90 && score<=100) printf("Perfect"); } return 0; }
//代码二 #include <stdio.h> int main() { int score = 0; while(~scanf("%d", &score)) { if(score >= 90 && score<=100) printf("Perfect"); } return 0; }
(简单)BC43-及格分数_牛客题霸_牛客网 (nowcoder.com)
参考代码:
#include <stdio.h> int main() { int score = 0; while(scanf("%d", &score) != EOF) { if(score >= 60) printf("Pass\n"); else printf("Fail\n"); } return 0; }
(入门)BC44-判断整数奇偶性_牛客题霸_牛客网 (nowcoder.com)
参考代码:
//代码一 #include <stdio.h> int main() { int num = 0; while(scanf("%d", &num) != EOF) { if(num%2==1) printf("Odd\n"); else printf("Even\n"); } return 0; }
//代码二 #include <stdio.h> int main() { int num = 0; while(~scanf("%d", &num)) { if(num%2==1) printf("Odd\n"); else printf("Even\n"); } return 0; }
(简单)BC45-最高分数_牛客题霸_牛客网 (nowcoder.com)
解析:
- 多组输入。
- 每组输入接受3个数字,求出最大值,因为成绩不能是负数,所以假设max期初是0。
参考代码:
//代码一 #include <stdio.h> int main() { int i = 0; int score[3] = {0}; while(scanf("%d %d %d", &score[0], &score[1], &score[2]) != EOF) { int max = 0;//每一组测试,max都恢复到0 int i = 0; for(i=0; i<3; i++) { if(score[i] > max) max = score[i]; } printf("%d\n", max); } return 0; }
//代码二 #include <stdio.h> 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\n", max); } return 0; }
(简单)BC46-判断是元音还是辅音_牛客题霸_牛客网 (nowcoder.com)
解析:
参考代码:
//方法1 #include <stdio.h> int main() { char ch = 0; //存放元音字母的数组 char vowel[] = "AaEeIiOoUu"; //输入 while((ch=getchar()) != EOF) { //判断 int i = 0; for(i=0; i<10; i++) { if(ch == vowel[i]) { printf("Vowel\n"); break; } } if(i == 10) { printf("Consonant\n"); } getchar();//去除每个字符后的\n } return 0; }
//方法2 #include <stdio.h> int main() { char ch = 0; char arr[] = "AEIOUaeiou"; //在%c的前面写一个空格会消化掉前面所有的空白字符,然后读取一个字符 while(scanf(" %c", &ch) != EOF) { int i = 0; for(i=0; i<10; i++) { if(ch == arr[i]) { printf("Vowel\n"); break; } } if(i == 10) printf("Consonant\n"); } return 0; }
//方法3 #include <stdio.h> int main() { char ch = 0; char arr[] = "AEIOUaeiou"; //在%c的后边发给一个'\n',其实在输入时候就会消化掉这个\n字符 //不会为下次留下空白字符的隐患 while(scanf("%c\n", &ch) != EOF) { int i = 0; for(i=0; i<10; i++) { if(ch == arr[i]) { printf("Vowel\n"); break; } } if(i == 10) printf("Consonant\n"); } return 0; }
//方法4 #include <stdio.h> #include <string.h> int main() { int ch = 0; //存放元音字母的数组 char vowel[] = "AaEeIiOoUu"; //输入 while((ch=getchar()) != EOF) { //判断 //strchr 是用来判断 ch 是否在字符串vowel出现 //如果出现了,返回vowel的字符串中的地址 //如果没出现,返回NULL if(strchr(vowel, ch)) { printf("Vowel\n"); } else { printf("Consonant\n"); } getchar();//去除每个字符后的\n } return 0; }
(简单)BC47-判断是不是字母_牛客题霸_牛客网 (nowcoder.com)
解析:
本题和 BC46 是一个道理的,三种方法均可使用。
参考代码:
//代码一 #include <stdio.h> int main() { int ch = 0; while((ch=getchar()) != EOF) { //判断字母 //if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) if(isalpha(ch)) { printf("%c is an alphabet.\n", ch); } else { printf("%c is not an alphabet.\n", ch); } getchar();//清理掉\n } return 0; }
//代码二 #include <stdio.h> int main() { int ch = 0; while((ch=getchar()) != EOF) { //判断字母 if(isalpha(ch)) { printf("%c is an alphabet.\n", ch); } else { printf("%c is not an alphabet.\n", ch); } getchar();//清理掉\n } return 0; }
(简单)BC48-字母大小写转换_牛客题霸_牛客网 (nowcoder.com)
解析:
这道题和 BC46 、 BC47 题一样。
参考代码:
//代码一 #include <stdio.h> #include <ctype.h> int main() { int ch = 0; //多组输入 while((ch=getchar()) != EOF) { if(islower(ch)) { printf("%c\n", toupper(ch)); } else if(isupper(ch)) { printf("%c\n", tolower(ch)); } getchar();//处理'\n' } return 0; }
//代码二 #include <stdio.h> int main() { int ch = 0; //多组输入 while(~scanf("%c\n", &ch) { if(ch>='A' && ch<='Z') { printf("%c\n", ch+32); } else if(ch >='a' && ch<='z') { printf("%c\n", ch-32); } } return 0; }
(简单)BC50-计算单位阶跃函数_牛客题霸_牛客网 (nowcoder.com)
参考代码:
#include<stdio.h> int main() { int t = 0; while(scanf("%d", &t) !=EOF) { if(t>0) printf("%d\n", 1); else if(t == 0) printf("%.1f\n", 0.5f); else printf("%d\n", 0); } return 0; }
(简单)BC51-三角形判断_牛客题霸_牛客网 (nowcoder.com)
解析:
这里需要搞清楚三角形的判断规则,再去进行一一一穷举就行,因为一共只有三条边。
参考代码:
#include <stdio.h> int main() { int a = 0; int b = 0; int c = 0; //当scanf读取结束或者失败的时候,就会返回EOF while(scanf("%d %d %d", &a, &b, &c) != EOF) //while(~scanf("%d %d %d", &a, &b, &c)) { //判断是否为三角形 if(a+b>c && b+c>a && c+a>b) { if(a==b && b==c)//是三角形 {//等边 printf("Equilateral triangle!\n"); } else if((a==b &&a!=c) || (a==c && a!=b) || (b==c &&b!=a)) {//等腰 printf("Isosceles triangle!\n"); } else {//普通 printf("Ordinary triangle!\n"); } } else printf("Not a triangle!\n"); } return 0; }