C语言学习提纲.docx

上传人:b****5 文档编号:7380096 上传时间:2023-01-23 格式:DOCX 页数:20 大小:22.26KB
下载 相关 举报
C语言学习提纲.docx_第1页
第1页 / 共20页
C语言学习提纲.docx_第2页
第2页 / 共20页
C语言学习提纲.docx_第3页
第3页 / 共20页
C语言学习提纲.docx_第4页
第4页 / 共20页
C语言学习提纲.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言学习提纲.docx

《C语言学习提纲.docx》由会员分享,可在线阅读,更多相关《C语言学习提纲.docx(20页珍藏版)》请在冰豆网上搜索。

C语言学习提纲.docx

C语言学习提纲

目录

第一章导言

第二章类型、运算符与表达式

第三章控制流

第四章函数与程序结构

第五章指针与数组

第六章结构

第七章输入输出

第八章UNIX系统接口

附录

1.无论学习的结果怎么样,是很好还是很差,总要弄点资料或东西出来。

现坚持一下、多学习、多借鉴、多练习、多啄磨,再怎么样的差,也还是有点东西的!

2.程序设计语言的学习,同实践是密不可分的,只有多练习,坚持尝试,多动手,才能整正有所进步。

光看书、在网上学习,没有上机演练来得踏实、彻底、有效。

 

**运算符的优先级,程序填空,基础知识填空

 

第一章导言

1、for循环示例

#include//将标准库文件stdio.h包含进来

intmain(intargc,char*argv[])

{

Intfahr;//定义一整型变量fahr,ANSIC约定以分号”;”作为语句的结束标记。

for(fahr=0;fahr<=300;fahr+=20)//以fahr为变量的for循环,从0开始,300时结束,每次循环步长20

printf("%3d%6.1f\n",fahr,(5.0/9.0)*(fahr-32));//输出3个字节长的十进制数;6位整数,1位小数的浮点数。

}

2、用while循环改写for循环:

#include

main()

{

intfahr,celsius;

intlower,upper,step;

lower=0;

upper=300;

step=20;

fahr=lower;

while(fahr<=upper)//测试表达式

{

celsius=5*(fahr-32)/9;

printf("%d\t%d\n",fahr,celsius);//花括号内语句,组成一个复合语句

fahr=fahr+step;//改变测试变量的值,以便下次循环时的测试比较。

}

#include

intmain(intargc,char*argv[])

{

intc;

c=getchar();

while(c!

=EOF){

putchar(c);

c=getchar();}

}

}

3、在屏幕输入输出:

#include

intmain(intargc,char*argv[])

{

intc;

while((c=getchar())!

=EOF)//如果没有遇到文件结束符,就一直循环。

{//每次循环获取从键盘录入的一个字符,并输出。

表现:

输入回车后将本行输入内容显现到屏幕。

putchar(c);

}

}

 

4、符号常量的程序编制时的运用:

#include

main()

#defineLOWER0//运用大写字符串代表一个具体的数值,能更好体现数据的意图

#defineUPPER300//宏替换,在后面遇到一样的大写字符串,以被替换数值或表达式取替。

#defineSTEP20

{

intfahr;

for(fahr=LOWER;fahr<=UPPER;fahr=fahr+STEP)//替换后for(fahr=0;fahr<=300;fahr=fahr+20)

printf("%3d\t%6.1f\n",fahr,(5.0/9.0)*(fahr-32));//\t中间插入一Ta间距

}

 

5、统计从键盘录入的信息包含有多少行,多少单词,多少字符:

#include

#defineIN1

#defineOUT0

main()

{

intc,nl,nw,nc,state;

state=OUT;

nl=nw=nc=0;

while((c=getchar())!

=EOF)

{

++nc;

if(c=='\n')++nl;

if(c==''||c=='\n'||c=='\t')state=OUT;

elseif(state==OUT)

{state=IN;++nw;}

}

printf("%d%d%d\n",nl,nw,nc);

}

 

