C语言编程及上机题 联系客服

发布时间 : 星期一 文章C语言编程及上机题更新完毕开始阅读75d743e55ef7ba0d4a733b4b

对新数再作以上操作,如此重复,最终可得到一个回文数。以下程序在一定范围内验证该命题。(回文数是指从左到右或从右到左读,数字字符对称相同的正整数,如12321、949)。输入程序2分,程序完全正确2分,一般每改正一个错给4分。 long reverse(long a) {long u;

for(u=0;a>0;a/=10) u=u+a; return u; }

same(long j)

{if(j=reverse(j)) return 1; else return 0; }

void main() {long m,n; int step=0;

printf(\ scanf(\

while(!same(m=reverse(n)+n)) if(m+n<0)

{printf(\ else

{printf(\ printf(\}

72. 编程题:程序功能是生成并打印一个数列的前100项。该数列的第一、二项分别为2、

3,其后继项按下列规则生成:若前两项的乘积是一位数,则取该乘积为后继项;若前两项的乘积是二位数,则取该乘积的十位数字和个位数字依次作为数列的两个后继项。编程要求:

(1)编写一个函数void numlist(int a[],int n),生成符合上述要求的一个数列的前n项存储在a数组中。

(2)编写主函数main, 调用numlist函数生成该数列的前100项并保存在一个一维数组中,按每行10个数的格式将该数列的前100项输出到文件myf2.out中。

73. 改错题:以下程序从键盘输入一个较大的整数n(n>=6),然后验证6到n之间的所有偶

数都可以分解为两个素数之和。含有错误的源程序为:

输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #include \void main()

{int k,j,n,limit; do

printf(\ scanf(\ while(limit<6);

for(n=6;n<=limit;n+=2) for(k=3;k<=n/2;k+=2) if(prime(k)) { j=n-k;

if(prime(j))

{ printf(\ continue; } } }

int prime(int m) {int g,h; h=sqrt(m);

for(g=2;g<=h;g++)

if(m%g==0)return 0; else return 1; }

74. 编程题:程序功能是还原被压缩的数据。编程要求:

(1)编写函数int restore(int a[],int b[]),a数组中保存待还原的压缩数据,将还原后的数据保存在b数组,将还原后全部数据的个数作为函数值返回。

(2) 编写主函数main,通过数组初始化将压缩数据放入一维数组x中,调用restore函数进行数据还原,将还原后的全部数据放入一维数组y中,将y数组中全部有效数据写入结果文件myf2.out中。

(3)测试用压缩数据:5 3 2 -5 0 1 2 3 4 5 1 5 0 -4 4 3 2 1 压缩数据格式说明:

a[0]用于保存从a[1]开始存储的压缩数据段的个数;

从a[1]开始顺序保存若干压缩数据段。当数据段的第一个数为正整数n时,表示该数据段只有两个数,还原操作是取该段的第二个数重复出现n次;若数据段的第一个数为负整数n时,表示该数据段有|n|+1个数,从第二个数开始的|n|个数不是连续相同的,还原操作是取该数据段的第二个数开始的|n|个数作为还原结果。例如,

压缩数据:5 3 2 -5 0 1 2 3 4 5 1 5 0 -4 4 3 2 1 还原后的数据:2 2 2 0 1 2 3 4 1 1 1 1 1 0 0 0 0 0 4 3 2 1

75. 以下程序输入若干本书的名称和单价,按照单价从低到高输出书的名称和单价。

输入数据为:computer architecture 56.5 english 23.5

programming in c 48.5

输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #include \#define NUM 3 struct book {

char name[20];float price; };

void printbook(struct book *pbook)

{printf(\void insertbook(struct term,struct *pbook) {int k;

struct book *q,*pend=pbook;

for(k=0;pend->name!=NULL;k++,pend++); for(;pbook

if(pbook->price>term.price) break; for(q=pend-1;q>=pbook;q--)

*(q+1)=*q; *q=term; }

void main()

{static struct book term,books[NUM]; int k;

printf(\ for(k=0;k

{ printf(\ scanf(\

printf(\ scanf(\ insertbook(term,books); }

printf(\ for(k=0;k

76. 编程题:程序功能是读入一串字符(不超过80个,以“#”结束)并做以下变换:将其

中第1个单词与第2个单词交换次序,第3个单词与第4个单词交换次序……依此类推。串中其他字符原样输出,且相对次序不变。把连续的字母串看成单词,而不管它是否有意义,假定字母均小写,各字母串左右都有一个空格。例如:

输入: 11 aa 222 bbb 33 cccc 4444 dd 55 eee 66 ff 77# 变换后: 11 bbb 222 aa 33 dd 4444 cccc 55 ff 66 eee 77 编程要求:

(1)编写函数void swap(char a[],char b[],int n),将a数组中前n个字符按照上述程序功能的要求进行变换后保存在b数组中。

(2) 编写主函数,读入一串字符(不超过80个,以“#”结束)保存在一字符数组中,调用swap函数对读入的字符串进行变换后保存在另一字符数组中,将变换后的一串字符写到文件MYF2.OUT。

(3)测试数据: 11 aa 222 bbb 33 cccc 4444 dd 55 eee 66 ff 77# 77. 改错题:以下程序统计输入字符串中每行含有多少个定冠词“the”。假定仅使用小写英

文字母和空格,单词不跨行,每行不超过50个字符且以句点结束,空行输入‘#’表示全部结束。输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #include \void main()

{ int k,j,n,line=0; char str[52],ch;

str[0]=' ';ch=getchar();j=0; while(ch!='#')

{ n=0;line++; while(ch!='.')

{ n++;str[n]=ch; ch=getchar(); }

str[n+1]=' ';k=0; while(k

if(!('a'<=str[k-1]<='z')&&!('a'<=str[k+3]<='z') &&(str[k]=='t'&&str[k+1]=='h'&&str[k+2]=='e'))

{j++;k+=4;} else k++;

printf(\ getchar();ch=getchar(); } }

78. 编程题:程序功能是找出1999到2030之间所有由两个素数乘积构成的正整数。

编程要求:

(1)编写函数int enumerate(int k1,int k2,int a[][3]),找出k1—k2之间所有由两个素数乘积构成的正整数。每找到的一个满足这一条件的数,便将该数和它的两个因子(素数)作为一组数据保存在a数组的一行中。函数返回在k1—k2之间满足这一条件的数的个数值。

(2)编写主函数,声明一个局部数组x[20][3],调用enumerate函数查找1999到2030之间所有满足上述条件的数及他们的因子并保存在x数组中,将x数组中全部有效数据写到文件MYF2.OUT中,每组数据占一行。形如:2005: 5 401