北理工C语言3
更新时间:2024-05-26 04:35:01 阅读量: 综合文库 文档下载
的
3-1. 编程,任意输入10个整数,按从小到大的顺序输出。 结果:
输入: 9、7、8、6、7、5,
输出: 5、6、7、7、8、9。 分析:用选择法排序。 main()/* sj1-3-1 */ {int j,k,e,t,a[10];
for(j=0;j<10;j++) scanf(\ for(j=0;j<9;j++) {t=j;
for(k=j+1;k<10;k++) if(a[t]>a[k]) t=k; e=a[t];a[t]=a[j];a[j]=e; } for(k=0;k<10;k++) printf(\ printf(\ }
3-2. 编程,任意输入10个人的成绩,按从大到小的顺序排列。运行程序时,只要输入名次,
计算机就能输出该名次对应的成绩。 结果:
输入: 4、7、3、6、1、5,12,0,23,-1 输入: 4
输出: The 4th is 6
分析:用选择法排序。第n名是a[n-1]。 main()/* sj1-3-2 */ {int j,k,e,t,n,a[10];
for(j=0;j<10;j++) scanf(\printf(“nput a number:\\n”); scanf(“%d”,&n); for(j=0;j<9;j++) {t=j;
for(k=j+1;k<10;k++) if(a[t]>a[k]) t=k; e=a[t];a[t]=a[j];a[j]=e; }
printf(“The %dth is %d\\n”,n,a[n-1]); for(k=0;k<10;k++) printf(\ printf(\ }
3-3. 编程,输入10个人的序号和成绩,对成绩从小到大排序,输出排序后的序号和成绩。 结果:
输入: 1,10 2,9 3,8 4,7 5,6 6,7 7,8 8,9 9,12 10,0
输出:10: 0
5: 6 4: 7 6: 7 3: 8 7: 8
2: 9 8: 9 1: 10 9: 12。
分析:用选择法排序。a[j][0]--序号,a[j][1]--成绩。 main()/* sj1-3-3 */
{int j,k,e,t,a[10][2];
for(j=0;j<10;j++) scanf(\ for(j=0;j<9;j++) {t=j;
for(k=j+1;k<10;k++) if(a[t][1]>a[k][1]) t=k; e=a[t][0];a[t][0]=a[j][0];a[j][0]=e; e=a[t][1];a[t][1]=a[j][1];a[j][1]=e;
}
for(k=0;k<10;k++)
printf(\ printf(\ }
3-4. 编程,输入10个人的序号和成绩,对成绩从从大到小进行排序,输出排序后的序号和
成绩。 结果:
输入: 1,10 2,9 3,8 4,7 5,6 6,7 7,8 8,9 9,12 10,0
输出:9: 12。
1: 10 8: 9 2: 9 7: 8 3: 8 6: 7 4: 7 5: 6 10: 0
分析:用选择法排序。a[j][0]--序号,a[j][1]--成绩。 main()/* sj1-3-4 */
{int j,k,e,t,a[10][2];
for(j=0;j<10;j++) scanf(\ for(j=0;j<9;j++) {t=j;
for(k=j+1;k<10;k++) if(a[t][1]
}
for(k=0;k<10;k++)
printf(\ printf(\ }
3-5. 编程,输入10个整数及其序号,求出10个整数的最大值、次大值、最小值和次小值,
并输出它们原来输入时的序号。
结果:输入:1,15 2.11 3,0 4,7 5,1 6,5 7,7 8,40 9,2 10,23
输出:8: 40 10: 23 3: 0 5: 1
分析:用选择法排序。a[j][0]--序号,a[j][1]--成绩。交换时a[j][0]、a[j][1]一起交换。 main()/* sj1-3-5 */
{int j,k,e,t,a[10][2];
for(j=0;j<10;j++) scanf(\ for(j=0;j<9;j++) {t=j;
for(k=j+1;k<10;k++) if(a[t][1]
}
printf(\ printf(\ }
3-6. 编程,输入10个整数,然后进行查找。输入要查找的整数,若找到,则输出该数在数组
中的下标位置,否则输出“can not found!”。
结果:输入:12 23 43 21 56 7 9 4 33 67(a数组的内容) 56(要找的数) 输出:56=a[4]
65(要找的数) 输出:65 can not found!
分析:用数组存放10个整数,对10个整数循环,输出找到的整数及其在数组中的下标。 main()/* sj1-3-6 */ {int j,n,a[10];
for(j=0;j<10;j++) scanf(\printf(“nput a number:\\n”); scanf(“%d”,&n); for(j=0;j<10;j++)
if(n==a[j]) {printf(“%d=a[%d]\\n”,n,j);break;} if(j>=10) printf(“ %d can not found!\\n”,n);
} 3-7.编程,输入一个字符串并删除其中的指定字符。例如,对于字符串abcdcf,指定删除c,
则结果为:abdf。 结果:输入:abcdcf和c 输出:abdf
分析:输入一个字符串s和要删除的字符ch,从字符串首开始逐个字符检查,每遇ch则将
后面的字符向前移动一个位置覆盖要删字符ch. #include \#include \main()/* sj1-3-7 */ {int j,k;
char a[80],ch; gets(a);
printf(\ scanf(\ j=0;
while(a[j]!='\\0') {if(ch==a[j])
for(k=j;a[k]!='\\0';k++) a[k]=a[k+1]; j++; }
puts(a); }
3-8. 编程,输入一行字符,将其反序后再输出。 结果:输入abcdefg, 输出:gfedcba
分析:输入n个字符到a数组,a[j]与a[n-j-1]互换(j=0,1,2,…,n/2-1)。 #include \#include \main()/* sj1-3-8 */ {int j,k,n; char a[80],ch; gets(a); n=strlen(a);
for(j=0;j a[j]=a[n-1-j]; a[n-1-j]=ch; } puts(a); } 3-9. 编程,输入一行字符,将其中的每个字符从小到大排列后输出。 结果:输入:china 输出: achin 分析:用选择法对字符数组进行排序。 #include \#include \main()/* sj1-3-9 */ {int j,k,t,n; char a[80],e; printf(\ n=strlen(a); for(j=0;j for(k=j+1;k 3-10. 编程,输入一行字符,将其中的每个字符从大到小排列后输出。 结果:输入:china 输出: nihca 分析:用选择法对字符数组进行排序。 #include \#include \main()/* sj1-3-10 */ {int j,k,t,n; char a[80],e; printf(\ n=strlen(a); for(j=0;j for(k=j+1;k 的最小值。二维数组也可能没有鞍点。 结果:⑴ 输入 n=4,m=4 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 输出: 鞍点为a[0][3]=4。 (2)输入 n=4,m=4 5 5 5 5 5 5 5 5 5 5 5 5 0 3 2 1 输出: 鞍点为a[3][1]=3。 分析:找出i行最大值所在的列号k(i=0,1,…,n), 若a[i][k]是k列最小,则a[i][k]是 鞍点。也可能没有鞍点。 main()/* sj1-3-11 */ { int i,j,l,n,m,k,a[20][20]; printf(\ scanf(\输入数组的行数n和列数m */ for(i=0;i printf(\ } } 3-12. 编程,按学生的序号输入10名学生的成绩,按照分数由高到低的顺序输出学生的名次、 序号和成绩,要求成绩相同的学生具有相同的名次。 结果:输入:2 4 6 8 9 23 43 21 9 4 输出: 1: 7 43 2: 6 23 3: 8 21 4: 5 9 4: 9 9 5: 4 8 6: 3 6 7: 2 4 7: 10 4 8: 1 2 分析:用选择法排序。a[j][0]--序号,a[j][1]—名次。a[j][2]-- 成绩 main()/* sj1-3-12 */ {int j,k,e,t,a[10][3]; for(j=0;j<10;j++) {scanf(\ for(j=0;j<9;j++) {t=j; for(k=j+1;k<10;k++) if(a[t][2] t= a[0][1]; for(k=1;k<10;k++) /* 相同成绩,名次也一样 */ if(a[k-1][2]== a[k][2]) a[k][1]=t; else a[k][1]=++t; for(k=0;k<10;k++) printf(\ } 3-13. 编程,输出所有不超过n(取n<256)的、其平方具有对称性质的正整数(也称为回文 数)。 结果: 1*1=1 2*2=4 3*3=9 11*11=121 22*22=484 26*26=676 101*101=10201 111*111=12321 121*121=14641 202*202=40804 212*212=44944 分析:对j循环(j=1~255),将j*j的各位数字放入数组,输出具有对称性质的j. main()/* sj1-3-13 */ {int e,f,c,t,n=0,a[10]; long j,k; for(j=1;j<256;j++) { k=j*j; t=0; while(k>0) {a[t++]=k;k=k/10;} for(c=0,e=t-1;c 3-14. 编程,输入两个已经按从小到大顺序排列好的字符串,将两个字符串合并为一个新的 从小到大排列字符串并输出。 结果:输入:13579 24acf 输出:1234579acf 分析1:先将两个字符串合并成一个字符串,然后按从小到大排序。 #include \ #include \ main( ) /* sj1-3-14 */ { char a[80],b[80]; int i,j=0,k,t; gets(a); gets(b); printf(“a=%s,b=%s\\n”a,b); while(a[j]!=’\\0’) j++; /* 找a串尾 */ i=0; while(b[i]!=’\\0’) a[j++]= b[i++]; /* b串接在a串尾 */ k=strlen(a); for(i=0;i for(j=i+1;j if(a[t]>a[j]) t=j; p=a[i];a[i]=a[t];a[t]=p; } printf(“a=a+b=%s\\n”,a); } 分析2:对b串的每个字符b[i]在a串中找插入位置j,将a[j],a[j+1],a[j+2],…均向后移 动1个位置,然后将b[i]存入a[j].直到b串的每个字符均插入完毕为止。 #include \ #include \ main( ) /* sj1-3-14 */ { char a[80],b[80]; int i,j,k; gets(a); gets(b); for(i=0;b[i]!='\\0';i++) /* a,b合并到a */ {j=0; while(b[i]>=a[j]&&a[j]!='\\0') j++; /* 找b[i]在a中的插入位置j */ if(a[j]=='\\0') {a[j]=b[i];a[j+1]='\\0';} else {for(k=strlen(a)+1;k>j;k--) a[k]=a[k-1]; /* 将a[k]向后移1个位置 */ a[j]=b[i]; /* 将b[i]存入a[j] */ } } puts(a); } 3-15. 编程,输入两个已经按从小到大顺序排列好的字符串,合并两个字符串,使合并后的 字符串中字符从大到小排列并输出。 结果:输入:13579 24acf 输出:fca9754321 分析:先将两个字符串合并成一个字符串,然后按从大到小排序。 #include \ #include \ main( ) /* sj1-3-15 */ { char a[80],b[80]; int i,j,k,t,p; gets(a); gets(b); printf(\ strcat(a,b); /* b串接在a串尾 */ k=strlen(a); for(i=0;i for(j=i+1;j printf(\ } 3-16. 编程,输入两个字符串s1和s2,在s1中删除任何s2中有的字符。例如,s1:“abc123ad”, s2:“a1”,则输出“bc23d”。 结果:输入:abc123ad a1 输出:bc23d 分析:对s2中每个字符s2[i]到s1中寻找它,将s1中出现的所有s2[i]均删除。若s1[j] 应删除,则用s1[j]后面的字符向前移动的方法覆盖s1[j],达到删除s1[j]的目的。 #include \ #include \ main( ) /* sj1-3-16 */ { char s1[80],s2[80]; int i,j,k; gets(s1); gets(s2); for(i=0;s2[i]!='\\0';i++) /* 删除s1中的与s2[i]相同的字符 */ {j=0; while(s1[j]!='\\0') /* 在s1中找s2[i]并删除 */ {if(s2[i]==s1[j]) /* 找到s1[j],用向前移动的方法覆盖s1[j] */ for(k=j;k s1[k]=s1[k+1]; /* 将s1[j+1]~s1尾('\\0')向前移1个位置,删除s1[j] */ j++; } } puts(s1); } 3-17. 编程,输入一行文字,判断该行文字是否是回文。 例如,读入:MA DAM I MAD AM 输出:YES 读入:ABCDBA. 输出:NO 结果:输入:MA DAM I MAD AM 输出:MA DAM I MAD AM YES 输入:ABCDBA 输出:ABCDBA NO 分析:对字符串S,若s[i]==s[n-i-1](i=0,1,…,n/2)),则为回文。 #include \ main()/* sj1-3-17 */ { char s[80]; int p,n; gets(s); p=0; n=strlen(s); while(p if(s[p]!=s[n-p-1]) /*比较对称的两个字符 */ { printf(\ else p++; if(p>=n/2) printf(\ } 3-18. 编程,输入若干个字符串,当输入字符串的长度为0时停止输入。输出最长的字符串。 结果:输入:china Beijing Chongqing Shanhai 输出:max=Chongqing 分析:用循环输入各字符串并求其长度,找最大长度并输出相应字符串。输入空串(长度为0)时结束循环。 #include \#include \main( ) /* sj1-3-18 */ {int i,k,m; char s[80],max[80]; i=1; gets(s); m=0; while((k=strlen(s))!=0) /* 输入空串时结束循环 */ { if(k>m) {m=k;strcpy(max,s);} /* 比较并记录最长字符串 */ gets(s); } printf(\} 3-19. 编程,输入若干个字符串,当输入字符串的长度为0时停止输入,输出最大字符串。 结果:输入:China Beijing Chongqing Shanhai 输出:max= Shanhai 分析:用循环输入各字符串并求其长度,找最大字符串并输出。输入空串(长度为0)时结束循环。 #include \#include \main( ) /* sj1-3-19 */ {int i,k,m; char s[80],max[80]; i=1; gets(s); strcpy(max,s); while((k=strlen(s))!=0) /* 输入空串时结束循环 */ { if(strcmp(max,s)<0) strcpy(max,s); /* 比较并记录最大字符串 */ gets(s); } printf(\} 3-20.“1898─要发就发”。将不超过2004的所有素数从小到大排成第一行,第二行上的每个 数都等于它“右肩”上的素数与“左肩”上的素数之差。编程,输出第二行数中满足下列条件的整数:第二行数中若干个连续整数的和恰好是1898。 第一行:2 3 5 7 11 13 17 ..... 1997 1999 2003 第二行: 1 2 2 4 2 4 ..... 2 4 结果:输出:2,3,。。。,1987,1997,1999,2003 *******results************* No。1:sum=1898 printf(\} 3-28.编程,输入两个字符串s1、s2,将s1复制到s2并输出s1和s2。复制时,若字符串s1 中存在缩写形式 (如: a – z ) 应转换为字符串s2中的完整形式(abcd??xyz)。“-”号之前的字符必须小于“-”号之后的字符才是合法的缩写形式。例如,s1=abc-fg,则s2=abcdefg,如果s1=abc-af,则 s2=abc-af。应能够处理任意可显示的ASCII字符。 结果:输入:asd-fge-ak1-5sj abc 输出:asdefge-ak12345sj 分析:考察s1[i-1]、s1[i]和s1[i+1],若s1[i]==?-?且s1[i-1]< s1[i+1], 则展开s1[i-1]- s1[i+1]: 复制s1[i-1]+k(k=1,2,..)到s2.,否则只复制s1[i]到s2。 #include \main()/* sj1-3-28 */ {char s1[80],s2[80]; int i=1,k,j=1; gets(s1); gets(s2); s2[0]=s1[0]; while(s1[i]!='\\0') {if(s1[i]=='-'&&s1[i+1]>s1[i-1]) /* 出现s1[i-1]- s1[i+1]现象 */ for(k=1;s1[i-1]+k else s2[j++]=s1[i]; /* 未出现s1[i-1]- s1[i+1]现象,则将s1[i]复制到s2*/ ++i; /*考察下一字符 */ } s2[j]='\\0'; printf(\} 3-29. 编程,输入字符串,输出字符串中每个字符所出现的次数。如: 输入字符串: abcedabcdcd 则输出: a=2 b=2 c=3 d=3 e=1 结果:输入:abcedabcdcd 输出:a=2 b=2 c=3 e=1 d=3 分析:s1存放字符串,s2[k]存放字符s1[k]的个数,扫描s1[i](i=0,1,…),若s1[i]==s1[k](k=0,1,..i-1),则s2[k]加1。 #include \main()/* sj1-3-29 */ {char s1[80];int s2[80]={0},i=1,k; gets(s1);s2[0]++; while(s1[i]!='\\0') {for(k=0;k if(s1[i]==s1[k]) {s2[k]++; break;}/* 出现相同字符,该字符数加1 */ if(k>=i) s2[i]=1;/* 出现不同字符, 该字符数为1 */ ++i; } for(k=0;k<80;k++) /*输出字符数非0的字符s1[k]及其个数s2[k]*/ if(s2[k]!=0) printf(\printf(\} ?????????????3-30. 编程,输入一个长度不超过100的字符串,删除串中的重复字符后输出。如: 输入字符串: abacaeedabcdcd 则输出: abced 结果:输入:abacaeedabcdcd 输出:abced 分析: #include \main()/* sj1-3-30 */ {char s1[80]; int i=1,n,k,t; gets(s1); n=strlen(s1); while(s1[i]!='\\0') {for(k=0;k i++; /* 考察下一字符 */ } printf(\} 3-31. 编程,输入一行字符串,请将其中的字符按照单词进行分割,输出该行中包含的全部 单词。(单词是用空格、\\t或\\n分割的字符串。) 结果:输入:china 123 beijing abc 输出:1: china 2: 123 3: Beijing 4: abc 分析:输入一行字符,其中含空格、跳格和换行。用inword(初值为0) 表示单词的开始或 结束(=1,开始,=0,结束)。 读入空格、跳格或换行时,表示单词结束,令inword=0,输出该单词及其序号,若遇换行,表示输出了最后一个单词,退出。 读入非空格、跳格或换行时, 若inword=0,则该字符是单词的起始字符,令inword=1,单词计数器加1(nw++;)将该字符存入s数组(以便判断输出它)。 若inword不为0,则该字符是单词的一个字符,继续将该字符存入s数组。 #include \ #define YES 1 #define NO 0 main()/* sj1-3-31 */ {int nw,k,inword; char c,s[50]; inword=NO; /* inword=NO 已处理的最后一个字符是空格或\\n */ /* inword=YES 已处理的最后一个字符不是空格或\\n */ nw=0; /* 单词计数器置0 */ while(c=getchar()) { if(c==' '||c=='\\t'||c=='\\n') {inword = NO; /* 如果读入空格、跳格或换行,则一个单词结束 */ printf(\输出该单词及其序号 */ if(c=='\\n') break; /* 遇换行,表示输出了最后一个单词,退出*/ } else /* 读入的字符不是空格、跳格或换行 */ if(inword==NO) /* 如果前一个字符是空格*/ { inword=YES; /* 则c为单词的首字符, 置inword为YES */ k=0; s[k++]=c; /*将c记入数组s */ ++nw; /*进行单词计数 */ } else {s[k++]=c; s[k]='\\0';} /*非单词首字符记入数组s并在串尾加\\0*/ } } ?3-32. 编程,将任一正整数转换为二进制形式。 结果:输入:144 输出:n(10)=144 n(2)=1 0 0 1 0 0 0 0 分析:用除2取余数的方法化2进制,用数组存放2进制各位数字(从高位到低位存放)。输出时从高位的第一个非0数字开始输出。 main()/* sj1-3-32 */ { int j,n,k,a[16]={0}; scanf(\ k=15; j=n; while(j>0) /* 将十进制数转变为二进制数 */ { a[k--]=j%2; /* 二进制数低位放后面 */ j=j/2; } printf(\ for(k=0;a[k]==0;k++); for(j=0;j<16;j++) printf(\ printf(\ }
正在阅读:
北理工C语言305-26
2018版高中语文中国文化经典研读学案(21份) 人教课标版503-09
中职学校晚自习辅导管理制度07-29
江西省上饶县节水型社会建设申报材料03-09
东北大学17年12月考试《电算化会计与审计》考核作业03-15
2020有关于描写生活的诗歌精选03-30
灌区灌溉水有效利用系数的“首尾测算法”05-01
129300308147968750新视野2版3册答案08-29
学习十佳教师心得体会范本参考04-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 理工
- 语言
- 礼仪海员海乘教案 - 图文
- 《走进我的家乡》综合实践活动案例
- 路基路面工程习题及答案
- 2011华为技术规范DKBA04000002-H 表面处理代码 - 图文
- 让绿色点亮希望,用文明铸就辉煌
- 煤矿安全培训教材
- 13hypermesh 笔记总结
- 心血管系统习题及答案
- 七度空间魅力迷你1
- 三圣黑水滩河堤防勘察报告
- 北京地坛医院绩效管理体系设计方案(提交版) - 图文
- 学习情境2基于DS1302和LCD1602的可调数字钟
- 工程地质及土力学复习题
- 2017年浙江省舟山市中考语文试卷及试卷解析
- 卤水中离子去除研究2011511
- C++面向对象程序设计标准教案
- 八字培训 刁吉祥《命理玄机》第五节地支六穿
- 60万方天然气液化项目可行性研究报告
- 广东省汕头市潮南区2017 - 2018学年八年级语文下学期第一次月考
- 受电弓设计计算说明书