对于计算机科学与技术这个学科来说,c和c++还有java都是其重要的语言基础,在大一刚开始两个多月对于c的学习,其中神奇之处深深的吸引了我,独特的编译方式引起了我的好奇心,也激起我想要征服这个学科的信念。我写下这篇博客来记录我认为c语言学习要点和易错点。 首先最先需要接触和学习的就是c语言的程序处理的数据有常量和变量两种类型
常量的类型包括"整形常量"“字符型常量”“字符串类型常量”等等。不同的类型常量也有不同的表达形式。例如单精度类型用float表示,双精度用double表示。
c语言中也包括了许多算数运算符如:一元运算符,二元运算符,三元运算符。整数除法和浮点数除法。自增运算符,自减运算符。还介绍了宏常量和宏替换。还有与其相似的const常量,都是定义一个常量来代表一个数。还有关于自动类型转换与强制类型转换符。
在单个字符的输入输出中。字符常量是用单引号括起来的一个字符。字符的输入输出是需要引入ACSII的内容,需要借助getchar()和putchar()来从终端键盘输入和输出。数据的格式化,常用于scanf和printf中用于表示数据类型的。常用的有%d表示十进制整数,%c表示输入一个字符,%f表示单精度类型,%lf表示双精度类型。
选择控制结构中包括单分支,双分支,多分支控制的条件语句。还有switch语句。
循环控制结构中包括三种类型。for语句(当型循环结构),while语句(当型循环结构),do while语句(直到型循环结构)。for语句中包括初始化表达式。循环控制表达式,循环增值表达式。一直循环到不符合循环控制表达式,停止循环。while语句与do while语句区别是前者是先判断再循环,后者是先循环再判断。
我用我们第一个接触的程序“Hello,world!”来介绍程序最基本的内容包括:
#include
using namespace std;
int main()
{
cout<
return 0;
}
其中#include尖括号里面表示的是头文件是一个程序最基础的部分。
using nameapace std;表示所有的标准函数都在标准命名空间std中进行了定义,以免发生了重名的问题。
int main()里就是函数名
cout之后便是我们要输出的内容。
不要忘记最后的return 0;用于停止程序。
在刚开始接触c语言,我们这些小萌新们经常会犯一些不起眼的错误。接着来我来给大家介绍一下我自己觉得应该注意的地方和易错点。
1 变量必须先定义后使用。
2 赋值运算符是将=右边的表达式的值赋值给左边表达式。
3 在定义变量的时候不能对多个变量进行连续赋初值。
4 求余运算限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算。
5 在printf和scanf中格式控制字符串忘记加双引号。
6 在scanf中忘记加取地址符。
7 if之后不能加分号。
8 if语句后的复合语句忘记花括号。
9 等号是==,=是赋值符。
10 在switch语句中 每一个case 分支后面缺少break语句。
11 while和for语句之后要加花括号。
12 while语句后不能加分号。
13 do while中while后忘记加分号。
14 要用分号分隔for语句中三个条件。
接下来给大家几个易错例题。
1
邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
输入
输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。
输出
输出一行,包含一个整数,表示邮费
答案
#include
#include
#include
using namespace std;
int main()
{
int a,c;
char x;
c=8;
cin>>a>>x;
if(a<=1000)
{
if(x=='y')
cout<<13;
else
cout<<8;
}
if(a>1000)
{
a-=1000;
c=a/500*4+c;
if(x=='y')
c+=5;
if(a%500!=0)
{
c=c+4;
cout<
}
if(a%500==0)
cout<
}
}
其中包括了if else循环结构 还有自增运算符。也考差了做题人的思维紧密性。和对程序结构的了解。
2
金中食堂做的蛋糕总是做成菱形,琪琪希望蛋糕上能裱上一圈小花,她想请你再帮个忙,用电脑画出用“*”号组成的裱花形状,这将是个空心的菱形。
输入
一个整数,n>0。
输出
由n*2-1层“*”号组成的空心菱形
答案
码
#include
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=2*n-1;i++)
{
for(int j=1;j<=2*n-1;j++)
if(i+j==n+1||i+j==3*n-1||i==j-n+1||j==i-n+1)
{
cout<
}
else
cout<
cout<
}
return 0;
}
这道题也是算是挺有难度的。需要也考虑每一条边对应的关系式。也用上了循环嵌套结构。先考虑每个边对i和j的表达式。也要考虑到n取不同值会不会出问题。
这些是我对这两个月学习来总结的问题和注意点。如有不足,请老师同学们指出。