问题 1：求输入的 5 个整数的平均数，结果保留两位小数。

输入：仅一行，为 5 个整数，以空格间隔。

输出：仅一行，为 5 个整数的平均值，浮点数，保留小数点后 2 位。

例子输入：2 4 5 6 9

例子输出：5.20

程序

#include <stdio.h>

int main()

{

int i, sum = 0;

int input = 0;

for( i=0; i<5; i++){

scanf("%d", &input);

sum += input;

}

double average = sum*1.0/5;

printf("%.2f", average);

return 0;

}

问题 2：输入一个整数，将这个整数的各位逆转后输出

例如：输入 123，输出 321；输入-123，输出-321

程序：

#include <stdio.h>

int main()

{

/*用于保存输入的待转换的数*/

int number;

/*用于保存被转换后的数*/

int reversed_number = 0;

/*用于保存每次循环的余数*/

int remainder = 0;

/*输入一个整数*/

printf("请输入一个整数：");

scanf("%d",&number);

/*每次循环求出除 10 的余数,并将 number 除以 10,直至 number 为 0 为止*/

while(number != 0){

remainder = number % 10;

reversed_number *= 10;

reversed_number += remainder;

number /= 10;

}

/*打印结果*/

printf("转换后的数为：%d\n",reversed_number);

return 0;

}

问题 3：求正整数 n (n<=10) 的阶乘

输入：一个不大于 10 的正整数 n

输出：n 阶乘的值

例子输入：9

例子输出：362880

#include <stdio.h>

int main()

{

int n;

int s=1;

scanf("%d", &n);

for(int i=2; i<=n; i++){

s *= i;

}

printf("%d", s);

return 0;

}

问题 4：判断整数 n (1<n<10000) 是否为质数

输入：一个大于 1 且小于 10000 的整数 n

输出：如果 n 是质数输出"YES"，否则输出"NO"

例子输入：97 例子输出：YES

程序：

#include <stdio.h>

#include <math.h>

int main()

{

int n;

scanf("%d", &n);

if (n % 2 == 0){

if (n == 2)

printf("YES");

else

printf("NO");

return 0;

}

for(int i=3; i<=sqrt((double)n); i+=2){

if (n % i == 0){

printf("NO");

return 0;

}

}

printf("YES");

return 0;

}

问题 5：求既约分数

输入：空格间隔的两个整数 a b，分别是分子和分母

输出：分子、分母不含有公共因子的等价分数，形式为 a/b

示例输入：10 15

示例输出：2/3

方法：蛮力约分

程序：

#include <stdio.h>

int main()

{

int a, b, c, i;

scanf("%d%d", &a, &b);

c = a;

if (b < a)

c = b;

// 从 2 一直尝试到较小的那个数

for (i = 2; i <= c; i++) {

// 如果有公因子就约分，注意必须用 while, 而不是 if

while (a % i == 0 && b % i == 0) {

a /= i;

b /= i;

}

}

printf("%d/%d\n", a, b);

return 0;

}

问题 6：求整数的平方和

给定一个正整数 k（1<k<10），求 1 到 k 的平方和 sum。即 su m=1+2*2+…+k*k。

关于输入

输入只有一行，该行包含一个正整数 k。

关于输出

输出只有一行，该行包含 1 到 k 的平方和 sum。

#include <stdio.h>

int main()

{

int i, k, sum=0;

scanf("%d", &k);

for(i=1; i<k+1; i++){

sum += i*i;

}

printf("%d\n", sum);

return 0;

}

问题 7：统计一定范围内整数（从 1～range(由程序输入)）除去因子（factor）的倍数外的数字之和。

输入：

输入两个整数，第一个整数表示要统计的数字范围（range），从 1 开始

第二个整数表示因子（factor）。

输出：

输出在 1～range 内的数字除去 factor 的倍数外的数字之和

示例：

输入：10 8

输出：The sum of 1~10 exclude multiples of '8' is 47

程序：

/*

在一定范围内的数字(1～range)，统计除去因子 factor 的倍数外的数字之和。

*/

#include <stdio.h>

int main()

{

int range; // = 8;

int factor;

int x = 0;

int sum = 0;

scanf("%d %d", &range, &factor);

int i = range;

while( i > 0){

x = i % factor;

i --;

if ( 0 == x)

continue;

sum += (i + 1);

}

printf("The sum of 1~%d exclude multiples of '%d' is %d\n", range, factor, sum);

return 0;

}

