1.給定程序中,函數(shù)fun的功能是:統(tǒng)計(jì)形參s所指的字符串中數(shù)字字符出現(xiàn)的次數(shù),并存放在形參t所指的變量中,最后在主函數(shù)中輸出。例如,若形參s所指的字符串為"abcdef35adgh3kjsdf7",則輸出結(jié)果為4。
#include <stdio.h>
void fun(char *s, int *t)
{ int i, n;
n=0;
/**********found**********/
for(i=0;s[i]!=0; i++)
/**********found**********/
if(s[i]>='0'&&s[i]<= '9') n++;
/**********found**********/
*t=n;
}
main()
{ char s[80]="abcdef35adgh3kjsdf7";
int t;
printf("\nThe original string is : %s\n",s);
fun(s,&t);
printf("\nThe result is : %d\n",t);
}
void fun (int *a, int *n)
{
int i,j=0;
for(i=1;i<=1000;i++) /*求1到1000之內(nèi)能被7或11整除、但不能同時(shí)被7和11整除的所有整數(shù),并放入數(shù)組a中*/
if((i%7==0||i%11==0)&&i%77!=0)
a[j++]=i;
*n=j;
}
3.編寫(xiě)函數(shù)fun,其功能是:求ss所指字符串中指定字符的個(gè)數(shù),并返回此值。
例如,若輸入字符串123412132,輸入字符為1,則輸出3。
int fun(char *ss, char c)
{
int i=0;
for(;*ss!='\0';ss++)
if(*ss==c)
i++;/*求出ss所指字符串中指定字符的個(gè)數(shù)*/
return i;
}
從字符串中查找指定字符,需要使用循環(huán)判斷結(jié)構(gòu),循環(huán)語(yǔ)句用來(lái)遍歷字符串,循環(huán)條件為字符串沒(méi)有結(jié)束,即當(dāng)前字符不是′\0′,判斷語(yǔ)句用來(lái)判斷當(dāng)前字符是否為指定字符。最后返回指定字符的個(gè)數(shù)。
3
請(qǐng)編寫(xiě)函數(shù)fun,該函數(shù)的功能是:刪除一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù)。
例如,若一維數(shù)組中的數(shù)據(jù)是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
刪除后,數(shù)組中的內(nèi)容應(yīng)該是:
2 3 4 5 6 7 8 9 10。
int fun(int a[], int n)
{
int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i]) /*若該數(shù)與前一個(gè)數(shù)不相同,則要保留*/
a[j++]=a[i];
return j; /*返回不相同數(shù)的個(gè)數(shù)*/
}
該程序的流程是:定義變量i和j,其中j用于控制刪除后剩下的數(shù)在數(shù)組中的下標(biāo),i用于搜索原數(shù)組中的元素。j始終是新數(shù)組中最后一個(gè)元素的下一個(gè)元素的下標(biāo),所以if語(yǔ)句中的條件是a[j-1]!=a[i],其中a[j-1]就是新數(shù)組中的最后一個(gè)元素,若條件成立,則表示出現(xiàn)了不同的值,所以a[i]要保留到新數(shù)組中。注意本題中i和j的初值都要從1開(kāi)始,該算法只能用于數(shù)組已排序的題目中。
找到最大的數(shù)并寫(xiě)出下標(biāo),放在下標(biāo)里。
int fun(int *s,int t,int *k)
{
int i;
*k=0; /*k所指的數(shù)是數(shù)組的下標(biāo)值*/
for(i=0;i<t;i++)
if(s[*k]<s[i]) *k=i; /*找到數(shù)組的最大元素,把該元素的下標(biāo)賦給k所指的數(shù)*/
return s[*k]; /*返回?cái)?shù)組的最大元素*/
}
本題中直接使用指針變量k,使用時(shí)要注意對(duì)k進(jìn)行指針運(yùn)算。程序一開(kāi)始讓k指向數(shù)組中的第一個(gè)元素,即*k=0。
去除最大值,最小值。
double fun(double a[ ] , int n)
{
double sum=0,max,min;int i;
max=min=a[0];
for(i=0;i<n;i++)
{
sum=sum+a[i];
if(max<a[i])max=a[i];
if(min>a[i])min=a[i];
}
sum=sum-max-min;
return(sum/(n-2));
}
設(shè)定三個(gè)變量sum存放合值,max存放最大值,min存放最小值。Max和min都賦為數(shù)組中第一個(gè)元素的值。利用循環(huán)將數(shù)組中元素累加到sum中,并找出最大值和最小值,sum值減去最大值和最小值。函數(shù)返回sum除以元素個(gè)數(shù)-2得平均值。
5請(qǐng)編一個(gè)函數(shù)fun(char *s),該函數(shù)的功能是:把字符串中的內(nèi)容逆置。
例如,字符串中原有的字符串為"abcdefg",則調(diào)用該函數(shù)后,串中的內(nèi)容為"gfedcba"。
void fun(char*s)
{
char ch;
int i,m,n;
i=0;
m=n=strlen(s)-1;
/*將第i個(gè)和倒數(shù)第i個(gè)數(shù)互換,但循環(huán)的次數(shù)為數(shù)組長(zhǎng)度的一半*/
while(i<(n+1)/2)
{
/*使用中間變量叫喚*/
ch=s[i];
s[i]=s[m];
s[m]=ch;
i++; m--;
}
}
將字符串中的內(nèi)容逆置,實(shí)際上就是將第一個(gè)字符和最后一個(gè)字符交換,再將第二個(gè)字符與倒數(shù)第二個(gè)字符交換,依此類推,直到中間的字符為止。因此,長(zhǎng)度為n的字符串需要交換的次數(shù)為n/2。
本程序使用while語(yǔ)句表示每一個(gè)字符,然后將前后對(duì)應(yīng)的字符進(jìn)行交換。
int fun(char *s)
{ int n=0;
char *p;
for(p=s;*p!='\0';p++)
if((*p>='0')&&(*p<='9'))
n++;
return n;
}
要統(tǒng)計(jì)字符串中數(shù)字字符的個(gè)數(shù),首先應(yīng)定義變量n,并初始化為0,然后遍歷字符串,逐個(gè)判斷字符是否為數(shù)字字符,判斷條件為該元素的ASCII碼在字符0和9的ASCII碼之間,若判斷條件成立,則使n的值加1,否則,繼續(xù)判斷下一個(gè)字符,直到字符串結(jié)束。
7.編寫(xiě)函數(shù)fun,其功能是:將ss所指字符串中所有下標(biāo)為奇數(shù)位上的字母轉(zhuǎn)換為大寫(xiě)(若該位置上不是字母,則不轉(zhuǎn)換)。
例如,若輸入"abc4EFg",則應(yīng)輸出"aBc4EFg"。
void fun ( char *ss )
{
int i;
for(i=0;ss[i]!='\0';i++) /*將ss所指字符串中所有下標(biāo)為奇數(shù)位置的字母轉(zhuǎn)換為大寫(xiě)*/
if(i%2==1&&ss[i]>='a'&&ss[i]<='z')
ss[i]=ss[i]-32;
}
將指定字符串中奇數(shù)位置的字母轉(zhuǎn)換為大寫(xiě),首先需要我們判斷奇數(shù)位置,再判斷該位是不是小寫(xiě)字母,如果是小寫(xiě)字母,則將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母。我們知道只要將小寫(xiě)字母減去32即可轉(zhuǎn)成大寫(xiě)字母。
8.請(qǐng)編寫(xiě)一個(gè)函數(shù),用來(lái)刪除字符串中的所有空格。
例如,輸入asd af aa z67,則輸出為asdafaaz67。
void fun (char *str)
{
int i=0;
char *p=str;
while(*p)
{
if(*p!=' ') /*刪除空格*/
{
str[i]=*p;
i++;
}
p++;
}
str[i]='\0'; /*加上結(jié)束符*/
}
本題要求刪除所有空格,即保留除了空格以外的其他所有字符。由于C語(yǔ)言中沒(méi)有直接刪除字符的操作,所以對(duì)不需要?jiǎng)h除的字符采用"保留"的操作。用指針p指向字符串中的每一個(gè)字符,每指向到一個(gè)字符都判斷其是否為空格,若不是空格則保存到str[i]。