2-5-1 字符定位函数(程序填空题)
在主函数中输入一个字符串和一个字符,调用match函数,如果该字符在字符串中,就从该字符首次出现的位置开始输出字符串中的字符。如果未找到,输出“Not Found”。
本题要求:根据main函数的程序实现,完成match函数的定义。
int main(void ) { char ch, str[80], *p = NULL; scanf("%s", str); getchar(); while((ch = getchar())!='\n') { if((p = match(str, ch)) != NULL) printf("%s\n", p); else printf("Not Found\n"); } return 0; } //1)____________________ (1分) /* 字符定位函数定义:match函数*/ { while (/*2)________ (1分) */) if (*s == ch) //3)__________ (1分) else s++; return //4)__________ (1分); }
答案:
1)char* match(char* s,char ch) 2)*s!='\0' 3)return s; 4) NULL
2-5-2 判断回文(程序填空题)
回文是指正读和反读都一样的字符串,如abcba就是一个回文,
从键盘输入一个字符串判断其是否是回文,如果是则输出"Yes!“,
否则输出"No!”,请填空完成相应功能。
输入输出样例如下:
输入样例1:
abccba
输出样例1:
Yes!
输入样例2:
abcde
输出样例2:
No!
#include <stdio.h> #include <string.h> #define N 80 int main(void) { char s[N]; int i,j; gets(s); i=0; j = /*1)_________ (1分)*/; while(/*2)_________ (1分)*/) { if(/*3)_________ (1分)*/) { i++; j--; } else break; } if(/*4)_________ (1分)*/) printf("Yes!\n"); else printf("No!\n"); return 0; }
1)strlen(s)-1 2)i<j 3)s[i] == s[j] 4)i>=j
2-6-1 数字金字塔(函数)
函数接口定义:
void pyramid(int n);
其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行数字金字塔。注意每个数字后面跟一个空格。
void pyramid(int n) { for (int i = 1; i <= n; i++) { for (int k = 0; k < n - i; k++) printf(" "); for (int j = 1; j <= i; j++) { printf("%d ", i); } printf("\n"); } }
2-6-2 使用函数求最大公约数(函数)
函数接口定义:
int gcd( int x, int y );
其中x和y是两个正整数,函数gcd应返回这两个数的最大公约数
int gcd( int x, int y ) { int ret = 0; if(x>=y) { if(x%y==0) return y; else return gcd(y,x%y); } else { if(y%x==0) return x; else return gcd(x,y%x); } }
2-6-3 使用函数求余弦函数的近似值(函数)
函数接口定义:
double funcos( double e, double x );
本题要求实现一个函数,用麦克劳林展开公式求cos(x)的近似值,精确到最后一项的绝对值小于e(函数的一个参数,不是数学中的那个e)
double funcos( double e, double x ) { if(x==0) return 1; double fu = 1.0,t = 1.0; double sum = 1.0; int i = 1; while(t>=e) { fu = -1*fu*x*x/(i*(i+1)); i+=2; sum+=fu; if(fu<0) t = -1*fu; else t = fu; } return sum; }
2-6-4 使用函数输出水仙花数(函数)
函数接口定义:
int narcissistic( int number ); void PrintN( int m, int n );
函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000
int narcissistic( int number ) { int count = 0; int n = number,t = number; while(n) { count++; n/=10; } int sum = 0,w = 0; for(int i = 0;i<count;i++) { w=number%10; sum += pow(w,count); number/=10; } if(t==sum) return 1; return 0; }
void PrintN( int m, int n ) { for(int i = m+1;i<n;i++) { if(narcissistic(i)) printf("%d\n",i); } }
2-6-5 使用函数的选择法排序(函数)
函数接口定义:
void sort( int a[], int n );
其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。
void sort( int a[], int n ) { for(int j = 0;j<n-1;j++) { int min = a[j]; for(int i = 0;i<n-1-j;i++) { if(a[i]>a[i+1]) { int t = a[i]; a[i] = a[i+1]; a[i+1] = t; } } } }
2-7-1 求一批整数中出现最多的个位数字
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
#include<stdio.h> #include<ctype.h> int main() { int n = 0; int i, max =0, c, m; int arr[10] = {0}; while (scanf("%d", &n) != EOF) { max = 0; for (i = 0; i<10; i++) { arr[i] = 0; } for (i = 0; i < n; i++) { scanf("%d", &c); do { m = c % 10; c /= 10; arr[m]++; if (arr[m] > max) { max = arr[m]; } } while (c); } printf("%d:", max); for (int j = 0; j<10; j++) { if (arr[j] == max) { printf(" %d", j); } } printf("\n"); } return 0; }
2-7-2 找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点
#include<stdio.h> int main() { int n = 0; scanf("%d",&n); int arr[6][6]; for(int i = 0;i<n;i++) { for(int j = 0;j<n;j++) scanf("%d",&arr[i][j]); } int h = 0,l=0,flag =0; int i = 0; for(;i<n;i++) { for(int j = 0;j<n;j++) { if(arr[i][j]>=arr[i][l]) { l = j; } } flag = 1; for(h = 0;h<n;h++) { if(arr[h][l] <arr[i][l]) { flag = 0; break; } } if(flag ==1) break; } if(flag == 1) { printf("%d %d",i,l); } else printf("NONE"); return 0; }