第一篇:C语言必背的典型程序设计题目 - 数组、函数-------参考答案
数组部分必须会编写的程序(参考答案)
1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。
//选择法
#include
printf(“%4d”,a[i]);} printf(“n”);//排序
for(i=0;i<9;i++){
t=i;
for(j=i+1;j<10;j++)
{
if(a[t]>a[j])
{
t=j;
}
}
if(t!=i)
{
temp=a[i];
a[i]=a[t];a[t]=temp;
} } printf(“Aftere sorted:”);for(i=0;i<10;i++){
printf(“%4d”,a[i]);} printf(“n”);} //冒泡法
#include
for(i=0;i<=n-1;i++)
{
for(j=0;j
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} } printf(“Aftere sorted:”);for(i=0;i<10;i++){ printf(“%4d”,a[i]);} prtintf(“n”);}
2、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列。
#include
int x , i, j=6;
/*j为元素个数*/ printf(“Enter a number: ”);
scanf(“%d”,&x);a[0]=x;i=j;
/*从最后一个单元开始*/ while(a[i]>x){
a[i+1]=a[i];i--;
/*将比x大的数往后移动一个位置*/ } a[++i]=x;j++;
/*插入x后元素总个数增加*/ for(i=1;i<=j;i++)
printf(“%8d”,a[i]);printf(“n”);}
3、(提高题目)编号为1,2,3,……n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第1个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。
#include
printf(“please input the total of numbers:”);scanf(“%d”,&n);printf(“please input the upper bound of numbers:”);scanf(“%d”,&m);
for(i=0;i //数组初始化 num[i]=0; i=0; //用于记录顺序1..n k=0; //用于记录顺序1..m t=0; //用于记录出列顺序 while(t } { if(num[i]==0)k++;if(k==m){ t++; num[i]=t; k=0;} i++;if(i==n)i=0;//或者 i=i%n,构成循环 } for(i=0;i printf(“%4d”,i+1);printf(“n”);for(i=0;i printf(“%4d”,num[i]);printf(“n”); 4、编程打印直角杨辉三角形前六行。 #include a[i][i]=1; a[i][0]=1;} for(i=2;i<=5;i++){ for(j=1;j<=i-1;j++) { a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(i=0;i<=5;i++){ for(j=0;j<=i;j++) { printf(“%4d”,a[i][j]); } printf(“n”);} } 5、编写程序,把下面的数据输入一个二维数组中。12 75 56 然后执行以下操作: 13 26 88 93 18 22 32 44 36 58 ①输出矩阵两个对角线上的数; ②分别输出各行和各列的和; ③交换第一行和第三行的位置; ④交换第二列和第四列的位置; ⑤输出处理后的数组。 #include //输出二维数组 printf(“二维数组:n”);for(i=0;i for(j=0;j { printf(“%5d”,a[i][j]); } printf(“n”);} printf(“n”); printf(“主对角线上的数:”);for(i=0;i printf(“%4d”,a[i][i]);} printf(“n”); printf(“副对角线上的数:”);for(i=0;i printf(“%4d”,a[i][SIZE-1-i]);} printf(“nn”); //各列的和 for(i=0;i sum=0; for(j=0;j { sum+=a[i][j]; } printf(“第%d行的和=%dn”,i+1,sum);} printf(“n”); //各列的和 for(j=0;j } { sum=0;for(i=0;i sum+=a[i][j];} printf(“第%d列的和=%dn”,j+1,sum);} printf(“n”);//交换第一行和第三行的位置 for(j=0;j printf(“交换第一行和第三行后的二维数组:n”);for(i=0;i printf(“%5d”,a[i][j]);} printf(“n”);} printf(“n”);//交换第二列和第四列的位置 for(i=0;i printf(“交换第2列和第4列后的二维数组:n”);for(i=0;i printf(“%5d”,a[i][j]);} printf(“n”);} 6、求一个5×5矩阵中的马鞍数,输出它的位置,所谓马鞍数是指在行上最小而在列上最大的数。如下矩阵: 5 6 7 8 94 5 6 7 83 4 5 2 12 3 4 9 01 2 5 4 8 则1行1列上的数就是马鞍数。#include for(i=0;i<5;i++){ Min=a[i][0];col=0; for(j=0;j<5;j++) { if(Min>a[i][j]) { Min=a[i][j]; col=j; } } Max=a[0][col];row=0; for(j=0;j<5;j++) { if(Max { Max=a[j][col]; row=j; } } if(row==i) printf(“马鞍数是行%d,列%d 值:%dn”,row+1,col+1,a[row][col]);} } 7、定义一个二维数组,存入5个学生的数学、语文、英语、物理、化学5门课程的成绩,计算并输出每一门课程的平均成绩和每一位学生的平均成绩。 #include //代表学生数 #define M 5 //代表课程数 void main(){ int scores[N][M]={{78,89,90,76,65},{86,79,98,74,95},{78,67,96,90,65}, {92,79,98,74,95},{69,94,85,67,56}}; int i,j,sum; //输入学生成绩 /* for(i=0;i printf(“输入第%d个学生的数学、语文、英语、物理、化学5门课程的成绩:”,i+1); for(j=0;j scanf(“%d”,&scores[i][j]);}*/ //输出学生成绩 printf(“序号t数学t语文t英语t物理t化学t平均成绩n”);for(i=0;i sum=0; printf(“%dt”,i+1); for(j=0;j { sum+=scores[i][j];//计算每一位学生的总成绩 printf(“%dt”,scores[i][j]); } printf(“%dn”,sum/M); //输出每一位学生的平均成绩 } //计算并输出每一门课程的平均成绩 printf(“n平均t”);for(j=0;j sum=0; for(i=0;i { sum+=scores[i][j]; } printf(“%dt”,sum/N); } printf(“n”);} 8、输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。 #include int i,j,n; printf(“输入字符串:n”); gets(s); n=strlen(s); for(i=0,j=n-1;i if(s[i]!=s[j]) break; if(i>=j)printf(“是回文串n”); else printf(“不是回文串n”);} 9、编写程序实现从字符数组s中删除存放在c中的字符。 #include void main(){ char s[80],c; int j,k; printf(“nEnter a string: ”); gets(s); printf(“nEnter a character: ”); c=getchar(); for(j=k=0;s[j]!= ' ';j++) if(s[j]!=c) s[k++]=s[j]; s[k]= ' '; printf(“n%s”,s);} 10、输入5个国家的名字,按字母顺序进行排列,输出排序前后的内容。 #include printf(“%sn”,a[i]);} printf(“n”);//排序 for(i=0;i t=i; for(j=i+1;j { if(strcmp(a[t],a[j])>0) { t=j; } } if(t!=i) { strcpy(temp,a[i]); strcpy(a[i],a[t]); strcpy(a[t],temp); } } printf(“Aftere sorted:n”);for(i=0;i printf(“%sn”,a[i]);} printf(“n”);} 函数部分必须会编写的程序(参考答案) 1、定义一个函数,用于判断三角形的三条边能否构成三角形,如果能,则判断是普通三角形,等腰三角形,还是等边三角形。 #include void main(){ int a,b,c,t;printf(“输入三角形三边长:”);scanf(“%d%d%d”,&a,&b,&c);t=judgeTrangle(a,b,c);switch(t){ case 0:printf(“普通三角形!n”);break;case 1:printf(“等腰三角形!n”);break;case 2:printf(“等边三角形!n”);break;default:printf(“不构成三角形!n”);break;} } /* 功能:判断三角形形状 返回值:-1,不够成三角形 0,普通三角形 1,等要三角形 2,等边三角形 */ int judgeTrangle(int a,int b,int c){ if(a+b>c && a+c>b && b+c>a){ if(a==b || b==c || a==c) { if(a==b && b==c && a==c) return 2; else return 1; } else return 0;} else return-1;} 2、定义一个函数,用于验证哥德巴赫猜想。任何一个充分大的偶数(大于等于6)总可以表示成两个素数之和。 #include int isPrime(int n); void gdbh(int n); void main() { int n; printf(“Enter a odd integer:”); scanf(“%d”,&n); if(n<6)n+=6; //保证大于6 if(n%2==1)n++; //保证是偶数 gdbh(n);} int isPrime(int n){ int i; for(i=2;i { if(n%i==0) return 0; } return 1;} void gdbh(int n){ int i; for(i=2;i<=n/2;i++) { if(isPrime(i)&& isPrime(n-i)) { printf(“%d=%d+%d ”,n,i,n-i); } } printf(“n”);} 3、定义两个函数,求两个数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include { temp=a%b; a=b; b=temp;} return a;} int lcm(int a,int b){ return a*b/gct(a,b);} 4、定义一个函数,用于将一个字符串反序存放。例如,原串为ABCDEF,则处理后的字符串为:FEDCBA。 #include //逆置字符串 { ch=str[i]; str[i]=str[len-1-i]; str[len-1-i]=ch;} } 或者逆置字符串的函数也可写为: void reverse(char str[]){ int i,j,len;char ch;len=0;while(str[len]!=' ') //计算字符串长度 { len++;} for(i=0,j=len-1;i //逆置字符串 { ch=str[i]; str[i]=str[j]; str[j]=ch;} } 5、定义函数,对给出年、月、日计算该天是该年的第几天。(可利用数组来实现)。 #include monthDays[1]+=1;} for(i=0;i d+=monthDays[i];} return d;} 6、编写函数replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上。 #include printf(“"%s”中的字符%c用字符%c代替后的结果为:“,str,c1,c2);replace(str,c1,c2);puts(str);} void replace(char *s,char c1,char c2){ int i;i=0;while(s[i]!=' '){ if(s[i]==c1) { s[i]=c2; } i++;} } 7、写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 #include i++;} return i;} 8、编写输入数据函数、排序(冒泡法、选择法)函数、输出函数,完成10个数据的输入、排序和输出,在主函数中进行测试。 #include #define SIZE 10 void inputData(int a[],int n); //数组数据赋值 void selectedSort(int a[],int n);//选择排序 void bubbleSort(int a[],int n); //冒泡排序 void outputData(int a[],int n); //输出数据 void main(){ int a[SIZE];inputData(a,SIZE);outputData(a,SIZE);selectedSort(a,SIZE);bubbleSort(a,SIZE);outputData(a,SIZE);} void inputData(int a[],int n){ int i;printf(”请输入%d个整数:n“,n);for(i=0;i scanf(”%d“,&a[i]);} void selectedSort(int a[],int n)//选择排序 { int i,j,t;for(i=0;i for(j=i+1;j { if(a[j]>a[i]) { t=a[j];a[j]=a[i];a[i]=t; } } } } void bubbleSort(int a[],int n) //冒泡排序 { int i,j;for(i=0;i for(j=0;j { if(a[j]>a[j+1]) { int t=a[j];a[j]=a[j+1];a[j+1]=t; } } } } void outputData(int a[],int n){ int i;printf(”数组为:n“);for(i=0;i printf(”%d “,a[i]);} printf(”n“);} 9、利用递归函数,对一个给定的整数,输出其二进制形式。 #include toBase(n/r,r); printf(”%d“,n%r);} } 进制转换函数也可写为: void toBase(int n,int r){ int rem;rem=n%r;if(n/r>0) toBase(n/r,r);printf(”%d“,rem);} 10、利用递归函数,对一个给定的整数,输出其阶乘。 #include C语言程序设计实验七:函数、数组、指针 1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个 数。不能使用strlen函数。 求字符串长度函数的函数原型必须如下: int MyStrLenPt(char *str) 若输入:nihao123! 则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。 要求: 写两个函数,一个主函数,一个sort函数。在主函数中完成数组的输入和输出,通过调 用sort函数对数组进行排序。 sort函数的原型为:voidsort(int*p, intn); 说明: (1)请大家按学号来坐,便于考勤和管理。 (2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。 (3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。 (4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。 实 验 报 告 专业 软 件 工 程 班级 X 班 学号_ XXXXXXXXXXX_ 姓名 实验日期:201X年X月X日 报告退发(订正、重做) 课程 C程序设计实验 实验名称 函 数 一、实验目的 ① 熟练掌握C程序中函数的定义; ② 掌握函数的调用,函数参数的传递; ③ 熟练掌握函数的嵌套调用和递归调用; 二、实验环境(描述实验的软件、硬件环境) ① 软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器; ② 硬件环境:PC机一台 三、实验内容、步骤和结果分析 题目一:编写一个用来判断质数(素数)的函数。 要求: (1)在main函数中调用该函数对输入的数值进行判断,并输出判断结果;(2)当输入数值<=1时,停止输入和判断。 #include } /*=======判断质数(素数)的函数=======*/ int main(){ printf(“n提示:输入一个数字来判断是否是质数(素数),当输入数值<=1时,停止输入和判断。nn”);for(int num=2,temp;num>1;){ printf(“Please enter a number:”);for(int i=2;i<=sqrt(n);i++)//一个数n如果是合数,那么它的所有的因子不超过n的开方 { } return 1;if(n%i==0)return 0;else continue; } } scanf(“%d”,&num);if(num<=1)break;//当输入数值<=1时,停止输入和判断 temp=judgePrime(num);if(temp==0)printf(“%d is not a prime numner!nn”,num);else printf(“%d is a prime numner!nn”,num);return 0; 题目二:使用习题1中所编写的判断质数的函数验证哥德巴赫(Goldbach)的1+1猜想-----任何一个>=6的偶数都可以表示成两个素数之和 要求: ① 屏幕提示用户一个>=6的偶数; ② 输出这个偶数等于2个素数之和的表达式; ③ 当输入数据<6或者不是偶数时,停止输入和验证。 #include for(int i=2;i<=sqrt(n);i++)//一个数n如果是合数,那么它的所有的因子不超过n的开方 { if(n%i==0)return 0;else continue; } } return 1;//true-->1,false-->0 /*=======验证哥德巴赫猜想的函数(调用judgePrime)=======*/ int proveGoldbach(int m){ } int main(){ } printf(“n提示:输入一个偶数来验证哥德巴赫猜想,当输入数值<6时,停止输入和判断。nn”);for(int num=6;num>=6;){ } int temp;printf(“Please enter a number:”);scanf(“%d”,&num);temp=proveGoldbach(num);if(temp==0)//当输入小于6或者不是偶数时结束 return 0;printf(“==================================”);if(m<6||m%2!=0){ } if(judgePrime(j)==1&&judgePrime(m-j)==1)//判断两数是否都等于质数 { } printf(“t%d = %d + %dn”,m,j,m-j);return 0;//判断是否大于等于6或者不是偶数 for(int j=2;j<(m/2);j++) 题目三:编写一个求阶乘的函数,接着调用该函数实现组合的求解要求: ① 提示用户输入n和m的数值; ② 输出的 结果 #include } /*=======组合函数=======*/ int combine(int m,int n){ } /*=======main函数=======*/ void main(){ int m,n;int res;printf(“n提示:这是求组合求和公式的函数,输入两个整数(分别为上标和下标)nn”);scanf(“%d%d”,&m,&n);if(m>n)//判断上标大于小标重新输入 goto loop;return fac(n)/(fac(n-m)*fac(m));int f;if(n<0)printf(“n<0,data error!”);f=1;else if(n==0||n==1)else f=fac(n-1)*n;return f;loop:printf(“Please enter two numbers:”); }res=combine(m,n);printf(“tResult is %dn”,res); 题目四:编写一个求矩阵中最大元素以及最小元素的函数selectMaxAndMin(),在main函数中调用该函数 要求: 最大值和最小值的输出操作,可以放在selectMaxAndMin()函数中 #include /*=======在矩阵中选择最大最小数的函数=======*/ void selectMaxAndMin(int arry[ROW][COLUMN])//用指针更方便 { int tempMax,tempMin;if(arry[0][0]>arry[0][1])//赋初始值 { } else { } for(int i=0;i } } for(int j=0;j } if(arry[i][j]>tempMax){ } if(arry[i][j] } int mat[ROW][COLUMN];printf(“Please enter a %d X %d matrix:n”,ROW,COLUMN);for(int i=0;i } selectMaxAndMin(mat);return 0;for(int j=0;j 题目五:编写一个编码原文的函数,对于给定的内容,按照敌方的规律对其进行编码 要求: 某日,我军某部截获了一份敌方电报,经过仔细分析后发现:该电文中所有的字母字符都是经过某种运算后得到的,然那些非字母字符则没有经过任何处理。例如,原文中的字符A对应电文中的字符E,原文中的字符b对应电文中的字符f,原文中的字符W对应电文中的字符A,原文中的字符!在电文中仍为! #include //定义大小 /*=======密码翻译的函数=======*/ char trans(char a){ } //主函数 int main(void){ printf(“请输入原文:nnn”);char str[SIZE];gets(str);printf(“nnn”);if((a>='a'&&a<='v')||(a>='A'&&a<='V')){ } else { } if(a>='w'||a>='W'){ } else { return a;} return a-22;return a+4; }printf(“正在破解……nnn”);printf(“破译的原文是:”);for(int i=0;i<20;i++){ } printf(“n”);str[i]=trans(str[i]);if(str[i]==' ')//判断是否结束 break;printf(“%c”,str[i]); 题目六:编写一个函数,求解输入矩阵的转置矩阵并输出 #include } /*=======原始矩阵的打印函数=======*/ for(int i=0;i for(int j=0;j } printf(“请输入矩阵元素 [%d][%d]=:”,i,j);scanf(“%d”,&mat[i][j]); void matPrint(int mat[][COLUMN]){ } /*=======转置矩阵的打印函数=======*/ void matTrasPrint(int mat[][COLUMN]){ } /*=======main函数=======*/ int main(void){ } printf(“==================================”);printf(“请输入一个 %d X %d 的矩阵:n”,ROW,COLUMN);int mat[ROW][COLUMN];matInput(mat);printf(“==================================”);printf(“原始矩阵为:n”);matPrint(mat);printf(“==================================”);printf(“原始矩阵的转置矩阵为n”);matTrasPrint(mat);return 0;int arr[COLUMN][ROW];for(int i=0;i } for(int j=0;j } printf(“n”);arr[i][j]=mat[j][i];printf(“%3d”,arr[i][j]);for(int i=0;i } for(int j=0;j 题目七:用户输入的字符串,以相反的顺序打印出来。 要求:利用递归函数调用形式 #include int i=0;if(a[i]!=' '){ } int main(void){ }printf(“t提示:输入一串字符以相反的顺序打印n”);char str[SIZE];gets(str);reverse(str);printf(“n”);return 0; } else return;reverse(&a[i+1]);//递归调用 printf(“%c”,a[i]); 四、讨论 毕业生的问题 工作 面试 梦想 山寨,模仿 环境保护 The time would not far away when we can live in a beautiful and suitable world, if we were to adopt the advice which was given by experts many a time and put it into action.中国梦 梦想是什么? 大家对此普遍采取什么态度与行动。、你的独家看法。 We call it dream which brings people hope and happiness,and no matter where we are, we would work for it try our best, if we were to have a chance to close our dream.That with different attitude people do something not the same for their dreams such as make for dream, study for dream, practice for dream, etc. 必背古诗文 江南汉乐府古朗月行李白赋得古原草送别 白居易乐游原李商隐秋浦歌李白独坐敬亭山李白村居高鼎咏鹅骆宾王悯农二首李绅江上渔者范仲淹咏华山寇准敕勒歌北朝民歌 蜂罗隐舟夜书所见查慎行画眉鸟欧阳修 静夜思李白长歌行汉乐府民歌登鹳雀楼王之涣台城韦庄乌衣巷刘禹锡竹枝词刘禹锡题都城南庄崔护春夜喜雨杜甫春晓孟浩然游子吟孟郊忆江南白居易绝句(迟日)杜甫逢雪宿芙蓉山主人 刘长卿宿建德江孟浩然七步诗曹植 绝句释志南山行杜牧枫桥夜泊张继夜书所见叶绍翁九月九日忆山东兄弟 王维竹石郑燮梅花王安石墨梅王冕石灰吟于谦 赠花卿杜甫江南逢李龟年杜甫山行姚鼐四时田园杂兴范成大(两首)清明杜牧塞下曲卢纶(两首)望庐山瀑布李白绝句(两个黄鹏)杜甫滁州西涧韦应物凉州词王翰乡村四月翁卷月夜刘方平 秋夕杜牧望洞庭刘禹锡峨眉山月歌李白 风李峤元日王安石江雪柳宗元 咏柳贺知章江畔独步寻花(两首)杜甫 回乡偶书贺知章浪淘沙刘禹锡书湖阴先生壁王安石江南春杜牧 春日偶成程颢小池杨万里池上白居易 小儿垂钓胡令能渔歌子张志和惠崇春江晓景苏轼 题西林壁苏轼虞美人李煜赠刘景文苏轼 三衢道中曾几寻隐者不遇贾岛所见袁枚 题秋江独钓图王士禛黄鹤楼送孟浩然之广陵李白 清平乐 村居辛弃疾芙蓉楼送辛渐王昌龄鹿柴王维 送元二使安西王维赠汪伦李白别董大高适 游园不值叶绍翁宿新市徐公店杨万里早发白帝城 李白 六月二十七日望湖楼醉书苏轼晓出净慈寺送林子方杨万里 望天门山李白饮湖上初晴后雨苏轼春雪韩愈 村晚雷震凉州词王之涣出塞王昌龄 示儿陆游如梦令(常记溪亭日暮)李清照 冬夜读书示子聿陆游观书有感朱熹 西江月(夜行黄沙道中)辛弃疾夏日绝句李清照 秋夜将晓出篱门迎凉有感春日朱熹题临安邸林升 己亥杂诗龚自珍闻官军收河南河北 杜甫从军行王昌龄 早春韩愈泊船瓜洲王安石商山早行温庭筠 大风歌刘邦第二篇:C语言程序设计实验七:函数、数组、指针
第三篇:C语言程序设计—函数—实验报告
第四篇:六级作文必背题目
第五篇:小学生必背古诗题目