问题 8：输入任意数量的英文，按 Ctrl+z 结束输入。统计输入英文的行数、单词数、字符数。其中单词是一串连续的字符串，该串不包含空格(blank)，tab 建或者换行符(newline)。

输入：

任意数量的英文单词，按 Ctrl+z 结束输入（注意，要在新的一行单独输入）。

输出：

输出输入英文的行数、单词数、字符数，格式为：“行数 单词数 字符数”。

例子输入（其中^Z 表示按下 Ctrl+z）：

a b c

ddd e f

^Z

例子输出：

2 6 15

#define IN 1 /* inside a word */

#define OUT 0 /* outside a word */

#include <stdio.h>

/* count lines, words, and charactors in input */

int main()

{

int c, nl, nw, nc, state;

state = OUT;

nl = nw = nc = 0;

while ((c = getchar()) != EOF) { //EOF 表示’ ^Z’

++ nc;

if (c == '\n')

++ nl;

if (c == ' ' || c == '\n' || c == '\t') {

state = OUT;

} else if (state == OUT) {

state = IN;

++ nw;

}

}

printf("%d %d %d\n", nl, nw, nc);

return 0;

}

问题 9：有两种细菌，一种是有害菌，繁殖能力很强，每小时会繁殖一倍；另一种是有益菌，繁殖能力较弱，每小时能繁殖百分之五。但在单位体积内，当有害菌数量超过一 百万时，多出的细菌会因为密度太大而迅速死亡，直到细菌数量下降到一百万。已知每个有益菌每小时能消灭一个有害菌。给定单位体积内有害菌和有益菌的初始数 量，请问多少小时后，有害菌将被有益菌消灭干净？

输入

有两个整数，依次为有害菌和有益菌单位体积中的初始数量。整数之间用一个空格分隔。

输出

一个整数，为每组数据对应的有害菌将被有益菌消灭干净所用的小时数。

程序

#include <stdio.h>

int main()

{

int bad, good;

int hour=0;

scanf("%d %d", &bad, &good);

for(; bad > 0; hour++){

bad = bad - good;

bad = bad * 2;

good = good * 1.05;

if (bad >1000000)

bad = 1000000;

}

printf("%d", hour);

return 0;

}

问题 10：用户输入一组非 0 的数，程序分别输出正数和负数的个数。

程序：

#include <stdio.h>

int main()

{

int n1 = 0, n2 = 0;

int v;

scanf("%d", &v);

while (v!=0){

if(v>0) n1++;

if(v<0) n2++;

scanf("%d", &v);

}

printf("正数个数：%d\n 负数个数：%d\n", n1, n2);

return 0;

}

问题 11：

一般认为，女性的标准体重是：身高（厘米）－105＝标准体重（公斤）。

一般认为，男性的标准体重是：身高（厘米）－100＝ 标准体重（公斤）

例如，一个身高 160 厘米的女子，她的标准体重应该是：160 （厘米）－105＝55（公斤）。凡是超过标准体重 10％者为偏重，超过标准体重 20％以上者为肥胖，低于 10％者为偏瘦，低于 20％者为消瘦。

输入：

m/f 身高（float，单位为米） 体重（单位 kg）

的输出：

肥胖/偏重/标准/偏瘦/消瘦

例：输入 m 1.70 57 输出 偏瘦

#include <stdio.h>

int main()

{

float height;

float weight;

char fm;

float bw

float temp;

scanf("%c %f %f", &fm, &height, &weight);

if(fm=='f')

bw = height*100 -105;

else

bw = height*100 - 100;

temp = weight/bw;

if(temp>1.2)

printf("肥胖\n");

else if(temp>1.1)

printf("偏重\n");

else if(temp>=0.9)

printf("标准\n");

else if(temp>=0.8)

printf("偏瘦\n");

else

printf("消瘦\n");

return 0;

}

问题 12：

这个程序的输入是一个字符串，字符串以"?"结束。

输出是这个字符串的每一个单词的第一个字母大写，其他字母小写。

#include <stdio.h>

int main()

{

int word;

char ch;

word=0;

while((ch=getchar())!='?'){

if(ch==' ') word=0;

else if(word==0){

word=1;

if(ch<='z'&&ch>='a')

ch=ch-'a'+'A';

}

putchar(ch);

}

return 0;

}

