C语言学习提纲Word下载.docx
《C语言学习提纲Word下载.docx》由会员分享,可在线阅读,更多相关《C语言学习提纲Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
//改变测试变量的值,以便下次循环时的测试比较。
intmain(intargc,char*argv[])
intc;
c=getchar();
while(c!
=EOF){
putchar(c);
c=getchar();
}
3、在屏幕输入输出:
{
intc;
while((c=getchar())!
=EOF)//如果没有遇到文件结束符,就一直循环。
{//每次循环获取从键盘录入的一个字符,并输出。
表现:
输入回车后将本行输入内容显现到屏幕。
putchar(c);
}
4、符号常量的程序编制时的运用:
main()
#defineLOWER0//运用大写字符串代表一个具体的数值,能更好体现数据的意图
#defineUPPER300//宏替换,在后面遇到一样的大写字符串,以被替换数值或表达式取替。
#defineSTEP20
intfahr;
for(fahr=LOWER;
fahr<
=UPPER;
fahr=fahr+STEP)//替换后for(fahr=0;
fahr=fahr+20)
printf("
%3d\t%6.1f\n"
fahr,(5.0/9.0)*(fahr-32));
//\t中间插入一Ta间距
5、统计从键盘录入的信息包含有多少行,多少单词,多少字符:
#defineIN1
#defineOUT0
intc,nl,nw,nc,state;
state=OUT;
nl=nw=nc=0;
while((c=getchar())!
=EOF)
{
++nc;
if(c=='
\n'
)++nl;
'
||c=='
||c=='
\t'
)state=OUT;
elseif(state==OUT)
{state=IN;
++nw;
}
printf("
%d%d%d\n"
nl,nw,nc);
6、统计录入的信息0-9各数字出现的次数,不可见字符的次数,其他的次数。
intmain()
intc,i,nwhite,nother;
intndigit[10];
nwhite=nother=0;
for(i=0;
i<
10;
++i)//对数组各元素赋初值0
ndigit[i]=0;
while((c=getchar())!
if(c>
='
0'
&
&
c<
9'
)//获取的字符如果在0到9之间
++ndigit[c-'
];
//数组对应序列中的值加1
elseif(c=='
)//不可见字符的判断
++nwhite;
else
++nother;
数组中各元素对应值是:
\n"
);
++i)
[%2d]"
i);
++i)//读出数组中各元素的值并输出
%-4d"
ndigit[i]);
//每个值占4个宽,并左对齐
\nwhitespace=%d,other=%d\n"
nwhite,nother);
7、计算某个数的n次方;
示例函数的定义与运用:
intpower(intm,intn);
//函数的原型声明。
C可对数据类型进行检查并强制转换
main()
inti;
++i)
i,power(2,i),power(-3,i));
//函数调用
intpower(intbase,intn)//某个数自身相乘n次
inti,p;
p=1;
for(i=1;
=n;
++i)//控制自身相乘的次数
p=p*base;
returnp;
//函数返回那个值
////节省一个变量的写法
{intp;
for(p=1;
n>
0;
--n)
p=p*base;
returnp;
8、获取从键盘录入的各行信息中最长的那行并输出:
#defineMAXLINE1000//定义定符常量,以实现宏替代
intgetline(charline[],intmaxline);
//有返回值函数原型声明
voidcopy(charto[],charfrom[]);
//无返回值函数原型声明
intlen;
intmax=0;
charline[MAXLINE],longest[MAXLINE];
while((len=getline(line,MAXLINE))>
0)//获取输入的各行及行长度以此作判断条件进行循环
if(len>
max)//如果本行的长度比上一行的长度更长
{//则改变行长,并将行内容拷到目标数组中存放
max=len;
copy(longest,line);
//无返回值的函数调用
if(max>
0)
%s"
longest);
//输出字符串
return0;
intgetline(chars[],intlim)
{
intc,i;
//在数组长度内获取输入字符,通过for循环将其放入数组中
lim-1&
(c=getchar())!
=EOF&
c!
;
++i)
s[i]=c;
){//一行末尾的换行符也统计到行长度中
s[i]=c;
++i;
s[i]='
\0'
//给字符串数组加上结束标志
returni;
//返回输入信息行的长度
voidcopy(charto[],charfrom[])//字符数组间的复制
inti=0;
while((to[i]=from[i])!
)//如果源字符串未结束则继续循环
9、指定每行打印的元素个数,每列用空格隔开:
inti,t[100];
for(i=0;
100;
i++)//给数组的100个元素赋值
t[i]=i;
i++)//每行打印10个元素,每列之间用一个空格隔开。
%6d%c"
t[i],(i%10==9||i==99)?
'
:
//三元运算符,如果..则..否则..
1、检测字符串的长度:
%3d\n"
strlen("
abcde"
));
intstrlen(chars[])
{inti=0;
while(s[i]!
)//如果字符串还未结束则继续循环
++i;
2、枚举常量的定义及应用:
{
enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;
//枚举常量的定义
a=sun;
b=mon;
c=tue;
%d,%d,%d\n"
a,b,c);
3、大写转小写,数字字符转数值,判断是否闰年:
voidleapyear(int);
inti=0;
intyear;
i=atoi("
1234"
//将数字组成的字符串转换为纯数字
%d\n"
输入具体的年数:
"
scanf("
%d"
&
year);
//从键盘获得需要判断是否闰年的具体年份数&
year
leapyear(year);
//调用是否闰年函数
%c转换为小写字母是:
%c\n"
'
B'
lower('
//调用转换为小字字母函数
intatoi(chars[])//字符数组转换为数字的函数
inti,n;
n=0;
for(i=0;
s[i]>
s[i]<
='
++i)
n=10*n+(s[i]-'
returnn;
intlower(intc)//大写转小写函数
if(c>
A'
Z'
)
returnc+'
a'
-'
else
returnc;
voidleapyear(intyear)//判断是否为闰年函数
if((year%4==0&
year%100!
=0)||year%400==0)
%disaleapyear\n"
year);
else
%disnotaleapyear\n"
4、删除字符数组中某个指定字符,再连接一个字符串:
voidsqueeze(chars[],intc);
voidstrcat(chars[],chart[]);
charsour[20]="
abcdefg"
//定义一字符数组并赋初值
intc='
b'
%s\n"
sour);
//输出未删除前源字符数组的内容
删除%c字符后:
c);
squeeze(sour,c);
//调用函数squeeze删除指定字符
chara[10]="
tttt"
再连接一个字符串%s后:
a);
strcat(sour,a);
voidsqueeze(chars[],intc)//删除字符数组中的某个指定字符的函数
inti,j;
for(i=j=0;
s[i]!
i++)
if(s[i]!
=c)//不一样的才赋值后进下次循环;
否则直接进入下次循环
s[j++]=s[i];
s[j]='
voidstrcat(chars[],chart[])//字符数组的连接函数
i=j=0;
)//原字符数组先保留
i++;
while((s[i++]=t[j++])!
)//再在后面添加新字符数组的内容
;
1、在经过排序后的整型数组中查找指定数字所在的位置:
核心是整型数组的操作
intbinsearch(intx,intv[],intn);
intt[15];
inti,x;
录入15个数\n"
//提示数据录入信息
15;
++i)//循环录入15个数给数组各元素赋值
scanf("
t[i]);
//带&
表示录值给对应序列数组元素的值
输入要查找的数:
x);
binsearch(x,t,t[14]));
//调用折半查找函数
最后一个元素的值是:
t[14]);
//引用数组中某个元素的值
intbinsearch(intx,intv[],intn)
intlow,high,mid;
low=0;
//下限
high=n-1;
//上限
while(low<
=high)
mid=(low+high)/2;
//中值
if(x<
v[mid])//如果待查找的值小于中值,将上限改为中值减1再循环
high=mid-1;
elseif(x>
v[mid])//如果待查找的值大于中值,将下限改为中值加1后再循环
low=mid+1;
returnmid;
//如果正好等于中值,那就返回中值
return-1;
//返回没有找到
2、Switch应用的一个示例
intc,i,nwhite,nother,ndigit[10];
nwhite=nother=0;
//对二个整型变量进行连续赋初值0
i++)//10个元素的整型数组赋初值0
=EOF)//从键盘获取输入的信息,直到收到结束信号
{
switch(c)
{//逐个字符进行判断,如果是数字则整型数组对应元素的值加1
case'
case'
1'
2'
3'
4'
5'
6'
7'
8'
ndigit[c-'
]++;
//输入的是以字符形式存储的,ASCII码中0为48
break;
//若输入4,实际存储4这个字,ASCII码52,故:
c-'
=4
case'
:
nwhite++;
//break跳出这层分支,阻止程序直接进入下一分支
default:
//缺省选项,可以没有。
习惯在这分支也加上break跳出语句
nother++;
}
}
digits="
for(i=0;
i<
i++)//for循环读出整型数组中各元素的值
printf("
%d"
printf("
whitespace=%d,other=%d\n"
nwhite,nother);
return0;
3、Shellsort排序:
voidshellsort(intv[],intn);
inti,a[10];
录入要排序的10个数:
for(i=0;
i++)//for循环录入整型数组10个元素的值
a[i]);
shellsort(a,i);
//调用排序函数实现排序
排序后的数组\n"
i++)//for循环读出已排序数组的10个元素的值
%2d"
a[i]);
voidshellsort(intv[],intn)
intgap,i,j,temp;
for(gap=n/2;
gap>
gap/=2)//控制二个被比较元素间隔,从n/2开始,逐步对折
for(i=gap;
n;
i++)//控制元素间移动位置
for(j=i-gap;
j>
=0&
v[j]>
v[j+gap];
j-=gap)//比较相距gap个位置的各对元素,如果逆序则互换
{
temp=v[j];
v[j]=v[j+gap];
v[j+gap]=temp;
}
4、字符串反转操作:
string.h>
//后有使用strlen字符串操作的函数
voidreverse(chars[]);
chara[100];
输入需反转的字符串:
scanf("
//从键盘获取字符串;
汉字字符串本程序不能反转
reverse(a);
//字符数组名本身为指针,故前面不需要加"
"
反转后的字符串:
\n%s\n"
voidreverse(chars[])
intc,i,j;
for(i=0,j=strlen(s)-1;
j;
i++,j--)//二个循环变量,一个从开头,一个从末尾,二者相等时结束
{c=s[i];
s[i]=s[j];
s[j]=c;
5、将数值转换为字符串:
ctype.h>
main()
voiditoa(int,chars[]);
voidreverse(chars[]);
longx=-1234552;
chart[100];
itoa(x,t);
//调用itoa将数值转为字符串;
将长整型数值%d转换为字符串:
x);
t);
inti;
strlen(t);
i++)//输出字符数组各元素的值
%2c"
t[i]);
voiditoa(intn,chars[])//将数字转换为字符串并保存到S中
inti,sign;
if((sign=n)<
n=-n;
i=0;
do{s[i++]=n%10+'
while((n/=10)>
0);
if(sign<
0)
s[i++]='
s[i]='
reverse(s);
voidreverse(chars[])//将字符数组中各元素的值的反置
i++,j--)
c=s[i];
6、去除字符串尾部的不可见字符:
inttrim(chars[]);
intstrlen(chars[]);
chart[100]="
abcdade"
//printf("
录入尾部包含不可见字符的字符串:
//scanf("
输入的字符串长度为:
strlen(t));
trim(t);
删除字符串尾部的不可见字符后,读数组各值:
\n以字符串格式读出%s\n"
inttrim(chars[])//去除字符串尾部不可见字符函数
intn;
for(n=strlen(s)-1;
=0;
n--)//从后面开始循环;
实际上就是将’\0’放到假想的位置上
if(s[n]!
&
s[n]!