c语言题库困难.docx

上传人:s****u 文档编号:12766573 上传时间:2020-05-23 格式:DOCX 页数:11 大小:21.55KB
返回 下载 相关 举报
c语言题库困难.docx_第1页
第1页 / 共11页
c语言题库困难.docx_第2页
第2页 / 共11页
c语言题库困难.docx_第3页
第3页 / 共11页
点击查看更多>>
资源描述
1、以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。并把程序补充完成# define N 4void rotate(int aN, int bN) int i, j;for (i=0; iN;i+) biN-1 = ; = aN-1i; void input(int aN, int n) int i,j; printf(输入4行4列的数组:n); for (i=0;iN;i+) for (j=0;jN;j+) scanf(%d,&aij); printf(n);void output(int bN, int n) int i,j; printf(目标数组为:n); for (i=0;iN;i+) printf(n); for (j=0;jmax,则max=ai,maxindex=i,使用循环结构对每个元素与max比较、处理。/求有10个元素的数组中最大元素及其下标。#include #include int main(int argc, char *argv)int a10;int i, index;/i表示循环变量,index用于存放值最大的元素下标 /输入数组元素 printf(请输入10个元素的值:n);for (i = 0; i 10; i+) scanf(%d, &ai); /求值最大的元素及其对应下标 index = 0;for (i = 1; i r2),则交换;然后比较第二个元素与第三个元素;依次类推,经n-1次两两相邻比较后,最大的数已交换到最后一个位置;第一趟冒泡排序 第 2 趟:将前n-1个数(最大的数已在最后)按第1趟方法进行,经n-2次两两相邻比较后使得次大的数交换到倒数第二个位置;第二趟冒泡排序 依此类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。最后使得第n-1大的元素交换到第二个位置,排序结束。/冒泡排序。 #include #include #define N 6 /*数组元素个数 */ void input(int a, int n); /*输入数组的n个元素 */void output(int a, int n); /*输出数组的n个元素 */void bubblesort(int a, int n); /*对有n个元素的数组进行冒泡排序 */int main(int argc, char *argv) /定义数组 printf(输入数组的%d个元素:n, N); /输入数组的元素 printf(排序前数组a的元素为:n); /输出排序前的数组元素的值 /排序 printf(排序后数组a的元素为:n); /输出排序后的数组元素的值 system(pause); return 0;void input(int a, int n) /*输入数组a的n个元素的值*/ int i; for (i = 0; i n; i+) scanf(%d, &ai); void output(int a, int n) /*输出数组a的n个元素*/ int i; for (i = 0; i n; i+) printf(%d , ai); printf(n); void bubblesort(int a, int n) /*用冒泡法对数组a的n个元素进行非递增排序*/ int i, j, t; for (i = 1; i = n - 1; i+) for (j = 0; j aj+1) 4、选择排序基本思想:假设待排序的数组a有n个元素,选择排序法是:第一趟找出第一个位置应该放的元素,即从n个元素中找出最小的元素,因为排成非递增有序序列后,第一个元素必是整个数组中最小的,所以将找到的最小的元素与第一个元素交换,这样第一趟的结果使第一个元素最小;第二趟找出第二个位置应该放的元素,再从第2至第n个元素中找出最小的,再将其与第二个元素交换,.第n-1趟找出第n-1个位置应该放的元素;最后剩的元素自然放在第n位,一共进行n-1趟。 /选择排序。#include #include #define N 6 /*数组元素个数 */ void input(int a, int n); /*输入数组的n个元素 */void output(int a, int n); /*输出数组的n个元素 */void selectsort(int a, int n); /*对有n个元素的数组进行冒泡排序*/int main(int argc, char *argv) /定义数组; printf(输入数组的%d个元素:n, N); /输入数组的元素; printf(排序前数组a的元素为:n); /输出排序前的数组元素的值; /排序; printf(排序后数组a的元素为:n); /输出排序后的数组元素的值。 system(pause); return 0;void input(int a, int n) /*输入数组a的n个元素*/ int i; for (i = 0; i n; i+) scanf(%d, &ai); void output(int a, int n) /*输出数组a的n个元素*/ int i; for (i = 0; i n; i+) printf(%d , ai); printf(n); void selectsort(int a, int n) /*用选择法对数组a的n个元素进行非递增排序*/ int i, j, k, t; for (i = 0; i = n - 2; i+) /0n-2 表示要进行n-1趟筛选 /*用k记录下标从i到n-1中最小元素下标,假设ai最小*/ for (j = i + 1; j = n - 1; j+) /元素ai依次和i后面的所有数作比较 if (aj 0)时,若满足下列条件,则必然出现新单词:texti-1= =&texti!=。#include #include int main(int argc, char *argv) char text100; int word, i; printf(输入一行字符:n); gets( ); if (text0 = ) word = 0; else if (text0 != 0) word = 1; i = 1; while (texti != 0) if ( ) word+; i+; printf(word=%dn, word); system(pause); return 0;7、输入20个字符,分别统计其中的数字、其他字符的个数。分析:使用字符数组来存放20个字符,使用格式符%c输入、输出字符。使用循环结构对字符数组中的字符进行输入和处理。#include #include int main(int argc, char *argv) char str20; int i, number = 0, other = 0; printf(Input a string: ); for (i = 0; i 20; i+) scanf(%c, ); for (i = 0; i 20; i+) if ( ) else other+; printf(The string is: ); for (i = 0; i 20; i+) printf(%c, stri); printf(nnumber: %d, other: %dn, number, other); system(pause); return 0;8、汉诺塔问题。该问题源自印度古老的传说:古老的神庙门前有3根柱子,其中第1根柱子上由大到小的顺序套着64个圆盘(大的圆盘在下)。要求把所有的圆盘从第1根柱子移动到第3根柱子上,如图4-6(a)。移动规则如下:1. 可以借助第2根柱子;2. 每次只能移动一个圆盘;3. 任何时候大的圆盘不能压在小的圆盘上面。思路分析假设将64个圆盘按盘的大小由小到大的顺序依次编号为1到64,三根柱子分别编号为A,B,C,问题转化为A柱上有64个圆盘,如何借助B柱将它们全部移动到C柱上。可以分为三步:第一步是将1-63号圆盘借助C柱移动到B柱上;第二步是将编号为64的最大的盘直接移动到C柱上;第三步则是将B柱上的编号为1到63的圆盘借助A柱移动到C柱上。前两步的移动如图4-6(b)所示。显然,其中的第一步和第三步和整个问题是类似的,只是圆盘的数量减少了1个。定义函数move(int n, char x, char y, char z)完成将n个圆盘从x柱借助于y柱移动到z柱。#include #include void move(int n, char x, char y, char z) if ( ) printf(%c-%cn, x, z); else printf(%c-%cn, x, z); int main(int argc, char *argv) int n; printf(请输入盘子数:); scanf(%d, &n); printf(移动步骤如下:n); move(n, A, B, C); system(pause); return 0;9、求二维数组(3行3列)的对角线元素的和10 11 1213 14 1516 17 18int main(void)inta33=10,12,13,14,15,16,17,18,19,sum=0;for(inti=0;i3;i+)for(intj=0;j3;j+)if( ) printf(%d,sum);return 0;10、写一段代码copy_str.c,用指针把一个字符串复制到另一个字符串里面。部分代码已经给出,请填写未完成的部分。#include int main() char str11024 = This is an sample text; char str21024; char *p_str1; char *p_str2; p_str1 = ; = &str20; while (*p_str1 != 0) p_str2 = 0; printf(str1 = %sn, str1); printf(str2 = %sn, str2);return 0;11、写一个函数isDigit(),判断一个字符是不是数字字符。格式如下:如果ch是一个数字字符(0到9),那么返回1,否则返回0。int isDigit(char ch) if ( ) return 1; else return 0; / main函数测试int main(void) printf(test1: %dn, isDigit(a); printf(test1: %dn, isDigit(b); printf(test1: %dn, isDigit(0); printf(test1: %dn, isDigit(9); printf(test1: %dn, isDigit(?);12、写一个函数isAlphabet(),判断一个字符是不是字母。格式如下:如果ch是一个字母字符(A到Z或者a到z),那么返回1,否则返回0。int isAlphabet(char ch) if ( ) return 1; else if ( ) return 1; else return 0; / main函数测试int main(void) printf(test2: %dn, isAlphabet(a); printf(test2: %dn, isAlphabet(b); printf(test2: %dn, isAlphabet(0); printf(test2: %dn, isAlphabet(9); printf(test2: %dn, isAlphabet(?);13、写一个函数reverse(),将一个字符串中的内容倒置过来。格式如下:比方说,如果text的内容是”ABCDEFG”,那么reverse(text)后,text变成”GFEDCBA”。void reverse(char text) int len = strlen(text); char left = 0; char right = len - 1; char temp; while (left right) left+; right-; / main函数测试int main(void) char text1024 = ABCDEFG; reverse(text); printf(test3: %sn, text);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!