基础编程题目集 4
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 //4-1 简单输出整数 2 void PrintN(int N) { 3 int i; 4 for(i=1;i<=N;i++) { 5 printf("%d\n",i); 6 } 7 } 8 9 //4-2 多项式求值 10 double f(int n, double a[], double x) { 11 int i; 12 double num=1; 13 double sum=a[0]; 14 for(i=1;i<=n;i++) { 15 num=num*x; 16 sum=sum+num*a[i]; 17 } 18 return sum; 19 } 20 21 //4-3 简单求和 22 int Sum (int List[], int N) { 23 int i,sunshine=0; 24 for(i=0;i<N;i++) { 25 sunshine+=List[i]; 26 } 27 return sunshine; 28 } 29 30 //4-4 求自定类型元素的平均 31 ElementType Average(ElementType S[], int N) { 32 ElementType average=0; 33 int i; 34 for(i=0;i<N;i++) { 35 average+=S[i]; 36 } 37 average/=N; 38 return average; 39 } 40 41 //4-5 求自定类型元素的最大值 42 ElementType Max( ElementType S[], int N ) { 43 ElementType max=S[0]; 44 int i; 45 if(N>MAXN) { 46 N=MAXN; 47 } 48 for(i=0;i<N;i++) { 49 if(S[i]>max) { 50 max=S[i]; 51 } 52 } 53 return max; 54 } 55 56 //4-6 求单链表结点的阶乘和 57 int FactorialSum(List L) { 58 int i,Num; 59 int Sum=0; 60 while(L!=NULL) { 61 Num=1; 62 for(i=1;i<=L->Data;i++) { 63 Num=Num*i; 64 } 65 Sum=Sum+Num; 66 L=L->Next; 67 } 68 return Sum; 69 } 70 71 //4-7 统计某类完全平方数 72 int IsTheNumber (const int N) { 73 int n,m; 74 n=(int)sqrt(N); 75 m=n*n; 76 if(m==N) { 77 int num[10]={0}; 78 int i; 79 while(m>0) { 80 for(i=0;i<=9;i++) { 81 if(m%10==i) { 82 num[i]+=1; 83 if(num[i]==2) { 84 return 1; 85 } 86 } 87 } 88 m=m/10; 89 } 90 return 0; 91 } 92 return 0; 93 } 94 95 //4-8 简单阶乘计算 96 int Factorial( const int N ) { 97 if(N>0) { 98 int i; 99 int M=1; 100 for(i=2;i<=N;i++) { 101 M=M*i; 102 } 103 return M; 104 } 105 else if(N==0) 106 return 1; 107 else 108 return 0; 109 } 110 111 //4-9 统计个位数字 112 int Count_Digit (const int N, const int D) { 113 int M=0; 114 int S=N; 115 if(N<0) { 116 S=-N; 117 } 118 if(N==0) { 119 if(D==0) { 120 M=1; 121 } 122 else { 123 M=0; 124 } 125 } 126 while(S>0) { 127 if(S%10==D) { 128 M++; 129 } 130 S=S/10; 131 } 132 return M; 133 } 134 135 //4-10 阶乘计算升级版 136 void Print_Factorial ( const int N ) 137 { 138 if(N>0&&N<=12) { 139 int i; 140 long int M=1; 141 for(i=2;i<=N;i++) { 142 M=M*i; 143 } 144 printf("%ld\n",M); 145 } 146 else if(N>12&&N<=1000) { 147 int Num[3001]={0}; 148 int i,j,k,n; 149 k=1; 150 n=0; 151 Num[0]=1; 152 int temp; 153 for(i=2;i<=N;i++) { 154 for(j=0;j<k;j++) { 155 temp=Num[j]*i+n; 156 Num[j]=temp%10; 157 n=temp/10; 158 } 159 while(n!=0) { 160 Num[k]=n%10; 161 k++; 162 n=n/10; 163 } 164 } 165 for(i=k-1;i>=0;i--) { 166 printf("%d",Num[i]); 167 } 168 } 169 else if(N==0) 170 printf("1\n"); 171 else 172 printf("Invalid input\n"); 173 } 174 175 //4-11 求自定类型元素序列的中位数 176 #include <stdio.h> 177 #define MAXN 10 178 typedef float ElementType; 179 180 ElementType Median( ElementType A[], int N ); 181 182 int main () 183 { 184 ElementType A[MAXN]; 185 int N, i; 186 187 scanf("%d", &N); 188 for ( i=0; i<N; i++ ) 189 scanf("%f", &A[i]); 190 printf("%.2f\n", Median(A, N)); 191 192 return 0; 193 } 194 195 void Swap(ElementType *a, ElementType *b) { 196 ElementType temp = *a; 197 *a = *b; 198 *b = temp; 199 } 200 201 ElementType Median3(ElementType A[], int Left, int Right) { 202 int Center = (Left + Right) / 2; 203 if(A[Left]>A[Center]) 204 Swap(&A[Left], &A[Center]); 205 if(A[Left]>A[Right]) 206 Swap(&A[Left], &A[Right]); 207 if(A[Center]>A[Right]) 208 Swap(&A[Center], &A[Right]); 209 Swap(&A[Center], &A[Right-1]); 210 return A[Right-1]; 211 } 212 213 void QSort(ElementType A[], int Left, int Right) { 214 if(Left>=Right) return; 215 ElementType Pivot = Median3(A, Left, Right); 216 int i = Left, j = Right - 1; 217 while(1) { 218 while(A[++i] < Pivot) { } 219 while(A[--j] > Pivot) { } 220 if(i<j) 221 Swap(&A[i], &A[j]); 222 else break; 223 } 224 Swap(&A[i], &A[Right-1]); 225 QSort(A, Left, i-1); 226 QSort(A, i+1, Right); 227 } 228 229 ElementType Median(ElementType A[], int N) { 230 QSort(A, 0, N-1); 231 return A[N/2]; 232 } 233 234 ElementType Median (ElementType A[], int N) { 235 qsort(A, N, sizeof(ElementType), compare); 236 return A[N/2]; 237 } 238 239 //4-12 判断奇偶性 240 int even(int n) 241 { 242 if(n%2==0) { 243 return 1; 244 } 245 return 0; 246 } 247 248 //4-13 折半查找
基础编程题目集 5
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 //5-1 厘米换算英尺英寸 2 #include <stdio.h> 3 int main() { 4 int cm; 5 int foot, inch; 6 scanf("%d", &cm); 7 foot= cm / 30.48; 8 inch= 12 * (cm / 30.48 - foot); 9 printf("%d %d\n", foot, inch); 10 return 0; 11 } 12 13 //5-2 然后是几点 14 #include <stdio.h> 15 int main(void) { 16 int hour, min; 17 int cnt=0, count=0; 18 int a, b; 19 scanf("%d %d", &hour, &min); 20 a=hour%100; 21 b=hour/100; 22 //printf("a=%d b=%d\n",a,b); 23 if(min>0) { 24 if(min+a<60) { 25 a=a+min; 26 } 27 else if(min+a>=60) { 28 while(a+min>=60) { 29 min=min-60; 30 count++; 31 } 32 b=b+count; 33 if(a+min>=0) 34 a=a+min; 35 else { 36 b-=1; 37 a=a+min+60; 38 } 39 } 40 if(a<10&&a>=0) 41 printf("%d0%d\n", b, a); 42 else 43 printf("%d%d\n", b, a); 44 } 45 else if(min<0) { 46 if(min+a>=0) { 47 a=a+min; 48 } 49 else if(a+min<0) { 50 while(a+min<0) { 51 min=min+60; 52 cnt++; 53 } 54 a=a+min; 55 b=b-cnt; 56 } 57 //printf("%d%d\n",b,a); 58 if(a<10&&a>=0) 59 printf("%d0%d\n", b, a); 60 else 61 printf("%d%d\n", b, a); 62 } 63 else if(min==0) { 64 if(a>=0&&a<10) 65 printf("%d0%d\n", b, a); 66 else 67 printf("%d%d\n", b, a); 68 } 69 return 0; 70 } 71 72 //5-3 逆序的三位数 73 #include <stdio.h> 74 #include <math.h> 75 #include <string.h> 76 int main() { 77 int num,num1; 78 int i; 79 int str[3]; 80 scanf("%d",&num); 81 for(i=0;i<3;i++) { 82 num1=num%10; 83 str[i]=num1; 84 num=num/10; 85 } 86 num1=0; 87 for(i=0;i<3;i++) 88 num1+=str[i]*pow(10,2-i); 89 printf("%d",num1); 90 return 0; 91 } 92 93 //5-4 BCD解密 94 #include <stdio.h> 95 int main() { 96 int x; 97 int n, a; 98 scanf("%d", &x); 99 a = x % 16; 100 n = x / 16 * 10 + a; 101 printf("%d", n); 102 return 0; 103 } 104 105 //5-5 表格输出 106 #include <stdio.h> 107 int main(void) { 108 printf("------------------------------------\n"); 109 printf("Province Area(km2) Pop.(10K)\n"); 110 printf("------------------------------------\n"); 111 printf("Anhui 139600.00 6461.00\n"); 112 printf("Beijing 16410.54 1180.70\n"); 113 printf("Chongqing 82400.00 3144.23\n"); 114 printf("Shanghai 6340.50 1360.26\n"); 115 printf("Zhejiang 101800.00 4894.00\n"); 116 printf("------------------------------------\n"); 117 return 0; 118 } 119 120 //5-6 混合类型数据格式化输入 121 #include <stdio.h> 122 int main() { 123 int a; 124 double b, c; 125 char d; 126 scanf("%lf %d %c %lf", &b, &a, &d, &c); 127 printf("%c %d %.2lf %.2lf", d, a, b, c); 128 return 0; 129 } 130 131 //5-7 12-24小时制 132 #include <stdio.h> 133 int main() { 134 char c; 135 int a, b; 136 scanf("%d%c%d", &a, &c, &b); 137 if (a >= 12) 138 { 139 140 if (a >= 13) 141 { 142 if (a == 24) 143 printf("0:%d AM\n", b); 144 else 145 { 146 a = a - 12; 147 printf("%d:%d PM\n", a, b); 148 } 149 } 150 else 151 printf("%d:%d PM\n", a, b); 152 } 153 else 154 printf("%d:%d AM\n", a, b); 155 return 0; 156 } 157 //5-8 超速判断 158 #include <stdio.h> 159 int main() { 160 int a; 161 scanf("%d", &a); 162 if(a>=0&&a<=500) { 163 if(a>60) { 164 printf("Speed: %d - Speeding", a); 165 } 166 else { 167 printf("Speed: %d - OK", a); 168 } 169 } 170 } 171 //5-9 用天平找小球 172 #include <stdio.h> 173 int main() 174 { 175 unsigned int a, b, c; 176 scanf("%d%d%d", &a, &b, &c); 177 if (a == b) 178 printf("C\n"); 179 else if (a == c) 180 printf("B\n"); 181 else if (b == c) 182 printf("A\n"); 183 return 0; 184 } 185 186 //5-10 计算工资 187 #include<stdio.h> 188 int main() { 189 unsigned int year, time; 190 double money = 0; 191 scanf("%d%d", &year, &time); 192 if (year >= 5) { 193 if (time < 40) { 194 money = 50 * time; 195 } 196 else { 197 money = 2000 + 50 * 1.5*(time - 40); 198 } 199 } 200 else { 201 if (time < 40) { 202 money = 30 * time; 203 } 204 else { 205 money = 1200 + 30 * 1.5*(time - 40); 206 } 207 } 208 printf("%.2f", money); 209 return 0; 210 } 211 212 //5-11 分段计算居民水费 213 #include <stdio.h> 214 int main() { 215 double x, y; 216 scanf("%lf", &x); 217 if(x <= 15) 218 y = (4*x)/3; 219 else 220 y =2.5*x - 17.5; 221 printf("%.2f\n", y); 222 return 0; 223 } 224 225 //5-12 两个数的简单计算器 226 227 #include <iostream> 228 using namespace std; 229 int main() { 230 int p1,p2,q; 231 char m; 232 cin>>p1>>m>>p2; 233 switch(m) { 234 case'+': { q=p1+p2; cout<<q<<endl; break; } 235 case'-': { q=p1-p2; cout<<q<<endl; break; } 236 case'*': { q=p1*p2; cout<<q<<endl; break; } 237 case'/': { q=p1/p2; cout<<q<<endl; break; } 238 case'%': { q=p1%p2; cout<<q<<endl; break; } 239 default: cout<<"ERROR"<<endl; 240 } 241 system("pause"); 242 return 0; 243 } 244 245 //5-13 日K蜡烛图 246 #include <stdio.h> 247 #include <string.h> 248 int main() { 249 int num1,num2,sum; 250 char y; 251 scanf("%d %c %d",&num1,&y,&num2); 252 if(y=='+'||y=='-'||y=='*'||y=='/'||y=='%') { 253 if(y=='+') printf("%d",num1+num2); 254 if(y=='-') printf("%d",num1-num2); 255 if(y=='*') printf("%d",num1*num2); 256 if(y=='/') { 257 if(num2!=0) printf("%d",num1/num2); 258 } 259 if(y=='%') 260 if(num2!=0) printf("%d",num1%num2); 261 } 262 else 263 printf("ERROR"); 264 return 0; 265 } 266 267 //5-14 求整数段和 268 #include <stdio.h> 269 int main() { 270 int a, b, i, cot=0, sum=0; 271 scanf("%d %d", &a, &b); 272 for(i=a;i<=b;i++) { 273 printf("%5d", i); 274 cot++; 275 if(cot%5==0 && i!=b) printf("\n"); 276 } 277 printf("\n"); 278 for(i=a; i<=b; i++) 279 sum+=i; 280 printf("Sum = %d", sum); 281 return 0; 282 } 283 284 //5-15 计算圆周率 285 #include <stdio.h> 286 int main() { 287 double x; 288 double i = 2, d = 3; 289 double temp=1,n = 1, n1 = 2, sum = 1; 290 scanf("%lf", &x); 291 while (temp >= x) { 292 temp = n / d; 293 sum += temp; 294 n = n*n1; 295 n1++; 296 d = d*(2 * i + 1); 297 i++; 298 } 299 printf("%.6f\n", sum*2); 300 return 0; 301 } 302 303 //5-16 求符合给定条件的整数集 304 #include <stdio.h> 305 int main() { 306 int n, i; 307 scanf("%d", &n); 308 printf("%d%d%d %d%d%d %d%d%d %d%d%d %d%d%d %d%d%d\n", n, n+1, n+2, n, n+1, n+3, n, n+2, n+1, n, n+2, n+3, n, n+3, n+1, n, n+3, n+2); 309 printf("%d%d%d %d%d%d %d%d%d %d%d%d %d%d%d %d%d%d\n", n+1, n, n+2, n+1, n, n+3, n+1, n+2, n, n+1, n+2, n+3, n+1, n+3, n, n+1, n+3, n+2); 310 printf("%d%d%d %d%d%d %d%d%d %d%d%d %d%d%d %d%d%d\n", n+2, n, n+1, n+2, n, n+3, n+2, n+1, n, n+2, n+1, n+3, n+2, n+3, n, n+2, n+3, n+1); 311 printf("%d%d%d %d%d%d %d%d%d %d%d%d %d%d%d %d%d%d\n", n+3, n, n+1, n+3, n, n+2, n+3, n+1, n, n+3, n+1, n+2, n+3, n+2, n, n+3, n+2, n+1); 312 return 0; 313 } 314 315 //5-17 爬动的蠕虫 316 #include <stdio.h> 317 int main() { 318 int n, u, d; 319 int time = 0, distance = 0; 320 scanf("%d%d%d", &n, &u, &d); 321 do { 322 time++; 323 if (time % 2 != 0) { 324 distance += u; 325 } 326 else { 327 distance -= d; 328 } 329 } while (distance < n); 330 printf("%d\n", time); 331 return 0; 332 } 333 334 //5-18 二分法求多项式单根 335 #include <stdio.h> 336 float f(float x); 337 float a3, a2, a1, a0; 338 int main() { 339 float a, b; 340 scanf("%f %f %f %f", &a3, &a2, &a1, &a0); 341 scanf("%f %f", &a, &b); 342 float left, mid, right; 343 left = a; 344 right = b; 345 while (left <= right - 0.001 && f(left) * f(right) <= 0) 346 { 347 if (f(left) == 0) { 348 printf("%.2f", &left); 349 return 0; 350 } 351 if (f(right) == 0) 352 { 353 printf("%.2f", right); 354 return 0; 355 } 356 mid = (left + right) / 2; 357 if (f(mid) * f(left) > 0) { 358 left = mid; 359 } 360 else { 361 right = mid; 362 } 363 } 364 printf("%.2f", mid); 365 return 0; 366 } 367 float f(float x) { 368 float result; 369 result = a3*x*x*x + a2*x*x + a1*x + a0; 370 return result; 371 } 372 373 //5-19 支票面额 374 #include <stdio.h> 375 int main() { 376 int n, f, y, isFound = 0; 377 scanf("%d", &n); 378 for(int f = 0; f <= 100 && !isFound; ++f) { 379 for(int y = 0; y <= 100; ++y) { 380 if(98 * f - 199 * y == n) { 381 printf("%d.%d", y, f); 382 isFound = 1; 383 break; 384 } 385 } 386 } 387 if(!isFound) { 388 printf("No Solution"); 389 } 390 return 0; 391 } 392 //5-20 打印九九口诀表 393 #include <stdio.h> 394 int main(void) { 395 int i, j, N; 396 scanf("%d", &N); 397 for (i = 1; i <= N; i++) 398 for (j = 1; j <= i; j++) { 399 printf("%d*%d=%-4d", j, i, j*i); 400 if (i == j) printf("\n"); 401 } 402 return 0; 403 } 404 //5-21 求特殊方程的正整数解 405 #include <stdio.h> 406 #include <stdlib.h> 407 int main() 408 { 409 int n, x, y, count=0; 410 scanf("%d", &n); 411 for(x=1; x<=100; x++) { 412 for(y=x; y<=100; y++) { 413 if(x*x+y*y==n) { 414 printf("%d %d\n", x, y); 415 count=1; 416 } 417 } 418 } 419 if(count==0) printf("No Solution"); 420 return 0; 421 } 422 423 //5-22 龟兔赛跑 424 #include <stdio.h> 425 int main() { 426 int T, i; 427 int rabbitT=0; 428 scanf("%d", &T); 429 if(T<10) { 430 printf("^_^ %d\n", T*9); 431 return 0; 432 } 433 rabbitT=10; 434 for(i=10;i<=T;i++) { 435 if(i%10==0) { 436 if(rabbitT*9>i*3 && (T-i)>=30) 437 i=i+29; 438 else if(rabbitT*9>i*3 && (T-i)<30) { 439 i=T; 440 break; 441 } 442 else if(T-i>=10) { 443 rabbitT+=10; 444 i=i+9; 445 } 446 else { 447 rabbitT+=T-i; 448 i=T; 449 break; 450 } 451 } 452 } 453 if(i*3>rabbitT*9) 454 printf("@_@ %d\n", i*3); 455 else if(i*3<rabbitT*9) 456 printf("^_^ %d\n", rabbitT*9); 457 else 458 printf("-_- %d\n", rabbitT*9); 459 return 0; 460 } 461 462 463 464 //5-23 币值转换 465 #include <stdio.h> 466 #include <stdlib.h> 467 int main() { 468 int i, j, n; 469 char a[10]; 470 char b[10]={'Y','Q','B','S','W','Q','B','S'}; 471 scanf("%s", a); 472 for(i=8; i>=0; i--){ 473 if(a[i]>='0' && a[i]<='9') { 474 n=i; 475 break; 476 } 477 } 478 for(i=0; i<=n; i++) { 479 j=8+i-n; 480 if(a[i]>'0' && a[i]<='9') { 481 if(i!=n) 482 printf("%c%c", a[i]+49, b[j]); 483 else 484 printf("%c", a[i]+49); 485 } 486 if(a[i]=='0') { 487 if(a[i+1]>'0' && a[i+1]<='9' && j!=4) 488 printf("%c", a[i]+49); 489 if(j==4) 490 printf("%c", b[j]); 491 } 492 } 493 if(n==0 && a[0]=='0') { 494 printf("a"); 495 } 496 return 0; 497 } 498 499 //5-24 约分最简分式 500 #include <stdio.h> 501 #include <stdlib.h> 502 int main() { 503 int zi, mu, i; 504 scanf("%d/%d", &zi, &mu); 505 506 for(i=mu; i>=2; i--) { 507 if(zi%i==0 && mu%i==0) { 508 zi=zi/i; 509 mu=mu/i; 510 } 511 } 512 printf("%d/%d", zi, mu); 513 return 0; 514 } 515 516 //5-25 念数字 517 #include <stdio.h> 518 #include <stdlib.h> 519 int main() 520 { 521 char a[11]; 522 int i; 523 scanf("%s",a); 524 for(i=0;i<11;i++){ 525 switch(a[i]){ 526 case '0': printf("ling"); break; 527 case '1': printf("yi"); break; 528 case '2': printf("er"); break; 529 case '3': printf("san"); break; 530 case '4': printf("si"); break; 531 case '5': printf("wu"); break; 532 case '6': printf("liu"); break; 533 case '7': printf("qi"); break; 534 case '8': printf("ba"); break; 535 case '9': printf("jiu"); break; 536 case '-': printf("fu"); break; 537 } 538 if(a[i+1]>='0'&&a[i+1]<='9')printf(" "); 539 } 540 return 0; 541 } 542 543 //5-26 单词长度 544 #include <stdio.h> 545 int main() 546 { 547 char c; 548 int count[100] = { 0 }; 549 int a = 1; 550 int flag = 0; 551 int i = 0; 552 scanf("%c", &c); 553 while (c != '.') { 554 if (c == ' ') { 555 if (a == 0) { 556 if (i == 0) printf("%d", count[i]); 557 else printf(" %d", count[i]); 558 a = 1; 559 i++; 560 } 561 } 562 else if (c != ' '&&c != '.') { 563 count[i]++; 564 a = 0; 565 } 566 scanf("%c", &c); 567 flag = 1; 568 } 569 if (flag == 1 && i == 0) 570 printf("%d", count[i]); 571 else if (flag == 1 && i != 0&&count[i]!=0) 572 printf(" %d", count[i]); 573 return 0; 574 } 575 576 //5-27 冒泡法排序 577 #include <stdio.h> 578 #include <stdlib.h> 579 int main() { 580 int i, j, n, k, a[100], cont=0, q; 581 scanf("%d%d", &n, &k); 582 for(i=0; i<n; i++){ 583 scanf("%d", &a[i]); 584 } 585 while(cont!=k) { 586 for(j=0; j<n-1; j++) { 587 if(a[j]>a[j+1]) { 588 q=a[j]; 589 a[j]=a[j+1]; 590 a[j+1]=q; 591 } 592 } 593 cont++; 594 } 595 for(i=0;i<n;i++) { 596 printf("%d",a[i]); 597 if(i<n-1) printf(" "); 598 } 599 return 0; 600 } 601 602 //5-28 猴子选大王 603 #include <stdio.h> 604 int main() { 605 int i, j, k, temp; 606 int monkey[1001]; 607 unsigned int n; 608 scanf("%d", &n); 609 for (i = 0; i < n; i++) { 610 monkey[i] = i + 1; 611 } 612 for (i = n - 1; i >= 0; i--) { 613 for (k = 1; k <= 3; k++) { 614 temp = monkey[0]; 615 for (j = 0; j < i; j++) { 616 monkey[j] = monkey[j + 1]; 617 } 618 monkey[i] = temp; 619 } 620 } 621 printf("%d", monkey[0]); 622 return 0; 623 } 624 //5-29 删除字符串中的子串 625 #include <stdio.h> 626 #include <stdlib.h> 627 int main() { 628 char s1[80], s2[80]; 629 int i=0, j=0, n1=0, n2=0, cont; 630 for(i=0;;i++) { 631 scanf("%c", &s1[i]); 632 if(s1[i]=='\n') break; 633 n1++; 634 } 635 for(i=0;;i++) { 636 scanf("%c", &s2[i]); 637 if(s2[i]=='\n') break; 638 n2++; 639 } 640 for(i=0; i<n1; i++) { 641 if(s1[i]==s2[0]) { 642 cont=0; 643 for(j=0; j<n2; j++) { 644 if(s1[i+j]!=s2[j]) 645 cont=1; 646 } 647 if(cont==0) { 648 n1=n1-n2; 649 for(j=i;j<n1;j++) { 650 s1[j]=s1[j+n2]; 651 } 652 i=-1; 653 s1[n1]='\0'; 654 } 655 } 656 } 657 for(i=0; i<n1; i++) { printf("%c", s1[i]); } 658 return 0; 659 } 660 661 //5-30 字符串的冒泡排序 662 #include <stdio.h> 663 #include <string.h> 664 int main() { 665 int N, K; 666 scanf("%d %d", &N, &K); 667 char str[N][11]; 668 for (int i = 0; i < N; i++) { 669 scanf("%s", str[i]); 670 } 671 int i, j; 672 for (j=N-1; j>N-1-K; j--) { 673 for (i=0; i<j; i++) { 674 if (strcmp(str[i], str[i + 1]) > 0) { 675 char strTemp[11]; 676 strcpy(strTemp, str[i]); 677 strcpy(str[i], str[i + 1]); 678 strcpy(str[i + 1], strTemp); 679 } 680 } 681 } 682 for (int i=0; i<N; i++) { printf("%s\n", str[i]); } 683 return 0; 684 } 685 686 //5-31 字符串循环左移 687 #include <stdio.h> 688 #include <string.h> 689 #include <stdlib.h> 690 int main() { 691 int n; 692 char a[101]; 693 char b[101]={0}; 694 gets(a); 695 int s=0; 696 s=strlen(a); 697 scanf("%d", &n); 698 n=n%s; 699 for(int i=0; i<s; i++) { b[i]=a[i]; } 700 for(int i=n; i<s; i++) { b[i-n]=a[i]; } 701 for(int j=0; j<n; j++) { b[s-n+j]=a[j]; } 702 printf("%s", b); 703 return 0; 704 } 705 706 //5-32 说反话-加强版 707 #include <stdio.h> 708 #define MAX 500000 709 int main () { 710 char s; 711 char t[MAX]; 712 int i=0, count=0, flag=0; 713 while ((s=getchar()) != '\n') { 714 if (s != ' ') { flag = 1; t[i++] = s; count = 0; } 715 else if (count > 0) { continue; } 716 else if (flag) { t[i++] = s; count ++; } 717 } 718 count = 0; 719 int j; 720 for (i-=1; i>=0; i--) { 721 if (t[i] != ' ') { count ++; } 722 else if (t[i]==' ' && count > 0) { 723 for (j=i+1; j<=i+count; j++) { 724 printf("%c", t[j]); 725 } 726 printf(" "); 727 count = 0; 728 } 729 } 730 for (j=i+1; j<=i+count; j++) { printf("%c", t[j]); } 731 return 0; 732 } 733 //5-33 有理数加法 734 #include <stdio.h> 735 int gcd(int, int); 736 struct fraction { int a; int b; }; 737 int main(void) 738 { 739 struct fraction f1, f2, f3; 740 int g; 741 scanf("%d/%d %d/%d", &f1.a, &f1.b, &f2.a, &f2.b); 742 f3.a = f1.a*f2.b + f2.a*f1.b; 743 f3.b = f1.b*f2.b; 744 g = gcd(f3.a, f3.b); 745 f3.a /= g; 746 f3.b /= g; 747 if (f3.b == 1) printf("%d", f3.a); 748 else printf("%d/%d", f3.a, f3.b); 749 return 0; 750 } 751 int gcd(int x, int y) { 752 int r; 753 while (1) { 754 r = x%y; 755 if (r == 0) break; 756 x = y; 757 y = r; 758 } 759 return y; 760 } 761 762 //5-34 通讯录的录入与显示 763 #include <stdio.h> 764 #include <stdlib.h> 765 #include <string.h> 766 struct list { char name[11]; char num[17]; char phone[17]; char sex[2]; char birthday[11]; }; 767 struct list p[100]; 768 int main() { 769 int i=0, j=0, N, K; 770 scanf("%d", &N); 771 for(i=0; i<N; i++) { scanf("%s %s %c %s %s\n", &p[i].name, &p[i].birthday, &p[i].sex, &p[i].num, &p[i].phone); } 772 scanf ("%d", &K); 773 int number; 774 for (i=0; i<K; i++) { 775 scanf ("%d", &number); 776 if (number < N && number>=0) { printf("%s %s %s %s %s\n", p[number].name,p[number].num, p[number].phone, p[number].sex,p[number].birthday); } 777 else { printf ("Not Found\n"); } 778 } 779 return 0; 780 } 781 782 //5-35 有理数均值 783 #include <stdio.h> 784 #include <stdlib.h> 785 int main() { 786 int a[201],j; 787 int i,n,a1,b1,a2,b2; 788 scanf("%d",&n); 789 for(i=0; i<2*n; i=i+2) { 790 scanf("%d/%d", &a[i], &a[i+1]); 791 } 792 a1=a[0]; 793 b1=a[1]; 794 for(i=2;i<2*n;i=i+2) { 795 a2=a[i]; 796 b2=a[i+1]; 797 a1=a1*b2+a2*b1; 798 b1=b1*b2; 799 if(b1<0){ 800 b1=-b1; 801 a1=-a1; 802 } 803 if(b1==0) 804 return 0; 805 for(j=2; j<=b1; j++) { 806 if(a1%j==0 && b1%j==0) { 807 a1=a1/j; 808 b1=b1/j; 809 j--; 810 } 811 } 812 } 813 b1=b1*n; 814 for(i=2;i<=b1;i++){ 815 if(a1%i==0&&b1%i==0){ 816 a1=a1/i; 817 b1=b1/i; 818 i--; 819 } 820 } 821 if(b1==1) printf("%d", a1); 822 else printf("%d/%d", a1, b1); 823 return 0; 824 } 825 //5-36 复数四则运算 826 #include <stdio.h> 827 float a1,b1,a2,b2; 828 char c[5]={'+','-','*','/'}; 829 float one(float a); 830 int main() { 831 scanf("%f %f %f %f", &a1, &b1, &a2, &b2); 832 float a, b; 833 for(int i=0; i<=3; i++) { 834 if(i==0){ a=a1+a2; b=b1+b2; } 835 else if(i==1) { a=a1-a2; b=b1-b2; } 836 else if(i==2) { a=a1*a2-b1*b2; b=a1*b2+a2*b1; } 837 else if(i==3) { a=(a1*a2+b1*b2)/(a2*a2+b2*b2); b=(b1*a2-a1*b2)/(a2*a2+b2*b2); } 838 float k,d,e,f; 839 a=one(a); 840 b=one(b); 841 k=one(a1); 842 d=one(b1); 843 e=one(a2); 844 f=one(b2); 845 if(b1 >= 0) { printf("(%.1f+%.1fi)",k,d); } 846 else if(b1<0) { printf("(%.1f%.1fi)",k,d); } 847 printf(" %c ", c[i]); 848 if(b2>=0) { printf("(%.1f+%.1fi) = ",e,f); } 849 else if(b2<0) { printf("(%.1f%.1fi) = ",e,f); } 850 if(a==0&&b==0){ printf("0.0\n"); } 851 else if(a!=0&&b==0) { printf("%.1f\n",a); } 852 else if(a==0&&b!=0) { printf("%.1fi\n", b); } 853 else if(a!=0&&b>0) { printf("%.1f+%.1fi\n",a,b); } 854 else if(a!=0&&b<0) { printf("%.1f%.1fi\n",a,b); } 855 } 856 } 857 float one(float a) { 858 if(a>=0) { 859 return (float)((int)(a*10+0.5))/10; 860 } 861 else if(a<0){ 862 return (float)((int)(a*10-0.5))/10; 863 } 864 } 865 866 //5-37 整数分解为若干项之和 867 #include <stdio.h> 868 int N; 869 int s[31]; 870 int top = -1; 871 int count = 0; 872 int sum = 0; 873 void division (int i); 874 int main () { 875 scanf ("%d", &N); 876 division (1); 877 return 0; 878 } 879 void division (int i) { 880 if (sum == N) { 881 count ++; 882 printf("%d=", N); 883 int k; 884 for (k=0; k<top; k++) { 885 printf("%d+", s[k]); 886 } 887 if (count%4 == 0 || s[top] == N) { 888 printf("%d\n", s[top]); 889 } 890 else { 891 printf("%d;", s[top]); 892 } 893 return; 894 } 895 if (sum > N) { 896 return; 897 } 898 for (int j=i; j<=N; j++) { 899 s[++top] = j; 900 sum += j; 901 division (j); 902 sum -= j; 903 top --; 904 } 905 } 906 907 //5-38 数列求和-加强版 908 #include <stdio.h> 909 #include <string.h> 910 #include <math.h> 911 int num[1000000]; 912 int main() { 913 int A; 914 int N; 915 int i; 916 int j; 917 int t; 918 int flag; 919 scanf("%d%d",&A,&N); 920 if(N == 0) printf("0\n"); 921 else { 922 flag = 0; 923 for(i=N, j=0; i>=1; i--, j++) { 924 t = A*i + flag; 925 flag = t / 10; 926 num[j] = t % 10; 927 } 928 if(flag > 0) { 929 num[j] = flag; 930 j++; 931 } 932 for(i=j-1; i>=0; i--) { 933 printf("%d", num[i]); 934 } 935 } 936 return 0; 937 }