江苏省二级c语言上机考试例题集1-20 模板

更新时间:2023-12-27 05:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

回文数

#include \int ispal(int n) { int m=0; int t=n; while(t) { m=m*10+t; t/=10; } return m==n; }

void main() { int i; int cnt=0; for(i=1;i<10000;i++) { if(ispal(i)) { cnt++; printf(\ } } printf(\合计:%d个\\n\}

。水仙花数

#include \void main() {

int a,b,c,i;

for(i=100;i<1000;i++) {

a=i/100; b=i0/10; c=i;

if(a*a*a+b*b*b+c*c*c==i) printf(\ } }

1、取出一个十进制正整数中的所以奇数数字,用这些数字构成一个最小数。 #include #include

void sort(int a[], int n) { int i, j, t; for (i = 0;i < n - 1;i++) for (j = 0;j < n - 1 - i;j++) /*利用双重循环,将数组按从小到大排列*/ if (a[j] > a[j + 1]) {t = a[j];a[j] = a[j + 1];a[j + 1] = t; } }

long arrange(long s) /*arrange函数的功能是取出十进制整数s中的所有奇数数字,用这些数字构成一个最小数,函数返回该数*/

{ int d, b[10], i, j = 0;

long s1 = 0; while (s > 0) /*利用循环对s数位分离,分离出个位、十位 、百位等各位上的数*/ { d = s % 10; if (d % 2 != 0) /*判断每一位上的数字是否为奇数*/ b[j++] = d; /*若为奇数则存放到b数组中*/ s /= 10; } sort(b, j); /*调用sort函数,将数组b从小到大排列*/ for (i = 0;i < j;i++) s1 = s1 * 10 + b[i]; /*求得用各位上的奇数组成的最小数 */ return s1; /*返回求得的数*/ }

void main() { long m, n; FILE *fp; /*定义文件指针fp*/ if ((fp = fopen(\涉及文件的打开*/ {printf(\ scanf(\接收键盘输入的整型数据*/ m = arrange(n); /*键盘输入的数据作为实参调用arrange 函数*/ printf(\将得到的最小数输出到屏幕及结果文件中*/ fprintf(fp, \ printf(\ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

*/

2、按要求合并两个字符串

#include #include #include

void fun(char *a, char *b, char *c) /*函数功能是先将b指向的字符串逆序存放,然后按a[0] ,b[0], a[1], b[1]…的顺序合并a字符串和b字符串到c指向的数组中,将a 或b中剩余的字符拼接在c数组的尾部*/ {int i, j; char ch; i = 0;j = strlen(b) - 1; while (i < j) /*利用while循环将数组b中的字符逆序存放*/ {ch = b[i];b[i] = b[j];b[j] = ch; i++;j--; } while (*a || *b) /*利用while循环,通过判断*a || *b,将a、b数组间隔存放在c数组中*/ { if (*a){*c = *a;c++;a++;} if (*b){*c = *b;c++;b++;} } *c = '\\0'; }

void main() { FILE *fp; /*定义文件指针fp*/ char s1[80], s2[80], s[200]; /*声明3个一维数组*/ if ((fp = fopen(\ {printf(\ printf(\:\ gets(s1); printf(\:\

gets(s2); /*s1、s2 接收键盘输入的字符*/ fun(s1, s2, s); /*调用change函数,对字符串s2进行逆序变换,再合并s1字符串和s2字符串并保存到s数组中*/ printf(\:%s\\n\ /*将合并后产生的数组s中的字符串输出到屏幕及结果文件中*/ fprintf(fp, \ fprintf(fp, \ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

3、先判断一个m×n矩阵为Monge矩阵,在对该矩阵进行交换处理

#include #include #define N 5

void change(int a[][N], int n) /*该函数的功能是,对a指向的n行5列数组中的矩阵进行变换*/ {int i, j, t; for (i = 0;i < n / 2;i++) /*通过两重for循环对数组各行的位置进行交换*/ for (j = 0;j < N;j++) {t = a[i][j];a[i][j] = a[n - 1 - i][j];a[n - 1 - i][j] = t;} /*变换形式:第一行与最后一行交换,第二行与倒数第二行交换……*/ }

int Monge(int a[][N], int n) { int i, j; for (i = 0;i < n - 2;i++) /*利用for循环和if语句对数组元素进行矩阵判断,判断是否为Monge矩阵*/ { for (j = 0;j < N - 2;j++) if (a[i][j] + a[i + 1][j + 1] > a[i][j + 1] + a[i + 1][j]) return 0; /*若矩阵不是Monge矩阵,函数返回0*/ } return 1; /*若矩阵是Monge矩阵,函数返回1*/ }

void main() { int a[][N] = {{10, 17, 13, 28, 23}, {17, 22, 16, 29, 23}, {24, 28, 22, 34, 24}, {11, 13, 6, 17, 7}, {45, 44, 32, 37, 23}}; /*数组初始化*/ int monge, i, j;FILE *fp; fp = fopen(\以只写\方式打开文件*/ if (fp == NULL)exit(0); monge = Monge(a, 5); /*调用Monge函数对a数组进行判断*/ for (i = 0;i < N;i++) /*将a数组变换前中的元素输出到屏幕及结果文件中*/ {for (j = 0;j < N;j++) {printf(\ printf(\ } if (monge) {printf(\将a数组变换前的判断结果输出到屏幕及结果文件中*/ else {printf(\ change(a, 5); /*调用change函数对a数组进行变换处理*/ for (i = 0;i < N;i++)

}

{ for (j = 0;j < N;j++) { printf(\ printf(\

} /*将a数组变换后的元素输出到屏幕及结果文件中*/

monge = Monge(a, 5); /*调用Monge函数对经过变换的a数组进行判断*/ if (monge) /*将a数组变换后的判断结果输出到屏幕及结果文件中*/ {printf(\ fprintf(fp, \else

{ printf(\

printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \fclose(fp); /*关闭文件*/

4、用一组整数验证命题

#include #include #define N 100

int fun (int a[], int b[], int n) { int i, x, y, z, s, t, m, k = 0; for (i = 0;i < n;i++) /*按题目要求的步骤进行交换,直到得到所要求的结果停止循环*/ if (a[i] / 1000 < 1) { x = a[i] / 100;y = a[i] / 10 % 10;z = a[i] % 10; /*对数a[i]进行数位分离*/ if (x != z) { s = z * 100 + y * 10 + x; /*交换a[i]的百位数字与个位数字得到s*/ t = s > a[i] ? (s - a[i]) : (a[i] - s); /*求a[i]和s的绝对值得到t*/ x = t / 100;y = t / 10 % 10;z = t % 10; m = z * 100 + y * 10 + x; /*交换 t的百位数字与个位数字得到m*/ if (t + m == 1089) /*判断t与m的和是否为1089*/ b[k++] = i; } } return k; /*函数返回数组b中数据的个数*/ }

void main() { int a[N] = {123, 765, 1, 45, 121, 1345, 131, 67, 696, 3589}, b[N], n, i; FILE *fp; /*定义文件指针*/ if ((fp = fopen(\以只写\方式打开文件 */ {printf(\ n = fun (a, b, 10); /*用a数组作为实参调用fun函数*/ for (i = 0;i < n;i++) {printf(\将a数组中所有符合命题的整数输出到屏幕及结果文件中*/ /*将考生准考证号输出到屏幕及结果文件中*/ printf(\

}

fprintf(fp, \fclose(fp); /*关闭文件 */

5、找出7个默森尼数

#include #include #define N 7

void Mersenne(long a[], int m); int prime(long); void main() { long a[N]; int i; FILE *fp; /*定义文件指针*/ fp = fopen(\以只写\方式打开文件*/ if (fp == NULL)exit(0); Mersenne(a, N); /*调用Mersenne 函数,找出并保存前7个Mersenne 数*/ for (i = 0;i < N;i++) { printf(\将运行结果输出到屏幕及结果文件中*/ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \}

void Mersenne(long a[], int m) /*该函数的功能是,求出前m个Mersenne数*/ {long f, n, k; int i = 0; a[i++] = 3; for (n = 3;i < m;n += 2) { f = 1; for (k = 1;k <= n;k++) f *= 2; /*求2的n次方*/ if (prime(n) && prime(f - 1)) /*当n和2的n次方减1均为素数时,该数为Mersenne 数*/ a[i++] = f - 1; /*将找到的Mersenne 数保存到数组a中*/ } }

int prime(long n) /*该函数的功能是,判断整数a是否是素数*/ {long i; for (i = 2;i <= n / 2;i++) if (n % i == 0) return 0; return 1; /*若是素数函数返回值1*/ }

6、从一个指定的自然数

#include #include

int linkrun(int a, int b, int *p); void main() { int i, a, b, max, p[100]; FILE *fp;

for (i = 0;i < n;i++) /*将变换后的数组a输出到屏幕并用写文件函数保存到结果文件中*/ {printf(\ fprintf(fp, \}

printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \fclose(fp); /*关闭文件*/

}

13、取出一个正整数中的所有偶数数字

#include #include #include

void sort(int a[], int n) /*将数组a中的n个整数进行从大到小排列*/ { int i, j, k, t; for (i = 0;i < n - 1;i++) /*利用双重for循环*/ {k = i; for (j = i + 1;j < n;j++) if (a[j] > a[k])k = j; if (k != i) {t = a[k];a[k] = a[i];a[i] = t;} /*利用中间变量t交换两者的值,最后将数组按从大到小的顺序进行排列*/ } }

long fun(long s) { int d, b[10], i, j = 0; long s1 = 0; while (s > 0) /*利用while循环对数据s进行各位数字各位的分离*/ { d = s % 10; if (d % 2 == 0) /*判断各位是否为偶数,若是偶数则将其保存到数组b中*/ b[j++] = d; s /= 10; } sort(b, j); /* 调用函数sort对b数组中存放的j个偶数进行排序*/ for (i = 0;i < j;i++) s1 = s1 * 10 + b[i]; /* 利用j个偶数,构成一个最大的整数*/ return s1; /* 返回构成的最大数*/ }

void main() { long m, n; FILE *fp; /*定义文件指针*/ if ((fp = fopen(\以只写方式\打开文件*/ {printf(\ scanf(\接收从键盘输入的n */ m = fun(n); /*调用fun函数求出整数n的所有偶数数字构成的一个最大数*/ printf(\将所得结果输出到屏幕并用写文件函数保存到结果文件中*/ fprintf(fp, \ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

14、找出符合以下条件的Troitsky数

#include #include #include #include #define N 10

int Troitsky(long a[]) /*该函数的功能是,求出1000000以内所有的Troitsky数*/ {int count = 0, b; long n, n1; for (n = 1;n <= 1000000;n++) /*利用for循环对1~1000000的数进行变换*/ {n1 = n;b = 0; while (n1 > 0) {b++;n1 /= 10;} /*确定数n的位数,求得数n的首位数字*/ n1 = n % (long)pow(10, b - 1) * 10 + n / (long)pow(10, b - 1); /*将首位作为个位,其他三位数乘以10组成新的整数*/ if (n1 / n == (double)n1 / n && n1 / n > 1) /*判断新的整数是否是原数n的整数倍*/ a[count++] = n; /*将符合要求的数存入数组a中*/ } return count; /*函数返回Troitsky数的个数*/ }

void main() { long a[N], i; int k; FILE *fp; /*定义文件指针*/ fp = fopen(\以只写方式\打开文件*/ if (fp == NULL)exit(0); k = Troitsky(a); /*调用Troitsky函数*/ for (i = 0;i < k;i++) /*将运行结果输出到屏幕并用写文件函数保存到结果文件中*/ {printf(\ printf(\换行*/ fprintf(fp, \ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

15、产生Fibonacci 生兔子

#include #include #include #include

int Fibonprime(long f[], int n) { int i, m = 0; long a[40] = {1, 1}, j, k; for (i = 2;i < n;i++) a[i] = a[i - 2] + a[i - 1]; /*利用for循环生成数列的前n项*/ for (i = 2;i < n;i++) { k = (long)sqrt(a[i]);

for (j = 2;j <= k;j++) if (a[i] % j == 0)break; /*判断其是否是素数*/ if (j >= k + 1)f[m++] = a[i]; /*将素数存放到数组k中*/ } return (m); /*数组中素数的个数作为函数值返回*/ }

main() { int i, m; long f[40]; FILE *fp; /*定义文件指针 */ fp = fopen(\以只写方式\打开文件*/ if (fp == NULL) { printf(\ m = Fibonprime(f, 30); /*调用函数Fibonprime 求出Fibonacci数列前30个数中的素数 */ for (i = 0;i < m;i++) /*将找到的素数输出到屏幕并用写文件函数保存到结果文件中*/ printf(\ for (i = 0;i < m;i++) fprintf(fp, \ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

16、在数列中查找、移动

#include #include #include

void sumfac(int x[], int n); int fac(int n); main() { int i, a[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512}; FILE *fp; /*定义文件指针*/ if ((fp = fopen(\ { printf(\ sumfac(a, 10); /*调用函数sumfac对一维数值中的数列进行变换操作*/ printf(\ for (i = 0;i < 10;i++) /*将变换后的数列输出到屏幕并用写文件函数保存到结果文件中*/ {printf(\ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

int fac(int n) /*该函数的功能是,求得n的所有因子之和*/ {int i, sum = 0; for (i = 1;i <= n;i++) if (n % i == 0)sum += i; /*求出n的所有因子及因子之和*/ return sum; /*函数返回和值*/ }

void sumfac(int x[], int n) { int i, j, k, m, sum; for (i = n - 1, k = 0;i >= k;i--) /*利用循环,从后向前遍历数列查找超完全数*/ {sum = fac(x[i]); /*调用fac函数求得各元素的所有因子之和*/ if (fac(sum) == x[i] *2) /*利用if判断其是否是超完全数*/ {m = x[i]; for (j = i;j > 0;j--)x[j] = x[j - 1]; /*移动超完全数之前需将数列所有数依次后移*/ x[0] = m; /*将超完全数移动到数列的第一个位置*/ k++;i++; } } }

17、编写函数int Del-findged (int a[],int n,int *f)

#include #include #include

int Del_findgcd(int a[], int n, int *f) { int i, k, g; for (i = 0, k = 0;i < n;i++) if (i % 2 == 0)a[k++] = a[i]; /*利用循环判断数组元素的下标,若是奇数则将其删除*/ if (n % 2 == 0)n = n / 2; /*判断数组中剩余元素的个数 */ else n = n / 2 + 1; k = a[0]; for (i = 1;i < n;i++) /*通过循环找到能被所有数整除的最大的数即为最大公约数*/ {g = a[i]; while (k != g) { if (k > g)k = k - g; else g = g - k; } } *f = k; /*保存最大公约数到f指向的变量中*/ return n; /*函数返回数组中剩余的整数个数*/ }

void main() { FILE *fp; /*定义文件指针*/ int i, a[10] = { 6, 8, 9, 11, 12, 13, 15, 16, 18, 19}, f, n; if ((fp = fopen(\ { printf(\ n = Del_findgcd(a, 10, &f); /*调用Dle_findgcd函数删除数组中的所有满足条件的整数并求出剩余整数的最大公约数*/ for (i = 0;i < n;i++) /*将数组中剩余的整数和这些整数的最大公约数输出到屏幕并用写文件函数保存到结果文件中*/ {printf(\ printf(\ fprintf(fp, \ printf(\将考生准考证号输出到屏幕及结果文件中*/

fprintf(fp, \ fclose(fp); /*关闭文件*/

}

18、找出给定范围内的和亲数

#include #include #include

int heqinmath(int m, int n, int a[][2]) { int i, j, m1, s1, s2, count = 0; for (m1 = m;m1 < n;m1++) /*通过循环对m~n的整数进行依次判断*/ { s1 = 1;s2 = 1; for (i = 2;i < m1;i++) if (m1 % i == 0)s1 = s1 + i; /*找到某一整数m1的全部真因子并求和*/ for (j = 2;j < s1;j++) if (s1 % j == 0)s2 = s2 + j; /*找到和值s1的真因子并求和*/ if ((s2 == m1) && (m1 != s1)) /*判断是否为和亲数*/ {a[count][0] = m1; a[count++][1] = s1; /*将和亲数对保存到a指向的数组中*/ } } return count; /*函数返回a数组中和亲数对的个数*/ }

main() { int count, i, m, n, a[10][2]; FILE *fp; /*定义文件指针*/ fp = fopen(\以只写方式\打开文件*/ if (fp == NULL) {printf(\ printf(\:\\n\ scanf(\从键盘输入m和n*/ count = heqinmath(m, n, a); /*调用函数heqinmath,求出m~n之间所有的和亲数对*/ for (i = 0;i < count;i++) /*将计算结果输出到屏幕并用写文件函数保存到结果文件中*/ printf(\ for (i = 0;i < count;i++) fprintf(fp, \ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

19、编写函数int prime-m(int n,int x[],long y[])

nclude #include

#include

int prime_m(int n, int x[], long y[]) { int j, m, count; long k = 0, q, k1, k2, k3; for (m = 2;m <= n;m++) /*通过循环在2~n之间查找符合条件的整数*/ { k1=(pow(2, m)-1); q = sqrt(k1); for (j = 2;j <= q;j++) if (k1 % j == 0)break; if (j <= q)continue; /*判断2m-1是否为素数*/ count = 0;k3 = k1;k2 = 0; while (k3 > 0) { int w = k3 % 10; if (w == 1) /*判断2m-1的十进制表示中是否包含数字1*/ {count++;} k2 = k2 * 10 + w; k3 = k3 / 10; } if (k2 % 2 == 0)continue; /*判断2m-1的反序数是否为奇数*/ if (count > 0) {x[k] = m;y[k++] = k1;} /*符合条件的所有整数m保存到x指向的数组中,将与m对应的整数2m-1保存到y指向的数组中*/ } return k; /*函数返回x数组中保存的整数个数*/ }

void main() { FILE *fp; /*定义文件指针*/ long a[20]; int i, j, n, b[20], m; if ((fp = fopen(\ {printf(\ printf(\:\ scanf(\接收从键盘输入的参数n*/ m = prime_m(n, b, a); /*调用search函数分别求得满足上述条件的所有三位正整数和所有四位正整数*/ for (i = 0;i < m;i++) /*将满足条件的三位正整数和四位正整数输出到屏幕并用写文件函数保存到结果文件中*/ { printf(\ printf(\将考生准考证号输出到屏幕及结果文件中*/ fprintf(fp, \ fclose(fp); /*关闭文件*/ }

20、编写函数int find(int n,long x[])

#include

#include #include

#define min(x,y) ((x)<(y)?(x):(y)) /* ① 宏定义的格式为:#define 标识符(形参表)形参表达式,形参表中的形参无需声明类型*/

int min_dist(int a[], int b[], int m, int n) /* ②由后面程序知,函数的前两个形参均为数组,所以此处应改为min_dist(int a[],int b[],int m,int n) */ { int min = INT_MAX; int ia = 0, ib = 0; while (ia < m && ib < n) /* ③ 循环限制条件应是ia,ib都不能大于数组元素的个数,两者是\与\的关系*/ if (a[ia] >= b[ib]) { min = min(min, a[ia] - b[ib]); ib++; } else { min = min(min, b[ib] - a[ia]); ia++; } return min; }

main() { int a[] = {2, 4, 8, 11, 16}, b[] = {1, 5, 7, 13, 24}; int i, m, n; m = sizeof(a) / sizeof(int); n = sizeof(b) / sizeof(int); printf(\ for (i = 0;i < m;i++)printf(\ printf(\ for (i = 0;i < n;i++) printf(\ printf(\min distance=%d\min_dist(a, b, m, n)); /* ④此处需要输出函数的返回值,printf函数格式控制符应为 \%d\ getch(); }

本文来源:https://www.bwwdw.com/article/lp0x.html

Top