| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3023 人关注过本帖, 1 人收藏
标题:[分享]C语言问题合集
只看楼主 加入收藏
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
结帖率:100%
收藏(1)
 问题点数:0 回复次数:17 
[分享]C语言问题合集

Part 1:C语言一些基本常识:
===================================================
(一)C语言教材
最著名的教材是〈C Programming Language〉<C程序语言>,
(二)C/C++语言编译器:
可以使用DEV-CPP,
DEV-CPP官方网站:
http://www.bloodshed.net/devcpp.html

(三)算法和数据结构相关教材
以C/C++为代码的书我目前只知道一本:
〈数据结构〉//清华大学出版社

================================================

Part 2:C语言的一些函数使用技巧:

<stdio.h>标准输入输出类
scanf()函数,
该函数是C语言的标准输入输出函数,简单的用法大家都会,下面介绍一些特殊的:
输入一行字符串到s[],字符串中可能有空格
scanf("%[^\n]",s);
解释:%[^\n]表示输入字符串中的字符属于一个集合,这个集合包含了除'\n'换行外的所有字符,于是输入字符就到换行结束,输入一行
上面的用法可以推广到其它用法.

sscanf()函数和sprintf()函数
这两个函数很实用,大家知道fprintf是对文件进行输出,而f对应file,这里的s对应string,也就是sprintf的输出对象是字符串,这个函数就可以把整型转化为字符串,而sscanf则是以字符串为输入对象,可以把字符串转化为如数字
例子:
int n;char s[]="1234";
sscanf(s,"%d",&n);这样n的值就是1234

<string.h>字符串处理库
这一个库里面的字符串处理函数想必大家都比较熟悉,现在要讲的是另外一类对内存处理的函数mem*,这些函数在OI中很有用,在初始化和内存复制,移动方面效率很高,这一类为什么也在sting.h里面呢?是因为他们都是把数组当成了字符串来处理
(1)memset(数组名 ,要初始化的数, 数组长度)
数组初始化,相当于FP中的fillchar,
例子:把a[]数组清0
memset(a,0,sizeof(a));注意这里面参数顺序和fillchar的区别,前面说过mem*系列是把数组当成了字符串来处理,所以处理的对象是每个字节,所以如果是int数组,除了清0和全部清为-1以外(-1的补码是全1), 其它初始化操作慎用.

(2)memcpy(目标数组, 被拷贝数组, 要拷贝长度)
数组复制,
C语言中不提供直接的等号数组复制,但是通过它能够快速复制数组
例子:把a[]复制到b[]中
memcpy(b,a,sizeof(a));

(3)memcmp(数组1,数组2,要比较长度L)
数组比较,:把两数组的前L个字节看成是两个字符串做strcmp一样的比较
该函数在一些数组比较判重的时候比较高效率

(4)memmove(目标数组,被拷贝数组,要拷贝长度)
数组复制,它和memcpy不同的是两数组可以有重叠部分,也就是可以实现fp中move的作用
例子:把a[]从第a[i]个开始后面的K个数据都后移一位
memmove(a+i+1,a+i,sizeof(a[0])*K);

<stdlib.h>
在这里主要说的是abs函数,学过P的人都知道这是一个取绝对值的函数,但是要注意它和PASCAL中abs函数的区别,在C中的abs函数只适用于整型,而实型变量取绝对值则需要<math.h>中的fabs

还值得一提的是这里面有现成的快排函数,当然我个人认为还是自己写,反正浪费不了多少时间,函数名为qsort

随机数函数的介绍:
srand( (unsigned)time( NULL ) );
rand()
rand不接受参数,一般是返回一个unsigned类型的。可以用取模来得到想要的随机数在同一次运行中,初始化种子后得到的rand()是相同的。这样更加方便调试。
如果想得到不相同的就要在一开始就初始化一次,仅仅初始化一次!
srand( (unsigned)time( NULL ) );
rand()
rand不接受参数,一般是返回一个unsigned类型的。可以用取模来得到想要的随机数在同一次运行中,初始化种子后得到的rand()是相同的。这样更加方便调试。如果想得到不相同的就要在一开始就初始化一次,仅仅初始化一次!

<limits.h>
这个库里面没有函数,但是有一些常用的极限,比如INT_MAX(int变量的上限)LONG_MAX,ULONG_MAX(unsigned long的上限)等等,所以是很有用的

<math.h>
这个库里面用到的是数学函数,值得注意的函数有:

pow是个鸡肋,一般不要使用

gets和puts分别是整行读入和输出字符串。gets由于可能会导致意外结果的发生,通常不推荐使用,但是若给定了字符串最大长度,使用起来还是安全的。同样的还有fgets(和gets用法不同)和fputs。据说gets/puts系列比scanf("%s")和scanf("%[^\n]")要快不少

搜索更多相关主题的帖子: C语言 清华大学 bloodshed 教材 
2006-11-24 17:42
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

好帖.呵呵.


倚天照海花无数,流水高山心自知。
2006-11-24 17:51
whw19840229
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2006-7-20
收藏
得分:0 

顶!!!!!

2006-11-24 18:02
intin
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-3-1
收藏
得分:0 

整理得不错,呵呵


2006-11-24 20:49
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
不错 以后希望能继续丰富这类的内容

+ 精

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-11-24 20:53
ljhzz
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-13
收藏
得分:0 


我看不明白...

有个例子就好了..
2006-11-26 19:42
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用ljhzz在2006-11-26 19:42:22的发言:


我看不明白...

有个例子就好了..

好吧,有时间接着补充,先写一个比较实用的:

/*SK-CHINA 版权所有*/
/*本例子是专门为本帖而写*/
/*将数组a中的数据排序,使用stdlib中的qsort*/
#include "stdlib.h"
#include "stdio.h"
int cmp(void const *a,void const *b) {
int *m,*n;
m=(int *)a;
n=(int *)b;
if(*m>*n) return 1;
if(*m<*n) return -1;
return 0;
}


main() {
int a[]={5,2,11,3,5,77,0,-1,4,15};
int w;
qsort((void *)a,10,sizeof(int),cmp);
for(w=0;w<10;w++) printf("%d ",a[w]);
scanf("%d",&w);
}

[此贴子已经被作者于2006-11-26 20:05:01编辑过]


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-26 20:04
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 

scanf("%[^\n]",s);
解释:%[^\n]表示输入字符串中的字符属于一个集合,这个集合包含了除'\n'换行外的所有字符,于是输入字符就到换行结束,输入一行
上面的用法可以推广到其它用法.
这个话好像不对,还有空格也算。
#include <stdio.h>
#define N 1000

int main(void)
{
char str[N];
scanf("%s",str);/*输入dfdfdf dfd df df d会怎样*/
printf("%s",str);
return 0;
}


[此贴子已经被作者于2006-11-28 20:30:08编辑过]


谁有强殖装甲第二部,可以Q我460054868
2006-11-28 20:16
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
呵呵!好东西啊!谢谢了!

该学习了。。。
2006-11-28 20:20
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

接7楼

/*SK-CHINA*/
/*使用string.h中的mem*函数 之memset*/
#include"string.h"

main ()
{
char arry[10];
int i;
memset (arry, 'a', sizeof (arry));
for (i=0; i<10; i++)
printf ("%d ", arry[i]);
getch ();
}

[此贴子已经被作者于2006-11-30 20:55:13编辑过]


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-30 20:53
快速回复:[分享]C语言问题合集
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017073 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved