大一上学期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语言的学习,我对编程的认识是把题目利用数学的思想编写出代码,这需要我们理解题目的题眼,考虑到用哪种方法解决它,此外,我们还应注意程序结构的优化,不能一昧地暴力循环。此外,还应掌握一些思想,例如在查找时,我们应考虑到用二分查找提高效率。在变量不好表示时,我们应考虑到用标记法去标记变量等等。这对我们以后解决问题优化结构起到一些帮助。

猜你喜欢

转载自blog.csdn.net/wcxyky/article/details/85791381