C 语言程序设计总结一、C 语言程序的基本结构#include “ stdio.h ”void main(){定义变量;程序实现;输出结果; printf}、变量的定义1.整型:int a , b, s=0; ( 可以在定义的同时为变量进行赋值) 长整型:long无符号整型(非负整数) :unsigned2.单精度实型:float x, y, z=1.0 ;3.双精度实型:double l,m;4. 字符型:char c1= ' Ac'2=,';b '三、变量的赋值1.直接赋值:a=10 ; // 用赋值号“ = ”将右侧的值赋给左侧的变量2.赋表达式的值:a=3+7;3. 赋另外一个变量的值:a=s; // 把s 的值赋给a变量的输入:输入一个变量:scanf( “% d”, &a);输入多个变量:scanf( “%d%d%d ”,&a, &b, &c);int--%d float--%f char--%c double--%lf 字符串--%s变量的输出:输出一个提示语句:printf( “xxxxxx ”); 输出一个回车:printf( “\n ”);输出一个变量:printf( “xxx is %d ”,a); 输出多个变量:printf( “xxxx%d, xxxx%d ”,a,b); 练习:1.输入圆的半径,求圆的周长。
四、常用流程控制语句分支语句:根据条件执行相应的语句条件的形式:a大于0 写成a>0a小于0 写成a<0a等于0 写成a==0 (注意,用两个=)a大于等于0并且小于等于10 写成a>=0 && a<=10a小于0或者a大于10 写成a<0 || a>10(一)单分支if语句(如果满足某个条件,就做某件事情,不满足就向下执行。
)if(条件){执行语句;}(二)双分支if 语句(如果满足某个条件,就做某件事情,否则就做另外一件事情。
)if(条件){执行语句1; }else{执行语句2; }(三)多分支if语句(满足哪一个条件,就做相应的语句。
)if(条件1){执行语句1; }else if(条件2){执行语句2; }else if(条件3){执行语句3;}else if(条件4){执行语句4; }else{执行语句5; }(四)if的嵌套(根据具体情况对if~else~语句进行灵活的运用)其格式如下:if(条件1)if(条件2){执行语句a; }else{执行语句b; }elseif(条件3){执行语句c; }else{执行语句d; }(五)多分支语句switch (根据switch后的值,执行相对应的case语句,此语句了解即可, 因为它的作用完全可以用多分支if来实现)switch (表达式){case 值1: {语句1; break;}case 值2:{语句2; break;}case 值3: {语句4; break;}case 值n: {语句n; break;}default: {语句n+1;}}练习:2. 某自助餐厅规定,浪费食物在20克以下的,每克罚款2元;如浪费超过20 克,则超过的部分每克加罚1元。
编程求罚款金额。
3. 从键盘输入正方形的边长,如果边长大于零则求出该正方形的周长和面积,否则提示输入错误。
4. 输入3个数x,y,z,求其中的最小值。
5. 输入3个数x,y,z,将其中最大值放在x中,最小值放在z中,中间值放在y中,然后输出x,y,z。
(五)使用break 可以强制退出循环,其用法必须配合 if 来使用:例如:for (i=0;i<100;i++){if(条件) {break; }练习:1. 编程求出公式s=1-1/3 + 1/5- 1/7+…1/101的值并输出2. 编程输出如下图形:3. 编程打印九九乘法表4.编程打印出2016年1月份的日历注意:1月份的总天数是31天,其中1日是星期五。
日历如下:-一- -二三四 五 六 日1234 56 7 8 910 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31void mai n() {int i,n,d; //i 是循环变量,n 代表总天数,d 代表星期;n=31; //n 代表一个月的天数d=5; //d 代表星期,星期一为1,星期五为5,星期日为7printf(" 一二三四五六日\n"); // 一个汉字占两个字符的位置for(i=1;i<d;i++) // 开始日期之前用空格占位,每个日期对应3 个空格printf(" ");for(i=1;i<=n;i++,d++) {printf("%3d",i);if(d%7==0){printf("\n");}}}5. 在第4 题的程序上进行修改,如果输入任意一个月的总天数及该月第一天的星期(1代表星期日,2代表星期一……以此类推),能否打印出该月日历6. 计算x 的n 次方(x 为双精度,n 为非负整数) void main(){double x,s;unsigned n,i;s=1;printf(" 请输入x 和n:");scanf("%lf%u",&x,&n);for(i=1;i<=n;i++){s=s*x;}printf("jieguo is %.2lf",s);}四、数组一维数组1. 一维数组:名字相同且带有下标的一组变量2. 定义形式:类型名数组名[长度]例如:int a[10] 〃a数组中包含有10个整型变量,名字分别是a[0]、a[1]、a[2]……a[9] 这里每一个a[n]都是一个普通的整数变量3. 一维数组的初始化:定义数组的时候就给每个数组元素赋值int a[5]={2,4,6,8,10};4. 对a数组中的每一个元素依次进行操作(访问)的方法如下:int i;for(i=0;i<9;i++){... a[i] …}例如:通过键盘输入给a数组中的每个元素赋值将a数组中每一个元素都扩大2倍统计a数组中奇数的个数求a数组中的最大值把a数组的元素进行逆置把a数组中的元素进行右移练习:1. 从一维数组中查找x,并返回x所在的位置,否则提示没有找到。
2. 求fibonacci数列的第n项。
3. 求任意一个数的1.2~1.6倍存入数组。
4. 数组中存入10个数并进行循环左移二维数组1. 二维数组:名称相同且带有2个下标的一堆变量,逻辑上可看成n行m列的二维表格。
2. 定义形式:类型名数组名[行长度][列长度]例如:int a[3][4]这里a数组中包含有3*4=12个数组元素,这12个元素的名字分别是:a[0][0] a[0][1] a[0][2] a[0][3]a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3]3.二维数组的初始化:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};例如:为二维数组中的每一个元素赋值将二维数组转置输出(行变列,列变行) 求每行的平均值求每列的总和求列上的最小值5•行列相等的二维数组叫做矩阵,对矩阵的操作有:求主对角线的和求次对角线的平均值输出该矩阵的上半三角元素练习:1. 对一个3*4的数组,求列上的平均值2. 求一个3*3矩阵的主、次对角线的平均值3. 利用数组输出以下图形22224226622S1282210202010221230403012 2字符串1. 字符串:字符型的一维数组,可以存储一串字符,并以\0做为结束标志。
2 •字符串的输入与输出char str1[20],str2[20],str3[20];gets(strl); //字符串的输入scanf( %s”,st⑵;//字符串的输入puts(strl); //字符串的输出;printf( %s”,str2); // 字符串的输出;3 .对字符串的访问:如有char s1[20]; int n;字符串的长度:n=strle n( s1);第一个字符:s1[0];最后一个字符:s1[ n-1]\0 '的位置:s1[n]4.字符串常用函数:注意:用以下函数需要用 #ineludestring.h "引入头文件。
连接字符串:strcat(str1,str2)比较两个字符串的大小: strcmp(str1,str2); 求字符串的长度:strle n(str1);在字符串中查找一个字符,并返回其位置: char c= 'a ”strchr(str1, c);复制字符串:strcpy(str3,str1);在字符串str1中查找字串str2的位置:strstr(str1,str2)5 •字符串常见操作把字符串逆置 判断是否为回文五、函数(一)函数的定义:1 •无返回值、无参函数的定义:例:定义一个能够输出 void f1() {int i;for(i=1;i<=10;i++) {printf( * ”;}return;}10个” ”的程序。
void 函数名() {定义变量; 实现功能; 返回; }2. 无返回值、有参函数的定义:例: 定义一个能够输出 n 个””的程序void 函数名(参数定义列表)void f2(i nt n){{定义变量;int i;实现功能;for(i=1;i<=n ;i++)返回;{pri ntf( * ”;}}}return;例:定义一个能够输出n 个指定字符的程序。
void f3(char c,i nt n)1 int i;for(i=1;i<=n ;i++){printf( %c ”,c);}}return;3有返回值有参函数的定义: 例: 定义一个计算两个整数加法的函数。
类型函数名(参数定义列表) int f4(i nt x,i nt y){{1 •无参函数调用:函数名()2 •有参函数调用:函数名(实参列表)这里的实参可以是一个具体的值,或者一个已经有值的变量,也可以是一个表达式。
3 •函数的调用可以成为一个独立的语句,也可以参与到表达式中进行计算。
例如:调用fl函数:f1()调用f2 函数:f2(5) 或int n=20; f2(n);调用f3 函数:f3(‘,10)或char cc= ''nt n=8; f3(cc,n);调用f4 函数:int s,a=1,b=2;s=f4(a,b);调用f5函数:int x=7;if(f5(x)) printf (奇数”)else printf(偶数”);(三)指向一维数组的函数:f1(int a[],int n){int i;for(i=0;i< n;i++){a[i];}}void mai n(){int a[10]={1,2,3,4,5,6,7,8,9,10};f1(a,10);}练习:求10个数的和求10个数的平均值把10个数逆序输出求10个数中的最小值(四)指向字符串的函数:f2(char s[]){ int i; for(i=0;s[i]!=0;i++){…s[i]…;}}使用自定义函数的要点:1. 自定义函数要写在main 函数的上方2. 在分析程序的运行时要知道,程序的执行从main 函数开始,在main 中结束3. 自定义函数可以接收主函数传递的多个参数4. 自定义函数每次只能返回一个结果给主函数5. 自定义函数可以通过指针对主函数中的数值进行直接访问(操作)6. 输入操作一般交给main 函数练习(全都用函数实现,输入输出由主函数负责,功能实现由自定义函数负责):求任意两个数的和、差、积(用三个自定义函数实现)求任意两个数的余数,如果输入的除数为0 要输出警告信息交换两个变量计算x 的10 次方(x 为双精度)求等比数列 2 4 8 16 32 …的第n 项查找字符 c 在字符串s 中第一次出现的位置连接两个字符串/* 连接两个字符串*/#include "stdio.h"#include "string.h"Void f1(char s1[], char s2[]){int i;ln=strlen(s1);for(i=0;i<=strlen(s2);i++){s1[ln+i]=s2[i];}}void main(){char s1[20],s2[10];printf(" 请输入两行字符串:");gets(s1);gets(s2); f1(s1,s2);printf(" 结果是%s",s1);}六、指针(一)指针的概念:1.指针:变量的地址2.指针变量:能存指针的变量3.指针变量的定义:int *p,x;4. 对于变量指针的操作:赋值:p=&x; //把x的地址值赋给p,即p指向x通过p 间接访问x:*p;将x 的值加上10:*p=*p+10;(二)指向一维数组的指针:1.定义与赋值:int a[20],*p; p=a;2.相关概念:数组名 a 就是数组的首地址,也就是a[0] 的地址。