发布时间 : 星期三 文章C语言编程及上机题更新完毕开始阅读75d743e55ef7ba0d4a733b4b
#define N 4 main ( )
{ static a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12}; int i, j, sum1=0, sum2=0; for (i=0; i { sum1+=a[i][j]; printf(“=”, a[i][j]);} printf (“\\n”); } sum2=fun (M, N, a[0]); sum1-=sum2; printf (“%d %d\\n”, &sum1, &sum2); } int fun(int m, int n, int arr[ ]) { int i, j, sum=0 for (i=0; i 50. 编程题:A数组有20个正整数,编写函数实现将这20个数进行压缩存储。算法如下: 如果某数只出现一次,保留该数。如果某数连续出现多次,只保留一个,删除其余重复出现的数。同时要将每个数出现的次数依次保存在B数组中。例如,b[0]的值为a[0]在原数组a中出现的次数。压缩后的数据仍存储在A数组。 编程要求:A数组的20个数在数组说明时赋值,即: static int A[ ]={1,2,2,2,3,3,5,5,5,5,2,2,7,7,7,9,9,9,9,9}; 输出压缩后A数组和B数组的有效值到结果文件。 例如:压缩前:A[ ]:1,2,2,2,3,3,5,5,5,5,2,2,7,7,7,9,9,9,9 压缩后:A[ ]:1,2,3,5,2,7,9 B[ ]:1,3,2,4,2,3,5 51. 改错题:以下程序中merge函数将两个已按升序存放在数组A,B中的数列合并为一个 升序数列存放到数组C中。算法提示:先将数组A中的各个元素依次拷贝到数组C中,然后,依次从数组B中取一个元素,按其值的大小插入到数组C中(保持C中的数据按升序排序)。含有错误的源程序为: # include void merge (int *, int , int *, int , int *); main ( ) { static int a[ ]={1,3,5,7}, b[ ]={0,2,4,6,8}, c[10]; int i; merge(a, 4, b, 5, c); for (i=0; i<9; i++) printf(“M”, *(c+i)); printf(“\\n”); } void merge(int *a, int ma, int *b, int mb, int c) { int ib=0, ic=0, i, j; for(ic=0; ic for(ib=0; ib { if(b[ib]>c[ic]) c[ic++]=b[ib]; else { for (i=0; i<=ic; i++) if (b[ib] for(j=ic; j<=i; j――) c[j+1]=c[j]; c[i]=b[ib]; ic++; } } } 52. 编程题:假定在一个整型数组中,每一个元素是都不超过两位的正整数。试编程统计该数 组全部元素中数字0,1,??,9各出现多少次。将统计结果输出到结果文件中。 编程要求:采用以下方法为整型数组赋予指定的测试数据: static int a[ ]={5,26,74,56,1,27}; 53. 改错题(20分):本程序读入数组a[3][n]的前两行元素值,并根据同列的前两行元素 是素数还是合数(合数即百素数)产生同列的第三行元素。方法是:若某列第一、第二行元素为合数合数、合数素数、素数合数、素数素数,则该列第三行元素分别为字母A、B、C、D的ASCII码值。最后把数组a的元素写到文件myf1.out中,每写完a的一行元素要换行。 # include “stdio.h” # define n 5 isp(int m); { int i,p=1; for (i=2; i<=sqrt(m); i++) if (m%i= =0) p=0; return(p); } main ( ) { int a[3][n], i ,j, x , c; for (i=0; i<=2; i++) for (j=0; j c=isp(a[0][j])+isp(a[1][j]); switch (c); case 0: a[2][j]=’A’; break; case 1: a[2][j]=’B’; break; case 2: a[2][j]=’C’; break; case 3: a[2][j]=’D’; } for (i=0; i<3; i++) { for (j=0; j 注:调试程序时,可以随意输入测试数据。最后运行本程序时,必须从键盘输入下列数据: 第一行元素:27 11 6 7 8 第二行元素:16 12 19 23 5 54. 编程题(20分):建立十六个元素的数组a,方法是:先置a[0]=55,其余元素按公式: a[i ]=(15*a[i-1]+97)% 256 生成,然后对数组a进行如下操作: (1)求出数组a的元素平均值,把平均值(取两位小数)写到文件myf2.out中。 (2)找出与平均值之差的绝对值最大的元素,并将其从a中删去。 (3)最后把数组a的元素写到文件myf2.out中。 55. 改错题(20分):本程序将输入字符串中的单词作变换后输出到文件myf1.out中,变 换方法是:将第2、4、6??个单词中的字母换成其对称字母(a与z对称,A与Z对称,b与y对称,B与Y对称,??等等),第1、3、5??个单词原样不变地输出,串中其它字符不输出,单词与单词之间空一格。最后将作了变换的单词个数写到文件myf1.out中。假定由非字母字符隔开的字母串叫做单词,而不管它是否有意义。输入字符串以‘#’号作为结束符。 char exch(char c) { char ch; if ((c>=’a’) || (c<=’z’)) ch=’a’+’z’-c; else ch=’A’+’Z’-c; ruturn ch ; } main ( ) { char ch; int j, k; ch=getchar(); k=0; j=0; while (ch= =’#’) { if (!((char>=’a’)&&(ch<=’z’) || (ch>=’A’)&&(ch<=’Z’))) k=0; else { if (k= =0) {printf(“ ”); k=1; j++; }; if (j%2= =1) putchar(ch); else putchar(exch (ch)); } ch=getchar (); } getchar ( ); printf (“M\\n”, j); } 注:调试程序时,可随意输入测试数据。最后运行本程序时,须从键盘输入下列数据: FORtran Apl C Pascal Program # 56. 编程题(20分):编程验证下列命题:“若一个三位数是37的倍数,则将这个三位数的 三个数字循环移位得到另两个三位数也是37的倍数”。例如,148是37的倍数,481和颜悦色14也都是37的倍数。 若命题不正确,则在文件MYF2.OUT中写入“False”。若命题正确,则将所有满足一述条件的三位数写到文件MYF2.OUT中。输出时,每组数据占一行(例如:148,481,841三个数算作一组:111单独算作一组),已经输出过的数,下次就不能再输出。 57. 改错题(20分):本程序将输入字符串中的单词作变换后输出到文件myf1.out中,变 换方法是:将第1、3、5??个单词中的字母进行大小写转换(大写变小写,小写变大写),第2、4、6??个单词原样不变地输出,串中其它字符不输出,单词与单词之间空一格。最后把串中出现的单词个数也写到文件myf1.out中。假定由非字母字符隔开的字母串叫做单词,而不管它是否有意义。 # include if ((c>=’a’)&&(c<=’z’)) ch1=c-‘a’+’A’; else ch1=c+’A’ -‘a’; return ch1; } main ( ) { char ch ; int j, k; ch=getchar ( ); k=0; j=1; while (ch /=’#’) { if (! ((ch>=’a’) && (ch<=’z’) || (ch=’A’)&&(ch<=’Z’))) k=0; else { if (k=0) {putchar(‘ ‘);k=1; j++; } if (j%2/=0) putchar (excase (ch)); else putchar (ch); } ch=getchar(); } getchar();printf(“M”,j); } 注:调试程序时,可以随意输入测试数据。最后运行本程序时,必须从键盘输入下列数据: tHE c pRograMming LangUage cOUrse # 58. 编程题(20分):将下列字符串变换成整数序列写到文件MYF2.OUT中。变换方法是:把串中的数字串拼成一个正整数,每个非数字字符取其ASCII码作为一个整数。假定拼数过程中不会因数值过大而发生整数越界现象。编程时可以从键盘输入以下字符串,或将字符串作为字符数组的初值。 aA434 Y457&+# (注:“#”只作字符串的结束标记,不参加变换,434和Y之间空一格) 59. 改错题(20分):本程序将输出数值在3到360之间的所有由6个素数组成的等差数列 及其个数。比如,其中一个等差数列为: 7 37 67 97 127 157 已知这样的等差数列首项至少是7,公差在30与70之间。 #define max 360 #define first 7 #define d0 30 #define dt 70 isp(int n) { int k, b; b=1; k=2; while (b&& (k if (n%k!=0) b=0; else k++; return b; } main ( ) { int n, d, i , c; d=d0; c=0; putchar(‘\\n’); while (d<=dt) { n=first; while (n if (isp(n)&&isp(n+d)&&isp(n+2*d)&& isp(n+3*d)&&isp(n+4*d)&&isp(n+5*d)) { c++; for (i=1; i<=6; i++) printf (m”,n+i*d); printf (“\\n”); n+=2; } d+=2; }