/*下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的 max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据*/ #include <stdio.h> void findByPoint(int *, int, int *, int *); /*其实是老师偷懒,应该是(int *a,int n,int *max,int *min)*/ void find(int *a, int n, int max, int min); int main(void) { int max1=0, min1=0, a[]={5,3,7,9,2,0,4,1,6,8}; findByPoint(a,10,&max1,&min1); /*指针变量a,max,min,此处max1和min1之前不是加"*", &max1是地址*/ printf("数组a最大和最小元素下标是%d,%d ", max1, min1); int max2=0, min2=0,b[]={3,4,71,9,2,7,4,2,6,90}; find(b,10,max2,min2); /*由于在最开始定义的只是普通的数值,所以max2和min2之前不用加"&"*/ printf("数组b最大和最小元素下标是%d,%d ", max2, min2); return 0; } void findByPoint(int *a, int n, int *max, int *min) { int i; *max=*min=0; for (i = 1; i < n; i++) { if (a[i] > a [*max])/*求最大值*/ *max=i; if (a[i] < a [*min])/*求最小值*/ *min=i; } } void find(int *a, int n, int max, int min) { int i; for (i = 1; i < n; i++) { if (a[i] > a [max])/*求最大值*/ max=i; if (a[i] < a [min])/*求最小值*/ min=i; } printf("数组b最大和最小元素下标是%d,%d ", max, min); }
/*输入一行字符,要求用自定义的函数void f(char *line)统计 和输出字符串中数字字符、英文字符和其他字符的个数*/ #include <stdio.h> #include <string.h> void count(char s[],int *pdight,int *pletter,int *pother) /*自定义函数,指针变量是dight,letter,other*/ { int n; int i; n=strlen(s); for(i=0;i<n;i++) /*循环累加求字符数量*/ { if(s[i]>=65&&s[i]<=122) (*pletter)++; else if(s[i]>=48&&s[i]<=57) (*pdight)++; else (*pother)++; } } int main() { printf("请输入一行字符:"); char s[100]; int dight=0; int letter=0; int other=0; gets(s); count(s,&dight,&letter,&other); /*&.....是地址*/ printf("数字字符有 %d个,英文字母有 %d个,其它字符有 %d个 ",dight,letter,other); return 0; }
/*编程判断输入的一串字符是否为“回文”。所谓“回文”,是指顺读和倒读都一样的字符串。 如“XYZYX”和“xyzzyx”都是“回文”。要求使用指针变量判断字符串是否是回文。*/ #include<stdio.h> #include<string.h> void main() { char s[40]; char *p,*q;/*指针变量p,q*/ int len,flag; gets(s);/*从输入得到一个字符串,遇回车结束,允许带空格*/ len =strlen(s);/*strlen(s)计算的是数组s[]中字符串的长度*/ p=s;/*指向s头部*/ q=s+len-1;/*指向s尾部*/ flag=1; while(p<q)/*当p地址小于q地址时,循环执行括号内的语句*/ { if(*p==*q){p++,q--;}/*判断首尾两个字符是否相等,如果相等,p地址加1,q地址减1*/ else{flag=0;break;} } if(flag)printf("YES "); else printf("No "); }