C语言作业及参考答案 下载本文

输出数据 输入示例 输出示例 提示 标题 描述 一个表示对应等级的字符 65 D 必须定义函数 95-100 A 81-94 B 70-80 C 60-69 D 59以下 E 7.8 字符分类统计 写一个函数,统计一个字符串中字母、数字、空格及其他字符的个数。在主函数中输入字符串和输出统计结果 输入数据 一个字符串 输出数据 四个整数,发表表示字母、数字、空格及其他字符的个数 输入示例 g6g 7g**g**k 输出示例 5 2 3 4 提示 标题 描述 一个函数只能返回一个值 7.12 成绩统计 输入10个学生5门课的成绩,分别写3个函数完成: (1)每个学生的平均分 (2)每门课的平均分 (3)找出最高分学生的学号(1-10)和课程(1-5) 在主函数中调用这3个函数 输入数据 一个10行5列的数组 (1)10个整数,分别表示每个学生的平均分 (2)5个整数,分输出数据 别表示每门课的平均分 (3)2个整数,分别表示最高分学生的学号和课程 都用=输出 97 98 87 86 65 77 88 99 88 77 67 68 69 70 71 77 68 87 89 88 77 输入示例 88 78 89 77 86 67 66 65 64 63 62 61 99 100 76 78 79 77 89 65 65 65 65 65 98 98 98 98 98 输出示例 86 85 69 81 81 69 77 79 65 98 78 78 78 82 79 7 5 提示 标题 可以先初始化数组,程序正确后才改为键盘输入成绩。 7.13 排序及查找 描述 分别用3个函数完成: (1)输入10个职工的姓名和职工号 (2)按职工号从小到大排序,职工号也随之调整 (3)根据职工号,用折半查找的方法查找该职工的姓名 主函数调用这3个函数,并在主函数中输入(3)中的职工号,输出查询结果 10个职工的姓名和职工号(姓名是字符串,职工号是整数) 1个职工号 输入数据 输出数据 排好序的职工号与姓名 查找到的姓名,找不到输出NO zhangsan 10048 lisi 10027 wangwu 20046 zhangdan 输入示例 10003 zhanghao 30056 yaoming 20037 guoyue 10088 lindan 30002 she 20005 zhouhuajian 10002 20005 输出示例 zhouhuajian 10002 zhangdan 10003 lisi 10027 zhangsan 10048 guoyue 10088 she 20005 yaoming 20037 wangwu 20046 lindan 30002 zhanghao 30056 she 标题 描述 7.15计算日期 给出年月日,计算该日是该年的第几天 输入数据 年,月,日 输出数据 天数 输入示例 2008,3,2 输出示例 62 标题 描述 7.14 十六进制数转换为十进制数 输入一个十六进制数,转换为十进制数输出 输入数据 一个表示十六进制数的字符串 输出数据 一个整数 输入示例 1a6 输出示例 422 提示 十六进制数不能用%x以整数形式接收 #include int change(char a[],int n) { int t,len; if(n==0) return 0; t=a[n-1]>'9'a[n-1]-'a'+10:a[n-1]-'0'; return change(a,n-1)*16+t; } int main() { char char16[8]; int int10; gets(char16); strlwr(char16); int10=change(char16,strlen(char16)); printf(\ return 0; } 标题 描述 7.16验证“歌德巴赫猜想” 验证“歌德巴赫猜想”,即:任意一个大于等于6的偶数均可表示成两个素数之和。 输入数据 输入只有一个正整数x。(x<=2000) 如果x不是“大于等于6的偶数”,则输出一行: Error! 否则输出这个数的所有分解形式,形式为: x=y+z 输出数据 其中x为待验证的数,y和z满足y+z=x,而且y<=z,y和z均是素数。 如果存在多组分解形式,则按照y的升序输出所有的分解,每行一个分解表达式。 注意输出不要有多余的空格。 输入示例 100 100=3+97 100=11+89 100=17+83 100=29+71 100=41+59 100=47+53 输出示例 #include #include /*判断num是否是素数,是则返回1, 否则返回0*/ int prime(int num) {int k,i; k=sqrt(num); for(i=2; i<=k; i++) if(num%i==0) return 0; return 1; } int main() { int n,i,j; scanf(\ if(n<6||n%2) printf(\ else { for(j=3; j<=n/2; j+=2) if(prime(j)&&prime(n-j)) //寻找两个和为i的素数 printf(\ } return 0; } 标题 7.17八皇后问题 描述 在国际象棋棋盘上:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是着名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。 给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。 输入数据 输出数据 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92) 输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。 2 输入示例 1 92 输出示例 15863724 84136275 //方法一 #include #include #define cc 8 int a[92][cc], chess[cc]; FILE *fp; int check(int x) { //判断第x+1个皇后是否可以放下,可以返回1, //否则返回0 int i; for (i = 0; i < x; i++) //做同列和同对角线检查 if (chess[x] == chess[i] || abs(x-i) == abs(chess[x]-chess[i])) return 0; return 1; } void f(int x) { int j, y; static int z=0; //解的序号 for(y=1;y <=cc; y++) //所有的列都试验 { chess[x] = y; //放下 if (check(x)) //如果可以放 { if(x==cc-1) //最后一个皇后放下了 { for (j = 0; j int board[9][9]; int left[16],right[16],row[9]; int buju[92][8]; FILE *fp; void print_board(); void try_column(intcolumn); int compare(int a[8],int b[8]) { int i; for(i=0;i<8; i++) if(a[i]b[i]) return 1; return 0; } void change(int a[8],int b[8]) { int i; int t; for(i=0; i<8; i++) t=a[i],a[i]=b[i],b[i]=t; } void sort(int buju[92][8]) { int i,j,k; for(i=0; i<91; i++) { k=i; for(j=i+1; j<92; j++) if(compare(buju[k],buju[j])>0) k=j; change(buju[i],buju[k]); } } int main() { int i,j,n,p; for (i=1;i<=8;i++) row[i]=1; //初始化行状态