第五章 习题课 电子信息与计算机科学系 曾庆尚
#include <stdio.h> void main() { char st[80],*p=st,tmp; printf("请输入一个字符串:\n"); gets(p); printf("您输入的字符串是:\n"); printf("%s\n",p); while(*p!='\0') { if(*p>='A'&&*p<='Z') tmp=155-*p; else if(*p>='a'&&*p<='z') tmp=219-*p; else tmp=*p; *p=tmp; p++; } *p='\0'; p=st; printf("转换后的字符串是:\n");
#include <stdio.h> void main() { float mark,max,min,aver=0.0,sum=0.0; int i; for(i=1;i<=10;i++) { printf("输入第%d位评委的打分\n",i); scanf("%f",&mark); if(i==1){max=mark; ;} else if(mark<min) ; else if(mark>max) ; ; } aver=(sum-max-min)/8; printf("the average score is %f\n",aver); P121 3 min=mark min=mark max=mark sum+=mark
P180 四:1 #include <stdio.h> void main() { char ch[7]="65ab21"; int i,s=0; for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf("%d\n",s); } 运行结果: 6
#include <stdio.h> void main() { char a[]="street",b[]="string"; char *ptr1=a,*ptr2=b; int k; for(k=0;k<7;k++) if(*(ptr1+k)==*(ptr2+k)) printf("%c",*(ptr1+k)); } P180 四:2 运行结果: str
P180 四:3 #include <stdio.h> void main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++) k+=*(*(p+i)+j); printf("%d\n",k); } 运行结果: 60
P181 四:4 运行结果: bcdefga cdefgab defgabc #include <stdio.h> void main() { char a[8],temp; int i,j; for(i=0;i<7;i++) a[i]='a'+i; for(i=0;i<3;i++) { temp=a[0]; for(j=1;j<7;j++) a[j-1]=a[j]; a[6]=temp; a[7]='\0'; printf("%s\n",a); } 运行结果: bcdefga cdefgab defgabc
P181 四:5 运行结果: a1e2 #include <stdio.h> void main() { int i=0,k,ch; int num[5]={0}; char alpha[]={'a','e','i','o','u'},in[80]; gets(in); while(in[i]) { for(k=0;k<5;k++) if(in[i]==*(alpha+k)) { num[k]++;break; } i++; } for(k=0;k<5;k++) if(num[k])printf("%c%d",alpha[k],num[k]); printf("\n"); 运行结果: a1e2
P182 五:1 #include <stdio.h> . #include<math.h> void main() { float a[10],s,d,x; int i; for(i=0;i<10;i++) ; ; for(i=0;i<10;i++) s+=a[i]; s/=10; d=fabs(a[0]-s); ; for(i=0;i<10;i++) if(fabs(a[i]-s)<d) { d= ; x=a[i]; } printf("%f",x); #include<math.h> scanf("%f",&a[i]) s=0 x=a[0] fabs(a[i]-s)
P183 五:3 #include <stdio.h> #include<string.h> void main() { char b[61]; int i; gets(b); for(i=1; ; i++) if(b[i-1]==' '&&b[i]==' ') { (b+i-1,b+i);i--;} ; } 输入一个字符串(串长不超过60),将字符串中连续的空格符只保留一个。如输入字符串为“I am a student.”则输出字符串为“I am a student.” b[i]!='\0' strcpy puts(b)
P183 五:4 #include <stdio.h> void main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p; ; for(;p<a[0]+12;p++) { if((p-a[0])%4==0) printf("\n"); printf("%d,", ); } 下面程序是用指针变量输出二维数组元素的值,请填写缺少的语句。 P=&a[0][0] p=a[0] *p
P183 六:1 #include <stdio.h> void main() { int i=0,a[10],t; printf("Enter the 10 number=\n"); for(i=0; i<10; i++) scanf("%d",&a[i]); for(i=0;i<5;i++) { t=a[i];a[i]=a[9-i];a[9-i]=t;} printf("%d ",a[i]); printf("\n"); } 编程序,输入10个整数存入一维数组,按逆序重新存放后再输出。
编程序,将一维数组中元素向右循环移N次。要求使用下标法和指针法两种方法来实现。 P183 六:2 #include <stdio.h> void main() { int i, j, t, n, a[11]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for(i=0;i<11;i++) printf("%d ", a[i]); printf("\n"); printf("Enter the Move n=?"); scanf("%d", &n); for(i=1; i<=n; i++) t=a[10]; for(j=9;j>=0;j--) a[j+1]=a[j]; a[0]=t; } for(i=0; i<=10; i++) 编程序,将一维数组中元素向右循环移N次。要求使用下标法和指针法两种方法来实现。 下标法:
编程序,将一维数组中元素向右循环移N次。要求使用下标法和指针法两种方法来实现。 P183 六:2 #include <stdio.h> void main() { int i,t, n, a[11]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},*p=a; for(;p<a+11;p++) printf("%d ", *p); printf("\n"); printf("Enter the Move n=?"); scanf("%d", &n); for(i=1; i<=n; i++) { p=a+10; t=*p; for(;p>a;p--) *p=*(p-1); *p=t; } for(p=a;p<a+11;p++) 编程序,将一维数组中元素向右循环移N次。要求使用下标法和指针法两种方法来实现。 指针法:
P184 六:4 #include <stdio.h> for(i=0; i<N-1; i++) #include <stdlib.h> #define N 50 main() { int a[N], i, j,p,t; for(i=0; i<N; i++) a[i]=rand()%90+10; for(j=0;j<i;j++) if(a[i]==a[j]) { i--; break; } for(i=0; i<N-1; i++) { p=i; for(j=i+1; j<N; j++) if(a[j]>a[p]) p=j; t=a[p]; a[p]=a[i]; a[i]=t; } for(i=0; i<N; i++) printf("%d ", a[i]); if(i%10==9) printf("\n");
P230 四:4 运行结果: (3,6) #include<stdio.h> int f(int n) { static int k,s=0; n--; for(k=n;k>0;k--) s+=k; return s; } void main() int k; k=f(3); printf("(%d,%d)",k,f(k)); 运行结果: (3,6)