问题 13：在不使用数学函数库的情况下，求给定的正整数是否有正整数的平方根。

输入：任意一个正整数（1，2，...）

输出：如果存在正整数平方根，则输出这一正整数平方根。如果没有，则输出“无正整数平方根”

程序：

#include <stdio.h>

int main()

{

printf("请输入需要判断的正整数\n");

int n;

scanf("%d",&n);

int i=0;

while (i*i<n){

i++;

}

if (i*i == n) printf("%d 的平方根是正整数%d\n", n, i);

else printf("%d 的平方根不是正整数\n",n);

return 0;

}

问题 14：

打印杨辉三角形，结构如下：

1

121

12321

1234321

输入：5

输出：

1

121

12321

1234321

123454321

程序：

#include <stdio.h>

int main(int argc, char *argv[])

{

int n, k, j;

scanf("%d", &n);

int width=2*n-1;

for(int i=1;i<=n;i++)

{

int space=n-i;

for(j=0; j<space; j++)

printf(" ");

for(k=1; k<=i; k++)

printf("%d", k);

for(k=i-1; k>0; k--)

printf("%d", k);

for(j=0; j<space; j++)

printf(" ");

printf("\n");

}

return 0;

}

问题 15：通过本程序，学习使用 scanf 和 printf 两个重要函数的基本用法，了解初学 C 程序的常见错误，另外，初步了解程序风格。

#include <stdio.h>

int main()

{

// 程序的风格很重要，能够提高程序的可读性，另外提高程序的美感。

// 有效的利用空格和换行，能够改进程序风格。请认真观察本程序中

// 对空格的使用。

int int1, int2, int3; // 整数

float fl1, fl2, fl3, average; // 浮点数，即小数

double db1, dbsum; // 双精度浮点数，能够比浮点数表示更加精确的小数

// 首先，学习 printf 的基本应用, 需要被打印的内容包含在双引号中，\n 表示换行

// 请注意，双引号是不用输入法的，仔细比较一下 " 和 " 的区别

// 另外，每个语句后的分号也是不用输入法的，再仔细对比一下 ; 和 ： 的区别

// 最后，\n 是换行，不是/n

printf("请输入三个整数，用空格分开\n");

// 正如前面打印出的提示，首先，给三个整型赋值

scanf("%d %d %d", &int1, &int2, &int3);

// scanf 中，双引号的部分表示输入内容的匹配，%d 之间不需要加逗号

// 另外，别忘了在变量名前加 &

// 还有一点，双引号最后不需要加\n,

// 比较典型的错误写法如下：

// scanf("%d %d %d\n", &int1, &int2, &int3);

// scanf("%d,%d,%d", &int1, &int2, &int3);

// scanf("%d %d %d", int1, int2, int3);

// scanf("%d %d %d int1, int2, int3");

// 接下来我们计算这三个整数的和，并打印出来

printf("%d + %d + %d = %d\n", int1, int2, int3, int1+int2+int3);

// 百分号%后的字母，d 表示整数，f 表示单精度浮点数，lf 表示双精度浮点数

// Note: lf 是字母 l，不是数字 1

// 接下来读入三个浮点数，可以像读入整数一样写在一个 scanf 里，也可以分开写

printf("请输入三个小数，用空格分开\n");

scanf("%f", &fl1);

scanf("%f %f", &fl2, &fl3);

// 然后我们打印出它们的平均数

average = (fl1+fl2+fl3)/3;

printf("average of %f, %f and %f is %f\n", fl1, fl2, fl3, average);

// float 和 double 有哪些区别？一是用来表示数据的二进制位数不同，因而表示数据的精度也不同

// 二是在输入输出函数中，用来指示数据类型的符号不一样。

// %f 表示单精度浮点数，%lf 表示双精度浮点数。

// 接下来练习双精度，我们输入四个小数值，求它们的和

// 首先让 dbsum 保存它们的和，初始化为 0

dbsum = 0;

// 然后读入四个小数，都加到 dbsum 中

printf("请输入四个小数\n");

scanf("%lf", &db1);

dbsum = dbsum + db1;

scanf("%lf", &db1);

dbsum = dbsum + db1;

scanf("%lf", &db1);

dbsum = dbsum + db1;

scanf("%lf", &db1);

dbsum = dbsum + db1;

// 打印出来，打印两种格式，默认的和小数点后位数是 2 的

printf("%lf %.2lf\n", dbsum, dbsum);

return 0;

}