#include<stdlib.h> #include<stdio.h> int main(){ int i,n; scanf("%d",&n); for(i = 2; i<=n;i++){ while(n!=0){ if(n%i==0){ printf("%d*",i); n /= i; } else{ break; } } } putchar('\b'); return 0; }
在这个代码之中,因为有for循环对于i变量进行着范围的约束,所以说只要是n!=0就可以了,可以不用考虑最后n=1,i一直累加进入死循环的情况。(可以与实验六之中的my_fun()函数进行比较)
因为在实验六之中,质因数的分解是在同一个while循环中完成的,所以说只用了一层的循环。而且并没有对i进行范围的限制,所以导致如果在“1”的情况之下不break会出现死循环。
void fun(int m){ int i = 2; printf("%d = 1",m); while(m>1){ //在这里对1进行约束,防止出现1一直除不尽,所以一直i++的情况。 if(m%i==0){ m/=i; printf("*%d",i); } else i++; } }
#include<stdio.h> #include<stdlib.h> int datoi(char str[]){ int value = 0, i = 0; while(str[i]!='\0'){ value = value*10 + str[i] - '0'; i++; } return value; } int main(){ char *str = "9999"; printf("%d",datoi(str)*10+9); return 0; }
注意,在做这个实验的时候不可以
#include<stdlib.h>
因为atoi这个函数在stdlib.h这个库之中已经存在了,相当于是对于这个函数进行复写,所以会导致报错。
#include<stdio.h> void maxval(int (*num)[4]){ int i, j, max, row =0, col = 0; max = num[0][0]; for(i=0; i<4; i++) for(j=0; j<4;j++) if(max<num[i][j]){ max = num[i][j]; row = i; col = j; } printf("the maxium value lies in %d row, %d column, equals to %d",row, col, max); } int main(){ int num[4][4]= {1,2,3,4,4,3,2,1,9,8,7,6,6,7,8,9}; maxval(num); return 0; }
注意插入排序!!
#include<stdio.h> #include <stdlib.h> void insert(float* num,float new){ int i = 11; num[12] = new; while( i>=0 && num[i]<num[i+1]){ //这个是针对题目之中所给的条件“递减数列”得来的。 new = num[i+1]; num[i+1] = num[i]; num[i] = new; i--; } } int main(){ float *num = (float*)malloc(sizeof(float)*13); for(int i=0;i<12;i++) num[i] = -i*i; float new; scanf("%f",&new); insert(num,new); for(int i=0;i<13;i++) printf("%f\t",num[i]); return 0; }
#include<stdio.h> #include <stdlib.h> int mycmp(char *p1, char* p2){ while(*p1 && *p2 && *p1 == *p2){ p1++, p2++; } return *p1 - *p2; } int main(){ char *p1, *p2; p1 = (char*)malloc(sizeof(char)*20); p2 = (char*)malloc(sizeof(char)*20); gets(p1); gets(p2); printf("%d",mycmp(p1,p2)); return 0; }
Equivalent Solution:
int mycmp(char *p1, char* p2){ while(*p1 && *p2 && *p1++ == *p2++); return *(--p1) - *(--p2); }
#include<stdio.h> #include <stdlib.h> void ss(char*s, char t){ while(*s){ if(*s==t) *s = t -'a' +'A'; s++; } } void main(void){ char str1[100] = "abcddfefdbd", c = 'd'; ss(str1,c); puts(str1); }
The code in Line 6 search for a particular character that is equal to the input char t, and return a Capitalized character in the string.
#include<stdio.h> #include <stdlib.h> void sort(int a[], int n){ int i,j,t; for(i = 0; i<n-1; i++) for(j = i+1; j<n; j++) if(a[i]<a[j]){ t = a[i]; a[i] = a[j]; a[j] = t; } } void main(void){ int aa[10] = {1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i =0; i<10; i++){ printf("%d\t",aa[i]); } }
上述的代码的核心原理是,以输入的int型指针a为起点,以a+n-1指针为终点,进行降序的排序。
从a[3]开始,长度为5的子列进行一个降序的排序。
#include<stdio.h> #include<stdlib.h> #include<string.h> void sort(char **str, int n){ char * tmp; int i, j; for(i=0; i<n-1; i++) for(j=0; j<n-i-1;j++) if(strcmp(str[j],str[j+1])>0){ tmp = str[j], str[j] = str[j+1], str[j+1] = tmp; } } int main(){ char **ps, *str[3] ={"BOOK", "COMPUTER", "CHINA"}; int i; ps = str; sort(str,3); for(i=0;i<3;i++) puts(str[i]); return 0; }
#include<stdio.h> #include<stdlib.h> int prime(int x){ int flag = x; for(int i = 2;i<x;i++) if(x%i ==0){ flag = 0; break; } return flag; } int main(){ int n,sum=0; scanf("%d",&n); for(int i=2; i<=n; i++) sum+=prime(i); printf("%d",sum); return 0; }
#include<stdio.h> #include<stdlib.h> int sort(short *num, int n){ int p; short temp; for(int i=0;i<n-1;i++){ int p = i; for(int j = i+1;j<n;j++) if(num[p]<num[j]) p = j; if(p!=i) temp = num[p],num[p] = num[i], num[i] = temp; } return 0; } int main(){ short* num = (short*)malloc(sizeof(short)*30); for(int i=0;i<20;i++) num[i]= (rand()%1000)/7; sort(num,20); for(int i=0;i<20;i++) printf("%d\t",num[i]); return 0; }