大一上学期C语言不熟知识点学习总结

               大一上学期C语言不熟知识点学习总结
 通过前几章对顺序结构程序设计程序、if选择结构、switch语句、循环结构、数组、函数的学习,这一次我将主要针对几种不熟悉的知识点及题型进行分析。

一. 增1和减1运算符
①m=n++; 即 ( m=n; n++;)
②m=++n; 即 ( n++; m=n; )

二.ASCII码值
'A’的ASCII码值为65; 'a’的ASCII值为97,差值为32.

三.大小写英文字母转换
ch=ch+32;
ch=ch+(‘a’–‘A’) //将大写英文字母转换成小写英文字母

四.情况一定要考虑周全(一元二次方程求解)
#include
#include
using namespace std;
int main()
{
double a, b, c, d, x1, x2, rp, ip ;
cin >> a >> b >> c ;
if ( fabs( a ) <= 1e-8 )
cout << " It is not quadratic." << endl ;
else
{
d = b * b - 4 * a * c ;
if ( fabs( d ) <= 1e-8 )
cout << "It has two equal real roots: " << -b / ( 2a ) << endl ;
else
if ( d > 1e-8 )
{
x1 = ( -b + sqrt( d ) ) / ( 2
a ) ; x2 = ( -b - sqrt( d ) ) / ( 2a ) ;
cout <<"It has two distinct real roots: “<<x1<<” and "<<x2<<endl ;
}
else
{
rp = -b / ( 2
a ) ; ip = sqrt( -d ) / ( 2*a ) ;
cout << "It has two complex roots: " << endl ;
cout << rp << " + " << ip << “i” << endl ;
cout << rp << " - " << ip << “i” << endl ;
}
}
return 0;
}

五.最大公约数的求法
分别用m,n ,r代表被除数,除数,余数,利用辗转相除法。
#include
using namespace std;
int main()
{
int m,n,r;
cin>>m>>r;
r=m%n;
while(r!=0)
{
n=r;
m=n;
r=m%n;
}
cout<<n<<endl;
return 0;

六.setw函数
①在C++中,setw(int n)用来控制输出间隔。
例如:
cout<<‘s’<<setw(8)<<‘a’<<endl;
则在屏幕显示
s a
//s与a之间有7个空格,setw()只对其后面紧跟的输出产生作用,如上例中,表示’a’共占8个位置,不足的用空格填充。若输入的内容超过setw()设置的长度,则按实际长度输出。
setw()默认填充的内容为空格。
②我们可以对一个要输出的内容同时设置域宽和填充字符,但是设置好的属性仅对下一个输出的内容有效,之后的输出要再次设置。即cout <<setw(2) <<a <<b;语句中域宽设置仅对a有效,对b无效。
③setw函数在头文件iomanip中 #include

七.生成随机数
(1)随机函数rand()是在头文件cstdlib中
(2)利用求余函数rand()%b将函数rand()生成的随机数变化到[0,b-1]之间
(3)利用rand()%b+a将随机数的取值范围平移到[a,a+b-1]之间
例:#include
int magic;
magic=rand()%100+1; //生成一个1-100之间的随机数,但这种方法只能生成固定的随机数,于是我们提出了随机数种子
例:#include<time.h>
#include
int magic;
srand(time(NULL)); //为函数rand()设置随机数种子
magic=rand()%100+1;

八.能利用标记变量解决问题
例如:校门外的树对需要移走的树进行标记; 开关灯中对每次处理的灯进行标记; 查找特定的值并输出第一次出现的位置
开关灯问题:有n盏灯,有m个人,第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将3的倍数的灯做相反处理(将打开的灯关闭,将关闭的灯打开)。以后的人和3号一样,将凡是自己编号倍数的灯做相反处理。问当第m个人操作之后,哪几盏灯是关闭的,按从小到大输出编号,其间用逗号间隔
int main()
{
int n,m,z=1;
cin>>n>>m;
memset(a,0,sizeof(a)); //初始化全部关闭
for(int i=1;i<=m;++i)
for(j=1;j<=n;++j)
if(j%i0) a[j]=!a[j]; //编号是i的倍数的灯做相反处理
for(int i=1;i<=n;++i)
{
if(a[i]) //是关闭的灯a[i]==1
{
if(z) z=0;
else printf(","); //第一次不用先输出逗号
printf("%d",i); //顺次输出关闭的灯的编号
}
}

九.排序和查找
例如:按交换法将数组a的元素值按从高到低排序(冒泡排序)
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n-i;j++)
{
swap(a[j],a[j+1])
}
}
例如:按折半查找法查找值为x的数组元素,若找到则返回x在数组中的下标位置,否则返回-1(二分查找)
int er (long num[],long x,int n) (er()为函数定义)
{
int low=0;high=n-1;mid;
while(low<=high)
{
mid=(high+low)/2;
if(x>num[mid])
low=mid+1;
else if(x<num[mid])
high=mid-1;
else return mid;
}
return -1;
}
通过大一上学期对C语言的学习,我对编程的认识是把题目利用数学的思想编写出代码,这需要我们理解题目的题眼,考虑到用哪种方法解决它,此外,我们还应注意程序结构的优化,不能一昧地暴力循环。此外,还应掌握一些思想,例如在查找时,我们应考虑到用二分查找提高效率。在变量不好表示时,我们应考虑到用标记法去标记变量等等。这对我们以后解决问题优化结构起到一些帮助。

### 大一学期 C语言知识点总结 #### 1. 基本概念与环境搭建 C语言是一种通用的编程语言,支持结构化编程、低级内存访问以及高效的执行速度。学习初期主要集中在理解基本语法和构建简单的控制逻辑。 - **开发工具**:安装并配置集成开发环境(IDE),如Code::Blocks, Dev-C++, Visual Studio Code等。 - **第一个程序**:“Hello World!”展示了如何编写最基础的C程序[^1]。 ```c #include <stdio.h> int main() { printf("Hello World!\n"); return 0; } ``` #### 2. 数据类型与变量声明 掌握不同类型的数据表示方法及其范围;了解不同类型的转换规则。 - 整型(int)、浮点数(float/double)、字符(char)是最常用的基础数据类型; - 变量定义遵循`type variable_name;`的形式[^2]。 #### 3. 运算符与表达式 熟悉各种运算符的应用场景,包括但不限于: - 算术运算(+,-,*,/,%), - 关系比较(<,>,<=,>=,==,!=), - 位操作(&,|,~,^,<<,>>), - 赋值操作=, - 条件三元?[:]。 #### 4. 控制流语句 通过条件判断(if/else, switch-case)实现分支选择功能;利用循环(for, while, do...while)完成重复任务自动化处理。 #### 5. 函数设计 函数是用来封装一段可重用代码片段的有效方式。学会创建自定义函数,并传递参数给它们来增强灵活性。 ```c // 定义一个求两整数最大值的简单函数 int max(int a, int b){ return (a>b)?a:b ; } ``` #### 6. 数组与指针 深入探讨数组的概念——一组相同类型的连续存储单元集合体;同时介绍指向这些元素地址的特殊变量即指针(pointer)。 - 字符串实际上是char类型的数组实例之一[^3]。 #### 7. 编译预处理指令 虽然不属于严格意义上的C语言组成部分,但在实际编码过程中经常遇到宏定义(`#define`)、文件包含(`#include`)等功能强大的特性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值