由于小雅兰的C语言程序设计考试的时间实在是越来越近了,那么,这篇博客也就产生了,这篇博客的主要内容是一些C语言程序设计的练习题,现在,就让我们一起进入C语言的世界吧。
1.函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新数,作为函数值返回。例如,从主函数输入一个整数27638496,则函数返回值为26846.
#include<stdio.h> unsigned long fun(unsigned long n) { unsigned long x=0; unsigned long i=0; unsigned long s=0; int t=0; s=n; i=1; while(s>0) { t=s%10; if(t%2==0) { x=x+t*i; i=i*10; } s=s/10; } return x; } int main() { unsigned long n=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000):"); scanf("%ld",&n); } printf("\nThe result is:%d\n",fun(n)); }
2.功能:下面的程序是求1!+3!+5!+……+n!的和。
#include<stdio.h> int main() { long int f=0; long int s=0;//求和 int i=0; int j=0; int n=0;//输入的数的个数 scanf("%d",&n); for(i=1;i<=n;i+=2) { f=1; for(j=1;j<=i;j++) { f=f*j; } s=s+f; } printf("n=%d,s=%ld\n",n,s); }
3.功能:以下程序是用选择法对10个整数按升序排序
#include<stdio.h> #define N 10 int main() { int i = 0; int j = 0; int k = 0; int t = 0; int a[N] = { 0 };//数组元素为10的一维数组 for (i = 0; i < N; i++) { scanf("%d", &a[i]); } for (i = 0; i < N - 1; i++) { k = i; for (j = i + 1; j < N; j++) { if (a[j] < a[k]) { k = j; } } if (k!=i) { t = a[i]; a[i] = a[k]; a[k] = t; } } printf("output the sorted array:\n"); for (i = 0; i < N; i++) { printf("%5d", a[i]); } printf("\n"); }
4.功能:求100-999之间的水仙花数
说明:水仙花数是指一个三位数的各位数字的立方和是这个数本身。
例如:153=1^3+5^3+3^3)。
#include<stdio.h> int fun(int n) { int i = 0; int j = 0; int k = 0; int m = 0; m = n; for (i = 1; i < 4; i++) { j = m % 10; m = (m - j) / 10; k = k + j * j * j; } if (k == n) return(1); else return(0); } int main() { int i = 0; for (i = 100; i < 1000; i++) { if (fun(i) == 1) { printf("%d是水仙花数!\n", i); } } }
5.功能:输出100到1000之间的各位数字之和能被15整除的所有数,输出时每10个一行。
#include<stdio.h> int main() { int m = 0; int n = 0; int k = 0; int i = 0; for (m = 100; m <= 1000; m++) { k = 0; n = m; do { k = k + n % 10; n = n / 10; } while (n > 0); if (k % 15 == 0) { printf("%5d", m); i++; if (i % 10 == 0)//输出时每10个一行 { printf("\n"); } } } }
6.功能:计算并输出500以内最大的10个能被13或17整除的自然数之和。
#include<conio.h> #include<stdio.h> int fun(int k) { int m = 0; int mc = 0;//题目要求500以内最大的10个 while(k >= 2 && mc < 10 ) { if(k % 13 == 0 ||k % 17 == 0 ) { m = m + k; mc++; } k--; } return m; } int main() { printf("%d\n", fun(500)); }
7.题目:计算100-1000之间有多少个数,其各位数字之和是5.
#include<stdio.h> int main() { int i = 0; int s = 0; int k = 0; int count = 0; for (i = 100; i < 1000; i++) { s = 0; k = i; while ( k > 0 ) { s = s + k % 10; k = k / 10; } if (s != 5) continue; else { count++; printf("%d ", i); } } printf("\n个数为:%d\n", count); return 0; }
8.功能:输入整数a和b,交换a和b后输出。
#include<stdio.h> int main() { int a = 0; int b = 0; int temp = 0; printf("输入整数a,b:"); scanf("%d%d",&a,&b); temp = a; a = b; b = temp; printf("a=%d,b=%d\n", a, b); return 0; }
10.功能:从键盘输入一个大写字母赋给c1,要求改用小写字母输出。
#include<stdio.h> int main() { char c1 = 0; char c2 = 0; c1 = getchar(); c2 = c1 + 32; printf("%c %c", c1, c2); return 0; }
11.题目:以下程序求100~200之内的素数。
#include<stdio.h> #include<math.h> void sushu(int m) { int k = 0; int i = 0; k = (int)sqrt(m); for (i = 2; i <= k; i++) { if (m % i == 0) { break; } } if (i >= k + 1) { printf("%4d", m); } } int main() { int m = 0; for (m = 100; m < 200; m++) { sushu(m); } return 0; }
12.题目:下列程序的功能为:输出100以内能被4整除且个位数为8的所有整数;请填写适当的符号或语句,使程序实现其功能。
#include<stdio.h> int main() { int i = 0; int j = 0; for (i = 0; i < 10 ; i++) { j = i * 10 + 8; if (j % 4 == 0) { continue; } printf("%d ", j); } return 0; }
13.题目: 以下程序按每行5个数的格式输出1至n范围内能被7或17 整除的整数,并求出其和。
如输入:50 则输出:
7 14 17 21 28
34 35 42 49
Sum=247
#include<stdio.h> int main() { int i = 0; int n = 0; int ct = 0; int sum = 0; scanf("%d", &n); for (i = 1; i <= n; i++) { if ((i % 7 == 0) || (i % 17 == 0)) { printf("%d\t", i); sum += i; ct++; if (ct % 5 == 0)//每5个输出一行 { printf("\n"); } } } printf("\nsum=%d\n", sum); return 0; }
14.题目:以下程序的功能是:输出a、b、c三个变量中的最小值。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a = 0; int b = 0; int c = 0; int t1 = 0; int t2 = 0; scanf("%d %d %d", &a, &b, &c); t1 = a < b ? a : b; t2 = c < t1 ? c : t1; printf("%d\n", t2); return 0; }
15.功能:调用函数fun计算m=1-2+3-4+……+9-10,并输出结果。
#include<stdio.h> int fun(int n) { int m = 0; int f = 1; int i = 0; for (i = 1; i <= n ; i++) { m += f * i; f = -f; } return m; } int main() { printf("m=%d\n", fun(10)); }
16.功能:将一个数组中的元素按逆序存放。
#include<stdio.h> #define N 7 int main() { static int a[N] = { 12,9,16,5,7,2,1 }; int k = 0; int s = 0; printf("\n 原来的数组为:\n"); for(k = 0; k < N; k++) { printf("%4d", a[k]); } for(k = 0; k < N / 2; k++ ) { s = a[k]; a[k] = a[N - k - 1]; a[N - k - 1] = s; } printf("\n 逆序的数组为:\n"); for (k = 0; k < N; k++) { printf("%4d", a[k]); } return 0; }
17.求一个二维数组中每行的最大值和每行的和。
#include<stdio.h> int main() { int a[5][5]; int b[5]; int c[5]; int i = 0; int j = 0; int k = 0; int s = 0; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { scanf("%d", &a[i][j]); } } for (i = 0; i < 5; i++) { k = a[i][0]; s = 0; for (j = 0; j < 5; j++) { if (k < a[i][j]) { k = a[i][j]; } s = s + a[i][j]; } b[i] = k; c[i] = s; } for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { printf("%5d", a[i][j]); } printf("%5d %5d", b[i], c[i]); printf("\n"); } return 0; }
18.功能:统计一个字符串中的字母、数字、空格和其它字符的个数。
#include<stdio.h> void fun(char s[], int b[]) { int i = 0; for(i = 0; s[i] != '\0'; i++) { if('a' <= s[i] && s[i] <= 'z' || 'A' <= s[i] && s[i] <= 'Z') { b[0]++; } else if ('0' <= s[i] && s[i] <= '9') { b[1]++; } else if(s[i] == ' ') { b[2]++; } else { b[3]++; } } } int main() { char s1[80]; int a[4] = { 0 }; int k = 0; gets(s1); fun(s1, a); puts(s1); for (k = 0; k < 4; k++) { printf("%4d", a[k]); } }
19.说明:下面程序的功能是将一个字符串str的内容颠倒过来。。
#include<stdio.h> #include<string.h> int main() { int i = 0; int j = 0; int k = 0; char str[] = "1234567"; for (i = 0, j = strlen(str); i < j; i++, j--) { k = str[i]; str[i] = str[j - 1]; str[j - 1] = k; } puts(str); }
20.说明:下面程序的功能是输出数组s中最大值元素的下标。
#include<stdio.h> int main() { int k = 0; int p = 0; int s[] = { 1,9,7,2,10,3 }; for (p = 0, k = p; p < 6; p++) { if (s[p] > s[k]) { k = p; } } printf("%d\n", k); }
21.功能:编写程序,输出 1000 以内的所有完数及其因子。
说明:所谓完数是指一个整数的值等于它的因子之和。
例如“ 6 的因子是 1 、 2 、 3 ,而 6=1+2+3 ,故 6 是一个完数。
#include<stdio.h> int main() { int i = 0; int j = 0; int m = 0; int s = 0; int k = 0; int a[100]; for (i = 1; i<=1000; i++) { m = i; s = 0; k = 0; for (j = 1; j < m; j++) { if (m % j == 0) { s = s + j; a[k++] = j; } } if (s != 0 && s == m) { for (j = 0; j < k; j++) { printf("%4d", a[j]); } printf(" =%4d\n", i); } } }
22.功能:输出Fibonacci数列的前15项,要求每行输出5项。Fibonacci数列:1,1,2,3,5,8,13...........
#include<stdio.h> int main() { int fib[15]; int i; fib[0] = 1; fib[1] = 1; for (i = 2; i < 15; i++) { fib[i] = fib[i - 1] + fib[i - 2]; } for (i = 0; i < 15; i++) { printf("%d\t", fib[i]); if (i % 5 == 4) { printf("\n"); } } }
23.题目:求出1~1000以内前20个不能被2,3,5,7整除的数之和。
#include<stdio.h> int main() { int i = 0; int j = 0; int a[20]; int sum = 0;// 前20个不能被2, 3, 5, 7整除的数保存在a数组中,它们的和保存在sum中。 for (i = 0; i < 1000; i++) { if ((i % 2 != 0) && (i % 3 != 0) && (i % 5 != 0) && (i % 7 != 0)) { a[j++] = i; } if (j > 19) break; } for (i = 0; i < 20; i++) { sum += a[i]; } printf("和为:%d\n", sum); }
24.题目:求出1~5000以内前5个能被3,5,11整除的数之和。
#include<stdio.h> int main() { int i = 0; int j = 0; int a[5]; int sum = 0; //前5个能被3,5,11整除的数保存在a数组中,它们的和保存在sum中。 for (i = 1; i < 5000; i++) { if ((i % 3 == 0) && (i % 5 == 0) && (i % 11 == 0)) { a[j++] = i; } if (j > 4) break; } for (i = 0; i < 5; i++) { sum += a[i]; } printf("和为:%d\n", sum); }
25.题目:求出1~1000以内前5个能被3,5,11整除的数之和。
#include<stdio.h> int main() { int i = 0; int j = 0; int a[5]; int sum = 0; //前5个能被3,5,11整除的数保存在a数组中,它们的和保存在sum中。 for (i = 1; i < 1000; i++) { if ((i % 3 == 0) && (i % 5 == 0) && (i % 11 == 0)) { a[j++] = i; } if (j > 4) break; } for (i = 0; i < 5; i++) { sum += a[i]; } printf("和为:%d\n", sum); }
26.题目:求出1~1000以内前5个能被2,3,5整除但不能被11整除的数之和。
#include<stdio.h> int main() { int i = 0; int j = 0; int a[5]; int sum = 0; //前5个能被2,3,5整除但不能被11整除的数保存在a数组中,它们的和保存在sum中。 for (i = 1; i < 1000; i++) { if ((i % 2 == 0) && (i % 3 == 0) && (i % 5 == 0) && (i % 11 != 0)) { a[j++] = i; } if (j > 4) break; } for (i = 0; i < 5; i++) { sum += a[i]; } printf("和为:%d\n", sum); }
27.题目:用循环编写程序求1-3+5-7+…-99+101的值
#include<stdio.h> int main() { int i=0; int s = 0; int f = 1;//i定义为循环变量,s为1-3+5-7+…-99+101的值 for (i = 1; i <= 101; i += 2) { s = s + i * f; f = -f; } printf("%d", s); }
28.题目:写程序从键盘输入一个整数n,用循环求1+4+9+16+……+n*n的值
#include<stdio.h> int main() { int i = 0; int s = 0; int n = 0;//i定义为循环变量,s为1+4+9+16+……+n*n的值 scanf("%d", &n); for (i = 1; i <= n; i++) { s = s + i * i; } printf("%d", s); return 0; }
29.功能:编写函数fun求1!+2!+3!+ …… +n!的和,在main函数中给n赋值,并输出运算结果。请编写fun函数。
例如:若n值为5,则结果为153。
#include<stdio.h> long int fun(int n) { int i = 0; long int f = 1; int s = 0; for (i = 1; i <= n; i++) { f = f * i; s = s + f; } return s; } int main() { int n = 0; long int result = 0; n = 5; result = fun(n); printf("%ld\n", result); return 0; }
30.功能:编写函数fun求1*2+2*3+3*4+ …… +n*(n+1)的和,在main函数中由键盘输入n值,并输出运算结果。请编写fun函数。
#include<stdio.h> long int fun(int n) { int i = 0; long int s = 0; for (i = 1; i <= n; i++) { s = s + i * (i + 1); } return s; } int main() { int n = 0; long int result = 0; n = 12; result = fun(n); printf("%ld\n", result); return 0; }
31.功能:功能:编写函数fun求1/2-2/3+3/4- …… +99/100的和,在main函数中调用fun函数送入参数值100,并输出运算结果。请编写fun函数。
#include<stdio.h> float fun(int n) { int i = 0; float f = 1; float s = 0; for (i = 1; i <= 99; i++) { s = s + f * i / (i + 1); f = -f; } return s; } int main() { int n = 0; float result=0.00; result = fun(100); printf("%.2f\n", result); return 0; }
32.题目:试编写程序,用循环从键盘输入某门课5名学生的成绩,并求出这5个学生成绩的平均分avg。
#include <stdio.h> int main() { float a[5]; int avg = 0; int i = 0; int j = 0; printf("请输入5名学生的成绩\n"); for (i = 0; i < 5; i++) { scanf("%f", &a[i]); avg = avg + a[i]; } avg = avg / 5; printf("平均分=%f\n", avg); return 0; }
33.题目:试编写程序,用循环从键盘输入某门课5名学生的成绩,并求出这5个学生成绩的最高分max。
#include <stdio.h> int main() { float a[5]; float max; int i = 0; int j = 0; printf("请输入5名学生的成绩\n"); for (i = 0; i < 5; i++) { scanf("%f", &a[i]); } max = a[0]; for (i = 1; i < 5; i++) { if (a[i] > max) { max = a[i]; } } printf("最高分=%f\n", max); return 0; }
34.题目:试编写程序,用循环从键盘输入某门课5名学生的成绩,并求出这5个学生成绩的最低分min。
#include <stdio.h> int main() { float a[5]; int min = 0; int i = 0; printf("请输入5名学生的成绩\n"); for (i = 0; i < 5; i++) { scanf("%f", &a[i]); } min = a[0]; for (i = 1; i < 5; i++) { if (a[i] < min) { min = a[i]; } } printf("最低分=%f\n", min); return 0; }
35.题目:试编写程序,用循环从键盘输入某门课5名学生的成绩,并求出这5个学生中成绩在60以上(含60)的人数count。
#include <stdio.h> int main() { float a[5]; int i = 0; int count = 0; printf("请输入5名学生的成绩\n"); for (i = 0; i < 5; i++) { scanf("%f", &a[i]); if (a[i] >= 60) count++; } printf("分数在60以上的人数有%d人\n", count); return 0; }
36.题目:试编写程序,用循环从键盘输入某门课5名学生的成绩,并求出这5个学生中成绩在60以下(不含60)的人数count。
#include <stdio.h> int main() { float a[5]; int i = 0; int count = 0; printf("请输入5名学生的成绩\n"); for (i = 0; i < 5; i++) { scanf("%f", &a[i]); if (a[i] < 60) count++; } printf("分数在60以下的人数有%d人\n", count); return 0; }
37.题目:编写函数对数组中的10个整数进行排序。
#include<stdio.h> //fun函数功能:对数组中的n个整数进行排序 void fun(int a[], int n) { int i = 0; int j = 0; int t = 0; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } int main() { int a[10]; int i = 0; printf("请输入10个整数"); for (i = 0; i < 10; i++) { scanf("%d", &a[i]); } fun(a, 10); printf("排序后的数组为:"); for (i = 0; i < 10; i++) { printf("%d,", a[i]); } putchar('\n'); return 0; }
38.题目:编写函数对数组中的n个整数进行逆序排列。
#include<stdio.h> //fun函数功能:对数组中的n个整数进行排序 void fun(int a[], int n) { int i = 0; int j = 0; int t = 0; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] < a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } void main() { int a[10]; int i = 0; printf("请输入10个整数"); for (i = 0; i < 10; i++) { scanf("%d", &a[i]); } fun(a, 10); printf("排序后的数组为:"); for (i = 0; i < 10; i++) { printf("%d,", a[i]); } putchar('\n'); return 0; }
39.题目:编写函数对n个职工的工资进行排序。
#include<stdio.h> //fun函数功能:对数组中的n个浮点型数进行排序 void fun(float a[], int n) { int i = 0; int j = 0; float t; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } int main() { float a[10]; int i; printf("请输入10个职工的工资"); for (i = 0; i < 10; i++) { scanf("%f", &a[i]); } fun(a, 10); printf("排序后的工资为:"); for (i = 0; i < 10; i++) { printf("%f,", a[i]); } putchar('\n'); return 0; }
40.题目:编写函数对字符串中n个字符按照ASCII码值排序。
#include<stdio.h> #include<string.h> //fun函数功能:对字符串中的字符进行排序 void fun(char a[]) { int i = 0; int j = 0; int n = strlen(a); char t; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } int main() { char a[20]; int i; printf("请输入一个字符串"); gets(a); fun(a); printf("排序后的字符串为:"); puts(a); return 0; }
41.题目:编写函数对字符串中n个字符按照ASCII码值逆序排列。
#include<stdio.h> #include<string.h> //fun函数功能:对字符串中的字符进行逆序排列 void fun(char a[]) { int i = 0; int j = 0; int n = strlen(a); char t; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] < a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } int main() { char a[20]; int i; printf("请输入一个字符串"); gets(a); fun(a); printf("排序后的字符串为:"); puts(a); return 0; }
42.给出年、月、日,计算该日是该年的第几天
#include<stdio.h> int main() { int sum_day(int month, int day); int leap(int year); int year, month, day, days; printf("input date(year,month,day):"); scanf("%d,%d,%d", &year, &month, &day); printf("%d/%d/%d ", year, month, day); days = sum_day(month, day);/* 调用函数sum_day */ if (leap(year) && month >= 3)/* 调用函数leap */ days = days + 1; printf("is the %dth day in this year.\n", days); return 0; } int sum_day(int month, int day)/* 函数sum_day:计算日期 */ { int day_tab[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int i; for(i = 1; i < month; i++) day += day_tab[i];/* 累加所在月之前天数 */ return(day); } int leap(int year)/* 函数leap:判断是否为闰年 */ { int leap; leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0; return(leap); }
43.求一个3*3的整型矩阵对角线元素之和。
#include<stdio.h> int main() { int a[3][3]; int i = 0; int j = 0; int s = 0; for (i = 0; i <= 2; i++) { for (j = 0; j <= 2; j++) { scanf("%d", &a[i][j]); if ((i == j) || (i + j == 2)) { s = s + a[i][j]; } } } printf("%d\n", s); return 0; }
44.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
#include<stdio.h> int main() { int i = 0; int j = 0; int upp = 0; int low = 0; int dig = 0; int spa = 0; int oth = 0; char text[3][80]; for (i = 0; i < 3; i++) { printf("please input line %d:\n", i + 1); gets(text[i]); for (j = 0; j < 80 && text[i][j] != '\0'; j++) { if (text[i][j] >= 'A' && text[i][j] <= 'Z') upp++; else if (text[i][j] >= 'a' && text[i][j] <= 'z') low++; else if (text[i][j] >= '0' && text[i][j] <= '9') dig++; else if (text[i][j] == ' ') spa++; else oth++; } } printf("\nupper case: %d\n", upp); printf("lower case: %d\n", low); printf("digit case: %d\n", dig); printf("space case: %d\n", spa); printf("other case: %d\n", oth); return 0; }
好啦,小雅兰的C语言题库就到这里了,考试加油呀!!!