1、C语言学习提纲目 录第一章 导 言第二章 类型、运算符与表达式第三章 控 制 流第四章 函数与程序结构第五章 指针与数组第六章 结构第七章 输入输出第八章 UNIX系统接口附录1. 无论学习的结果怎么样,是很好还是很差,总要弄点资料或东西出来。现坚持一下、多学习、多借鉴、多练习、多啄磨,再怎么样的差,也还是有点东西的!2. 程序设计语言的学习,同实践是密不可分的,只有多练习,坚持尝试,多动手,才能整正有所进步。光看书、在网上学习,没有上机演练来得踏实、彻底、有效。* 运算符的优先级 , 程序填空 , 基础知识填空第一章 导 言1、 for 循环示例#include / 将标准库文件stdio.
2、h包含进来 int main(int argc, char *argv) Int fahr; /定义一整型变量fahr,ANSI C 约定以分号”;”作为语句的结束标记。 for(fahr=0; fahr=300;fahr+=20) /以fahr为变量的for循环,从0开始,300时结束,每次循环步长20 printf(%3d %6.1fn,fahr, (5.0/9.0)*(fahr-32); / 输出3个字节长的十进制数; 6位整数,1位小数的浮点数。 2、 用while 循环改写 for 循环:#include main()int fahr,celsius;int lower,upper,
3、step;lower=0;upper=300;step=20;fahr=lower;while(fahr=upper) /测试表达式 celsius=5*(fahr-32)/9; printf(%dt%dn,fahr,celsius); / 花括号内语句,组成一个复合语句 fahr=fahr+step; /改变测试变量的值,以便下次循环时的测试比较。#include int main(int argc, char *argv)int c;c=getchar();while (c!=EOF) putchar(c); c=getchar(); 3、 在屏幕输入输出:#include int mai
4、n(int argc, char *argv) int c; while (c=getchar()!=EOF) / 如果没有遇到文件结束符,就一直循环。 / 每次循环获取从键盘录入的一个字符,并输出。表现:输入回车后将本行输入内容显现到屏幕。 putchar(c); 4、 符号常量的程序编制时的运用:#include main() #define LOWER 0 /运用大写字符串代表一个具体的数值,能更好体现数据的意图 #define UPPER 300 /宏替换,在后面遇到一样的大写字符串,以被替换数值或表达式取替。#define STEP 20int fahr;for(fahr=LOWER
5、;fahr=UPPER;fahr=fahr+ STEP) /替换后 for( fahr=0; fahr=300; fahr=fahr+20) printf (%3dt%6.1fn,fahr,(5.0/9.0)*(fahr-32); / t 中间插入一Ta间距 5、 统计从键盘录入的信息包含有多少行,多少单词,多少字符:#include #define IN 1#define OUT 0main()int c,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
6、) state=OUT; else if (state=OUT) state=IN; +nw; printf(%d %d %dn,nl,nw,nc);6、 统计录入的信息0-9各数字出现的次数,不可见字符的次数,其他的次数。#include int main() int c,i,nwhite,nother; int ndigit10; nwhite=nother=0; for (i=0;i=0 & c=9) / 获取的字符如果在0到9之间 +ndigitc-0; / 数组对应序列中的值加1 else if (c= |c=n|c=t) / 不可见字符的判断 +nwhite; else +noth
7、er; printf(数组中各元素对应值是:n); for (i=0;i10;+i) printf(%2d,i); printf(n); for (i=0;i10;+i) /读出数组中各元素的值并输出 printf(%-4d,ndigiti); /每个值占4个宽,并左对齐 printf(nwhite space=%d,other=%dn,nwhite,nother);7、 计算某个数的n次方; 示例函数的定义与运用:#include int power(int m,int n); / 函数的原型声明。C 可对数据类型进行检查并强制转换 main ( ) int i; for (i=0;i10;
8、+i) printf(%d %d %dn,i,power(2,i),power(-3,i); / 函数调用int power (int base,int n) / 某个数自身相乘n次 int i,p; p=1; for(i=1;i0;-n) p=p*base; return p;8、 获取从键盘录入的各行信息中最长的那行并输出:#include #define MAXLINE 1000 /定义定符常量,以实现宏替代 int getline(char line,int maxline); / 有返回值函数原型声明 void copy(char to,char from); / 无返回值函数原型声
9、明 main() int len; int max=0; char lineMAXLINE,longestMAXLINE; while (len=getline(line,MAXLINE)0) /获取输入的各行及行长度以此作判断条件进行循环 if (lenmax) /如果本行的长度比上一行的长度更长 /则改变行长,并将行内容拷到目标数组中存放 max=len; copy(longest,line); / 无返回值的函数调用 if(max0) printf(%s,longest); / 输出字符串 return 0; int getline(char s,int lim) int c,i; /
10、在数组长度内获取输入字符,通过for循环将其放入数组中 for (i=0;ilim-1 & (c=getchar()!=EOF & c!=n; +i ) si=c; if(c=n) / 一行末尾的换行符也统计到行长度中 si=c; +i; si=0; / 给字符串数组加上结束标志 return i; / 返回输入信息行的长度 void copy (char to,char from) / 字符数组间的复制 int i=0; while (toi=fromi)!=0) / 如果源字符串未结束则继续循环 +i; 9、 指定每行打印的元素个数,每列用空格隔开:#include int main()i
11、nt i, t100;for (i=0;i100;i+) /给数组的100个元素赋值 ti=i;for (i=0;i100;i+) /每行打印10个元素,每列之间用一个空格隔开。 printf(%6d%c,ti,(i%10=9|i=99)?n: ); /三元运算符,如果.则.否则.第二章 类型、运算符与表达式1、 检测字符串的长度:#include int main(int argc, char *argv)printf(%3dn,strlen(abcde);int strlen(char s) int i=0; while (si!=0) /如果字符串还未结束则继续循环 +i; return
12、 i; 2、 枚举常量的定义及应用:#include int main(int argc, char *argv) enum weekday 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()void leapyear(int); int i=0; int year;i=atoi(123 4); /将数字组成的字符串转换为纯数字 printf(%dn,i); printf(输入具体的年数:
13、);scanf(%d,&year); / 从键盘获得需要判断是否闰年的具体年份数 &year leapyear(year); /调用是否闰年函数 printf(%c转换为小写字母是:%cn,B,lower(B); /调用转换为小字字母函数 int atoi(char s) /字符数组转换为数字的函数 int i,n; n=0; for(i=0; si=0 & si=A & c=Z) return c+a-A; else return c; void leapyear(int year) /判断是否为闰年函数 if(year%4=0 & year%100!=0)|year%400=0) prin
14、tf(%d is a leap yearn,year); else printf(%d is not a leap yearn,year); 4、 删除字符数组中某个指定字符,再连接一个字符串:#include main() void squeeze(char s,int c); void strcat(char s,char t); char sour20=abcdefg; /定义一字符数组并赋初值 int c=b; printf(%sn,sour); / 输出未删除前源字符数组的内容 printf(删除%c字符后:n,c); squeeze(sour,c); /调用函数squeeze 删除
15、指定字符 printf(%sn,sour); char a10=tttt; printf(再连接一个字符串%s后:n,a); strcat(sour,a); printf(%sn,sour); void squeeze(char s,int c) /删除字符数组中的某个指定字符的函数 int i,j; for(i=j=0;si!=0;i+) if(si!=c) /不一样的才赋值后进下次循环;否则直接进入下次循环 sj+=si; sj=0;void strcat(char s,char t) /字符数组的连接函数 int i,j; i=j=0; while (si!=0) /原字符数组先保留 i
16、+; while (si+=tj+)!=0) /再在后面添加新字符数组的内容 ;第三章 控 制 流1、 在经过排序后的整型数组中查找指定数字所在的位置:核心是整型数组的操作#include int main()int binsearch(int x,int v,int n);int t15;int i,x;printf(录入15个数n); /提示数据录入信息 for(i=0;i15;+i) /循环录入15个数给数组各元素赋值 scanf(%d,&ti); /带& 表示录值给对应序列数组元素的值 printf(输入要查找的数:n);scanf(%d,&x); printf(%dn,binsear
17、ch(x,t,t14); /调用折半查找函数 printf(最后一个元素的值是:%dn,t14); /引用数组中某个元素的值 int binsearch(int x,int v,int n) int low,high,mid; low=0; /下限 high=n-1; /上限 while(low=high) mid=(low+high)/2; /中值 if(xvmid) /如果待查找的值大于中值,将下限改为中值加1后再循环 low=mid+1; else return mid; /如果正好等于中值,那就返回中值 return -1; / 返回没有找到2、 Switch 应用的一个示例#incl
18、ude main()int c,i,nwhite,nother,ndigit10;nwhite=nother=0; /对二个整型变量进行连续赋初值0 for (i=0;i10;i+) /10个元素的整型数组赋初值0 ndigiti=0;while (c=getchar()!=EOF) /从键盘获取输入的信息,直到收到结束信号 switch (c) /逐个字符进行判断,如果是数字则整型数组对应元素的值加1 case0:case 1:case 2:case 3:case 4:case 5: case6:case 7:case 8:case 9: ndigitc-0+; /输入的是以字符形式存储的,
19、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; i10; i+) /for 循环读出整型数组中各元素的值 printf( %d,ndigiti); printf ( ,white space = %d,other = %d n, nwhite,
20、nother); return 0;3、 Shellsort排序:#include main()void shellsort(int v,int n);int i,a10;printf(录入要排序的10个数:n);for(i=0;i10;i+) /for循环录入整型数组10个元素的值 scanf(%d,&ai); shellsort(a,i); /调用排序函数实现排序 printf(排序后的数组n);for(i=0;i0;gap /=2) /控制二个被比较元素间隔,从n/2开始,逐步对折 for(i=gap;i=0 & vjvj+gap; j-=gap)/比较相距gap个位置的各对元素,如果逆
21、序则互换 temp=vj; vj=vj+gap; vj+gap=temp ; 4、 字符串反转操作:#include #include /后有使用strlen 字符串操作的函数 int main() int i; void reverse (char s); char a100; printf(输入需反转的字符串:n); scanf(%s,a); /从键盘获取字符串; 汉字字符串本程序不能反转 reverse(a); /字符数组名本身为指针,故前面不需要加 & printf(反转后的字符串:n%sn,a);void reverse (char s) int c,i,j; for(i=0,j=s
22、trlen(s)-1; ij; i+,j-) /二个循环变量,一个从开头,一个从末尾,二者相等时结束 c=si; si=sj; sj=c; 5、 将数值转换为字符串:#include #include main( )void itoa(int,char s);void reverse(char s);long x=-1234552; char t100;itoa(x,t); /调用itoa 将数值转为字符串;printf(将长整型数值%d转换为字符串:n,x);printf(%sn,t);int i;for (i=0;istrlen(t);i+) /输出字符数组各元素的值 printf(%2c
23、,ti);void itoa(int n, char s) /将数字转换为字符串并保存到S中 int i,sign; if(sign=n)0 ); if(sign0) si+=-; si=0; reverse(s); void reverse (char s) /将字符数组中各元素的值的反置 int c,i,j; for(i=0,j=strlen(s)-1; ij; i+,j-) c=si; si=sj; sj=c; 6、 去除字符串尾部的不可见字符:#include int main(int argc, char *argv)int trim(char s);int strlen(char s);char t100=abcd ade ;/printf(录入尾部包含不可见字符的字符串:n);/ scanf(%s,t);printf(输入的字符串长度为:%dn,strlen(t);trim(t);int i=0;printf(删除字符串尾部的不可见字符后,读数组各值:n);for(i=0;i=0;n-) /从后面开始循环; 实际上就是将0放到假想的位置上 if(sn != & sn !=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1