1.
#include"stdio.h"()
#include"string.h"
void fun(char *s)
{
char a[10];strcpy(a,"STRING");
s=a;//这里将数组a的起始地址赋给了s,也就是s指向的是字符串“STRING”,改变了s的指向与字符串"PROGRAM"没有什么关系了
}
main()
{char *p="PROGRAM";
fun(p);//调用的时候把p的值赋给形参s,即p和s都指向字符串"PROGRAM"
printf("%s\n",p);//所以输出的时候仍然输出的是PROGRAM
2.
#include <stdio.h>
void fun(int *s)
{
static int j=0;
do s[j] += s[ j+1]; while(++j<2);
}
main()
{
int i, a[10]={1,2,3,4,5};
for( i=1; i<3; i++ ) fun( a );
for( i=1; i<5; i++ ) printf("%d",a[i]);
printf("\n");
}
分析过程:
for(k=1;k<3;k++)循环两次,第一次进入fun时,a[10]={1,2,3,4,5};j=0,
do while循环两次,第一次s[0]+=s[0+1];所以a[10]={3,2,3,4,5};
第二次s[1]+=s[1+1];所以a[10]={3,5,3,4,5};然后退出fun函数回到for(k=1;k<3;k++)进行第二次循环,第二次进入fun时,由于j是static变量,所以值仍然为第一次退出fun时的值,即j=2,因为dowhile循环只能进入一次,即s[2]+=s[2+1];所以a[10]={3,5,7,4,5};退出fun回到main函数中执行
3.题目
代码:
#include <string.h>
#include <stdio.h>
void fun(char t[])
{
char c;
int i,j;
/*************found**************/
for(i=strlen(t)-1;i>0;i--)
for(j=0;j<i;j++)
/*************found**************/
if(t[j]>t[j+1])//升序
{
c= t[j];
t[j]=t[j+1];
t[j+1]=c;
}
}
void main()
{
char s[81];
printf("\nPlease enter a character string :");
gets(s);
printf("\n\nBefore sorting :\n %s",s);
fun(s);
printf("\nAfter sorting decendingly:\n %s",s);
}
结果:
4.题目
代码
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(char *ss)
{
int i;
for(i=0;ss[i]!='\0';i++){
if(i%2==1&&ss[i]>='a'&&ss[i]<='z'){
//转化为大写字母
ss[i]=ss[i]-32;//利用ASSCI就可以将小写转化为大写
}
}
}
void main()
{
FILE *wf;
char tt[81],s[81]="abc4Efg";
system("CLS");
printf("\nPlease enter an string within 80 characters:\n");
gets(tt);
printf("\n\nAfter changing, the string\n %s",tt);
fun(tt);
printf("\nbecomes\n %s\n",tt);
/******************************/
wf=fopen("out.dat","w");
fun(s);
fprintf (wf,"%s",s);
fclose(wf);
/*****************************/
}
结果