本周主要考察基础计算的掌握以及if语句的基本使用,一定要注意特定函数的特定要求,以及定义函数的头文件
注意:建议大家先自己做一遍,如果实在解决不了在对照答案找问题
对于上海海事大学的同学,C语言程序设计课程中的实验课程环节的作业基本与本课程的题目相同或类似,可以先自行查找题目,本校使用的编译软件为 Visual C++ 6.0 ,建议有条件的同学使用较新的编译软件,大家可以自行选择比较顺手的编译软件。
对于刚入门的同学,我推荐使用 VS 2022 ,并附上入门教程:教程链接
对于非本校的同学,可以通过本教程自行练习,在吃透本课程后,我相信期末考试取得高分也不是很大的问题,如果只是自学,也可以参考我校的学习进度,自行调整学习计划。
VC 6.0 是1998年所诞生的软件,目前早已停止更新,并且只支持32位的电脑,现如今大家所使用的电脑一般都是64位,大部分人会无法正常使用,并且报错也不智能,所以对于初学者没必要浪费太多的时间在不必要的麻烦上
在C语言中,abs函数主要用于对整型数据类型(int、long、longlong)取绝对值,而fabs函数的适用面则非常广了,它不仅可以对整型求绝对值,也能够对浮点型求绝对值(float、double),但要注意,abs函数是在 “stdio.h” 的头文件中被定义,而fabs函数则是在 “math.h” 的头文件中被定义。
代码实现:
#include
#include
int main()
{
double x,y;
scanf("%lf",&x);
y=fabs(x);
printf("y=%lf\n",y);
return 0;
}
//题目没有说明保留几位小数,所以没有做处理
在C语言中,sqrt函数只支持double和float类型,而对于整型数据,则需要强制转化为浮点型数据,才能够使用sqrt函数。
//例如 a = sqrt (b);
//其中b必须为浮点型数据
//而如果想要a被赋值为整型数据,可以这么写:
a = (int) sqrt(b);
这是最常用的方法,与这种函数强制要求的规定不同,在不同类型的混合运算中,编译器会自动地转换数据类型,将参与运算的所有数据先转化为同一类型,然后再进行运算,转换按数据长度增加的方向进行,以保证数据不失真(或精度降低)。
类型自动转换方向如下图所示:
#include
int main()
{
int i = 15;
char c = 'c'; /* ascii 值是 99 */
float sum;
sum = i + c;
printf("Value of sum : %f\n", sum );
}
当上面的代码被编译和执行时,它会产生下列结果:
Value of sum : 114.000000
在这里,c 首先被转换为整数,但是由于最后的值是 float 型的,所以会应用常用的算术转换,编译器会把 i 和 c 转换为浮点型,并把它们相加得到一个浮点数。
代码实现:
#include
#include
int main()
{
float x,y;
scanf("%f",&x);
y=sqrt(x);
printf("%f\n",y);//printf("%.f\n",y);
return 0;
}
//题目没有说明保留几位小数,所以没有处理
这里用到了字符数据类型能够和整型相互转换的特点
同时,常用的ASCII码要记住,一般只要记住 a、A、0即可。
字符 | ASCII码 |
---|---|
a | 97 |
A | 65 |
0 | 32 |
例如:A就有四种表达形式
‘A’ <=> ‘\101’ <=> ‘\x41’ <=> 65
单引号中的反斜杠为转义字符的意思
\0 为八进制
\x 为十六进制
代码实现:
#include
//如果要调用toupper()函数要添加"ctype.h"的头文件
//#include
int main()
{
char ch1,ch2;
scanf("%c",&ch1);
ch2=ch1-32;//ch2=toupper(ch1);
//调用函数的方法
printf("%c\n",ch2);
return 0;
}
例如 :
输入“127”
输出应为“721”(七百二十一)
本例就遇到了新的运算方法求余(%),也叫取模运算,求余运算指一个数除以另一个数,不够除的部分就是余数,就是求余的结果。 整除就是一个数除以另一个数,刚刚好的倍数,这里没有四舍五入,不够一倍的都将舍去。
例如:
1 % 2 = 1
2 % 2 = 0
3 % 2 = 1
注意区分求余与除法运算的区别,并且在C语言中,求余的俩边一定是整型数据类型
代码实现:
#include
int main()
{
int a,b,c,x,y;
scanf("%d",&x);
a=x%10;
b=(x/10)%10;
c=(x/100)%10;
y=c+b*10+a*100;
printf("%d\n",y);
return 0;
}
本题要求编写程序,如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。
输入格式:
输入第一行给出一个正整数D(假设1 ≤ D ≤ 7),代表星期里的某一天。
输出格式:
在一行中输出D天的后天是星期几。
输入样例:
4
输出样例:
6
代码实现:
#include
int main()
{
int a,b;
scanf("%d",&a);
if(a >= 1 && a <= 7)
{
if(a >= 1 && a <= 5)
{
b=a+2;
printf("%d\n",b);
}
else
{
b=a-5;
printf("%d\n",b);
}
}
else
{
printf("日期错误请重新输入");
}
return 0;
}
这里使用了if语句:
//if语句的基本格式
//其中条件为一个布尔量(真或假)
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else
{
语句3;
}
if语句是可以嵌套的,如上题答案所示,并且 else if 可以有多次条件,例如:
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else if(条件3)
{
语句3;
}
同时除了 if 其他都是可有可无的,但其他只要出现,必须有 if;
else会与上方最近的并且没有配队的 if 进行匹配;
并且只要前方有一个条件满足,后面的条件会自动跳过;
if语句还可以这么写:
if(条件1)
语句1;
else if(条件2)
语句2;
else
语句3;
但前提是只能运行一个分号结尾的语句,嵌套函数除外
例如:
if(条件1)
if(条件11)
{
语句11;
语句12;
}
else(条件2)
语句2;
本题要求编写程序,去商场淘打折商品时,计算打折以后的价钱。例如原价¥799,标明打6折,则折扣价应该是¥799 x 60% = ¥479.40。保留2位小数。
输入格式:
输入在一行中给出商品的原价(不超过1万元的正整数)和折扣(为[1, 9]区间内的整数),其间以空格分隔。
输出格式:
在一行中输出商品的折扣价,保留小数点后 2 位。
输入样例:
7996
输出样例:
479.40
代码实现:
#include
int main()
{
float a,b,c,d;
A: scanf("%f %f",&a,&b);
if(a > 0 && a <=10000 && b >=1 && b<= 9)
{
c=b/10;
d=a*c;
printf("%.2f\n",d);
}
else
{
printf("条件错误,请重新输入\n");
goto A;
}
return 0;
}
这里使用到了goto函数,用于实现循环功能,但这个函数很危险,建议学过循环语句的同学直接使用其他循环函数。
goto函数一般搭配一个标识符使用,当运行到 “goto XX;” 的时候,会自动跳到前方以 “XX:” 开头的语句的前方。
具体格式如下:
A: i++;
语句1;
goto A;
//此时就实现了循环自加的功能
//注意一定要配合跳出循环语句使用,防止陷入死循环
本题要求编写程序,计算4个整数的和与平均值。平均值保留1位小数。
输入格式:
输入在一行中给出4个整数,其间以空格分隔。
输出格式:
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。
输入样例:
1 2 3 4
输出样例:
Sum = 10; Average = 2.5
代码实现:
#include
//
float sum(int a,int b,int c,int d)
{
int e;
e = a + b + c + d;
return e;
}
//
float average(int a,int b,int c,int d)
{
float f;
f = ( a + b + c + d ) / 4.00;
return f;
}
//
int main()
{
int a,b,c,d,e;
float f;
scanf("%d %d %d %d",&a,&b,&c,&d);
e=sum(a,b,c,d);
f=average(a,b,c,d);
printf("Sum = %d; Average = %.01f\n",e,f);
return 0;
}
本课程为64学时的课程,其中包括32学时的课堂教学和32学时的实验课程,并且本教程为2023年后半学期的经验分享(即最新课程),课堂教学环节为学习,老师一般会教新课和复习,实验课程则为实践,老师会布置练习题,题目一般与本课程题目相同或类似,但还是建议大家自行完成练习题,在参考我的代码找错。
一般一周会有两节课,第一节是课堂教学,第二节为实验课程,共有16周,课后练习一般只持续至14周,最后两周的实验课程会设置成自行练习。前14周的实验课程包括:自行完成作业、测试题以及期中考试,一般内容与期末考试有关,大家可以自己归纳,我也会在最后发布上海海事大学C语言题库(基本为原题),期末考试为机考,所以大家一定要提前熟悉环境。
老师一般会将本周的其中两道题作为课后作业,其要求为:完成题目并且在作业后写100字左右的学习心得,题目只需将自己的程序抄在本子上即可,对于小结,大家可以写学习的体会(例如:在本周遇到什么错误等等),也可以是学习总结(例如:当作每周的学习归纳写)。
我会在每周附上我自己的作业照片,以供大家参考
期末考试内容主要是C语言的基础,例如:数据类型、条件语句(if 与 switch)、循环语句(while、for、do-while以及goto等)、数组(一维数组与多维数组)。而其他篇章考题比例极少,一般每章最少会有一道题,大家要自行把握,不要做无意义的复习。
期末考试的体型包括填空、选择、判断、程序改错(2题)、程序补写(2题)和程序写作题(1题)。
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的入门教程,敬请期待。
本文上方资源绑定的文件夹内包括本周的作业参考以及题目的word文件
如果是手机用户或者无法看到此绑定文件,可以进入我的主页自行寻找
C语言的学习是循序渐进的,只有不断积累才能提高,而只学习概念不去动手实践是无法学好C语言的,学好一门程序语言最重要的便是多动手实践,不断地实现新的功能,其所带来的正反馈会让大家逐渐爱上编程,喜欢编程。在学习并完成本课程后,大家基本也就入门了C语言,未来可期,也请大家继续努力。
感谢大家的观看,如果对本系列文章感兴趣的朋友也请多多点赞分享,收藏关注不迷路,如有疑问可以在文章下方评论或者直接私聊我,我会在第一时间回复大家,如果出现题目或程序出错,我会第一时间更改,大家的支持也是我第一动力,谢谢大家。