6、统计录入的信息0-9各数字出现的次数,不可见字符的次数,其他的次数。

#include

intmain()

{

intc,i,nwhite,nother;

intndigit[10];

nwhite=nother=0;

for(i=0;i<10;++i)//对数组各元素赋初值0

ndigit[i]=0;

while((c=getchar())!

=EOF){

if(c>='0'&&c<='9')//获取的字符如果在0到9之间

++ndigit[c-'0'];//数组对应序列中的值加1

elseif(c==''||c=='\n'||c=='\t')//不可见字符的判断

++nwhite;

else

++nother;}

printf("数组中各元素对应值是:

\n");

for(i=0;i<10;++i)

printf("[%2d]",i);

printf("\n");

for(i=0;i<10;++i)//读出数组中各元素的值并输出

printf("%-4d",ndigit[i]);//每个值占4个宽,并左对齐

printf("\nwhitespace=%d,other=%d\n",nwhite,nother);

}

 

7、计算某个数的n次方;示例函数的定义与运用:

#include

intpower(intm,intn);//函数的原型声明。

C可对数据类型进行检查并强制转换

main()

{

inti;

for(i=0;i<10;++i)

printf("%d%d%d\n",i,power(2,i),power(-3,i));//函数调用

}

intpower(intbase,intn)//某个数自身相乘n次

{

inti,p;

p=1;

for(i=1;i<=n;++i)//控制自身相乘的次数

p=p*base;

returnp;//函数返回那个值

}

////节省一个变量的写法

{intp;

for(p=1;n>0;--n)

p=p*base;

returnp;

}

 

8、获取从键盘录入的各行信息中最长的那行并输出:

#include

#defineMAXLINE1000//定义定符常量,以实现宏替代

intgetline(charline[],intmaxline);//有返回值函数原型声明

voidcopy(charto[],charfrom[]);//无返回值函数原型声明

main()

{

intlen;

intmax=0;

charline[MAXLINE],longest[MAXLINE];

while((len=getline(line,MAXLINE))>0)//获取输入的各行及行长度以此作判断条件进行循环

if(len>max)//如果本行的长度比上一行的长度更长

{//则改变行长,并将行内容拷到目标数组中存放

max=len;

copy(longest,line);//无返回值的函数调用

}

if(max>0)

printf("%s",longest);//输出字符串

return0;

}

intgetline(chars[],intlim)

{

intc,i;//在数组长度内获取输入字符,通过for循环将其放入数组中

for(i=0;i

=EOF&&c!

='\n';++i)

s[i]=c;

if(c=='\n'){//一行末尾的换行符也统计到行长度中

s[i]=c;

++i;}

s[i]='\0';//给字符串数组加上结束标志

returni;//返回输入信息行的长度

}

voidcopy(charto[],charfrom[])//字符数组间的复制

{

inti=0;

while((to[i]=from[i])!

='\0')//如果源字符串未结束则继续循环

++i;

}

 

9、指定每行打印的元素个数,每列用空格隔开:

#include

intmain()

{

inti,t[100];

for(i=0;i<100;i++)//给数组的100个元素赋值

t[i]=i;

for(i=0;i<100;i++)//每行打印10个元素,每列之间用一个空格隔开。

printf("%6d%c",t[i],(i%10==9||i==99)?

'\n':

'');//三元运算符,如果..则..否则..

}

 

第二章类型、运算符与表达式

1、检测字符串的长度:

#include

intmain(intargc,char*argv[])

{

printf("%3d\n",strlen("abcde"));

}

intstrlen(chars[])

{inti=0;

while(s[i]!

='\0')//如果字符串还未结束则继续循环

++i;

returni;}

 

2、枚举常量的定义及应用:

#include

intmain(intargc,char*argv[])

{

enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;//枚举常量的定义

a=sun;b=mon;c=tue;

printf("%d,%d,%d\n",a,b,c);

}

 

3、大写转小写,数字字符转数值,判断是否闰年:

#include

main()

{

voidleapyear(int);

inti=0;

intyear;

i=atoi("1234");//将数字组成的字符串转换为纯数字

printf("%d\n",i);

printf("输入具体的年数:

");

scanf("%d",&year);//从键盘获得需要判断是否闰年的具体年份数&year

leapyear(year);//调用是否闰年函数

printf("%c转换为小写字母是:

%c\n",'B',lower('B'));//调用转换为小字字母函数

}

intatoi(chars[])//字符数组转换为数字的函数

{

inti,n;

n=0;

for(i=0;s[i]>='0'&&s[i]<='9';++i)

n=10*n+(s[i]-'0');

returnn;

}

intlower(intc)//大写转小写函数

{

if(c>='A'&&c<='Z')

returnc+'a'-'A';

else

returnc;

}

voidleapyear(intyear)//判断是否为闰年函数

{

if((year%4==0&&year%100!

=0)||year%400==0)

printf("%disaleapyear\n",year);

else

printf("%disnotaleapyear\n",year);

}

 

4、删除字符数组中某个指定字符,再连接一个字符串:

#include

main()

{

voidsqueeze(chars[],intc);

voidstrcat(chars[],chart[]);

charsour[20]="abcdefg";//定义一字符数组并赋初值

intc='b';

printf("%s\n",sour);//输出未删除前源字符数组的内容

printf("删除%c字符后:

\n",c);

squeeze(sour,c);//调用函数squeeze删除指定字符

printf("%s\n",sour);

chara[10]="tttt";

printf("再连接一个字符串%s后:

\n",a);

strcat(sour,a);

printf("%s\n",sour);

}

voidsqueeze(chars[],intc)//删除字符数组中的某个指定字符的函数

{

inti,j;

for(i=j=0;s[i]!

='\0';i++)

if(s[i]!

=c)//不一样的才赋值后进下次循环;否则直接进入下次循环

s[j++]=s[i];

s[j]='\0';

}

voidstrcat(chars[],chart[])//字符数组的连接函数

{

inti,j;

i=j=0;

while(s[i]!

='\0')//原字符数组先保留

i++;

while((s[i++]=t[j++])!

='\0')//再在后面添加新字符数组的内容

;

}

 

第三章控制流

 

1、在经过排序后的整型数组中查找指定数字所在的位置:

核心是整型数组的操作

#include

intmain()

{

intbinsearch(intx,intv[],intn);

intt[15];

inti,x;

printf("录入15个数\n");//提示数据录入信息

for(i=0;i<15;++i)//循环录入15个数给数组各元素赋值

scanf("%d",&t[i]);//带&表示录值给对应序列数组元素的值

printf("输入要查找的数:

\n");

scanf("%d",&x);

printf("%d\n",binsearch(x,t,t[14]));//调用折半查找函数

printf("最后一个元素的值是:

%d\n",t[14]);//引用数组中某个元素的值

}

intbinsearch(intx,intv[],intn)

{

intlow,high,mid;

low=0;//下限

high=n-1;//上限

while(low<=high)

{

mid=(low+high)/2;//中值

if(x

high=mid-1;

elseif(x>v[mid])//如果待查找的值大于中值,将下限改为中值加1后再循环

low=mid+1;

else

returnmid;//如果正好等于中值,那就返回中值

}

return-1;//返回没有找到

}

 

2、Switch应用的一个示例

#include

main()

{

intc,i,nwhite,nother,ndigit[10];

nwhite=nother=0;//对二个整型变量进行连续赋初值0

for(i=0;i<10;i++)//10个元素的整型数组赋初值0

ndigit[i]=0;

while((c=getchar())!

=EOF)//从键盘获取输入的信息,直到收到结束信号

{

switch(c)

{//逐个字符进行判断,如果是数字则整型数组对应元素的值加1

case'0':

case'1':

case'2':

case'3':

case'4':

case'5':

case'6':

case'7':

case'8':

case'9':

ndigit[c-'0']++;//输入的是以字符形式存储的,ASCII码中0为48

break;//若输入4,实际存储4这个字,ASCII码52,故:

c-'0'=4

case'':

case'\n':

case'\t':

nwhite++;

break;//break跳出这层分支,阻止程序直接进入下一分支

default:

//缺省选项,可以没有。

习惯在这分支也加上break跳出语句

nother++;

break;

}

}

printf("digits=");

for(i=0;i<10;i++)//for循环读出整型数组中各元素的值

printf("%d",ndigit[i]);

printf(",whitespace=%d,other=%d\n",nwhite,nother);

return0;

}

 

3、Shellsort排序:

#include

main()

{

voidshellsort(intv[],intn);

inti,a[10];

printf("录入要排序的10个数:

\n");

for(i=0;i<10;i++)//for循环录入整型数组10个元素的值

scanf("%d",&a[i]);

shellsort(a,i);//调用排序函数实现排序

printf("排序后的数组\n");

for(i=0;i<10;i++)//for循环读出已排序数组的10个元素的值

printf("%2d",a[i]);

}

voidshellsort(intv[],intn)

{

intgap,i,j,temp;

for(gap=n/2;gap>0;gap/=2)//控制二个被比较元素间隔,从n/2开始,逐步对折

for(i=gap;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、字符串反转操作:

#include

#include//后有使用strlen字符串操作的函数

intmain()

{

inti;

voidreverse(chars[]);

chara[100];

printf("输入需反转的字符串:

\n");

scanf("%s",a);//从键盘获取字符串;汉字字符串本程序不能反转

reverse(a);//字符数组名本身为指针,故前面不需要加"&"

printf("反转后的字符串:

\n%s\n",a);

}

voidreverse(chars[])

{

intc,i,j;

for(i=0,j=strlen(s)-1;i

{c=s[i];

s[i]=s[j];

s[j]=c;}

}

 

5、将数值转换为字符串:

#include

#include

main()

{

voiditoa(int,chars[]);

voidreverse(chars[]);

longx=-1234552;

chart[100];

itoa(x,t);//调用itoa将数值转为字符串;

printf("将长整型数值%d转换为字符串:

\n",x);

printf("%s\n",t);

inti;

for(i=0;i

printf("%2c",t[i]);

}

voiditoa(intn,chars[])//将数字转换为字符串并保存到S中

{

inti,sign;

if((sign=n)<0)

n=-n;

i=0;

do{s[i++]=n%10+'0';}

while((n/=10)>0);

if(sign<0)

s[i++]='-';

s[i]='\0';

reverse(s);

}

voidreverse(chars[])//将字符数组中各元素的值的反置

{

intc,i,j;

for(i=0,j=strlen(s)-1;i

{

c=s[i];

s[i]=s[j];

s[j]=c;

}

}

 

6、去除字符串尾部的不可见字符:

#include

intmain(intargc,char*argv[])

{

inttrim(chars[]);

intstrlen(chars[]);

chart[100]="abcdade";

//printf("录入尾部包含不可见字符的字符串:

\n");

//scanf("%s",t);

printf("输入的字符串长度为:

%d\n",strlen(t));

trim(t);

inti=0;

printf("删除字符串尾部的不可见字符后,读数组各值:

\n");

for(i=0;i

printf("%2c",t[i]);

printf("\n以字符串格式读出%s\n",t);

}

inttrim(chars[])//去除字符串尾部不可见字符函数

{

intn;

for(n=strlen(s)-1;n>=0;n--)//从后面开始循环;实际上就是将’\0’放到假想的位置上

if(s[n]!

=''&&s[n]!

='

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1