当前位置: 代码迷 >> C语言 >> 写给初学者的(已更新 10.30)
  详细解决方案

写给初学者的(已更新 10.30)

热度:199   发布时间:2007-10-29 16:07:25.0
写给初学者的(已更新 10.30)

一、关于编译器
不想说的太多的废话,用DEV-C++就是了。与TC相关的就别用了,当然并不是说TC的坏话,TC时代已经过去了。什么TC FOR WINDOWS,WIN-TC,都不要用,尤其是那个TC FOR WINDOWS,void main()一大堆,还得要钱注册,郁闷。用DEV-C++入门,足够了。对TC的评述可以看“雨中飞燕”的blog.(以下程序均在DEV-C++4.9.9.2下编译通过)
二、程序一闪而过
1、可以用孔明推荐的那个while(1);
2、#include <stdlib.h>
int main(void)
{
system(“pause”);
return 0;
}
3、#include <conio.h> //这个不推荐使用,c99中没有这个。不过conio.h还是挺可爱的
int main(void)
{
getch();
return 0;
}
三、几个常用的函数
printf(); scanf(); getchar(); putchar(); gets(); puts();等,以及 string相关的几个操作。这个就不多说了,如果不会,看书吧。这类问题看书比什么都管用。
三、 密码输入
1、TC下的getpass();函数。用法可以查看相关资料。
2、利用getch();
//作者:随心
//所有稿件均有版权,如要转载,请务必著名出处和作者
##include <stdio.h>
#include <conio.h> //c99里没有这个,先用着吧.其实conio.h还是挺可爱的
#include <stdlib.h>
int main()
{
char s,sec[20];
int cnt=0,i=0;
while( s=getch() )
{
if(s=='\r')
break;
else if(s=='\b'&&cnt!=0)
{
printf("\b \b");
--cnt;
}
else if(s!='\b')
{
sec[cnt++]=s;
putchar('*');
}
else ;
}
putchar('\n');
for( ; i!=cnt; ++i)
putchar(sec[i]);
putchar('\n');
system("pause");
return 0;
}
五、数制转换
1、 可以用库函数itoa(); 用法可以参看相关资料。
2、 首先,你要知道在数学里实现转换的方法,然后把它用C语言描述出来。这样的代码很多。具体可以在论坛里搜一下。
这里发一下版主leeco的十进制转换为二进制的代码:
//作者:leeco
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <stdio.h>
void out_binary(int n)
{
if(!n)return;
out_binary(n/2);
putchar(n%2?'1':'0');
}

int main()
{
int n;
while(scanf("%d",&n)!=EOF){
out_binary(n);
putchar('\n');
}
}
3、 这里我想说的是利用C语言能够对位进行操作的特点来完成转换。对于C语言来说,一个整数在计算机内就是以二进制的形式存储的,所以没有必要再将一个整数经过一系列的运算转换为二进制形式,只要将整数在内存中的二进制表示输出即可
//代码引用自:《C/C++语言程序百例》
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include<stdio.h>
#include<stdlib.h>
void printb(int,int);
int main()
{
int x;
printf("Input number:");
scanf("%d",&x);
printf("number of decimal form:%d\n",x);
printf(" it's binary form:");
printb(x,sizeof(int)*8); /*x:整数 sizeof(int):int型在内存中所占的字节数
sizeof(int)*8:int型对应的位数*/
putchar('\n');
system("pause");
return 0;
}

void printb(int x,int n)
{
if(n>0)
{
putchar( '0'+( (unsigned)(x&(1<<(n-1)) ) >> (n-1)) ); /*输出第n位*/
printb(x,n-1); /*递归调用,输出x的后n-1位*/
}
}
4、其它的转换可以根据上述两种思想去思考。
六、求素数
1、先说一下什么是素数(小学问题)
素数就是只能被1和它自身整除的整数。求素数的方法很多,但万变不离其宗――都必须符合它的定义。下面列举下比较常用的两种算法:
2、开方法。好理解,但效率不高。
//代码引用自:《经典C程序100例》
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int m,i,k,h=0,leap=1;
for(m=101; m<=200; ++m)
{
k=sqrt(m+1);
for(i=2; i<=k; i++)
if(m%i==0)
{
leap=0;
break;
}
if(leap)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
system("pause");
return 0;
}
3、 请先看完下面的程序
算法简介:程序设计时i可以从2开始,到该整数n的1/2为止,用i依次去除需要判定的整数,只要存在可以整除该数的情况,即可确定要判断的整数不是素数,否则是素数
//代码引用自:《C/C++语言程序百例》
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include<stdio.h>
#include <stdlib.h>
int main()
{
int n1,nm,i,j,flag,count=0;
do
{
printf("Input START and END=?");
scanf("%d%d",&n1,&nm); /*输入求素数的范围*/
}
while(!(n1>0&&n1<nm)); /*输入正确的范围*/
printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);

if(n1==1||n1==2) /*处理素数2*/
{
printf("%4d",2);
n1=3;
count++;
}

for(i=n1;i<=nm;i++) /*判定指定范围内的整数是否为素数*/
{
if(!(i%2))
continue;
for(flag=1,j=3; flag&&j<i/2; j+=2)/*判定能否被从3到整数的一半中的某一数所整除*/
if(!(i%j))
flag=0; /*若能整除则不是素数*/
if(flag)
printf(++count%15?"%4d":"%4d\n",i);
}
putchar('\n');
system("pause");
}
七、有时间继续添加,或等待高手补充。





随心

2007年10月29日 15:49:45

[此贴子已经被作者于2007-11-10 12:02:10编辑过]

搜索更多相关的解决方案: void  include  system  编译器  

----------------解决方案--------------------------------------------------------
printb(x,sizeof(int)*8); /*x:整数 sizeof(int):int型在内存中所占的字节数

学习了,谢谢
----------------解决方案--------------------------------------------------------
可是我C语言都学好。。
----------------解决方案--------------------------------------------------------

收藏了~~


----------------解决方案--------------------------------------------------------
我们用的是MINGW
----------------解决方案--------------------------------------------------------

我说点进制转换的吧.
递归的之前我在一个帖子里写了,应该满足很多进制的吧.
所以要写就写点通用版的.
还有就是总结的不错


----------------解决方案--------------------------------------------------------
值得收藏顶一下
----------------解决方案--------------------------------------------------------
谢楼主........................
----------------解决方案--------------------------------------------------------
谢LZ``
----------------解决方案--------------------------------------------------------
LZ 真 好。..学习了喔.
我才 开始起步.
感谢.
----------------解决方案--------------------------------------------------------
  相关解决方案