C语言学习提纲.docx
- 文档编号:7380096
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:20
- 大小:22.26KB
C语言学习提纲.docx
《C语言学习提纲.docx》由会员分享,可在线阅读,更多相关《C语言学习提纲.docx(20页珍藏版)》请在冰豆网上搜索。
C语言学习提纲
目录
第一章导言
第二章类型、运算符与表达式
第三章控制流
第四章函数与程序结构
第五章指针与数组
第六章结构
第七章输入输出
第八章UNIX系统接口
附录
1.无论学习的结果怎么样,是很好还是很差,总要弄点资料或东西出来。
现坚持一下、多学习、多借鉴、多练习、多啄磨,再怎么样的差,也还是有点东西的!
2.程序设计语言的学习,同实践是密不可分的,只有多练习,坚持尝试,多动手,才能整正有所进步。
光看书、在网上学习,没有上机演练来得踏实、彻底、有效。
**运算符的优先级,程序填空,基础知识填空
第一章导言
1、for循环示例
#include
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 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]! ='
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 提纲
![提示](https://static.bdocx.com/images/bang_tan.gif)