c语言菱形打印
#include<stdio.h> #include<math.h> //这里的8不知道c语言中获取方式 #define int_len (sizeof(int)*8) int switch_to_positive_num(char *str); int printstar(int n); int main(int argc,char *argv[]) { int num; if(argc != 2){ printf("error parameter number;\n"); return 1; } num = switch_to_positive_num(argv[1]); if(num == -1){ printf("error parameter;\n"); return 1; } printf("input num:%d\n",num); int n = printstar(num); printf("sruplus:%d\n",n); return 1; } /* len为菱形长度, sruplus为参数用于打印菱形后剩余数量 len计算基于菱形总数和菱形长度的如下关系: (len-1)*((len+1)/2)+1 = num 上述等式是基于将菱形下半部分平移至上半部分,然后依据图形计算得出 */ int printstar(int n) { int len,sruplus,i,j,tmp; if(n<1) return n; //开方反算取整并取最大奇数; len = (int)sqrt((n-1)*2+1); len = len%2 ==0 ? len-1 : len; sruplus = n - ((len-1)*(len+1)/2+1); for(i=1;i<=len*2-1;i+=2){ //借助临时变量的计算,使得一个大循环内打印上下两个部分 tmp = i<=len ? i : 2*len-i; printf("%*s",(len-tmp)/2,""); for(j=0;j<tmp;j++) printf("*"); printf("\n"); } return sruplus; } //将参数字符串转为带符号正int型整数 int switch_to_positive_num(char *str) { int max; long res; char c; max = (~0)^(1<<(int_len-1)); res = 0; while((c = *str++) != '\0'){ if(c < '0' || c > '9') return -1; res = res*10 + (c - '0'); if(res > max) return -1; } return (int)res; }