第一个C程序

打印输出“Hello World!

1
2
3
4
5
6
#include<stdio.h>
int main()
{
printf("Hello World!");
return 0;
}

计算时间差

输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间的差:

常规的,我们的思路是定义不同的变量来存储hourminute,比如:

1
2
3
4
5
int hour1, minute1;
int hour2, minute2;

scanf("%d %d",&hour1, &minute1);
scanf("%d %d",&hour2, &minute2);

但是因为hourminute之间不是十进制,在计算的时候假如发生需要“借位”的情况,那岂不是不行了?所以可以统一单位,比如把hour也转化为minute,两个不同的时间t1t2,有:

  • hour*60+minute——>转化为minute单位
  • t/60——>hour部分
  • t%60——>minute部分

这个简单的程序思路有了,可以写出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>

int main()
{
int hour1, minute1;
int hour2, minute2;

scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);

int t1 = hour1*60 + minute1;
int t2 = hour2*60 + minute2;

int t = t2-t1;

printf("时间差是%d小时%d分", t/60, t%60);

return 0;
}

运算符优先级

优先级 运算符 运算 结合关系 实例
1 + 单目不变 自右向左 a*+b
1 - 单目取负 自右向左 a*-b
2 * 自左向右 a*b
2 / 自左向右 a/b
2 % 取余 自左向右 a%b
3 + 自左向右 a+b
3 - 自左向右 a-b
4 = 赋值 自右向左 a=b

赋值运算符

赋值也是运算,也有结果,比如:

  • a=8 ——> a被赋予值(8)
  • a=b=8 ——> a=(b=8)

“嵌入式赋值”

比如下面这样的,这样的写法容易产生错误,而且会大大降低代码的可读性,所以非常不推荐

1
2
3
int a = 6;
int b;
int c = 1+(b=a);

结合关系

  • 一般自左向右
  • 单目+/-和赋值=自左向右

下面是一段C代码,这种写法和上面“嵌入式赋值”类似——太复杂、容易产生错误,而且会大大降低代码的可读性,所以非常不推荐

1
2
3
result = a = b = 3 + c;
result = 2;
result = (result = result*2)*6*(result = 3 + result);

应该按照程序的实际顺序改写成若干个表达式!

计算复利

在银行存定期的时候,可以选择到期自动转存,并将到期的利息自动并入本金合并转存。如果一年的定期利率是3.3%,那么连续转存三年后,最初存入的x元定期会得到多少本息余额?

首先,可以知道本息合计 = x*(1+3.3%)^3,对于3年的本息复利:

1
2
3
4
5
int x;
printf("Plese input x:");
scanf("%d",&x);
double amount = x*(1+0,033)*(1+0.033)*(1+0.033)
printf("%f",amount);

交换变量

比如需要交换两个变量的值,就需要第三个变量(假设t就这这个变量)来帮助交换,可以表述为:

  • 交换前:

    a = 2,b = 3,t

  • 交换后:

    a = 3,b = 2,t

程序实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>

int main()
{
int a = 2;
int b = 3;
int t;

t = a;
a = b;
b = t;

printf("a=%d,b=%d",a,b);

return 0;
}

复合赋值

5个算术运算符:+、-、*、/、% 可以和 = 结合起来,形成复合赋值运算符:+=、-=、*=、/=、%=

注意在这两个运算符之间不要有空格

比如:

  • total += 5 ——> total = total + 5
  • total += (sum+100)/2 ——> total = total + (sum+100)/2
  • total *=sum + 12 ——> total = total * (sum+12)
  • total /= 12 + 6 ——> total = total / (12+6)

递增/递减运算符

“++”和“–”是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,它们的作⽤用就是给这个变量+1或者-1

前缀后缀

  • ++ 和 – 可以放在变量的前面,叫做前缀形式,也可以放在变量的后面,叫做后缀形式
  • a++ 的值是 a 加 1 以前的值,⽽而 ++a 的值是加了1以后的值,无论哪个,a自己的值都加了1。

对于递增/递减运算符的前缀后缀,可以列表如下:

表达式 运算 表达式的值
count++ 给count的值加1 count原来的值
++count 给count的值加1 count+1后的值
count– 给count的值减1 count原来的值
–count 给count的值减1 count-1后的值

可以用一段程序验证,加强理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>

int main()
{
int a;
a = 10;

printf("a++=%d\n",a++);
printf("a=%d\n",a);

printf("++a=%d\n",++a);
printf("a=%d",a);

return 0;
}

可以得到输出:

1
2
3
4
5
6
7
a++=10
a=11
++a=12
a=12
--------------------------------
Process exited after 0.02602 seconds with return value 0
请按任意键继续. . .

整数四则运算

编写程序,计算2个正整数的和、差、积、商并输出,题目保证输入输出全部在整型范围内——乔林(清华大学)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>

int main()
{
int a,b;

scanf("%d %d",&a,&b);
printf("%d + %d = %d\n",a,b,a+b);
printf("%d - %d = %d\n",a,b,a-b);
printf("%d * %d = %d\n",a,b,a*b);
printf("%d / %d = %d\n",a,b,a/b);

return 0;
}

厘米换算英尺英寸

如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是 (foot + inch/12)*0.3048。现在,当用户输入的是厘米数,那么随影英制长度的英尺和英寸是多少呢?别忘了1英尺=12英寸——翁恺(浙江大学)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>

int main()
{
int cm = 0;
scanf("%d",&cm);

int foot = cm / 30.48;
int inch= ((cm / 30.48) - foot)*12;

printf("%d %d\n",foot,inch);

return 0;
}

这部分开始跟着翁恺老师的C语言慕课学习的,大约是前两周内容,下面要加快点速度了😋