C语言程序设计(编程题专项练习)及答案.docx
C语言程序设计(编程题专项练习)及答案(一)一、组数,指针,字符串编程题(每小题5分,共10分)1、编写程序:输入一个百分制成绩,打印出五级记分成绩。考试成绩在90分 或90分以上为优秀,8089分为良好,7079为中等,6069 为及格,低于60分为不及格。2、编写程序:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半, 还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只 剩下一个桃子了。求第一天共摘了多少。3、编写程序:将一个正整数分解质因数。例如:输入90,打印出 90=2*3*3*5。4、编写程序:求一个3*3矩阵对角线元素之和5、编写程序:输入某年某月某日,判断这一天是这一年的第几天?6、编写程序:请输入星期几的第一个字母来判断一下是星期几,如果第一个字 母一样,则继续判断第二个字母。7、编写程序:从键盘上输入一个百分制成绩score,按下列原则输出其等级: score290,等级为 A; 80Wscore<90,等级为 B; 70score<80,等级为 C; 60score<70,等级为 D; score<60,等级为 E。8、编写程序:从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印"not exist”。9、编写程序:输出200300之间的所有素数,要求每行输出8个素数。10、编写程序:若有数组:int a2 3 =1,2, 3, 4, 5,6);现要将a的行和列的元素互换后存到另一个二维数组b中,并以矩阵形式输出数 组b。试编程。11、编写程序:将一个数组逆序输出。12、编写程序:求元素个数为10的一维数组元素中的最大值和最小值。case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf (z,data error") ;break;sum=sum+day; /再加上某天的天数if (year%400=0 | (year%4=0&&year%100!=0) / 判断是不是闰年 leap=l; else leap=0;if (leap=l&&month>2) / *如果是闰年且月份大于2,总天数应该加一天 SUD1+ ;printf (这是这一年的第%d天。sum);printf(n);)【解析】以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几 天,特殊情况,闰年且输入月份大于3时需考虑多加一天。6、#include<stdio. h>int main ()char i, j;printf (请输入第一个字母:n);scanf(%c, &i);getcharO ;scanf (枇,&j);的问题,第二次是读入的一个换行符,而不是输入的字 符,因此需要加一个getchar ()吃掉换行符switch(i)(case ' m,:printf(mondayn);break;case ' w':printf("Wednesdayn);break; case ' f: printf (,fridayn,"); break;case ' t:printf (请输入下一个字母n);scanf(%c, &j);if (j=,u ) printf(tuesdayn);break;if (j二二'h,) printf(thursdayn);break; case ' s':printf (请输入下一个字母n);scanf (枇,&j);if (j二二'a') printf(saturdayn);break;if (j=,u ) printf (,sundayn,/) ; break; default :printf (/,errorn,/) ; break;return 0;)7> ttinclude <stdio. h>void main() int data;char grade;printf(Z/Please enter the score:");scanf(%d” , &data);switch(data/10)(case 10:case 9 :grade二,A,;break;case 8:grade='B'break;case 7:grade='C'break;case 6:grade='D'break;default: grade='E'printf (z,the grade is %c” , grade);8、 ttincludestdio.hmain ()int i, a;for (i=l; i<=10; i+)scanf(d,&a);if(a%7=0) printf(d,a); break;)if(i=ll) printf(/znot exist");9、ttinclude <stdio. h>ttinclude <math. h>int m, j, n=0, k;for (m=200; m 0300; m+)k=sqrt (m);for(j=2; j<=k; j+)/ *f()und*/ if(m%j=O) continue;if(j>k)if(n%8=0) printf(n);/*found*/ printf (d, ,m);n+;10> main()int a23int b 2;int i=0,j=0;for (i=0; i<2; i+)for (j=0; j<3; j+)for (i=0; i<2; i+)(for (j=0; j<3; j+)printf(d ,bi j);)printf (n);)11 > #include<stdio. h>#define N 10int main ()(int aN = 0, 1,2, 3, 4, 5,6, 7, 8,9;int i, t;printf (原始数组是:n);for (i=0; i<N; i+)printf (%d , ai);for(i=0;i<N/2;i+)(t=ai;ai=aN-l-i;aN-l-i=t;printf Cn排序后的数组:n);for (i=0; i<N; i+)printf (%d , ai);printf (n);return 0;12> ttinclude "stdio.hmain ()int term10;int i, max, min;printf (请输入10个整数:);for (i=0; i<10; i+)scanf (z/%d,z, &termi);max=term0;min=terni0;for (i=0; i<10; i+)(if (termi <min)min=termi;if (termi >max)max=termi;)printf (,max=%d, min=%d/,, max, min);13、ttinclude <stdio. h>main ()(int a100, i, n;scanf(d,&n);for (i=0; i<n; i+) scanf (%d,&ai);a99=a0;for (i=l; i<n; i+)if (a99 <ai) a99=ai;printf (,zmax is %dn,a99);14、ttinclude <stdio. h> void main()int a10 = 10,4,2, 7, 3, 12, 5, 34, 5,9, i;/ *f ourid*/float aver, s;/*found*/for ( i=l; i<10; i+)s += aiprintf (''The aver is: % , 2f n,aver);15> ttinclude <stdio. h>main()(int i, p=0, a10;for (i=0; i<10; i+)scanf(%d,&ai);for (i=l; i<10; i+) if (ai <ap)P=i ;printf(d, %dn,ap,p);16、#include<stdio. h>#include<stdlib. h>ttinclude <string. h>void swap(chartstri, char*str2);int main ()(char strl20, str220, str320;printf (请输入3个字符串,每个字符串以回车结束!: n);fgets(strl, (sizeof strl / sizeof strl0), stdin);fgets (str2, (sizeof str2 / sizeof str20), stdin);fgets(str3, (sizeof str3 / sizeof str30), stdin);if (strcmp (strl, str2) >0) swap (strl, str2);if (strcmp (str2, str3) >0) swap (str2, str3);if (strcmp (strl, str2) >0) swap (strl, str2);printf(排序后的结果为:n);printf (,%sn%sn%sn/,, strl, str2, str3);return 0;void swap(char*strl, char*str2)(char tem20;strcpy(tem, strl);strcpy(strl, str2);strcpy(str2, tem);17、ttinclude <stdio. h>#include <string. h>main ()(char a=,clanguage,z, t;int i, j, k;k=strlen(a);for (i=l; i <=k-2; i+=2)for(j=i+2; j<k; j+=2)if (aj<ai)(t=ai;ai=aj;aj=t;)puts (a);printf(n);18、ttinclude <math. h>#include <conio. h>#include <stdio. h>prinum( int a)(int count, i, j, k;count = 0;for ( i=0; i<10; i+)(k=ai-l;for ( j=2; j<=k; j+)if (ai % j = 0) break;if(j >= k+1) count+;return (count);main ()(int a10 = 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, n;n=prinum(a);printf (''prime number (s) is (are) : %d,n );19、#include<stdio. h>#include<stdlib. h>void fun(int *s, int n)(int i;int max=s0;int a=0;for (i=0; i<n; i+)if (si >max)(max=si;a二i;)sa=s0;s0=max;int j;int min=sn-l;int b=n-l;for(j=0; j<n; j+)(if (sj <min)(min=sj;b二 j;)sb=sn-l;sn-l=min;void printf s (int s, int n)for (i=0; i<n; i+) printf(%d , si);printf (n);int main ()(int s 20;int i, n;printf (设置数组长度(V20):);scanf(d,&n);printf (输入 %d 个元素:n”,n);for (i=0; i<n; i+)scanf (%d", &si);fun (s, n);printf_s (s,n);return 0;20> #include<stdio. h>int main ()(int all = l, 4, 6, 9, 13, 16, 19, 28, 40, 100;int tempi, temp2, number, end, i, j ;printf(原始数组是:n);for (i=0; i<10; i+)printf (4d,ai);printf (n插入一个新的数字:);scanf(d, fenumber);end=a9;if(number>end) a10=number;elsefor (i=0; i<10; i+)(if (ai >number)templ=ai;ai=number;for(j=i+l; j<ll; j+)(temp2=aj;aj=templ;templ=temp2;break;)for (i=0; i<ll; i+)printf ("%4d, ai);printf (n);return 0;)【解析】首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此 元素之后的数,依次后移一个位置。二、结构体相关编程题1> #include<stdio.h> struct Student int num;char name30; char sex;int Fun (struct Student *s , int n) (int num=0;int i; for(i=0; i<n; i+) (if (si. sex =二'M')num+;13、编写程序:把数组a(大小为100)中前n个元素中的最大值放入a的最后一 个元素中,n的值由键盘输入14、编写程序:求一维数组a中所有元素的平均值,结果保留两位小数。例 如,当一维数组a中的元素为:10, 4, 2, 7, 3, 12, 5, 34, 5, 9程序的输出应为:The aver is: 9. 1015、编写程序:输出一维数组a中的最小值及其下标16、编写程序:字符串排序。如下:请输入3个字符串,每个字符串以回车结束!: ba t 排序后的结果为:a bt17、编写程序:将字符数组a中下标值为奇数的元素从小到大排列,其它元素不 变例如:当a数组中的字符串为:"clanguage时,程序的输出结果为:cgalgnaue()18、编写程序:统计一维数组a中素数的个数例如:如果数组a的元素为:2, 3,5, 7,8,9, 10, 11, 12, 13,则程序的输出应 为:prime number (s) is (are)19、编写程序:输入数组,最大的与第一个元素交换,最小的与最后一个元素 交换,输出数组。20、编写程序:有一个已经排好序的数组。现输入一个数,要求按原来的规律 将它插入数组中。二、结构体相关编程题(每小题5分,共10分)1、统计结构体数组中性别(sex)为'M'的变量的个数。要求:数组元素依次赋初值为:1 , Andy,'M' 、 2 , Mike,' F' 、 3 , "Rose" , ' M'。结构体定义如下:struct Student int num; char name 30 ; char sex;int main ()struct Student s3 = 1, Andy,' M' , 2, Mike,' F' , 3, Rose,' M' );printf (,/%d/z, Fun (s , 3);return 0;2、 #include<stdio.h> struct student int num;char name20;char sex;int age; stu20,*p;int main () int n;scanf(%d, &n);p 二 stu;for(int i =0; i < n; i+) scanf (,z%d %s %c %d,&p->num, p->name, &p->sex, &p->age); printf (,/%d %s %c %dn,p->num, p->name, p->sex, p->age); returnO;)3、ttinclude <stdio. h>#define NUM 3struct studentchar* sno = new char20;char* name = new char20;int score;bool fail 二 false;); void stuSort(student* stu)student tmp;for (int i = 0; i < NUM; i +)(for (int j = 0; j < NUM; j +)(if (stuj.score < stui.score)(tmp. name = stuj. name;tmp. sno = stuj.sno;tmp.score = stuj.score;stuj. name = stui. name;stuj.sno = stui.sno;stuj.score = stui.score;stui. name = tmp. name;stui.sno = tmp. sno;stui.score = tmp. score;)for (int i = 0; i < NUM; i +)(printf (,z%s %s %dn, stui. sno, stui. name, stui. score); void stuFail(student* stu) (int numOfStu = 0;for (int i = 0; i < NUM; i +) (if (stui. fail = true)printf(%s,stui.name);elsenumOfStu +;if (numOfStu = NUM)(printf (%sn, “no fail");)void stuAvg(student* stu)(int stuScore = 0;double stuAvg = 0;int ent = 0;for (int i = 0; i < NUM; i +)(stuScore += stui.score;)stuAvg = stuScore / NUM;for (int i = 0; i < NUM; i +)(if (stui,score < stuAvg)( ent +;)printf (,%dn,/, ent);)int main ()student* stu = new studentNUM;for(int i = 0; i < NUM; + i) printf ("输入学号:“);scanfstui. sno);printf (输入姓名:);scanf(为s,stui. name);printf(输入功课成绩:); scanf (/z%dz,, &stu i. score);stuSort (stu);stuFail (stu); stuAvg(stu);delete stu; stu = NULL; return 0;)4、#include<stdio. h>#include<stdlib. h> typedef struct int ID;int math;int English;int C;int avargrade; char name20;Stu;int main () (FILE*fp;Stu stu5; int i, avargrade=0;printf (请输入5个同学的信息:学生号,姓名,3门成绩:n); for(i=0; i<5; i+) (scanf (%d %s %d %d %d,z, &(stui. ID), stui. name, &(stui. math), &(stui. English 0);stui. avargrade= (stui. math+stui. English+stui. C)/3;if(fp=fopen("stud", w)二二NULL) printf (''error :cannot open file!n,z); exit (0);) for (i=0; i<5; i+)fprintf (fp, /z%d %s %d %d %d %dn,/, stui. ID, stui. name, stui. math, stui. Engli sh,stui. C, stui. avargrade);fclose(fp);/ system("pause"); return 0;5、#include<stdio. h>#include<stdlib. h>#include<malloc. h> typedef struct LNode intdata;struct LNode *next;LNode, *LinkList;LinkList CreateList (int n);void print(LinkList h); int main () (LinkList Head=NULL; int n;scanf&n); Head=CreateList (n);printf (刚刚建立的各个链表元素的值为:n); print(Head);printf(nn");system("pause");return 0;LinkList CreateList(int n)LinkList L,p,q;int i;L= (LNode*)malloc(sizeof(LNode);if(!L)return 0;L->next=NULL;q=L;for (i=l; i<=n; i+)(p= (LinkList)malloc(sizeof(LNode);printf (请输入第d个元素的值:,i); scanf (zz%d,/, & (p->data);p-> next 二 NULL;q->next=p;q二P;)return L;)void print (LinkList h)(LinkList p=h->next;while(p!=NULL) printf (,z%d z/, p->data);p=p->next;)6、 #include<stdio.h>struct classint id;类编号char info20 ; /类信息a5 = l,aaa, 2,bbb, 6,ccc, 7,ddd, 4,eee;int main(void)int i, j, x;scanf (z,%d,z, &x);for(i = 0; i < 5; i+)(if (ai. id=x) break;)for(j = i; j < 4; j+)(aj= aj + 1;for(j = 0; j < 4; j+)printf(%d %sn,z, aj. id, aj. info);7、ttinclude <stdio. h> struct message(char namel30;char name230;char name330;double price;);struct message d10;int main()(int N;scanf(d,&N);int i, j;for (i=0; KN; i+)(scanf (%s %s %s,z, di. namel, di. name2, di. name3);scanf&di.price);int t,r; double max, min;max二min=d0. price;for (j=0;j<N;j+)(if (min>dj. price)(min=dj. price;t=j;if (max<dj.price)(max=dj. price;r=j;)printf (/z%. 21f, %s %s %snz,, max, dr. namel, dr. name2, dr. name3);printf (,z%. 21f, %s %s %snz,, min, dt. namel, dt. name2, dt. name3); return 0;8、ttinclude <stdio. h>struct Dateint day;int month;int year;int main()void days( struct Date datel, int *q );struct Date datel;struct Date *p;int n;printf (”请输入年份年);scanf ( d,&datel. year );printf (”请输入月份:");scanf ( d,&datel. month );printf (请输入日期日);scanf( d,fedatel. day );p 二 fedatel;days( *p, &n ) ; /*使指针指向变量n,存放计算的总天数*/printf ( %d 年%d 月%d 日是该年的第d 天。n,datel. year, datel. month, datel. day, n );return (0);void days ( struct Date datel, int *q )int month2;if ( datel. year % 400 =二 0(datel. year % 100 != 0 && datel. year % 4 二二0)month2 = 29; /*判断为润年,其该年的二月为29天*/else month228;switch(datel. month )case1:*qdatel. day; break;case2:*q31 + datel. day; break;case3:*qmonth231 + datel. day; break;case4:*q31month2datel. day; break;case5:*q31month230 + datel. day; break;case6:*q31month24-30 + datel. day; break;case7:*q3130 * 2month2datel. daybreak;case8:*q3130 * 24-month2datel. daybreak;case9:*q3130 * 2month2datel. daybreak;case10:*q313 * 304-month2datel. daybreak;case11:*q313 * 30month2datel. daybreak;case12:*q314 * 304-month2datel. day/*把计算的总天数赋值给*p */9、#include<stdio. h>int main () int t, n, i, max, min, sum;int score102=0;while (scanf (,%d,z, &n) if(n=0)break;for(i =0; i < n;+i)scanf (,z%dz,, &scorei);max =-l;min =101;sum =0;for(i =0; i < n;+i) if(scorei> max)max = score i;if(scorei< min)min = score i;sum +二 scorei;)sum -= max + min;printf (z,%. 21fn,/, (double) sum / (n -2);)returnO;10> #include<stdio. h>typedef struct stuint num20;float scorel;float score2;float score3;float score4;float score5;float aver;student;float a5;int main () student stu10;student averageScore(student stu10);student averages(student stu10);student max(student stu10);int i;for (i=0; i<10; i+) scanf (z/%d%f%f%f%f%f, stui. num, &stui. scorel, &stui. score2, &stui. score 3, &stui. score4, &stui. score5);2、定义一个结构体student,存储学生的学号、名字、性别和年龄,读入每个 学生的所有信息,保存在结构体中,并输出。结构体student的定义如下: struct student int num;char name20;char sex;int age;);本题要求使用指向结构体数组进行输入和输出。输入:第一行有一个整数n,表示以下有n个学生的信息将会输入。保证n不大于20o以后的n行中,每一行包含对应学生的学号、名字、性别和年龄,用空格隔 开。保证每一个人名都不包含空格且长度不超过15,性别用M和F两个字符来 输出:有n行,每行输出一个学生的学号、名字、性别和年龄,用空格隔开。请注意行尾输出换行。样例输入:310101 LiLin M 1810102 ZhangFun M 1910104 WangMin F 20样例输出:10101 LiLin M 1810102 ZhangFun M 1910104 WangMin F 203、编写程序:用结构体数组,学生信息由学号、姓名,成绩组成,数据如下:201513135157张三901)使用结构体数组,将学生的数据按成绩从高到低排序显示到屏幕上2)将学生中不及格学生的姓名显示出来3)写一个函数,获取成绩低于平均分的学生记录并返回低于平均分的学生人数4、编写程序:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据 (包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件stud中。功能如下:averages (stu);averageScore (stu);for (i=0; i<5; i+) printf C'the %d score,s average is %fz,, i, ai);)max (stu);return 0;)student average5