用c语言将321变为123,C语言学习小结

**

C语言学习小结

**

这学期学了C语言,对C语言有了一个简单的了解与初步的认识。首先从程序结构的使用与学习开始学起,到后来数组、函数的初步了解,能够开始解决一些简单的C语言问题,但是要想深入解决一些难题,还要等到下学期学习算法及函数、指针的深入才能做到得心应手。这学期只是认识阶段,下学期的任务很重,C语言的学习道路才刚刚开始,一切都是任重而道远。

这次博客根据之前的几次博客做一些补充及注意问题,另外列举一些例题来加深对知识点的使用。

一、首先从输入输出写起,scanf()型要注意取地址符的使用,不要漏掉,但是输入字符数组时,字符串名称前是不加的,例:scanf(“%s”,字符串名称)。

printf()型输出可以规定其输出格式,此时较cout型输出简单,例:对double型变量a保留3位小数输出,用printf()型为printf(“%.3lf

”,a);用cout型则为cout<

另外scanf-printf要比cin-cout执行效率高。读写速度要快得多。

二、对于取整问题,有时会涉及到向上取整或者向下取整,根据具体问题具体分析。ceil()属于向上取整,floor()属于向下取整。

三、对于域宽的控制,可以使用setw()来控制。

四、嵌套循环时外循环控制行,内循环控制列,不要混淆。

例:描述

根据参数,画出矩形。

输入

输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。

输出

输出画出的图形。

样例输入

7 7 @ 0

样例输出

@@@@@@@

@ @

@ @

@ @

@ @

@ @

@@@@@@@

#include

#include

using namespace std;

int main()

{

int a,b,i,j,x;

char ch;

cin>>a>>b>>ch>>x;

if(x==0)

{

for(i=1;i<=a;++i)

{

for(j=1;j<=b;++j)

{

if((i==1)||(i==a)||(j==1)||(j==b))

{

cout<

}

else

{

cout<

}

}

cout<

}

}

else

{

for(i=1;i<=a;++i)

{

for(j=1;j<=b;++j)

cout<

cout<

}

}

cout<

return 0;

}

根据以上例题可以得出循环嵌套中高和宽(行和列)的问题,当然对于上面的规律也可以一行一行来打出。例:

for(i=1;i<=b;i++)

cout<

cout<

for(j=1;j<=a-2;j++)

{

cout<

for(h=1;h<=b-2;h++)

cout<

cout<

}

for(m=1;m<=b;m++)

cout<

来代替以上打出空心的情形。所以解这种规律性问题的方法有很多,相信下学期接触算法之后就更能体会到不同规律、不同方法解题的情形。如果我们能找到好的方法、规律,将会对我们的编程语句大大简化。

五、对于经典的数字反转问题,又可以说是倒置排序,就是用了很巧妙的方法来解题。

例:

m=0;

while(n>0) //while(n!=0)

{

m=m*10+n%10;

n=n/10;

}

cout<

就将n的数字倒置了。例:123变为321.

六、当然对于以上数字如果想要正序输出,例:123以空格为间隔正序输出得1 2 3

例:

int q,v;

for(int i=1;i<=b;i++)

{

q=pow(10,b-i);

v=c/q;

c=c-v*q;

cout<

}

cout<

其中b代表数字位数,可通过循环结构求出。

七、对于数字的基础问题还有求素数、最小公倍数、最大公约数等。在求素数问题上,例:

for(int i=2;i

{

if(n%i==0)

break;

cout<

}

表示判断的n是否为素数,当然这样判断多组数据时容易超时,可以进行一点优化,改为

a=sqrt(x);

for(int i=2;i<=a;i++)

{

if(n%i==0)

break;

cout<

}

对于最小公倍数,例:

int n,m;

cin>>n>>m;

for(int i=1;i<=m*n;i++)

{

if((i%m==0)&&(i%n==0))

{

cout<

break;

}

}

相对来说容易想到,但是也容易超时,下面再写一下改进之后的:

int a,b,i,t;

cin>>a>>b;

if(a

{

t=a;

a=b;

b=t;

}

for(i=a;i<=a*b;i+=a)

if(i%b==0)

break;

cout<

这样就不用一一测试排查,只测试了a的倍数的数值,当然也可以测试b的,但是数据就相对增多了一些,所以对a,b的大小进行了比较,只测试数据大的。

八、说起对比大小,这时就想到数字排序问题。在比较大小时,可以通过引入变量来排,也可以通过函数或者swap()换序解决。不过这些都只适用于两位数字大小比较。当排序时,可以考虑sort函数,简便不易超时,也可以使用冒泡法等方法解决。

通过以上几个例子简单说明一下思维的重要性,这学期初步认识C语言,就是要了解思维规律、算法的奥妙,这学期只是为下学期做了一个铺垫,属于认识阶段。希望下学期能够学好函数、算法,灵活运用C语言,用C语言解决更多的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值