实验10指针
if(num) {printf("%d\n",num); for(i=0;i<num;i++) printf("%d",sc[i]);} else {printf("%s is not substring!\n",substr);} } int count(char *str,char *substr,int c[]) {int i,j,k,num=0; for(i=0;str[i]!='\0';i++) {if(str[i]==substr[ 0 ]) c[num]=i; i for(j=i,k=0; substr[k]==str[j]; k++,j++) substr[k]=str[j]; if(substr[k+1]=='\0') {num++;break;} } return(num); }
1、编写一个程序,接受用户输入的一行字符 “Tomorrow is 2004/10/1”,以回车键结束, 分别统计其中的大写字母、小写字母、空格、数 字和其它字符的个数。请在空白处完善程序, #include<stdio.h> main() {int n1=0,n2=0,n3=0,n4=0,n5=0,i=0; char *p,str[80]; printf("请输入一行字符:"); while((str[i]=getchar())!='\n') i++; p=str[i]; p=str;
#include <stdio.h> void merge(int *,int,int *,int,int *); main() {static int a[]={1,3,5,7},b[]={0,2,4,6,8},c[10]; int i; merge(a,4,b,5,c); for(i=0;i<9;i++) printf("%4d",*(c+i)); printf("\n"); }
else n5++; p - -ntf("大写字母数:%d 小写字母数:%d 空格数: %d 数字数:%d 其它数:%d\n", n1,n2,n3n,n4,n5);}
2)从键盘上输入十个字符串,从中求出最 长的一个字符串,并将该串及其长度送 入MYFB1.OUT中。 #include <stdio.h> main() { int i,maxlen,len; char inline[10][100],maxline[100]; FILE *fp; if ((fp==fopen("myfb1.out","w"))==NULL) exit(1); for(i=0;i<10;i++) {gets(inline[i]); fprintf(fp,"%s\n",inline[i]);}
3) 以下程序中merge函数将两个已按升序存 放在数组A,B中的数列合并为一个升序 数列存放到C数组中。改正下面程序的错误, 给源程序命名为s11_3.c。 算法提示:先将数组A中的各个元素依次拷 贝到数组C中。然后,依次从数组B中 取一个元素,按其值的大小插入到数组C中 (保持C中的数据按升序排序)。
maxlen=0; for(i=0;i<10;i++) { strlenth(inline[i],len); if (len>maxlen) strcpy(maxline,inline[i]); maxlen=len; fprintf(fp,"max string is:%s\n maxlen=%d\n",maxline,maxlen); fclose(fp);} strlenth(char p,int len) { len=0; while(p[len]!='\0') ++len; }
while( * p!= '\n') { /*判断统计大写字母、小写字母、 空格、数字和其它字符的个数*/ if(*p>='A' && *p<='Z') n1++;
else if(*p>='a' && *p<='z') n2++;
else if(*p==' ') n3++;
else if(*p>='0' && *p<='9') n4++;
2) 下面程序的功能是统计子串在字符串(母 串)中出现时的次数,并且记录子串在母 串中每一次出现的开始位置。 #include <stdio.h> main() {char str[80],substr[80]; int i,num=0,sc[80]; gets(str[80]); gets(substr[80]); num=count(str,substr,sc);
p=&a[0][0]; move(p); printf("output:\n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%4d",a[i][j]); printf("\n"); } }
2) 以下程序对一个数据序列,求其中所 有素数之和,将这些素数移到序列前面, 并保持各素数的相对顺序不变。 #include "stdio.h" #include "math.h" int prime(int x) {int k=sqrt(x); for(;k>=2;k--) if(x%k==0) return 0; return 1; }
int check(char *s) {int left,right; left=0,right=0; while ( * s!='\0') {if (*s=='(') left++; if (*s==')') right++; s++; } if (left < right) return(left-right); > else if (left > right) return(right-left); < return(0); }
3) 用指针处理写一函数,将一个3×3的整数矩阵 转置。在主函数中用scanf函数输入以下矩阵 元素: 2 4 6 8 10 12 14 16 18 将数组的起始地址作为函数实参,在执行函数的 过程中实现矩阵转置,函数调用结束后在主函 数中输出已转置的矩阵。 main() {int a[3][3],*p,i,j; printf("input:\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]);
4、本程序中函数check检查给定的字符串s中左圆 括号与右圆括号的个数是否匹配,若两者个数匹 配则函数返回值为0,若左括号数大于右括号数 则返回两者差值的负值,否则返回两者差值的正 值。 #include <stdio.h> main() {char a[100]; int i; strcpy(a,"(((a+b)-c)*d)-e") a="(((a+b)-c)*d)-e"; i=check(a); printf("a=%s i=%d\n",a,i); }
printf("The scores of No. %d are:\n",m); p=search(score,m); for(i=0;i<4;i++) printf("%5.2f\t", * ( p+i ) ); } float *search(float (*pointer)[4],int n) { float *pt; pt=* ( pointer+n ) ; return (pt); }
void merge(int *a,int ma,int *b,int mb,int * c) {int ib=0,ic=0,i,j; for(ic=0;ic<ma;ic++ ) c[ic]=a[ic]; ic++; --; for(ib=0;ib<mb;ib++) {if(b[ib]>c[ic]) c[ ++ic ]=b[ib]; ic++ else {for(i=0;i<=ic;i++) if(b[ib]<c[i]) break; for(j=ic;j >= i;j--) c[j+1]=c[j]; <= c[i]=b[ib];ic++; }} }
for(k=0;k<N;k++,rp++) if(prime(*rp)) { /*该素数累加,并将该素数移到序列前面*/ sum+=*(arr+k); t=*rp; *rp=*lp; *lp=t; lp++; } for(rp=arr;rp<lp;rp++) printf(" %d",*rp); printf(" %d\n",sum); for(;rp<arr+N;rp++) printf(" %d",*rp); putchar('\n'); }