逗号表达式:逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。 如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值, 如:(3+5,6+8)的值是14;a=(a=3*5,a*4)的值是60,其中(a=3*5,a*4)的值是60, a的值在逗号表达式里一直是15,最后被逗号表达式赋值为60,a的值最终为60。 (表达式1,表达式2,表达式3,...... ,表达式n) 逗号表达式的要领: (1) 逗号表达式的运算过程为:从左往右逐个计算表达式。 (2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。 (3) 逗号运算符的优先级别在所有运算符中最低。 #include <stdio.h> int main() { int x,y,z; x=1; y=1; z=x++,y++,++y; printf("%d,%d,%d\n",x,y,z); return 0; } x和y的值经过自增以后分别为2和3,D可以排除。剩下3个选项选择什么呢? 如果是(x++,y++,++y)实际上可以看成(1,1,3)整个逗号表达式的值应该是3,那么选A。 如果是(x++,++y,y++)实际上可以看成(1,2,2)整个逗号表达式的值应该是2,那么选B。 但这是错的,这儿还有赋值运算符。赋值运算符的优先级是2,而逗号运算符的优先级是1, 也就是说上面的表达式中应该等价于这样的结合:(z=x++),y++,++y;如果这样写的话,则答案很清晰,为:2,3,1 //打印9*9乘法口诀表 可输入数字,自由计算 #include <stdio.h> void print(int n) { int i=0; for (i=1;i<=n;i++) { int j=0; for (j=1;j<=i;j++) { printf("%d*%d=%2d ",i,j,i*j); } printf("\n"); } } int main() { void print(int n); int n=0;//输入的数字为n scanf("%d",&n); print(n); return 0; }
字符串逆序(递归实现) 编写一个函数 实现:将参数字符串中的字符反向排列不是逆序列打印 要求:不能使用C函数库中的字符串操作函数 #include <stdio.h> int mystrlen(char *arr) { int number=0; while (*arr !='\0') { arr++; number++; } return number; } char Reverse_printf(char*arr) { int left=0; int right=mystrlen(arr)-1;//可直接strlen(arr)-1 计算right的值 int Treasure=0; while (left<right) { /*Treasure=arr[left]; arr[left]=arr[right]; arr[right]=Treasure; Treasure=*(arr+left);//使用指针arr[left]=*(arr+left) *(arr+left)=*(arr+right); *(arr+right)=Treasure; left++; right--; } } int main() { char arr[]="a b c d e f"; Reverse_printf(arr); printf("%s ",arr); return 0; } #include <stdio.h> int mystrlen(char *arr) { int number=0; while (*arr !='\0') { arr++; number++; } return number; } char Reverse_printf(char*arr) { int left=0; int right=mystrlen(arr)-1;//可直接strlen(arr)-1 计算right的值 int Treasure=0; while (left<right) { Treasure=arr[left]; arr[left]=arr[right]; arr[right]=Treasure; Treasure=*(arr+left);//使用指针arr[left]=*(arr+left) *(arr+left)=*(arr+right); *(arr+right)=Treasure; left++; right--; } } int main() { char arr[]="a b c d e f"; Reverse_printf(arr); printf("%s ",arr); return 0; } 大事化小 a b c d e f 的逆序=a和f的交换+b c d e 的逆序, b c d e的逆序=b和c的交换+c d的逆序 c d的逆序=c d的交换 #include <stdio.h> int mystrlen(char *arr) { int number=0; while (*arr !='\0') { arr++; number++; } return number; } char Reverse_printf(char*arr) { char Treaasure=0; int length=mystrlen(arr); Treaasure=*arr; *arr=*(arr+length-1); *(arr+length-1)='\0'; if (mystrlen(arr+1)>=2) { Reverse_printf(arr+1); } *(arr+length-1)=Treaasure; } int main() { char arr[]="a b c d e f"; Reverse_printf(arr); printf("%s ",arr); return 0; }
//计算一个数的每位之和(递归实现)题目内容: //写一个递归函数Digitsum(n),输入一个非负整数,返回组成它的数字之和例如: //调用DigitSum(1729),则应该返回1+7+2+9,它的和是19输入: 1729,输出:19 int Digitsum(int n) { if (n>=9) { return Digitsum(n/10)+n%10; } else { return n; } } #include <stdio.h> int main() { int n=1729; printf("%d", Digitsum(n)); return 0; }