C语言程序设计题,下面是一道C语言的二级程序题,本人是C语言初学者,这道题我实在是看不明白程序是怎么走

的,还请各位高手帮帮忙,详细的讲解一下,在这里先谢谢了!今天是小年,祝各位节日快乐!
给定程序中,函数fun的功能是:把形参s所指字符串下标为奇数的字符右移到下一个奇数位置,最右边被移出的字符串的字符绕回到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)
#include "stdio.h"
void fun(char * s)
{
int i,n,k;
char c;
n=0;
for(i=0;s[i]!='\0';i++)
n++;
if(n%2==0)
k=n-1;
else
k=n-2;
c=s[k];
for(i=k-2;i>=1;i=i-2)
s[i+2]=s[i];
s[1]=c;
}
void main()
{
char s[80]="abcdefgh";
printf("\nThe original string is:%s\n",s);
fun(s);
printf("\nThe result is:%s\n",s);
}

#include "stdio.h"
void fun(char * s)
{
int i,n,k;
char c;
n=0;
for(i=0;s[i]!='\0';i++) /*如果字符串没有结束,也就是给的字符串没有到结尾就执行循环,一个字符串的末尾会有一个 '\0'的结束标志的*/
n++; /*这个for循环结束后n里面是这个字符串共有多少个字符*/
if(n%2==0) /*如果n对二取余等于0,即字符个数是偶数*/
k=n-1;
else
k=n-2;/*if之后,如果共十个字符,那么k是9,如果9个字符k是7,即最后一个下标是奇数的下标,这是为了把最后一个放到第一位*/
c=s[k]; //临时变量,用于存放最后一个下标为奇数的字符
for(i=k-2;i>=1;i=i-2) //字数下标字符后移2个,不包括最后一位
s[i+2]=s[i];
s[1]=c; //最后一个奇数移到s[1]
}
void main()
{
char s[80]="abcdefgh";
printf("\nThe original string is:%s\n",s);
fun(s);
printf("\nThe result is:%s\n",s);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-16
#include "stdio.h"
void fun(char * s)
{
int i,n,k;
char c;
n=0;
for(i=0;s[i]!='\0';i++)
n++; //求字符串s的长度n,其实可以用n=strlen(s);
if(n%2==0)
k=n-1; //当s的长度n为偶数时,移动字符末位置为k=n-1
else
k=n-2; //当s的长度n为奇数时,移动字符末位置为k=n-2
c=s[k]; //保存最后一个移动奇字符
for(i=k-2;i>=1;i=i-2) //从倒数第2个奇字符到最前面第1个奇字符,逐个移动
s[i+2]=s[i];
s[1]=c; //最后一个奇字符移动到最前面
}
第2个回答  2012-01-18
char s[80]="abcdefgh"; //定义数组
fun(s); //传的是数组指针,所以fun函数执行完后s的值就真正的改变了。
fun()函数的执行过程如下:以"abcdefgh"为例

for(i=0;s[i]!='\0';i++)
n++;
//得到n=8

if(n%2==0)
k=n-1;
else
k=n-2;
//判断n是否为偶数,如果是偶数,则将k赋值为n的前一个奇数
//此时k=8-1=7

c=s[k];
//先把最后这个奇数下标的值保存到变量c中
//c=h

for(i=k-2;i>=1;i=i-2)
s[i+2]=s[i];
//开始执行循环体
//i=7-2=5;i满足>=1执行s[5+2]=s[5],即s[7]=s[5]
//此时s="abcdefgf"
//执行i=i-2即i=5-2=3;i满足>=1执行s[3+2]=s[3],即s[5]=s[3]
//此时s="abcdedgf"
//执行i=i-2即i=3-2=1;i满足>=1执行s[1+2]=s[1],即s[3]=s[1]
//此时s="abcbedgf"
//执行i=i-2即i=1-2=-1;i不满足>=1则跳出循环体

s[1]=c;
//将s[1]的值赋值为h
//此时s="ahcbedgf"
//最后返回此s
第3个回答  2012-01-18
int i,n,k;
char c;
n=0;
for(i=0;s[i]!='\0';i++)/*判断s[i]中的数据是否为0,
n++; 如果不为0,即为字符,所以用n存放字符个数*/
if(n%2==0) /*判断n是否偶数,
k=n-1; /* 是偶数,则n-1=k,而k则是字符串中最右边的奇数下标值,也是上限值*/
else /*不是偶数,即为奇数,
k=n-2; /*则n-2=k,而k则是字符串中最右边的奇数下标值,n-1是字符串的上限值*/
c=s[k]; /*用c存储最右边的奇数下标值存储单元中的数据*/
for(i=k-2;i>=1;i=i-2) /*下标为奇数的字符
s[i+2]=s[i]; 右移到下一个奇数位置
s[1]=c;/*将最右边被移出的字符串的字符绕回到第一个奇数位置*/

C语言程序设计 编程,我是C语言初学者,请高手们帮我为下面这道题编个程 ...
include <stdio.h> int main(){ char c;int x = 0, y = 0;printf("***请按提示选择***\\n");printf("a---本校全日制学生\\n");printf("b---本校夜大学生\\n");printf("c---外校学生\\n");scanf("%c", &c);if(c == 'a'){ printf("你是本校全日制学生,不收付费 ^_^...

C语言程序设计 我是C语言初学者,有一道看程序的题我有些弄不懂,还请...
答案:C A:是如果a>b,则一程序一直执行到“b=c;”,效果是换a与b的值;B:是如果a>b,则执行{ }里的语句,效果是交换a与b的值;C:是如果a>b,则执行c=a; 无论a是否大于b,c的值都要给a,a-b;没什么作用;D:是如果a>b,则效果是交换a与b的值,c相当于中转站,a-b;没什么作...

C语言程序设计 我是C语言初学者,这有一道switch语句的题,请大家帮帮忙...
c等于1 不会跳出 还会继续执行case 2: c++; break c等于2了 。然后 k等于2 c等于3了。

c语言二级考试程序设计题给步骤分吗?
二级考试C语言程序设计题没有步骤分,只有零分和满分。\\x0d\\x0a扩展资料\\x0d\\x0a全国计算机二级C语言考试,分为选择题(40分),程序填空题 (18分),程序修改题 (18分),程序设计题(24分)。\\x0d\\x0a考试内容\\x0d\\x0a一、C 语言程序的结构\\x0d\\x0a1. 程序的构成,main 函数...

c语言程序设计教程答案c语言程序设计练习题
篇一:c语言程序设计基础单元总结与练习题及答案 《C语言程序设计》单元总结与练习题 答案 单元一 程序设计宏观认识 单元总结提升 本单元中,核心内容有C语言程序框架结构、程序的构成和程序开发过程。通过本单元 的学习,我们应该知道: 1.C语言程序最基本的程序框架由两部分构成,分别是: (1) 编译预处理 (2) 函数...

计算机二级C语言程序设计该怎么做?
1.选择题:如果C语言有一定基础,考前一周开始刷题没大问题(因为刷早了会忘)。我发的模拟考试软件里有,做完题有讲解。另外背一背公共基础知识和一些程序设计基础,软件设计基础blabla,简单的一定要拿到!其次是数据结构和数据库设计基础,这些如果是零基础确实比较困难。从题库中看,这些题其实也都...

如何学习C语言
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os\/2,没有一个里外的,如果你不懂C...

c语言程序设计试题
【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。2.程序源代码:代码如下:include "stdio.h"include "conio.h"main(){ int i,j,k;printf("...

程序高手帮个忙,新手实在是做不来了。C语言程序设计,做任意一个就行了...
include <string.h> pragma warning(disable:4996)\/\/该语句是屏蔽第4996号警告,可不要,typedef struct Node { long num;char name[10];float math;float chinese;float english;int flag;\/\/判定是否及格,最好用bool型 }SCORE,*PSCORE;\/\/对于本题可以不用定义结构体的 void main(){ FILE* fp...

计算机二级C语言题
,c2++当然就是'b'了。至于你说的“不能给实参”的问题,你理解成变量传递了,而这里是指针传递:传递的是指向变量的指针,函数中直接对指针指向的内容操作,实际上就是直接操作主调函数中的该指针指向的变量。但要注意,指针本身仍然是拷贝,被调函数中对指针本身的操作影响不到主调函数中的指针!

相似回答