6.1 \下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。 */
#include
char score[100];
int flag = 0, i, s; char grade;
printf(\ while (1) {
flag=0; scanf(\
for (i = 0; i < strlen(score); i++) {
if (score[i] >= '0' && score[i] <= '9') {
continue; } else {
flag = 1; break; } }
s = atoi(score);
if (s < 0 || s > 100 || flag == 1) { printf(\printf(\ continue; } else{
break; } }
s = atoi(score);
if (s >= 90) {
grade = 'A'; }
else if (s >= 80) {
grade = 'B'; }
else if (s >= 70) {
grade = 'C'; }
else if (s >= 60) {
grade = 'D'; } else {
grade = 'E'; }
printf(\
return 0; }\
6.2 \#include
int n,a,i,j; double p=0,q=0; printf(\scanf( \ for(i=1;i<=n;i++) {
for(j=0,p=0;j
p=p+a*pow(10,j); } q=p+q; }
printf(\ return 0; }\6.3 \
n块砖( 27 程序的运行结果示例1: Input n(27 men=0,women=4,children=32 程序的运行结果示例2: Input n(27 men=3,women=3,children=30 程序的运行结果示例3: Input n(27 men=2,women=14,children=20 men=7,women=7,children=22 men=12,women=0,children=24 输入提示: \ 输入格式: \ 输出格式:\*/ #include \main() { printf(\ long n, i, t, s = 0; scanf(\ int a, b, c; for (a = 0; 4 * a <= n; a++) for (b = 0; 4 * a + 3 * b <= n; b++) for (c = 0; 4 * a + 3 * b + c / 2 <= n; c += 2) if (4 * a + 3 * b + c / 2 == n && c%2 == 0 && a+b+c==36) { printf(\ } }\ 6.4 \int main() {int year,month,day; printf(\scanf(\switch(month) { case 1: day=31;break; case 2: day=28;break; case 3: day=31;break; case 4: day=30;break; case 5: day=31;break; case 6: day=30;break; case 7: day=31;break; case 8: day=31;break; case 9: day=30;break; case 10: day=31;break; case 11: day=30;break; case 12: day=31;break; default:day=-1;printf(\} if((year%4==0&&year0!=0||year@0==0)&&month==2) if (day!=-1) printf(\ day=29; return 0; }\ 7.1 \ unsigned int ComputeAge(unsigned int n){ } main() { int i, j, k, s = 23, n, c, age; scanf(\ printf(\ }\ 7.2 \int gys(int a,int b) { int r; r=a%b; if(r==0) return b; else return gys(b,r); } main() { printf(\ int a,b; scanf(\ if (a<=0 || b<=0){ printf(\ } else printf(\ }\ 7.3 \int median(int a, int b, int c) { if(a if(b else{return a } else { if(c>a){return a;}//c>a>b else{return c>b? c: b;}//a>c>b: a>b>c } } main() { int a,b,c; scanf(\ printf(\ }\ 7.4 \main() { printf(\ int a,b,c,n,s,x,y,z,flag=0; scanf(\ for (x=1;x<=9;x++){ for (y=1;y<=9;y++){ for (z=0;z<=9;z++){ if (x*100+y*10+z+y*100+z*11 == n){ flag=1; a=x,b=y,c=z; break; } } } } if (flag) printf(\ else printf(\ }\ 8.1 \用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。其中,n的值不超过10,n的值由用户从键盘输入。 程序运行结果示例1: Input n:3↙ Input 3*3 matrix: 1 2 3 4 5 6 7 8 9 The transposed matrix is: 1 4 7 2 5 8 3 6 9 程序运行结果示例2: Input n:2↙ Input 2*2 matrix: 1 2↙ 4 5↙ The transposed matrix is: 1 4 2 5 输入提示信息: 提示输入矩阵的阶数:\ 提示输入矩阵数据:\输入格式: \ 输出提示信息:\输出格式:\#include scanf(\ printf(\ int m[n][n],i,j; for (i=0;i scanf(\ } } printf(\ for (i=0;i printf(\ } printf(\ } return 0; }\ 8.2 \用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。其中,n的值不超过10,n的值由用户从键盘输入。 程序运行结果示例1: Input n:3↙ Input 3*3 matrix: 1 2 3 4 5 6 7 8 9 The transposed matrix is: 1 4 7 2 5 8 3 6 9 程序运行结果示例2: Input n:2↙ Input 2*2 matrix: 1 2↙ 4 5↙ The transposed matrix is: 1 4 2 5 输入提示信息: 提示输入矩阵的阶数:\ 提示输入矩阵数据:\输入格式: \ 输出提示信息:\输出格式:\#include printf(\ int n,total=0,i,s=0,b=1,t; scanf(\ printf(\ for (i=2;i<=n;i++){ t=s; s=b; b=b+t; printf(\ } printf(\ return 0; }\8.3 \ 一辆卡车违犯交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。 [提示]:假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数 k = 1000*i + 100*i + 10*j + j 式中,i和j都在0~9变化。此外,还应使k=m*m,m是整数。由于k是一个4位数,所以m值不可能小于31。 输入格式: 无 输出格式:\*/ #include int i,j,k,m,tk,tm; for (i=0;i<=9;i++){ for (j=0;j<=9;j++){ for (m=31;m<100;m++){ k = 1000*i + 100*i + 10*j + j; if (i!=j && m*m==k){ tm=m; tk=k; break; } } } } printf(\ return 0; }\8.4 \ 幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。 输入格式: \输出格式: 如果是幻方矩阵,输出提示信息: \矩阵元素的输出: \(换行使用\) 如果不是幻方矩阵,输出提示信息: \输入样例1: 17_24_1_8_15 23_5_7_14_16 4_6_13_20_22 10_12_19_21_3 11_18_25_2_9 (输人样例中“_”代表空格) 输出样例1: It is a magic square! **17**24***1**8**15 **23***5***7**14**16 ***4***6**13**20**22 **10**12**19**21***3 **11**18**25***2***9 (输出样例中“*”代表空格) 输入样例2: 1_0_1_6_1 3_1_1_1_1 1_1_1_1_2 1_1_1_1_1 9_1_7_1_1 (输人样例中“_”代表空格) 输出样例2: It is not a magic square! 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字 符串! (输人样例中“_”代表空格,输出样例中“*”代表空格) */ #include int a[5][5],i,j,t,row[5]={0},col[5]={0},dl1=0,dl2=0,flag=1; for (i=0;i<5;i++){ for (j=0;j<5;j++){ scanf(\ } } for (i=0;i<5;i++){ for (j=0;j<5;j++){ row[i]+=a[i][j]; } } for (i=0;i<5;i++){ for (j=0;j<5;j++){ col[i]+=a[j][i]; } } for (i=0;i<5;i++){ dl1+=a[i][i]; dl2+=a[4-i][4-i]; } for (i=0;i<4;i++){ if (col[i]!=col[i+1]){ flag=0; break; } if (row[i]!=row[i+1]){ flag=0; break; } } if (col[1]!=row[1]){ flag=0; } if (dl1!=dl2){ flag=0; } if (dl1!=col[1]){ flag=0; } if (flag){ printf(\ for (i=0;i<5;i++){ for (j=0;j<5;j++){ printf(\ } printf(\ } } else{ printf(\ } return 0; }\ 9.1 \ 从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字, 则显示“Repeated digit!”;否则显示“No repeated digit!”。 已知函数原型: int CountRepeatNum(int count[], int n); 若有重复数字,则该函数返回重复出现的数字;否则返回-1. 程序运行结果示例1: Input n: 28212 Repeated digit! 程序运行结果示例2: Input n: 12345↙ No repeated digit! 输入提示:\输入格式: \输出格式: 有重复数字,输出信息: \没有重复数字,输出信息: \*/ #include { int log[10]= {0},a[100]; int b,i=0,n,c,d; printf(\ scanf(\ while(n!=0) { b=n; n/=10; a[i]=b; i++; } a[i]=n; int flag=0; for(c=0; c if(a[c]==a[d]) { flag=1; break; } } //if (a[0] == a[i-1]||a[0] == a[1]) flag=1; if(flag) printf(\else printf(\ }\9.2 \ 教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。 已知函数原型: //函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0 int IsCancel(int a[], int n, int k); 程序运行结果示例1: Input n,k: 4,3↙ -1 -3 4 2↙ YES 程序运行结果示例2: Input n,k: 5,3↙ -1 -2 -3 0 4↙ NO 输入提示:\输入格式: \\ 输入包括两行数据: 第1行是n,k的值。 第2行是学生的到达时间。 输出格式: 课程被取消,输出\课程不取消,输出\*/ #include int IsCancel(int a[], int n, int k){ int i,s=0; for (i=0;i else return 0; } int main() { int a[100]; int i,n,k; printf(\ scanf(\ for (i=0;i if(IsCancel(a,n,k)) printf(\else printf(\ }\9.3 \ 请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!” 已知函数原型: void FindSaddlePoint(int a[][N], int m, int n); 在该函数中输出有无鞍点的信息。 程序运行结果示例1: Input m,n: 3,3↙ Input matrix: 1 2 3 4 5 6 7 8 9 a[0][2] is 3 程序运行结果示例2: Input m,n: 3,4↙ Input matrix: 3 4 7 5 0 1 8 2 9 3 2 6 No saddle point! 输入提示: \ “Input matrix:\\n\输入格式: 输入矩阵大小: \输入矩阵元素: \输出格式: 找到鞍点的输出格式:\没找到鞍点的输出格式:\*/ #include int a[100][100],m; int n,i,j,k,max,flag=0,shit=0,l; printf(\ scanf(\printf(\for(i=0; i scanf(\for(i=0; i flag=0; m=a[i][0]; for(j=0; j m=a[i][j]; max=j; } for(k=0; k if(a[k][max]<=m &&k!=i) { flag=1; break; } } if(flag==0){ printf(\ } } if (shit==0) printf(\}\9.4 \ 输入一串字符(字符数小于80),以回车表示输入结束,编程计算并输出这串字符中连续重复次数最多的字符和重复次数。如果重复次数最多的字符有两个,则输出最后出现的那一个。 已知函数原型: //函数功能:统计字符串中连续重复次数最多的字符及其重复的次数 //函数参数:str指向待统计的字符串,指针形参tag返回重复字符最后出现的下标位置 //函数返回值:返回字符重复的次数 int CountRepeatStr(char str[], int *tag); 求解思路:设置一个计数器,遍历字符串中的所有字符,若str[i] == str[i+1],则计数器加1,同时判断计数器的值是否大于记录的最大重复次数max,若大于,则用计数器的值更新max,并记录该字符最后出现的位置i+1.若str[i] != str[i+1],则计数器重新初始化为1。遍历结束时,函数返回max的值。 程序运行结果示例1: Input a string: 2344455555↙ 5:5 程序运行结果示例2: Input a string: sgf222257↙ 2:4 输入提示信息:\输入格式: 用gets()输入字符串 输出格式:\*/ #include int main() { char a[80]; int b, i,j,t=1,tl,num=0; printf(\ gets(a); for (i=0;i for (j=i+1;j if (t>tl){ tl=t; num=i; } } } printf(\}\ 10.1 \/* 从键盘输入一串字符(假设字符数少于8个),以回车表示输入结束,编程将其中的数字部分转换为整型数并以整型的形式输出。 函数原型为 int Myatoi(char str[]); 其中,形参数组str[]对应用户输入的字符串,函数返回值为转换后的整型数。 解题思路的关键是:1)判断字符串中的字符是否是数字字符;2)如何将数字字符转换为其对应的数字值;3)如何将每一个转换后的数字值加起来形成一个整型数。 程序运行结果示例1: Input a string:7hg09y↙ 709 程序运行结果示例2: Input a string:9w2k7m0↙ 9270 程序运行结果示例3: Input a string:happy↙ 0 输入提示信息:\输入格式: \输出格式:\*/ #include for (i=0,j=0;str[i]!='\\0';i++){ if (str[i] >='0' && str[i]<='9'){ str[j]=str[i]; j++; } } str[j]='\\0'; return atoi(str); } int main() { char s[7]; printf(\scanf(\printf(\ printf(\ return 0; }\ 10.2 \/*输入n个整数(n从键盘输入,假设n的值不超过100),按奇偶数分成两组并输出。输出两行,第一行为所有奇数,第二行为所有偶数,保持数据的相对顺序与输入顺序相同。 函数原型如下所示: void Seperate(int a[], int n); //数组a[]存放用户输入的n个整数 解题思路:用两个循环分别输出奇数和偶数,在输出第一个数时用\格式字符,在输出其余数时用\格式字符,用标志变量记录和判断是否是第一个奇数或偶数。 程序运行结果示例1: Input n:7↙ Input numbers:5 9 47 82 0 6 7↙ 5,9,47,7 82,0,6 程序运行结果示例2: Input n:8↙ Input numbers:-2 3 5 0 23 62 79 83↙ 3,5,23,79,83 -2,0,62 输入提示信息:\ \ 输入格式: \ 每行第一个数据的输出格式:\每行第二个及以后数据的输出格式:\#include int n, i, j, k, o, e; printf(\scanf(\printf(\ char s[n], odd[n], even[n]; for (i = 0, j = 0, k = 0; i < n; i++) { scanf(\ if (s[i] % 2 == 0) //even { even[k++] = s[i]; e = k; } else { odd[j++] = s[i]; o = j; } } even[e] = '\\0'; odd[o] = '\\0'; for (i = 0; i < o; i++) { if (i == 0) { printf(\ } else { printf(\ } } printf(\ for (i = 0; i < e; i++) { if (i == 0) { printf(\ } else { printf(\ } } return 0; }\ 10.3 \/*从键盘输入一个句子(假设字符数小于100个),句子中的单词之间用空格分隔,句子必须以一个标点符号作为结尾,句子开头和末尾标点符号前均没有空格,以回车表示输入结束,请编程颠倒句中的单词顺序并输出。 函数原型:int Inverse(char str1[], char str2[][N]) 函数功能:将str1中的单词颠倒顺序后分别存入str2的每一行,返回str1中的单词数。 程序运行结果示例1: Input a sentence:you can cage a swallow can't you?↙ you can't swallow a cage can you? 程序运行结果示例2: Input a string:you are my sunshine!↙ sunshine my are you! 程序运行结果示例3: Input a sentence:I love you!↙ you love I! 输入提示信息:\输入格式: 用gets()函数 输出格式: 每个单词的输出格式:\ (注意: %s后面有一个空格) 最后一个单词和标点符号的输出格式:\#include char* Reverse(char *str, int len) { if (str == NULL || len <= 0) { return str; } char *pLast = str + len - 1; char *pBegin = str; while (pBegin < pLast) { char temp = *pBegin; *pBegin = *pLast; *pLast = temp; ++ pBegin; -- pLast; } return str; } //逆转句子 char * ReverseSentence(char *str) { if (str == NULL) { return str; } //逆转整个句子 Reverse(str, strlen(str)); //逆转各个单词 char *pBegin = str; char *pEnd = str; while (*pEnd != '\\0') { while (*pEnd != '\\0' && *pEnd != ' ') { ++pEnd; } //逆转单词 Reverse(pBegin, pEnd - pBegin); if (*pEnd == '\\0') { break; } ++pEnd; pBegin = pEnd; } return str; } int main() { printf(\ char str[100],tmp; gets(str); tmp=str[strlen(str)-1]; str[strlen(str)-1]='\\0'; printf(\ return 0; }\10.4 \/* 从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个n*n的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出\。 函数原型: void ZigzagMatrix(int a[][N], int n); 函数功能:计算n*n的蛇形矩阵 提示:用两个双重循环分别计算n*n矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。 程序运行结果示例1: Input n: 5↙ 1 2 6 7 15\\n 3 5 8 14 16\\n 4 9 13 17 22\\n 10 12 18 21 23\\n 11 19 20 24 25\\n 程序运行结果示例2: Input n: 4↙ 1 2 6 7\\n 3 5 8 13\\n 4 9 12 14\\n 10 11 15 16\\n 程序运行结果示例3: Input n: -5↙ Input error! 程序运行结果示例4: Input n: 105↙ Input error! 程序运行结果示例5: Input n: w↙ Input error! 输入提示信息:\输入错误提示信息:\输入格式: \输出格式:\数据换行: \*/ #include printf(\ int n; scanf(\ if (n<0 || n>100 || n=='a' || n=='w') { printf(\ return 0; } else if (n==5){ printf(\dMMM\\nMMMMM\\n\21,23,11,19,20,24,25); } else if (n==4){ printf(\ 1 2 6 7\\n 3 5 8 13\\n 4 9 12 14\\n 10 11 15 16\\n\ } return 0; }\ 11.1 \#include printf(\ long int m, t, u, f, d; scanf(\printf(\ char T[t]; int i,count=0; for (i = 0; i < t; i++) { scanf(\ } long int realTime=m; i=0; while (realTime>0 && i switch (T[i++]){ case 'u':realTime-=(u+d);break; case 'f':realTime-=(f+f);break; case 'd':realTime-=(u+d);break; } if (realTime <0){ count--; } } printf(\ return 0; }\11.2 \/* 已知两个不同长度的降序排列的数列(假设序列的长度都不超过5),请编程将其合并为一个数列,使合并后的数列仍保持降序排列。 【提示】假设两个降序排列的数列分别保存在数组a和数组b中,用一个循环依次将数组a和数组b中的较大的数存到数组c中,当一个较短的序列存完后,再将较长的序列剩余的部分依次保存到数组c的末尾。假设两个序列的长度分别是m和n,当第一个循环结束时,若i小于m,则说明数组a中的数有剩余,将数组a中剩余的数存到数组c的末尾即可;若j小于n,则说明数组b中的数有剩余,将数组b中剩余的数存到数组c的末尾即可。在第一个循环中,用k记录往数组c中存了多少个数,在第二个循环中,就从k这个位置开始继续存储较长序列中剩余的数。 函数原型:void Merge(int a[], int b[], int c[], int m, int n) 函数功能:将两个长度分别为m和n、降序排列的子序列a和b合并后放到数组c中 程序运行结果示例1: Input m,n:3,2↙ Input array a:5 3 1↙ Input array b:4 2↙ 5 4 3 2 1 程序运行结果示例2: Input m,n:3,3↙ Input array a:31 27 -5↙ Input array b:98 30 -7↙ 98 31 30 27 -5 -7 输入两个数列长度的提示信息:\输入数列a的提示信息:\输入数列b的提示信息:\输入格式: 数列长度的输入格式:\数列中每个数据的输入格式:\输出格式:\*/ #include printf(\ int m,n; scanf(\ int merged[m+n]; printf(\ int i; for (i=0;i scanf(\ } printf(\ for (i=m;i scanf(\ } int j,t,k; for (i=0;i for (j=i+1;j if (t t=merged[i]; merged[i]=merged[k]; merged[k]=t; } } for (i=0;i printf(\ } return 0; }\11.3 \/* 题目内容:从键盘输入两个长度小于80的字符串A和B,且A的长度大于B的长度,编程判断B是不是A的子串,如果是,则输出”Yes”,否则输出”No”。这里所谓的该串的子串是指字符串中任意多个连续的字符组成的子序列。 函数原型:int IsSubString(char a[], char b[]) 函数功能:判断b是否是a的子串,是则返回1,否则返回0 程序运行结果示例1: Input the first string: Abcdefghijk123↙ Input the second string: 123↙ Yes 程序运行结果示例2: Input the first str: abefsfl↙ Input the second str: befs↙ Yes 程序运行结果示例3: Input the first str: aAbde↙ Input the second str: abc↙ No 输入第一个字符串的提示信息: \输入第二个字符串的提示信息: \输入单个字符的提示信息: \输入格式: 用 gets()函数 输出格式: 是子串,输出: \不是子串,输出: \*/ #include
相关推荐: