1.100-200之间的素数
1)#include<stdio.h>
int main()
{
int i, j;
for (i = 100; i <= 200; i++)
{
for (j = 2; j <= i - 1; j++)
{
if (i % j ==0)
break;//如果能整除就跳出该次循环,避免多余运算
}
if (j == i)//该条件代表没有整除。
printf("%d ", i);
}
printf("\n");
system("pause");
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
int count = 0;
int i = 0;
for(i=100; i<=200; i++)
{
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
break;
}
if(j > sqrt(i))
{
count++;
printf("%d ",i);
}
}
printf("\n");
printf("素数个数为:%d", count);
return 0;
}
2.打印乘法口诀表
#include<stdio.h>
int main(void)
{
int a, b; //a和b分别表示行数和列数;
for (a = 1; a <= 9; a++)
{
for (b = 1; b <= a; b++)
printf("%d*%d=%2d ", a, b, a * b);
printf("\n");
}
printf("\n");
return 0;
}
3.1000-2000之间的闰年
#include<stdio.h>
int main(void)
{
int a = 1000;
for (a = 1000; a <= 2000; a++)
{
if ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)
printf("%d ",a);
}
return 0;
}
4.交换两个数的值
1.#include<stdio.h>
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d",a,b);
return 0;
}
2.#include<stdio.h>
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d",a,b);
return 0;
}
3.#include<stdio.h>
int main(void)
{
int a,b,temp;
scanf("%d %d",&a,&b);
temp = a;
a = b;
b = temp;
printf("%d %d",a,b);
return 0;
}
5.输出1-100之间的奇数
#include<stdio.h>
int main(void)
{
int a = 1;
for(a=1;a<=100;a++)
{
if (a % 2 == 1)
{
printf("%d ", a);
}
}
return 0;
}
#include<stdio.h>
int main(void)
{
int a=1;
for(a=1;a<=100;a+=2)
{
printf("%d\n",a);
}
return 0;
}
6.找出10个数中的最大值
#include<stdio.h>
int main()
{
int arr[10] = { 21,43,32,54,65,76,87,98,78,19 };
int i = 0;
int max=arr[0];
for (i = 0; i < 10; i++)
{
if (arr[i] >max)
{
max = arr[i];
}
}
printf("%d", max);
return 0;
}
7.将三个数从大到小输出
1)#include<stdio.h>
int main(void)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a > b && b > c)
printf("%d %d %d", a, b, c);
if (a > c && c > b)
printf("%d %d %d", a, c, b);
if (b > a && a > c)
printf("%d %d %d", b, a, c);
if (b > c && c > a)
printf("%d %d %d", b, c, a);
if (c > a && a > b)
printf("%d %d %d", c, a, b);
if (c > b && b > a)
printf("%d %d %d", c, b, a);
return 0;
}
2)#include<stdio.h>
void Swap(int *px,int *py)
{
int tmp = *px;
*px=*py;
*py = tmp;
}
int main(void)
{
int a = 1;
int b = 2;
int c = 3;
if (a < c)
{
Swap(&a, &c);
}
if (b < c)
{
Swap(&b, &c);
}
if (a < b)
{
Swap(&a, &b);
}
printf("%d %d %d", a, b, c);
return 0;
}
8.求两个数的最大公约数
辗转相除法
#include<stdio.h>
int main(void)
{
int a;
int b;
int c;
scanf("%d %d", &a, &b);
while (c = a % b)
{
a = b;
b = c;
}
printf("%d", b);
return 0;
}
9.最小公倍数
#include<stdio.h>
int main()
{
int x, y, z, m, n;
printf("请输入两个数:");
scanf_s("%d%d", &x, &y);
m = x, n = y;
while (y != 0)
{
z = x%y;
x = y;
y = z;
}
printf("最大公约数是: %d\n", x);
printf("最小公倍数是: %d\n", m * n / x);
system("pause");
return 0;
}
10.一道笔试题(问发生了几次循环)
#include<stdio.h>
int main(void)
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
return 0;
}
答案:一次循环都不发生,第一个分号后的K=0;是将0赋值给k,表达式的结果为假,所以循环一次都不会进行;
11.求n的阶乘
#include<stdio.h>
int main(void)
{
int n;
int s =1;
int i = 1;
scanf("%d", &n);
for (i = 1; i<=n; i++)
s = s * i;
printf("%d", s);
return 0;
}
12.求1!+2!+…+10!
#include<stdio.h>
int main(void)
{
int n = 0;
int i = 1;
int ret = 1;
int sum = 0;
scanf("%d", &n);
for (n = 1; n <= 10; n++)
{
while (i <= n)
{
ret *= i;
i++;
}
sum += ret;
}
printf("sum=%d", sum);
return 0;
}
13.输入一串字符,逆序输出。要求使用数组实现
#include<stdio.h>
#include<string.h>
int main()
{
int n,i;
char a[999];
char b[999];
printf("请从键盘输入一个字符串\n") ;
gets(a);
n = strlen(a);
for(i = 0;i<n;i++)
b[n-1-i] = a[i];
printf("逆序输出: \n");
for(i = 0;i<n;i++)
printf("%c",b[i]);
return 0;
}
14.将字符串中的全部大写字母变成小写字母
#include<stdio.h>
#include<string.h>
int main()
{
char a[20];
char b[20];
gets(a);
strcpy(b,a);
strlwr(b);
printf("%s",b);
return 0;
}
15.将字符串中的全部小写字母变成大写字母
#include<stdio.h>
#include<string.h>
int main()
{
char a[20];
char b[20];
gets(a);
strcpy(b,a);
strupr(b);
printf("%s",b);
return 0;
}
16.求1-1/2+1/3-1/4+…+1/99-1/100的值。
#include<stdio.h>
int main()
{
int j = -1;//作为改变正负号的变量
int i = 1;
double sum = 0.0;
double z = 1.0;
for (i = 1; i <= 100; i++)
{
j = j * (-1);
z = j * (1.0 /i);
sum = sum + z;
}
printf("%lf", sum);
}
17.输入三个数a,b,c,要求按从小到大的顺序输出三个数
#include<stdio.h>
void Swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a, b, c;
scanf("%d %d %d", &a,& b, &c);
if (a > b)
{
Swap(&a, &b);
}
if (a > c)
{
Swap(&a, &c);
}
if (b > c)
{
Swap(&b, &c);
}
printf("%d %d %d", a, b, c);
return 0;
}
18.平方根
/*
从键盘输入一个小于1000的正数,要求输出他平方根
如果平方根不是整数,那么就输出其正数部分
要求在输入数据后先进行检查是否为小于1000的正数,若不是,则要求重新输入
*/
#include<stdio.h>
#include<math.h>
#define A 1000
int main()
{
int i = 0;
int k = 0;//平方根的值
scanf("%d", &i);
if (i>A)
{
printf("输入错误,请重新输入\n");
scanf("%d", &i);
}
k = sqrt(i);
printf("%d的平方分的整数部分为:%d", i, k);
return 0;
}
19.给一个不多于五位的正整数,要求出他是几位数
#include<stdio.h>
int main()
{
int num = 0;
int place = 0;
printf("请输入一个数字(0~99999)\n");
scanf("%d", &num);
if (num > 9999)
{
place = 5;
}
else if (num > 999)
{
place = 4;
}
else if (num > 99)
{
place = 3;
}
else if (num > 9)
{
place = 2;
}
else
place = 1;
printf("%d", place);
return 0;
}
20.求1的阶乘一直加到20的阶乘
#include<stdio.h>
int main()
{
int n = 0;
int i = 1;
int sum = 1;
int ret = 0;
scanf("%d", &n);
for (n = 1; n <= 20;n++)
{
while (i <= n)
{
sum = sum * i;
i++;
}
ret = sum + ret;
}
printf("%d", ret);
return 0;
}
21.对10各数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出
#include<stdio.h>
int main()
{
int array[10] = { 0,1,2,3,4,5,6,7,8,9 };
int i = 0;
for (i =9; i >=0; i--)
{
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
22.用数组来处理求斐波那契数列问题
#include<stdio.h>
int main()
{
int i;
int f[20] = { 1,1 };//对前面的两个元素赋初值为1;
for (i = 2; i < 20; i++)
f[i] = f[i - 1] + f[i - 2];
for (i = 0; i < 20; i++)
{
if (i % 5 == 0)
printf("\n");
printf("%12d", f[i]);
}
printf("\n");
return 0;
}
23.有一个3*4的矩阵,要求编写程序求出其中最大的那个元素的值,以及其所在的行号和列号
#include<stdio.h>
int main()
{
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
int i, j, max;
int row, col;
max = a[0][0];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
if (a[i][j] > max)
{
max = a[i][j];
row = i;
col = j;
}
}
}
printf("%d %d %d", max, i, j);
return 0;
}
24.用字符数组输出一个菱形
#include<stdio.h>
int main()
{
char a[][5] = { {' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ',' ','*'},{' ',' ','*'} };
int i=0, j=0;
for(i = 0; i <5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%c", a[i][j]);
}
printf("\n");
}
return 0;
}
25.输入一行字符,统计其中有多少个单词,单词之间用空格隔开
/*
问题的关键在于怎样能够确定出现了一个新的单词了;
可以采用这样的方法:从第一个字符开始逐个字符进行检查,判断此字符是否是新单词的开头,如果是
就使得变量num的值加1(用变量num统计单词的个数)最后得到的num的数值就是单词的总数
判断是否出现新的单词,可以由是否有空格的出现来决定(连续的若干个空格作为出现一次空格,一行
开头的空格不统计在内),如果测出某一个字符为非空格,而他的前面的字符是空格,
那么就表示新的单词开始了,此时num的数值就会加1.
如果当前字符为非空格而其前面的字符也为非空格,则意味着仍然是原来那个单词的继续,此时num的
数值不应该发生改变。用变量word作为判别当前是否开始了一个新单词的标志。若word=0表示未出现新单词,
如果出现了新的单词,就把word的值赋为1;
*/
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
int word = 0, num = 0, i;
char c;
//gets(str);//输入一个字符串;
for (i = 0; (c = str[i]) != '\0'; i++)
if (c == ' ')
word = 0;//如果是空格字符,那么就将word的值置为0
else if (word == 0)//如果不是空格字符且word的原来的值为0
{
word = 1;//使word的值置为1
num++;//num累加1,表示增加一个单词
}
printf("%d", num);
return 0;
}
26.有三个字符串,要求找出其中的最大者
/*
解题思路:可以设一个二维的字符数组str,大小为3x20,即有3行20列(每一行可以容纳20个字符)
每一行存放一个字符串,此二维数组的存储情况如下所示:
str[0]:C h i n a \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
str[1]:J a p a n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
str[2]:I n d i a \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
如上所述,可以把str[0],str[1],str[2]看作3个一维字符数组(他们各有20个元素),
可以把他们如同一维数组那样进行处理,今天用gets函数分别读入三个字符串,赋给3个一维字符数组
然后经过三次两两比较,就可以得到值最大者,然后把他放在一维字符数组string中.
*/
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][20];
char string[20];
int i = 0;
for (i = 0; i < 3; i++)
gets(string[i]);
if (strcmp(str[0], str[1]) > 0)
strcpy(string, str[0]);
else
strcpy(string, str[1]);
if (strcmp(str[2], string) > 0)
strcpy(string, str[2]);
printf("the largest string is %s\n", string);
return 0;
}
当然,这个题目,也可以不采用二维数组,而设置三个一维字符数组来处理
27.求一个3x3矩阵对角线元素的和
#include<stdio.h>
int main()
{
int arr[3][3], i, j;
int sum = 0;
int sum1 = 0;
int sum2 = 0;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &arr[i][j]);
for (i = 0; i < 3; i++)
sum1 = arr[0][0] + arr[1][1] + arr[2][2];
for (i = 0; i < 3; i++)
sum2 = arr[0][2] + arr[1][1] + arr[2][0];
sum = sum1 + sum2;
printf("%d\n", sum);
return 0;
}
28.求n的阶乘,不考虑溢出
#include<stdio.h>
int fac(int n)
{
if (n <= 1)
return 1;
else
return n * fac(n - 1);
}
int main()
{
int n = 0;
int i = 1;
int sum = 1;
scanf("%d", &n);
for (i = 1; i <= n;i++)
{
sum = fac(n);
}
printf("%d", sum);
}
29.编写函数不允许创建临时变量,求字符串的长度,相当于模拟实现strlen
#include<stdio.h>
int my_strlen(const char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr1[] = "abcdef";
int ret = 0;
ret = my_strlen(arr1);
printf("%d", ret);
return 0;
}
30.斐波那契数列
//递归
#include<stdio.h>
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 0;
ret = fib(n);
printf("%d", ret);
return 0;
}
//但是这个代码计算能力较为弱小
//利用非递归求斐波那契数列
#include<stdio.h>
int fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 0;
ret = fib(n);
printf("%d", ret);
return 0;
}
31.打印数组中元素的地址
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("a[%d]=%p\n", i, &arr[i]);
}
return 0;
}
32.打印二维数组中各个元素的地址
#include<stdio.h>
int main()
{
int a[2][4] = { {1,2,3,4},{5,6,7,8} };
int i = 0;
int j = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
printf("a[%d][%d]=%p\n", i, j, &a[i][j]);
}
printf("\n");
}
return 0;
}
33.递归问题
/*
有五个学生坐在一起时,问第五个学生多少岁,他说比第四个学生大两岁,第四个学生比第三个
学生大两岁,第三个学生比第二个学生大两岁,第二个学生比第一个学生大两岁,第一个学生的
年龄是10岁,这个问题可以理解为有关于递归的函数
*/
#include<stdio.h>
int main()
{
int age(int n);
printf("%d", age(5));
return 0;
}
int age(int n)
{
int c;
if (n == 1)
c = 10;
else
c = age(n - 1) + 2;
return(c);
}
34.用递归的方法求出n!
//用递归的方法求出n!
/*
思路:求n!可以用递推方法,即从1开始,乘我,再乘3...一直乘到n
递推的特点是从一个已知的事实(如1!=1)出发,按照一定规律推出下一个事实
如2!=1*2,再从这个新的已知的事实出发,在向下推出一个新的事实..
n!=n*(n-1)
求n的阶乘也可以用递归的方法,如5!=4!*5
n*(n-1)!
*/
#include<stdio.h>
int fac(int n)
{
int ret = 0;
if (n < 0)
{
printf("error!");
}
if (n == 0 || n == 1)
{
ret = 1;
}
if (n > 1)
ret = fac(n - 1) * n;
return(ret);
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = fac(n);
printf("%d", ret);
return 0;
}
35.输入10个数,要求输出其中值最大的元素和该元素是第几个数
#include<stdio.h>
int main()
{
int max(int x, int y); //函数声明
int a[10], m, n, i;
printf("enter ten numbers:");
for (i = 0; i < 10; i++) //输入十个数给a[0]到a[10]
scanf("%d", &a[i]);
printf("\n");
for (i = 1, m = a[0], n = 0; i < 10; i++)
{
if (max(m, a[i]) > m)
{
m = max(m, a[i]);
n = i;
}
}
printf("the largest number is %d\n iy is the %dth number\n", m, n + 1);
}
int max(int x, int y)
{
return(x > y ? x : y);
}
//m用来存放当前已比较过的数中的最大数,开始是设置m的值为a[0],然后将m与a[1]进行比较
//如果a[1]的值大于m的值,就用a[1]的值(此时也就是max(m,a[1])来取代m的原值。
//再用m的新值与之后的数进行比较,依此类推
36.有一个一维数组score,内放10个学生成绩,求平均成绩
#include<stdio.h>
float average(float arr[10])
{
int i = 0;
float sum = arr[0];
float average = 0;
for (i = 1; i < 10; i++)
sum = sum + arr[i];
average = sum / 10;
return average;
}
int main()
{
float score[10];
int i = 0;
float ret = 0.0;
for (i = 0; i < 10; i++)
{
scanf("%f", &score[i]);
}
printf("\n");
ret = average(score);
printf("%f", ret);
return 0;
}
37.有一个一维数组,内放置了10个学生的成绩,写一个函数,当主函数调用这个函数的时候,能求出平均分,最高分和最低分。
#include<stdio.h>
float MAX, MIN;
float average(float arr[], int n)
{
int i = 0;
float aver, sum = arr[0];
MAX = MIN = arr[0];
for (i = 1; i <n; i++)
{
if (arr[i] > MAX)
{
MAX = arr[i];
}
else if (arr[i] < MIN)
{
MIN = arr[i];
}
sum = sum + arr[i];
}
aver = sum / n;
return(aver);
}
int main()
{
float average(float arr[], int n);
float arr[10],ave;
int i = 0;
for (i = 0; i < 10; i++)
{
printf("a[%d]= ", i);
scanf("%f", &arr[i]);
}
for (i = 0; i < 10; i++)
{
printf("%f ", arr[i]);
}
ave = average(arr, 10);
printf("\n");
printf("max=%6.2f\n,min=%6.2f\n,average=%6.2f\n", MAX, MIN, ave);
return 0;
}
38.输入1-5的阶乘值
#include<stdio.h>
int fac(int i)
{
static int sum = 1; //static不释放
sum = sum * i;
return(sum);
}
int main()
{
int i = 1;
int ret = 1;
for (i = 1; i <= 5; i++)
{
ret = fac(i);
printf("%d!=%d\n", i,ret);
}
return 0;
}
39.调用函数求三个整数中的最大值
#include<stdio.h>
int MAX(int m, int y, int n)
{
int max = m;
if (n > m)
max = n;
if (y > m)
max = y;
return(max);
}
int main()
{
int a, b, c;
int ret = 0;
scanf("%d %d %d", &a, &b, &c);
ret = MAX(a, b, c);
printf("%d", ret);
return 0;
}
40.360面试题
#include<stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("%d %d %d %d", a, b, c, d);
return 0;
}
//1 2 3 4
#include<stdio.h>
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("%d %d %d %d", a, b, c, d);
return 0;
}
//2 3 3 5
#include<stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("%d %d %d %d", a, b, c, d);
return 0;
}
//1 3 3 4
41.编写程序数一下 1到 100 的所有整数中出现多少次数字9
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i%10==9)
{
count++;
printf("%d ", i);
}
if (i / 10 ==9)
{
count++;
printf("%d ", i);
}
}
printf("\n");
printf("%d", count);
return 0;
}
42.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
#include<stdio.h>
int main()
{
int i = 1;
int j = -1;
float sum = 0.0;
float z = 1.0;
for (i = 1; i <= 100; i++)
{
j = (-1) * j;
z = j * (1.0 / i);
sum = sum + z;
}
printf("%f", sum);
return 0;
}
43.将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include<stdio.h>
void Swap(int arr1[], int arr2[], int len)
{
int i = 0;
int temp;
for (i = 0; i < len; i++)
{
int temp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = temp;
}
}
int main()
{
int i = 0;
int arr1[10] = { 1,3,5,7,9,2,4,6,8,10 };
int arr2[10] = { 2,5,6,8,10,1,3,5,7,9 };
int len = sizeof(arr1) / sizeof(arr1[0]);
Swap(arr1, arr2,len);
for (i = 0; i < len; i++)
{
printf("%d", arr1[i]);
}
printf("\n");
for (i = 0; i < len; i++)
{
printf("%d", arr2[i]);
}
return 0;
}
44.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9 * 9口诀表,输入12,输出12 * 12的乘法口诀表。
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int k = 0;
scanf("%d",&k);
for (i = 1; i <= k; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%2d ",i,j,i*j);
}
printf("\n");
}
return 0;
}