本篇收录总结3道C语言题型,其中两道来自ACM编程,有兴趣的可以刷刷,总结经验。
①. C循环控制
#include<stdio.h> int main(){ unsigned char i = 7; int j = 0; for(;i > 0;i -= 3){ ++j; } printf("%d\n", j); return 0; }
请问该程序的输出是多少(?)
A. 2
B.死循环
C. 173
D. 172
解析:
#include<stdio.h> int main() { unsigned char i = 7; //unsigned char 的范围为0-255 int j = 0; for (; i > 0; i -= 3) //要求i大于0,当i等于0时循环停止。所以我们就计算什么时候i等于0,这时j循环了多少次就可以了 { ++j; } //7 4 1 254~~~ 2 255~85 //3+84+1+85=173 printf("%d\n", j); return 0; }
②. 添加逗号
思路:
规定N的范围不能超过2,000,000,000,而整数int类型的最大范围是2,147,483,647 所以没有超过整形范围。
注意它说每三位加一个逗号,如果我们从前面每三位开始加逗号,可能会更加难以理解。所以我们应该是从后面开始每三个数加一个逗号。
而我们获取数字也是从低位开始获取,我们可以从低位获取数字后,每获取三个数字就加上一个逗号, 当数字全部获取完后,再将获取的数字倒过打印。
代码:
int main() { int n; scanf("%d", &n); char arr[14] = { 0 };//n的最大数是13位 int i = 0; int k = 0; while (n) { if (k % 3 == 0&&k!=0)//k是用来记录每获取三个数字后就加上一个逗号的标识 { arr[i++] = ','; } //不断获取n的低位数字,然后把它变成数字字符放进数组里 arr[i++] = n % 10 + '0';//数字加'0'==数字字符 ---比如 8+'0'=='8' //获得一个数字就给数组arr的下标+1 k++; n /= 10; } //最后倒着打印数组 int j = 0; for (j = i-1; j >= 0; j--) { printf("%c", arr[j]); } return 0; }
③. 删除公共字符
思路:
要求输入两个字符串,输出字符串1中没有出现字符串2中的字符。
可以投机一下,并不是真正意义上的的删除
我们直接打印字符串1中没有出现字符串2中的字符就可以了。 如果字符串1中的字符与字符串2中的某个字符一样则不打印,如果全不一样则进行打印。
#include <string.h> #include <assert.h> int is_not_exist(char ch, char* str) { assert(str != NULL); while (*str) { if (*str == ch) { return 0;//如果一样直接返回0,那if语句就不成立,就不要打印 } str++; } return 1; //最后遍历完arr2后发现没有字符与arr1[i]一样,那就返回1,if语句为真,进行打印 } int main() { char arr1[100] = { 0 }; char arr2[100] = { 0 }; //输入 gets(arr1); gets(arr2); int sz = strlen(arr1); int i = 0; //输出 for (i = 0; i < sz; i++) { if (is_not_exist(arr1[i],arr2))//如果该字符与arr2中所以字符都不一样那就可以打印,如果有一个一样那就不打印 { printf("%c", arr1[i]); } } return 0; }
我们还可以利用库函数strchr
查找字符串中的字符,如果有则返回该字符所在的地址,如果没有则返回NULL.
int main() { char arr1[100] = { 0 }; char arr2[100] = { 0 }; //输入 gets(arr1); gets(arr2); int sz = strlen(arr1); int i = 0; //输出 for (i = 0; i < sz; i++) { //strchr--查找字符,查找一个字符串中是否有一个字符,如果有则返回第一次出现的地址,如果没有则返回NULL; if (strchr(arr2, arr1[i])== NULL)//如果没有找到则返回NULL,也就可以打印了 { printf("%c", arr1[i]); } } return 0; }