(一)、简单知识总结
(1)对十进制整数进行八进制和十六进制的输
(加入前导的0或者0x 前面添加#来控制)
Printf(“0%o 0x%X”,1234,1234);
Printf(“%#o %#ox”,1234,1234);
(2)C语言标准规定:
sizeof(long long)>=sizeof(long)>=sizeof(int)
变量定义在当前代码块的最前面
(3)十六进制打印域宽15的十进制整数
Printf(“15d”,0xABCDEF);
(4)printf的返回值:打印在屏幕上字符的个数
int ret=printf(“hehe”);
printf(“%d”,ret); 4
或者printf(“\n%d\n”,printf(“hello world”));//先调用内部的printf,再调用外部的printf
输出hello world然后输出11
printf(“%d”,printf(“%d”,printf(“%d”,43))); 输出4321
(5)小数在内存中可能不能精确保存,需要四舍五入。
(6)打印ascii码值对应的字符
Printf(“%c”,73);
输出字符的ascii码值
Char ch=0;
Ch=getchar();
Printf(“%d\n”,ch);
(7)通过scanf函数的%m格式控制输入的域宽,输入数据域宽,按照此域宽,截取所需的数据,通过printf的%0格式控制符,输出数值时指定左边不使用的空位置自动填零
题目: 输入20130225
输出 year=2013
Month=02
Day=25
int month=0, year=0, day=0;
scanf_s("%4d%2d%2d", &year, &month, &day);
printf("year=%4d\n", year);
printf("month=%02d\n", month);
printf("day=%02d", day);
(8)题目:在不使用累计乘法的基础上,通过移位运算<<实现2的n次方 输入2 10 输出4 1024
Int a=1; a<<1;//a移动的二进制的位
(a的二进制位时00000000 00000000 00000000 00000001)
向左移动1位(00000000 00000000 00000000 00000010)
变成了2 )
a<<2(变成了4)
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)//读入多个数scanf会返回读取的数字的个数,当遇到错误会返回EOF
{
printf("%d\n", 1 << n);
}
return 0;}
(9)
1.要\得到一个浮点数,必须\俩边至少有一个浮点数
2.double的printf用f,scanf用lf
3.给定一个浮点数,要求得到该浮点数的个位数
double b=0;
scanf(“lf’,b);
printf(“%d”,(int)b%10);
4.scanf在输入的时候%x %o是分别针对十六进制和八进制的
5. scanf(“%d,%d”,&a,&b);
scanf中只要一个““,输入的时候打逗号
而scanf中没有逗号的时候直接空格或者回车或者tab都行)
(10)三个数字比大小
{int max=n1>n2?n1:n2;
max=max>n3?max:n3;}
{int i=0,max=a[0],a[i];
For(i=0;i<n;i++)
if (a[i]>max)
Max=a[i];}
(11)多组输入
while(scanf("%d",&a)!=EOF))
while(~scanf("%d",&a)!=EOF)
while(scanf(“ %c”,&ch)!=EOF)//在%c前面加上空格会消化前面所有的空白字符,然后读取一个字符
while(scanf("%c\n",&a))//在%c后面加上一个\n,其实在输入的时候会消除这个\n
(12)判断俩个数组是否相等
if(a[i][j]!=b[i][j])
{
printf(“N0”);
return 0;}
(二)具体题目的实现
1.反向输出四位整数
#include<stdio.h>
int main()
{
int n=0;
scanf("%d", &n);
while (n)
{
printf("%d", n%10);
n = n / 10;
}
return 0;
}
2. 多组输入大写字母转换为小写字母
#define _CRT_SECURE_NO_WARNINGS 1
int main()
{
char ch = 0;//getchar()读取字符 putchar()输出字符
while (ch = getchar() != EOF) //EOF==end of file
{
putchar(ch + 32);
printf("\n");//或者printf(“%c”,ch+32);
getchar();//读入\n
}
return 0; }
3. 判断字母大小写:
int main()
{
int ch = 0;//getchar返回的是整型
while ((ch = getchar() )!= EOF)
{
if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
{
printf("yes\n");
}
else
printf("no\n");
getchar();//处理\n
}
}
(多组输入时要注意敲了大写字母后,回车也是字母,所以getchar也会吸收该字母,输出*)
#include<ctype.h>
Isalpha-专门用来判断一个字符是不是字母的(是字母返回非0的值,不是字母的返回0)
While(isalphf(ch))
Isupper 判断大写字母
Islower 判断小写字母
Toupper 把小写字母转成大写
Tolower 把大写字母转成小写
4.变种水仙花(5位的):把任意的数字从中拆成俩部分 如655可以拆成(6,55)和(65,5) 655=6*55+65*5
int main()
{
int n;
scanf("%d", &n);
int i = 0;
for (i = 10000; i <= 99999; i++)
{
int j = 0;
int sum = 0;
for(j = 10; j <= 10000; j += 10)
{
sum += (i / j) * (i % j);
}
}
return 0;
}
5.统计字符串中的A和B的个数
int main()
{
char buf[100]={0};
gets(buf);//获取一行字符串,放到一个空间内
int count_a=0;
int count_b=0;
int i=0;
while(buf[i]!=’0’)
{
If(buf[i]==’A’); count_a++;
If(buf[i]==’B’);count_b++;
i++;
}
printf("%d %d",count_a,count_b);
6.看字符串中的A多还是B多
int main(void)
{
int ch = 0;
int flag = 0;
while ((ch = getchar()) !='0' && ch != EOF)
{
if (ch == 'A')
flag++;
if (ch == 'B')
flag--;
}
if (flag > 0)
printf("A");
else if (flag < 0)
printf("B");
return 0;
}
7. 判断输入的字母是元音还是辅音
{
char ch = 0;
char arr[20] = "abcdefABCDEF";
int i = 0;
while (ch = getchar() != "EOF")
for (i = 0; i < 10; i++) {
if (ch == arr[i])
{
printf("yes");
break;
}
}
getchar();//处理/n
}
库函数:#inlcude<string.h>
while (ch = getchar() != "EOF")
if(strchr(arr,ch)
printf(“yes’);
strchr判断ch是否在字符串中出现,出现返回arr字符串中的地址,没有则返回空指针
9.看看输入的用户名和密码一样吗
int main()
{
char name[100];
char passward[100];
while (~scanf("%s %s", name, passward))
{
if (strcmp(name, "admin") && strcmp(passward, "admin") == 0)
printf("yes");
}
}
10.输出1--2019中间含9的数字的个数
int main()
{
int i = 0;
int count = 0;
for (i = 0; i <= 2019; i++)
{
int m = i;
while (m)
{
if (m % 10 == 9)
{
count++;
break;
}
m /= 10;
}
}
printf("%d", count);
}
11. 输出奇数和偶数的个数
int main()
{
int n = 0;
scanf("%d", &n);
if (n % 2 == 1)
{
printf("奇数%d 偶数%d", n / 2 + 1, n / 2);
}
else printf("%d %d", n / 2, n / 2);
}
12. 输入n*m的矩阵,计算其中大于0的元素之和
/int main()
//{
// int n = 0;
// int m = 0;
// int num = 0;
// int sum = 0;
// scanf("%d %d", &n, &m);
//
//
// int i = 0, j = 0;
// for(i=0;i<n;i++)
// for (j = 0; j < m; j++)
// {
// scanf("%d", &num);
// if (num > 0) sum += num;
// }
// printf("%d",sum);
//}//
13.倒序输出数组元素
//int main()
//{
// int a[10] = { 0 };
// int i = 0;
// for (i = 0; i < 10; i++)
// {
// scanf("%d", &a[i]);
// }
// for (i = 9; i >= 0; i--)
// {
// printf("%d ", a[i]);
// }
14、有序序列的判断
int main()
//{
// int n;
// scanf("%d", &n);
// int a[20] = { 0 }, i = 0;
//
// int flag1 = 0;//表示升序
// int flag2 = 0;//表示降序
// for (i = 0; i < n; i++)
// {
// scanf("%d", &a[i]);
// if (i > 0)
// {
// if (a[i] > a[i + 1]) flag1 = 1;
// else flag2 = 1;
// }
// }
//
// if (flag1 + flag2 == 1) printf("sorted");
//
// return 0;
//}
15、 序列中删除指定的数字
//
int main()
{
int n;
scanf("%d", &n);
int i = 0, a[50],j=0;//i遍历数组,j存储数组的位置
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}//读取n个数字
int m = 0;
scanf("%d", &m);//读入要删除的数字
for (i = 0; i < n; i++)
{
if (a[i] != m)
{
a[j++] = a[i];
}
}//此时的j就是删除元素后的数据个数
for (i = 0; i <j; i++)
{
printf("%d ", a[i]);
}
return 0;
}
16、 有序序列的合并
//
int main()
{
int n = 0;
int m = 0;
int k = 0;
int arr1[10] = {0};
int arr2[10] = {0};
int arr3[20] = { 0 };
int i = 0; int j = 0;
scanf("%d %d", &n, &m);
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
for (i = 0; i < m; i++)
{
scanf("%d", &arr2[i]);
}
while (i < n && j < m)
{
if (arr1[i] < arr2[j])
{
arr3[k++] = arr1[i++];
}
else {
arr3[k++] = arr2[j++];
}
}
if (i == n)
{
for (; j < m; j++)
{
arr3[k++] = arr2[j];
}
}
else
{
for (; j < n; j++)
{
arr3[k++] = arr1[i];
}
}
for (i = 0; i < k; i++)
{
printf("%d", arr3[i]);
}
return 0;
}
16、数组之中找最大元素的上标和下标
//int main()
//{
// int i = 0, j = 0;
// int m = 0, n = 0;
// int x = 0, y = 0;
// scanf("%d,%d", &n, &m);
// int num = 0, max = 0;
//
// for (i = 0; i < m; i++)
// for(j=0;j<n;j++)
// {
// scanf("%d", &num);
// if (num > max)
// {
// max = num;
// x = i;
// y = j;
//
// }
// }
// printf("%d %d", x, y);
//}
//if (i > j) {
// if (a[i][j] != 0)
// {
// printf("no");
// }
17矩阵倒置
//for(i=0;i<n;i++)
// for (j = 0; j < m; j++)
// {
// scanf("%d", &a[i][j]);
// }
//for (i = 0; i < m; i++)
//{
// for (j = 0; j < n; j++)
// {
// printf("%d", arr[j][i]);
// }
// printf("\n");
}
18、一元二次方程的根
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main(void)
{
double a, b, c;
while (~scanf("%lf %lf %lf", &a, &b, &c))
{
if (a == 0) printf("not quadratic question");
else {
double p= b * b - 4 * a * c;
if (p == 0.0)
{
printf("x1=x2=%.2lf\n", (-b) / (2 * a));
}
else if (p > 0.0)
{
printf("x1=%.2lf;x2=%.2lf", (-b - sqrt(p)) / (2 * a), (-b + sqrt(p)) / (2 * a));
}
else if(p<0.0){
printf("有俩个虚根");
}
}
return 0;
}
19、求字符串长度
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[10], i;
time_t t;//time_t从1970年存储到现在一共走了多少秒
srand((unsigned)time(&t));//time指的是返回某一个特定时间的小数值
for (i = 0; i < 10; i++)
a[i] = rand() % 1000;
for(i=0;i<10;i++)
printf(" a[%d] =% d\n",i,a[i]);
}