Weekly Diary 1(week 8,2020 fall)
发表时间:2020-10-18
发布人:葵宇科技
浏览次数:49
Introduction
Freshmen 大一新生
Beginner 入门小白
会在每周记录学到的东西和写的代码
这周主要写基本的C语句语法和几道题,外加一些非常amazing的事情和困惑
那我们开始吧!
Basic grammar of C language
if,else
if (条件)
{
(写代码)
}
else
{
(写代码)
}
初学判断、循环的时候,括号,大括号,分号的使用很难记,所以要格外注意一下
上例子:
#include<stdio.h>
int main() {
int age, English_score, IQ;
printf("请输入你的年龄:\n");
scanf_s("%d", &age);
printf("Please input your English score and your IQ:\n");
scanf_s("%d %d", &English_score, &IQ);
if (age > 0 && English_score >= 0 && IQ >= 0) {
if (age >= 18 && (English_score >= 130 || IQ >= 100))
//if ((age >= 18) && (English_score>=130||IQ>=100))
//age >= 18加括号可以增加程序可读性
printf("YES!\n");
else{
printf("NO!\n");
}
//简单的if, else可不加大括号,只能执行一行
}
else
printf("Error!\n");
return 0;
}
else if
使用else if正确的语序应该是:
if ( 条件1 ) { ... ..... } else if ( 条件2 ) { ... ... } else if ( 条件3 ) { ... ... } else{ ... ... }
C语言是从上到下依次执行的,所以最后的else在上面条件都不为真时才执行
下面直接上代码:
#include<stdio.h>
int main() {
int age;
printf("Please input your age:\n");
scanf_s("%d",&age);
if (age >= 70) {
printf("可以退休了\n");
}
else if (age >= 40)
printf("中年人你好\n");
else if (age >= 18)
printf("成年了,可以注册游戏账号!\n");
else if (age <= 0)
printf("你不对劲!\n");
else
printf("未成年,快回家写作业!\n");
return 0;
}
switch
注意:
break要加上(据说他的作用是跳出switch语句),不考虑嵌套,一个switch中不允许有两个case后面条件一样
case后面是冒号不是分号具体语法如下
switch(...){ //这里有大括号 case 数字或字符_1 : .........; break; case 数字或字符_2 : .........; break; default : break; }
因为平时用字符比较少,所以这里举了一个字符的例子
#include <stdio.h>
int main(){
/* 局部变量定义 */
char grade = getchar();
switch (grade)
{
case 'A':
printf("大佬!\n");
printf("大佬,救救孩子吧\n");
break;
case 'B':
case 'C':
printf("JUST SO SO\n");
break;
case 'D':
printf("您通过了\n");
break;
case 'F':
printf("I LOVE JLU!\n");
break;
default:
printf("无效的成绩\n");
break;
}
printf("您的成绩是 %c\n", grade);
return 0;
}
while, do…while, for
所谓的先判断条件循环和后判断条件循环,高中做那种带方框的选择题就很容易错 😦 所以我本人是非常不喜欢这个的。
在这里,for语句的执行流程是我认为比较重要的。同时还有continue,break,下周介绍把 hhh
三元运算符(用法简单 不多说了)
//输入年和月份,输出这个月有多少天
#include<stdio.h>
int main() {
int year, month;
scanf_s("%d%d",&year,&month);
int day[12] = { 31,0,31,30,31,30,31,31,30,31,30,31 };
day[1] = (year % 400 == 0 || year % 400 != 0 && year % 4 == 0) ? 29 : 28;
printf("%d",day[month-1]);
return 0;
}
>>这里意外发现,其实||的优先级比&&低,可以不用加括号,但加上还是比较靠谱^.^
Visual Studio 2019 hot key
Ctrl+A Select all
Ctrl+C Without cursor selection, VS will copy the code of this line
Ctrl+K+F Correct format
Alt+↑ or Alt+↑ The selected line moves up (down)
Ctrl+S Save(It’s best to form a good habit of save.)
Amazing experience & Puzzling problems
1.#include<math.h>中的sqrt与pow数据类型
/*1*/int a = sqrt(10);
/*2*/printf("%lf",(double)a);
/*3*/printf("%d",sqrt(9));
/*4*/printf("%lf",sqrt(10));
/*5*/printf("%d",pow(2,8));
前两行用了强制数据类型转换
对比3,4行,第四行可以输出正确值但是第三行不对
于是我又尝试pow,发现同理
我猜想计算机内部计算应该是浮点类型的(瞎猜hah)
2.#define
大家第一次见到define应该都是#define WIETH 30这种形式吧
我发现define的其他玩法
#include<stdio.h>
#define NUM 3+4
int main() {
int a = NUM * NUM;
printf("%d", a);
return 0;
}
结果是19不是49
#include<stdio.h>
#define NUM 'f'
int main() {
printf("%c", NUM);
return 0;
}
用define输出字符
3.输入输出字符串?
char s[10] = { 'I','2',' ','\n','b','\t','y','.','a'};
printf("%s",s);
>>数组长度是10个,只能输出9个,最后一个是\0
>>char s[] = { 'I','2','\n','\\','b','\t','y','.','a','\0'};
>>像这样[]内不写数字的,最后要加\0
4.(数据类型)5除以2等于几?
#include <stdio.h>
int main() {
printf("%f\n", 5 / 2); //0.000000(绿色波浪线)
printf("%d\n", 5 / 2); //2
printf("%d\n", (float)5 / 2); //0(绿色波浪线)
printf("%f\n", (float)5 / 2); //2.500000
printf("%f\n", 5.0 / 2); //2.500000
printf("%f\n", 5 / 2.0); //2.500000
printf("%d\n", 5.0 / 2); //0(绿色波浪线)
return 0;
}
5.这是学校书里的一道题,有关getchar的用法不懂
#include <stdio.h>
int main() {
char win;
int mark;
printf("Please input your mark:\n");
scanf_s("%d", &mark);
printf("Did you win the game?(input 'Y' or 'N')");
getchar();
win = getchar();
if (win == 'y' || win == 'Y') {
if (mark >= 95)
printf("Your final score is 100 :-).");
else
printf("Your final score is %d .", mark + 5);
}
else
printf("Your final score is %d .", mark);
return 0;
}
最开始没有写第八行的getchar(),程序是执行不了的。经过我简单研究,这应该和缓冲区有关,等我研究明白后再来解释吧 😃
大周日的还要去学高数 [orz] ,这周就到这里叭,下周再见~~
>>Author: Timax