C语言总复习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
字符串示例
【练12】输入字符串,求其翻转字符串
int i, j, n, s1[80], s2[80];
gets(s1);
n=strlen(s1); for(i=n-1,j=0; i>=0; i--,j++)
s2[j]=s1[i];
s2[j]='\0'; printf("%s\n", s2);
11
【思考1】输入日期,输出它是该年的第几天; 【思考2】输入年与天数,输出日期.(知码开门ห้องสมุดไป่ตู้.9求年月日)
6
字符串的输入及常用函数
字符串输入有scanf()和gets()
scanf()使用%s格式描述符输入字串,字串不含空格,因此遇 到空白字符自动结束字串输入
char str[10]; scanf("%s", str);
int i,m,n,s[10];double ave; scanf("%d", &s[0]); ave=m=n=s[0]; for(i=1; i<10; i++) { scanf("%d", &s[i]); if(m<s[i]) m=s[i]; if(n>s[i]) n=s[i]; ave += s[i]; } ave = (ave-m-n)/8; printf("%.2f\n", ave);
max=a[0]; //假设第一个元素值最大 for(j=1; j<N; j++) if(a[j]>max) max=a[j];
(4) 求最大(最小)元素下标
maxP=0; //maxP代表最大元素下标 for(j=1; j<N; j++) if(a[j]>a[maxP]) maxP=j;
2
一维数组示例
【思考】如果要输出所有最高分的序号呢?
4
二维数组示例
【练6】输入一个N行N列整型矩阵,计算两条对角线元素和 int i,j,a[N][N],sum=0; for(i=0; i<N; i++) for(j=0; j<N; j++) scanf("%d", &a[i][j]); for(sum=0,i=0; i<N; i++) sum = sum+a[i][i]+ a[i][N-i-1]; if(N%2==1) sum = sum-a[N/2][N/2];
gets()函数输入字符串可包含空格,以回车符结束字串输入
gets(str) 字符函数 ctype.h
字符类型判断函数:islower(c),isupper(c),isdigit(c) 大小写字符转换函数:toupper(c)、 tolower(c)
字符串函数 string.h
strlen()
7
字符串示例
程序设计
总复习
一维数组的基本运算
假设有定义:int a[N]; N是已定义过的符号常量 (1) 数组元素的输入/输出
for(j=0; j<N; j++) scanf("%d", &a[j]);
(2) 数组元素的求和
for(sum=0,j=0; j<N; j++) sum += a[j];
(3) 求数组中的最大(最小)值
【练2】10个评委给选手打分,计算选手最后得分。计分规则: 去掉一个最高分,一个最低分,求平均。保留2位小数
3
一维数组示例
【练5】输入某班学生(不超过30人)的学号与成绩(人数由键 盘输入),输出最高分的学生学号和成绩。
int i, N, no[30], s[30], max=0; //max表示最高分 scanf("%d", &N); for(i=0; i<N; i++) { scanf("%d %d", &no[i], &s[i]); if(s[i]>max) max=s[i]; } for(i=0; i<N; i++) if(s[i]==max) printf("%d %d\n", no[i], s[i]);
主对角线元素a[i][i] ,次对角线元素a[i][N-i-1]
5
二维数组示例
【练7】从键盘输入某年某月(包括闰年),编程输出该年的 该月拥有的天数(使用二维数组存储各月的天数)
int year, month, leap; int days[][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
【练1】输入某班某门课程的成绩(不超过30人,人数由键盘输 入) ,计算该班的平均分,结果保留1位小数。
int i, n, s[30]; double ave=0.0; scanf("%d", &n); for(i=0; i<n; i++) { scanf("%d", &s[i]); ave += s[i]; } ave = ave/n; printf("%.1f\n", ave);
gets(s); c=getchar(); for(i=0; s[i]!='\0'; i++) if(s[i]==c) { find=i; break; } if(find==-1) printf("No\n"); else printf("%d\n", i);
【思考】如果要在整型数组中查找某个整数呢?(知码开门8.10)
8
字符串示例
【练9】输入一串字符(小于80),将其中的小写字符转换为 大写。 int i, s[80];
gets(s); for(i=0; s[i]!='\0'; i++) s[i]>='a' && s[i]<='z' if(islower(s[i])) s[i]=toupper(s[i]);
s[i] = s[i]-'a‘+'A' ;
【练10】输入一串字符(小于80),将其中的数字字符转换为 一个整数输出。
gets(s); for(n=0,i=0; s[i]!='\0'; i++) s[i]>='0' && s[i]<='9' if(isdigit(s[i])) n = 10*n + (s[i]-'0');
9
字符串示例
【练11】输入字符串和字符c,在串中查找字符c。找到输出其 下标,找不到输出No int find=-1;
{1,31,29,31,30,31,30,31,31,30,31,30,31}};
scanf("%d,%d", &year, &month); leap = (year%4==0 && year%100) || year%400==0 if(leap==1) printf(" days is %d\n", days[1][month]); printf(" days is %d\n", days[leap][month]); else printf(" days is %d\n", days[0][month]);
【练8】输入一串字符(小于80),分别统计其中的大写、小 写、其它字符数
#include <ctype.h> … int i, s[80], n1, n2, n3; n1=n2=n3=0; gets(s); for(i=0; s[i]!='\0'; i++) if(isupper(s[i])) s[i]>='A' && s[i]<='Z' n1++ ; else if(islower(s[i])) s[i]>='a' && s[i]<='z' n2++ ; else n3++ ;
字符串示例
【练12】输入字符串,求其翻转字符串
int i, j, n, s1[80], s2[80];
gets(s1);
n=strlen(s1); for(i=n-1,j=0; i>=0; i--,j++)
s2[j]=s1[i];
s2[j]='\0'; printf("%s\n", s2);
11
【思考1】输入日期,输出它是该年的第几天; 【思考2】输入年与天数,输出日期.(知码开门ห้องสมุดไป่ตู้.9求年月日)
6
字符串的输入及常用函数
字符串输入有scanf()和gets()
scanf()使用%s格式描述符输入字串,字串不含空格,因此遇 到空白字符自动结束字串输入
char str[10]; scanf("%s", str);
int i,m,n,s[10];double ave; scanf("%d", &s[0]); ave=m=n=s[0]; for(i=1; i<10; i++) { scanf("%d", &s[i]); if(m<s[i]) m=s[i]; if(n>s[i]) n=s[i]; ave += s[i]; } ave = (ave-m-n)/8; printf("%.2f\n", ave);
max=a[0]; //假设第一个元素值最大 for(j=1; j<N; j++) if(a[j]>max) max=a[j];
(4) 求最大(最小)元素下标
maxP=0; //maxP代表最大元素下标 for(j=1; j<N; j++) if(a[j]>a[maxP]) maxP=j;
2
一维数组示例
【思考】如果要输出所有最高分的序号呢?
4
二维数组示例
【练6】输入一个N行N列整型矩阵,计算两条对角线元素和 int i,j,a[N][N],sum=0; for(i=0; i<N; i++) for(j=0; j<N; j++) scanf("%d", &a[i][j]); for(sum=0,i=0; i<N; i++) sum = sum+a[i][i]+ a[i][N-i-1]; if(N%2==1) sum = sum-a[N/2][N/2];
gets()函数输入字符串可包含空格,以回车符结束字串输入
gets(str) 字符函数 ctype.h
字符类型判断函数:islower(c),isupper(c),isdigit(c) 大小写字符转换函数:toupper(c)、 tolower(c)
字符串函数 string.h
strlen()
7
字符串示例
程序设计
总复习
一维数组的基本运算
假设有定义:int a[N]; N是已定义过的符号常量 (1) 数组元素的输入/输出
for(j=0; j<N; j++) scanf("%d", &a[j]);
(2) 数组元素的求和
for(sum=0,j=0; j<N; j++) sum += a[j];
(3) 求数组中的最大(最小)值
【练2】10个评委给选手打分,计算选手最后得分。计分规则: 去掉一个最高分,一个最低分,求平均。保留2位小数
3
一维数组示例
【练5】输入某班学生(不超过30人)的学号与成绩(人数由键 盘输入),输出最高分的学生学号和成绩。
int i, N, no[30], s[30], max=0; //max表示最高分 scanf("%d", &N); for(i=0; i<N; i++) { scanf("%d %d", &no[i], &s[i]); if(s[i]>max) max=s[i]; } for(i=0; i<N; i++) if(s[i]==max) printf("%d %d\n", no[i], s[i]);
主对角线元素a[i][i] ,次对角线元素a[i][N-i-1]
5
二维数组示例
【练7】从键盘输入某年某月(包括闰年),编程输出该年的 该月拥有的天数(使用二维数组存储各月的天数)
int year, month, leap; int days[][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
【练1】输入某班某门课程的成绩(不超过30人,人数由键盘输 入) ,计算该班的平均分,结果保留1位小数。
int i, n, s[30]; double ave=0.0; scanf("%d", &n); for(i=0; i<n; i++) { scanf("%d", &s[i]); ave += s[i]; } ave = ave/n; printf("%.1f\n", ave);
gets(s); c=getchar(); for(i=0; s[i]!='\0'; i++) if(s[i]==c) { find=i; break; } if(find==-1) printf("No\n"); else printf("%d\n", i);
【思考】如果要在整型数组中查找某个整数呢?(知码开门8.10)
8
字符串示例
【练9】输入一串字符(小于80),将其中的小写字符转换为 大写。 int i, s[80];
gets(s); for(i=0; s[i]!='\0'; i++) s[i]>='a' && s[i]<='z' if(islower(s[i])) s[i]=toupper(s[i]);
s[i] = s[i]-'a‘+'A' ;
【练10】输入一串字符(小于80),将其中的数字字符转换为 一个整数输出。
gets(s); for(n=0,i=0; s[i]!='\0'; i++) s[i]>='0' && s[i]<='9' if(isdigit(s[i])) n = 10*n + (s[i]-'0');
9
字符串示例
【练11】输入字符串和字符c,在串中查找字符c。找到输出其 下标,找不到输出No int find=-1;
{1,31,29,31,30,31,30,31,31,30,31,30,31}};
scanf("%d,%d", &year, &month); leap = (year%4==0 && year%100) || year%400==0 if(leap==1) printf(" days is %d\n", days[1][month]); printf(" days is %d\n", days[leap][month]); else printf(" days is %d\n", days[0][month]);
【练8】输入一串字符(小于80),分别统计其中的大写、小 写、其它字符数
#include <ctype.h> … int i, s[80], n1, n2, n3; n1=n2=n3=0; gets(s); for(i=0; s[i]!='\0'; i++) if(isupper(s[i])) s[i]>='A' && s[i]<='Z' n1++ ; else if(islower(s[i])) s[i]>='a' && s[i]<='z' n2++ ; else n3++ ;