首页IT科技计算机二级考试C语言程序设计题常考(计算机等级考试二级C语言程序设计专项训练题——程序设计题(四))

计算机二级考试C语言程序设计题常考(计算机等级考试二级C语言程序设计专项训练题——程序设计题(四))

时间2025-05-05 04:23:12分类IT科技浏览3579
导读:31、请编写函数void fun(char xx[] ,函数的功能是:将字符串数组xx中下标为奇数的字符按其ASCII值从大到小的顺序进行排序。...

31           、请编写函数void fun(char xx[])            ,函数的功能是:将字符串数组xx中下标为奇数的字符按其ASCII值从大到小的顺序进行排序           。

例如:源字符串为:abcdefgh                 ,则处理后字符串为:ahcfedgb                。

void fun(char xx[]) { int i,j,k; char ch; i=strlen(xx); for(j=1;j<i-2;j=j+2) for(k=j+2;k<i;k=k+2) if (xx[j]<xx[k]) { ch=xx[j]; xx[j]=xx[k];xx[k]=ch; } }

参考程序

32                、请编写函数void fun(char xx[])    ,其功能是:从字符串xx中间一分为二         ,左边部分按字符的ASCII值降序排序                  ,右边部分按字符的ASCII值升序排序      。如果原字符串长度为奇数       ,则最中间的字符不参加排序      ,字符仍放在原位置上         。

例如:若源字符串为:abcdhgfe                  ,则处理后字符串为:dcbaefgh                。若源字符串为:123498765          ,则处理后字符串为:432195678         。

#include <stdio.h> #include <string.h> void fun(char xx[]) { } int main() { char xx[81]; printf("Enter a string : "); gets(xx); printf("The original string is : "); puts(xx); fun(xx); printf("The string after modified : "); puts(xx); return 0; }
void fun(char xx[]) { int i,j,k,half; char ch; i=strlen(xx); half=i/2; for(j=0;j<half-1;j++) for(k=j+1;k<half;k++) if(xx[j]<xx[k]) { ch=xx[j];xx[j]=xx[k];xx[k]=ch; } if (i%2) half++; for (j=half;j<i-1;j++) for (k=j+1;k<i;k++) if (xx[j]>xx[k]) { ch=xx[j];xx[j]=xx[k];xx[k]=ch; } }

参考程序

33      、请编写函数void fun(char xx[])   ,其功能是:从字符串xx中间一分为二                  ,左边部分按字符的ASCII值降序排序             ,排序后左边部分与右边部分进行交换      。如果原字符串长度为奇数,则最中间的字符不参加处理               ,字符仍放在原位置上                。

例如:若源字符串为:abcdhgfe                ,则处理后字符串为:hgfedcba            。 若源字符串为:123498765  ,则处理后字符串为:876594321   。

#include <stdio.h> #include <string.h> void fun(char xx[]) { } int main() { char xx[81]; printf("Enter a string : "); gets(xx); printf("The original string is : "); puts(xx); fun(xx); printf("The string after modified : "); puts(xx); return 0; }
void fun(char xx[]) { int i,j,k,half; char ch; i=strlen(xx); half=i/2; for(j=0;j<half-1;j++) for(k=j+1;k<half;k++) if(xx[j]<xx[k]) { ch=xx[j];xx[j]=xx[k];xx[k]=ch; } for (j=half-1,k=i-1;j>=0;j--,k--) { ch=xx[j]; xx[j]=xx[k]; xx[k]=ch; } }

参考程序

34         、编写一个函数fun(char *str,char *substr)            ,该函数统计一个长度为2的子字符串在另一个字符串中出现的次数                。

例如                 ,若字符串str为"asd asasdfg asd as zx67 asd mklo"    ,子字符串为"as"         ,则函数返回值是6               。

#include <stdio.h> #include <string.h> int fun(char *str,char *substr) { } int main() { char str[81], substr[3] ; int n ; printf("输入原字符串:") ; gets(str) ; printf("输入子字符串:") ; gets(substr) ; n=fun(str, substr) ; printf("n=%d\n", n) ; return 0; }
int fun(char *str,char *substr) { int n=0; char *p , *r; while (*str) { p=str; r=substr; while(*r) if (*r==*p) {r++; p++; } else break; if (*r==\0) n++; str++; } return n; }

参考程序

35                、请编写函数void fun(char xx[])                  ,函数的功能是:将字符串数组xx中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号       ,将标点符号均转换为空格)仍重新存入字符串数组xx中             。

例如:源字符串为:I am a student      ,则处理后字符串为:student a am I                 。

特别说明:若源字符串末尾有一个标点                  ,则转换后的字符串开头有一个空格   。

#include <stdio.h> #include <string.h> void fun(char xx[]) { } int main() { char xx[81]; printf("Enter a string : "); gets(xx); printf("The original string is : "); puts(xx); fun(xx); printf("The string after modified : "); puts(xx); return 0; }
void fun(char xx[]) { int len,i,j,k,s; char str[81]; len=strlen(xx); s=k=0; for (i=len-1;i>=0;i--) // 从当前字符串尾部开始向前倒序循环,实现单词倒排 { if((xx[i]>=A && xx[i]<=Z)|| (xx[i]>=a && xx[i]<=z)) k++; // 如果当前字符是字母a~z或A~Z          ,则k加1 else // 否则将长度为k的单词顺序存入到字符串数组str中 { for(j=1;j<=k;j++) str[s++]=xx[i+j]; k=0; // 将k值清0   ,以方便下一个单词的长度计数 } if(!((xx[i]>=A && xx[i]<=Z)|| (xx[i]>=a && xx[i]<=z))) str[s++]=; // 如果当前字符不是字母a~z或A~Z,则以空格代之存入到字符串数组str中 } for(j=1;j<=k;j++) // 此时的k值为当前字符串中第一个单词的长度,但在上一个for循环中没能存入到字符串数组str中,所以在这里将其存入到str中 str[s++]=xx[i+j]; str[s]=\0; strcpy(xx,str); // 将倒排好的当前字符串重新存回到xx中 }

参考程序1

void fun(char xx[]) { int i,len; char str[81]={0}; len=strlen(xx); for (i=len-1;i>=0;i--) if(!((xx[i]>=A && xx[i]<=Z)|| (xx[i]>=a && xx[i]<=z))) { strcat(str,xx+i+1); strcat(str," "); xx[i]=\0; } strcat(str,xx); strcpy(xx,str); }

参考程序2

声明:本站所有文章                  ,如无特殊说明或标注             ,均为本站原创发布           。任何个人或组织,在未征得本站同意时               ,禁止复制         、盗用      、采集                、发布本站内容到任何网站            、书籍等各类媒体平台                。如若本站内容侵犯了原著者的合法权益                ,可联系我们进行处理      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
u盘格式化数据怎么恢复(u盘格式化弄回去教程)