70051 找最大值并交换
输入一个正整数 repeat (0 输入一个正整数 n (1 输入 3 (repeat=3) 5 (n=5) 4 3 5 5 2 4 (n=4) 1 5 6 7 5 (n=5) 5 4 3 2 1 输出 max = 5, index = 3 4 3 5 2 5 max = 7, index = 3 1 5 6 7 max = 5, index = 0 1 4 3 2 5 #include int main( ) { int i, index, n, temp; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); index=0; for(i=1;i if(a[index]<=a[i]) index=i; } temp=a[index]; a[index]=a[n-1]; a[n-1]=temp; printf("max = %d, index = %d\n", a[n-1],index); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } } 70052 统计字符出现次数 输入一个正整数 repeat (0 输入一个以回车符结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数。 输入输出示例:括号内为说明 输入: 2 (repeat=2) programming (字符串"programming") m (字符'm') 1234 (字符串"1234") a (字符'a') 输出: count = 2 ('m'在"programming"中出现2次) count = 0 ('a'在"1234"中没有出现过) #include "stdio.h" #define MAXLEN 80 int main(void) { char cc, ch; char str[MAXLEN]; int i,count; int repeat, ri; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = '\0'; cc = getchar(); getchar(); count=0; for(i=0;str[i] != 0;i++){ if(str[i]==cc) c ount++; } printf("count = %d\n", count); } } 10008 求1~100中能被6整除的所有整数的和 #include int main(void) { int i, sum = 0; for(i=1;i<=100;i++){ if(i%6==0) sum+=i; } printf("%d", sum); return 0; } 20014 计算三门课程的平均成绩 程序填空,不要改变与输入输出有关的语句。 已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。 输入输出示例: math = 87, eng = 72, comp = 93, average = 84 #include int main(void) { int math, eng, comp, average; math = 87;eng = 72;comp = 93; /* 若自己增加输入语句,程序就通不过*/ average=(math+eng+comp)/3; printf("math = %d, eng = %d, comp = %d, average = %d\n", math, eng, comp, average); } 20016 计算x的平方 假设 x 的值为3,计算 x 的平方 y,并分别以"y = x * x"和"x * x = y"的形式输出 x 和 y 的值。 输入输出示例: 9 = 3 * 3 3 * 3 = 9 #include int main(void) { int y; int x=3; y=x*x; printf("%d = %d * %d\n",y,x,x); printf("%d * %d = %d",x,x,y); } 20021 计算分段函数的值 输入一个正整数repeat (0 输入 x,计算并输出下列分段函数 f(x) 的值(保留1位小数)。 当 x 不等于0时,y = f(x) = 1/x,当 x 等于0时,y = f(x) = 0。 输入输出示例:括号内是说明 输入 2 (repeat=2) 10 (x=10) 0 (x=0) 输出 f(10.00) = 0.1 f(0.00) = 0.0 #include int main(void) { int repeat, ri; double x, y; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf", &x); if(x!=0) y=1.0/x; else y=0; printf("f(%.2f) = %.1f\n", x, y); } } 20022 计算摄氏温度 输入华氏温度,输出对应的摄氏温度。计算公式:c = 5*(f-32)/9,式中:c表示摄氏温度,f表示华氏温度。 输入输出示例:括号内为说明 输入 150 (fahr=150) 输出 celsius = 65 #include int main(void) { int celsius, fahr; scanf("%d",&fahr); celsius=5*(fahr-32)/9; printf("celsius = %d\n", celsius); } 80011 循环移动 输入两个正整数 n 和 m (1 要求定义并调用函数 mov(x,n,m) 实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。 输入输出示例:括号内为说明 输入: 5 3 (n=5,m=3) 1 2 3 4 5 (5个整数) 输出: After move: 3 4 5 1 2 #include void mov(int *x, int n, int m); int main(void) { int i, m, n; int a[80]; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) scanf("%d", &a[i]); void mov(int *x,int n,int m); mov(a,n,m); printf("After move: "); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } void mov(int a[], int n, int m) { int y,i,j; for(i=1;i<=m;i++){ /* 循环移动m次*/ y=a[n-1]; for(j=n-1;j>0;j--) a[j]=a[j-1]; a[0]=y; } } move方法参考2: void mov(int *x,int n,int m){ int i,j,t; for(i=0;i t=x[j]; x[j]=x[j-1]; x[j-1]=t; } } } 80012 在数组中查找指定元素 输入一个正整数repeat (0 输入一个正整数 n (1 要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数形参 list 的类型是整型指针,形参n和x的类型是int。 输入输出示例:括号内为说明 输入 2 (repeat=2) 3 (n=3) 1 2 -6 2 (x=2) 5 (n=5) 1 2 2 5 4 0 (x=0) 输出 index = 1 Not found #include int main(void) { int i, index, n, res, x; int repeat, ri; int a[10]; int search(int list[], int n, int x); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &x); int search(int *list,int n,int x); res=search(a,n,x); if(res != -1) printf("index = %d\n", res); else printf("Not found\n"); } } int search(int *list,int n,int x){ int i,t; for(i=0;i if(list[i]==x){ t=i; break; } else t=-1; } return t; } 80013 使用函数的选择法排序 输入一个正整数 repeat (0 输入一个正整数 n (1 要求定义并调用函数 sort(a,n),它的功能是采用选择排序算法,将数组 a 的前 n 个元素按从小到大的顺序排序,函数形参 a 的类型是整型指针,形参n 的类型是int,函数的类型是void。 输入输出示例:括号内为说明 输入 3 (repeat=3) 4 (n=4) 5 1 7 6 3 (n=3) 1 2 3 5 (n=5) 5 4 3 2 1 输出 After sorted: 1 5 6 7 After sorted: 1 2 3 After sorted: 1 2 3 4 5 #include void sort(int a[],int n); int main(void) { int i, n; int repeat, ri; int a[10]; void sort(int *p,int n); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); sort(a,n); printf("After sorted: "); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } } void sort(int *p,int n) { int k,i,index,t; for(k=0;k index=k; for(i=k+1;i if(p[i] index=i; t=p[index]; p[index]=p[k]; p[k]=t; } } 80014 报数 输入两个正整数 n 和 m( (1 提示:将每个人的编号存入数组,从第一个人开始报数,输出报数 m 的人的编号,并将该编号清除为0,重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。 输出使用语句:printf("No%d: %d\n", no, *p); 输入输出示例:括号内为说明 输入: 5 (n个人报数,n=5) 3 (报数m=3) 输出: No1: 3 (第1个退出圈子的人编号是3) No2: 1 (第2个退出圈子的人编号是1) No3: 5 (第3个退出圈子的人编号是5) No4: 2 (第4个退出圈子的人编号是2) Last No is: 4 (最后一个人的编号是4) /* 提示:这是一个不断循环的过程; 终止条件:报数总个数为n-1; 报数过程中,嵌套一个循环:每次计数到m,退出当前小循环 在循环时,注意当前的数组下标k==n时,k=0, 保证circle 报数 */ #include main() { int m, n; int i, k=0; /* 下标*/ int totalNumber=0; /* 报数总个数*/ int count=0; /* 当前轮报数个数*/ int num[50]; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) num[i] = i + 1; while (1) { if (totalNumber == n-1) break; while (count { if (num[k]) { count++; if (totalNumber == n-1) break; else if (count==m) { printf("No%d: %d\n", ++totalNumber, num[k]); break; } } k++; if (k == n) k=0 ; } num[k]=0; count=0; /* 当前轮报数个数从新计数*/ k++; if (k == n) k=0 ; } while (!num[k]) { k++; if (k == n) k=0 ; } printf("Last No is: %d\n", num[k]); return 0; } 参考2: #include int main(void) { int count, i, m, n, no; int num[50]; int *p; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) num[i] = i + 1; p = num; for(no=1;no count=0; for(;;) { if(*p!=0)count++; if(count==m){ printf("No%d: %d\n", no, *p); *p=0; break; } p=p+1; if(p-1==&num[n-1])p=num; } } p = num; while(*p == 0) p++; printf("Last No is: %d\n", *p); } 参考3: #include int main(void) { int count, i, m, n, no; int num[50]; int *p; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) num[i] = i + 1; p = num; int k; no=i=k=0; while(no if(*(p+i)!=0) k++; if(k==m){ printf("No%d: %d\n",no+1,*(p+i)); *(p+i)=0; k=0; no++; } i++; if(i==n) i=0; } p = num; while(*p == 0) p++; printf("Last No is: %d\n", *p); } 夏4周 10012 函数程序设计 编写一个函数,利用参数传入一个3位数number,找出101~number之间所有满足下列两个条件的数: 它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。请同时编写主函数。 例:(括号内为说明) 输入 3 (repeat=3) 150 500 999 输出 count=2 count=6 count=8 #include #include int search(int n); int main(void) { int number,ri,repeat; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ do{ scanf("%d",&number); }while(number<101||number>999); printf("count=%d\n",search(number)); } return 0; } int search(int n) { int i,j,a1,a2,a3, flag=0; for (i = 101; i <= n; i++) { for (j = 1; j <= i; j++) { if (j * j == i) { a1 = i % 10; a2 = i / 10 % 10; a3 = i /100 % 10; if ( (a1==a2)||(a1==a3) || (a2==a3) ) { flag += 1; break; } } } } return flag; } 10024 计算最长的字符串长度 编写一个函数int max_len(char *s[ ], int n),用于计算有n(n<10)个元素的指针数组s中最长的字符串的长度,并编写主程序验证。 例:(括号内为说明) 输入 4 (n=4) blue yellow red green 输出 length=6 #include #include int max_len(char *s[],int n); void main() { int i,n; char s[10][80],*p[10]; scanf("%d",&n); for(i=0;i scanf("%s",s[i]); p[i]=s[i]; } printf("length=%d\n",max_len(p,n)); } int max_len(char *s[],int n) { int max,i; max=strlen(s[0]); for(i=1;i if(max max=strlen(s[i]); return max; } 10025 字符串的连接 用字符指针实现函数str_cat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址,并编写主程序。 例:(括号内为说明) 输入 abc def 输出 abcdef #include char *str_cat(char *s,char *t); void main() { char s[80],t[80]; gets(s); gets(t); puts(str_cat(s,t)); } char *str_cat(char *s,char *t) { char *p; p=s; while (*s!='\0') s++; while (*t!='\0') { *s =*t; s++, t++; } *s='\0'; return p; } /*---------*/ /* 在函数str_cat()具体实现时,若用数组下标实现可参考如下*/ char *str_cat(char *s,char *t) { int i=0,j=0; while (s[i]!='\0') i++; while (t[j]!='\0') { s[i] =t[j]; i++, j++; } s[i]='\0'; return s; } 40017 求2/1+3/2+5/3+8/5+... 输入一个正整数 repeat (0 输入一个正整数 n,输出 2/1+3/2+5/3+8/5+……前n项之和,保留2位小数。(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子) 输入输出示例:括号内是说明 输入 3 (repeat=3) 1 (n=1) 5 (n=5) 20 (n=20) 输出 sum = 2.00 (第1项是2.00) sum = 8.39 (前5项的和是8.39) sum = 32.66 (前20项的和是32.66) #include int main(void) { int i, n; int repeat, ri; double denominator, numerator, sum, temp; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; denominator=1; numerator=2; for(i=1;i<=n;i++){ sum += numerator/denominator; temp = denominator; /* 为求下一项分子,保留当前项分母*/ denominator=numerator; numerator=numerator+temp; } printf("sum = %.2f\n",sum); } } 80021 找最大的字符串 输入5个字符串,输出其中最大的字符串。 输入输出示例:括号内为说明 输入: peach pear melon orange berry 输出: Max is: pear #include #include int main(void) { char str[80], max[80]; int i; scanf("%s", str); strcpy(max,str); for(i=1;i<5;i++){ scanf("%s",str); if(strcmp(str,max)>0) strcpy(max,str); } printf("Max is: %s\n", max); } 80022 找最长字符串 输入一个正整数 repeat (0 输入一个正整数 n (1 输入输出示例:括号内为说明 输入: 3 (repeat=3) 5 (n=5) melon peach pear strawberry orange 3 (n=3) pear berry orange 4 (n=4) melon peach pear apple 输出: The longest is: strawberry The longest is: orange The longest is: melon #include #include int main(void) { char sx[80], longest[80]; int i, n; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); scanf("%s", sx); strcpy(longest,sx); for(i=1;i scanf("%s",sx); if(strlen(sx)>strlen(longest)) strcpy(longest,sx); } printf("The longest is: %s\n",longest); } } 80023 使用函数删除字符串中的字符 输入一个正整数 repeat (0 输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。 要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所 有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。 输入输出示例:括号内为说明 输入 3 (repeat=3) happy new year (字符串"happy new year") a (待删除的字符'a') bee (字符串"bee") e (待删除的字符'e') 111211 (字符串"111211") 1 (待删除的字符'1') 输出 result: hppy new yer (字符串"happy new year"中的字符'a'都被删除) result: b (字符串"bee"中的字符'e'都被删除) result: 2 (字符串"111211"中的字符'1'都被删除) #include void main() { char c; char str[80]; int repeat, ri; void delchar(char *str, char c); scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ gets(str); scanf("%c", &c); getchar(); delchar(str,c); printf("result: "); puts(str); } } void delchar(char *str, char c) { int i,j; i = 0, j=0; while (str[i]!='\0') { if (str[i] != c) /* 若当前字符是要被保留的*/ { str[j]=str[i]; i++; j++; } else i++; /* 否则查看下一个元素*/ } str[j]='\0'; } 80024 使用函数实现字符串复制 输入一个正整数 repeat (0 输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,再输出字符串 s。 要求定义并调用函数 strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,函数形参s和t的类型是字符指针,形参m的类型是int,函数类型是void。 输入输出示例:括号内为说明 输入: 3 (repeat=3) happy new year 7 happy 1 new 4 输出: new year (从"happy new year"第7个字符开始组成的新字符串为"new year") happy (从"happy"第1个字符开始组成的新字符串为"happy") error input ("new"的长度小于4) #include #include void main() { char s[80], t[80]; int m; int repeat, ri; void strmcpy(char *s,char *t, int m); scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ gets(t); scanf("%d", &m); getchar(); if(strlen(t) printf("error input"); else{ strmcpy(s,t,m); puts(s); } } } void strmcpy(char *s,char *t,int m) { int i,j; for(i=m-1,j=0;*(t+i)!='\0';i++,j++) *(s+j)=*(t+i); *(s+j)='\0'; } 或者void strmcpy()用数组元素表示 void strmcpy(char s[],char t[],int m) { int i,j; for(i=m-1,j=0;t[i]!='\0';i++,j++) s[j]=t[i];