网站制作需要学什么,宁波网站建设地址,汕头市公司网站建设多少钱,wordpress采集文章发布目录 51.从整数10到55之间#xff0c;选出能被3整除、且有一位上的数是5的那些数#xff0c;并把这些数放在b所指的数组中#xff0c;这些数的个数作为函数值返回52.先将s所指字符串中的字符按逆序存放到t所指字符串中#xff0c;然后把s所指串中的字符按正序连接到t所指串… 目录 51.从整数10到55之间选出能被3整除、且有一位上的数是5的那些数并把这些数放在b所指的数组中这些数的个数作为函数值返回52.先将s所指字符串中的字符按逆序存放到t所指字符串中然后把s所指串中的字符按正序连接到t所指串的后面53.统计s所指维数组中0的个数存在变量zero中)和1的个数存在变量one中并输出结果54.删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据55.在任意给定的N个正整数中从左到右依次逐个取三个数作为一组按值大小找出该组数的中值用该中值替换与该组数对应的原三个数中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中输出56.根据以下公式求值并作为函数值返回57.读入一个英文文本行将其中每个单词的第一个字母改成大写然后输出此文本行58.将形参str所指字符串中的数字字符按从前往后出现的次序从左往右拼接成一个整数返回主函数输出59.求S的值 51.从整数10到55之间选出能被3整除、且有一位上的数是5的那些数并把这些数放在b所指的数组中这些数的个数作为函数值返回
给定程序modi1.c中函数fun的功能是:从整数10到55之间选出能被3整除、且有一位上的数是5的那些数并把这些数放在b所指的数组中这些数的个数作为函数值返回。规定函数中a1放个位数a2放十位数。
请改正程序中的错误使它能得出正确结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构!
modi1.c
#include stdio.h
int fun( int *b )
{ int k,a1,a2,i0;for(k10; k55; k) {
/************found************/a2k/1O;//0写成了大写的O,a1k-a2*10;if((k%30 a25)||(k%30 a15)){ b[i]k; i; }}
/************found************/return k;//最后返回的应该是这些数的个数}
main( )
{ int a[100],k,m;mfun( a );printf(The result is :\n);for(k0; km; k) printf(%4d,a[k]); printf(\n);getchar();
}
解题思路 0写成了O挺像新手会犯的错毕竟在键盘上也挨得挺近的在记事本上也很像
答案
#include stdio.h
int fun( int *b )
{ int k,a1,a2,i0;for(k10; k55; k) {
/************found************/a2k/10;a1k-a2*10;if((k%30 a25)||(k%30 a15)){ b[i]k; i; }}
/************found************/return i;}
main( )
{ int a[100],k,m;mfun( a );printf(The result is :\n);for(k0; km; k) printf(%4d,a[k]); printf(\n);getchar();
}
测试
52.先将s所指字符串中的字符按逆序存放到t所指字符串中然后把s所指串中的字符按正序连接到t所指串的后面
给定程序modi1.c中函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中然后把s所指串中的字符按正序连接到t所指串的后面。
例如:当s中的字符串为:ABCDE时则t中的字符串应为:“EDCBAABCDE”。
请改正程序中的错误使它能得出正确的结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构!
modi1.c:
#include stdio.h
#include string.hvoid fun (char *s, char *t)
{
/************found************/int i;//这里可以明显看到是少定义了一个变量sl,注意是sl,l是字母不是数字1在有的字符格式里l和1可谓格外相似这里建议大家看到题目代码有的直接复制比较好i0;sl strlen(s);for (; isl; i)
/************found************/t[i] s[sl-i];//数组下标是从0开始的所以对应得倒序元素下标应为sl-i-1for (i0; isl; i)//接上正序的字符串t[sli] s[i];t[2*sl] \0;
}main()
{ char s[100], t[100];printf(\nPlease enter string s:); scanf(%s, s);fun(s, t);printf(The result is: %s\n, t);getchar();
}
解题思路 虽然修改书写错误很简单这种错误更多考的是细心
答案
#include stdio.h
#include string.hvoid fun (char *s, char *t)
{
/************found************/int i,sl;i0;sl strlen(s);for (; isl; i)
/************found************/t[i] s[sl-i-1];for (i0; isl; i)t[sli] s[i];t[2*sl] \0;
}main()
{ char s[100], t[100];printf(\nPlease enter string s:); scanf(%s, s);fun(s, t);printf(The result is: %s\n, t);getchar();
}
测试
53.统计s所指维数组中0的个数存在变量zero中)和1的个数存在变量one中并输出结果
给定程序MODI1.C中函数fun()的功能是统计s所指维数组中0的个数存在变量zero中)和1的个数存在变量one中并输出结果。
请改正函数fun中指定部位的错误使它能得出正确的结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构。
MODI1.C
#include stdio.h
void fun( int *s, int n )
{
/**********found**********/int i, one0, zero ;//zero在后面都是累加的所以必须要初始化为0for(i0; in; i)
/**********found**********/switch( s[i] );//switch()后面是不带分号的{
/**********found**********/case 0 : zero;//case语句后面不加break的话后面的语句就都会执行直到遇到break语句或switch语句结束case 1 : one ;}printf( one : %d zero : %d\n, one, zero);
}
main()
{ int a[20]{1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0}, n20;fun( a, n );getchar();
}
解题思路 主要考察switch-case的结构
答案
#include stdio.h
void fun( int *s, int n )
{
/**********found**********/int i, one0, zero0 ;for(i0; in; i)
/**********found**********/switch( s[i] ){
/**********found**********/case 0 : zero;break;case 1 : one ;}printf( one : %d zero : %d\n, one, zero);
}
main()
{ int a[20]{1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0}, n20;fun( a, n );getchar();
}
测试
54.删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据
给定程序MODI1.C中fun函数的功能是:删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据。
请改正函数fun中指定部位的错误使它能得出正确的结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构!
MODI1.C
#include stdio.h
#include stdlib.h
#define N 20
int fun( int *b )
{
/**********found**********/int t[N] ,i, num//由题意可知num是删除数组中小于10的数据后还剩下的数据个数要初始化为0且定义变量最后没加分号结尾for(i0; iN; i)if(b[i]10)
/**********found**********/t[num]b[i];//这里num应该是后自增运算符不然的话存入数组t的数据就是从下标1开始了
/**********found**********/for(i0; inun; i)//循环条件应该是小于numb[i]t[i];return( num );
}
main()
{ int a[N],i,num;printf(a数组中的数据 :\n);for(i0;iN ;i) {a[i]rand()%21; printf(%4d,a[i]);}//数组a内数据取随机数范围为[0,20]printf(\n);numfun(a);for(i0;inum ;i) printf(%4d,a[i]);printf(\n);getchar();
}
解题思路 随机数函数 rand()%(n-m1)m //随机数范围为[m,n]
答案
#include stdio.h
#include stdlib.h
#define N 20
int fun( int *b )
{
/**********found**********/int t[N] ,i, num0;for(i0; iN; i)if(b[i]10)
/**********found**********/t[num]b[i];
/**********found**********/for(i0; inum; i)b[i]t[i];return( num );
}
main()
{ int a[N],i,num;printf(a数组中的数据 :\n);for(i0;iN ;i) {a[i]rand()%21; printf(%4d,a[i]);}printf(\n);numfun(a);for(i0;inum ;i) printf(%4d,a[i]);printf(\n);getchar();
}
测试
55.在任意给定的N个正整数中从左到右依次逐个取三个数作为一组按值大小找出该组数的中值用该中值替换与该组数对应的原三个数中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中输出
给定程序MODI1.C中函数fun的功能是:在任意给定的N个正整数中从左到右依次逐个取三个数作为一组按值大小找出该组数的中值用该中值替换与该组数对应的原三个数中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中输出。例如有10个正整数如下:
初始数列为:6 5 7 23 18 5 8 21 45 38
第1组数为:6 5 7 中值为:6 替换后的数列为:6 6 7 23 18 5 8 21 45 38
第2组数为:5 7 23 中值为:7 替换后的数列为:6 6 7 23 18 5 8 21 45 38
第3组数为:7 23 18中值为:18替换后的数列为: 6 6 7 18 18 5 8 21 45 38
第4组数为:28 18 5中值为:18替换后的数列为:6 6 7 18 18 5 8 21 45 38
第5组数为: 18 5 8中值为:8 替换后的数列为:6 6 7 18 18 8 8 21 45 38
第6组数为: 5 8 21中值为:8 替换后的数列为:6 6 7 18 18 8 8 21 45 88
第7组数为:8 21 45中值为:21替换后的数列为:6 6 7 18 18 8 8 21 45 38
第8组数为:21 45 38中值为:38替换后的数列为: 6 6 7 18 18 8 8 21 38 38
最终结果为:6 6 7 18 18 8 8 21 38 38
请改正程序中指定部位的错误使它能得出正确结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构!
MODI1.C:
#include stdio.h
#define N 10
int findmid(int a, int b, int c)
{ int t;t (ab)?(bc?b:(ac?c:a)):((ac)?a:((bc)?c:b));//这个三目运算法看起来挺复杂的可以自个慢慢推下就是找出三个数的中值
/**********found**********/return b;//这里应该是返回中值也就是返回t
}
void fun(int x[])
{ int i,a,b,c,t[N];
/**********found**********/for(i0;iN;i) t[i]x[i]//语句的结尾应该加分号for(i0;iN-2;i){ at[i];bt[i1];ct[i2];
/**********found**********/t[i1]findmid(a,b,c);//如果这里赋给数组t的话那么就还要把数组t赋给数组x显然后续没有这么做所以这里应该直接赋给数组x}
}
main()
{ int i, x[N]{6,5,7,23,18,5,8,21,45,38};for(i0; iN; i) printf(%d ,x[i]);printf(\n);fun(x);for(i0; iN; i) printf(%d ,x[i]);printf(\n);getchar();
}
解题思路 这题代码复杂的点可能就在那个三目运算符了这种还是自己去推一遍才有感觉如果用if估计要挂一大串用三目运算符还是要简洁很多的
答案
#include stdio.h
#define N 10
int findmid(int a, int b, int c)
{ int t;t (ab)?(bc?b:(ac?c:a)):((ac)?a:((bc)?c:b));
/**********found**********/return t;
}
void fun(int x[])
{ int i,a,b,c,t[N];
/**********found**********/for(i0;iN;i) t[i]x[i];for(i0;iN-2;i){ at[i];bt[i1];ct[i2];
/**********found**********/x[i1]findmid(a,b,c);}
}
main()
{ int i, x[N]{6,5,7,23,18,5,8,21,45,38};for(i0; iN; i) printf(%d ,x[i]);printf(\n);fun(x);for(i0; iN; i) printf(%d ,x[i]);printf(\n);getchar();
}
测试
56.根据以下公式求值并作为函数值返回
给定程序MODI1.C中函数fun的功能是:根据以下公式求值并作为函数值返回。
例如给指定精度的变量eps输入0.0005时应当输出Pi3.140578。 请改正程序中的错误使它能得出正确结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构。
MODI1.C:
#include math.h
#include stdio.h
double fun(double eps)
{ double s,t; int n1;s0.0;
/************found************/t0;//通过下面的循环可以看出t就是公式中累加的每一项可以看到公式中第一项是1所以t应该初始化为1while( teps){ st;tt * n/(2*n1);n;}
/************found************/return(s);//题目中最后公式得到的是Π/2而我们要求的是Π所以这里应该还要乘以2
}
main()
{ double x;printf(\nPlease enter a precision: ); scanf(%lf,x);printf(\neps%lf, Pi%lf\n\n,x,fun(x));getchar();
}
解题思路 题目真是云里雾里的其实最后函数要得出的是圆周率感觉题目说得不够清楚很容易下意识认为最后求的就是公式得出的值
这个求Π/2的公式道是有意思我好像没见过
答案
#include math.h
#include stdio.h
double fun(double eps)
{ double s,t; int n1;s0.0;
/************found************/t1;while( teps){ st;tt * n/(2*n1);n;}
/************found************/return(s*2);
}
main()
{ double x;printf(\nPlease enter a precision: ); scanf(%lf,x);printf(\neps%lf, Pi%lf\n\n,x,fun(x));getchar();
}
测试
57.读入一个英文文本行将其中每个单词的第一个字母改成大写然后输出此文本行
给定程序modi1.c的功能是:读入一个英文文本行将其中每个单词的第一个字母改成大写然后输出此文本行这里的单词是指由空格隔开的字符串。
例如若输入: I am a student to take the examination.则应输出:工 Am A Student To Take The Examination.。
请改正程序中的语法错误使程序能得出正确的结果。
注意:不要改动 main函数不得增行或删行也不得更改程序的结构!
modi1.c
#include ctype.h
#include string.h
/************found************/
include stdio.h //调用库的操作都在预处理里加了#之后就是预处理指令
/************found************/
void upfst ( char p )//这里主函数传来的是一个字符数组所以这里参数应该为一个字符数组或指针
{ int k0;for ( ; *p; p )if ( k ){ if ( *p ) k 0; }else if ( *p ! ){ k 1; *p toupper( *p ); }//toupper()是变大写字母函数
}main( )
{ char chrstr[81];printf( \nPlease enter an English text line: ); gets( chrstr );printf( \n\nBefore changing:\n %s, chrstr );upfst( chrstr );printf( \nAfter changing:\n %s\n, chrstr );getchar();
}
解题思路 还是照例讲下题目代码使用的函数
int toupper(int c); //把小写字母转化为大写字母
参数c可以是一个表示字符的整数值通常是字符的 ASCII 码函数将返回将该字符转换为大写字母形式后的整数值如果是字母的话就会返回一个大写字母
答案
#include ctype.h
#include string.h
/************found************/
#include stdio.h
/************found************/
void upfst ( char *p )
{ int k0;for ( ; *p; p )if ( k ){ if ( *p ) k 0; }else if ( *p ! ){ k 1; *p toupper( *p ); }
}main( )
{ char chrstr[81];printf( \nPlease enter an English text line: ); gets( chrstr );printf( \n\nBefore changing:\n %s, chrstr );upfst( chrstr );printf( \nAfter changing:\n %s\n, chrstr );getchar();
}
测试
58.将形参str所指字符串中的数字字符按从前往后出现的次序从左往右拼接成一个整数返回主函数输出
给定程序MODI1.C中函数fun的功能是:将形参str所指字符串中的数字字符按从前往后出
现的次序从左往右拼接成一个整数返回主函数输出。若形参str中没有数字
则函数fun返回0给主函数。
例如若str的内容为”C3Xyz9D1则函数返回391程序输出391。
请改正程序中的错误使它能得出正确的结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构!
MODI1.C
#include stdio.h
#include string.hint fun(char* str)
{ int i, k;i 0;
/**********************found***********************/for (k0; kstrlen(str); k) //循环条件错了最大下标应该是strlen(str)-1{
/**********************found***********************/if ( (str[k] 0) (str[k] 9) ) //由于是在字符串中筛出数字字符应该大于等于字符0且小于等于字符9i i * 10 str[k] - 0;}
/**********************found***********************/return k;//k是下标i才是得出的整数
}int main()
{ char str[100];int l;printf(input string:);scanf(%s, str);l fun(str);printf(num:%d\n, l);return 0;
}
解题思路 用字符与整数比较时其实就是把字符转为ASCII码与整数比较
这里说几个常见字符的ASCII码 \0是00是48A是65,a是97 小写字母与对应的大写字母的ASCII码之差为32
答案
#include stdio.h
#include string.hint fun(char* str)
{ int i, k;i 0;
/**********************found***********************/for (k0; kstrlen(str); k) {
/**********************found***********************/if ( (str[k] 0) (str[k] 9) ) i i * 10 str[k] - 0;}
/**********************found***********************/return i;
}int main()
{ char str[100];int l;printf(input string:);scanf(%s, str);l fun(str);printf(num:%d\n, l);return 0;
}
测试
59.求S的值
给定程序modi1.c中函数fun的功能是:求S的值。设 例如当k为10时函数值应为: 1.533852。
请改正程序中的错误使它能得出正确结果。
注意:不要改动main函数不得增行或删行也不得更改程序的结构!
modi1.c
#include stdio.h
#include math.h/************found************/
void fun( int k )//一眼就可以看到fun函数是有返回值的返回值类型为double
{ int n; double s, w, p, q;n 1;s 1.0;
/************found************/while ( n k )//n还可以等于k{ w 2.0 * n;p w - 1.0;q w 1.0;s s * w *w/p/q;n;}
/************found************/return s//语句要以分号;结尾
}main ( )
{printf(%f\n, fun (10));getchar();
}
解题思路 这题代码很短也没有用什么函数(´∀)
答案
#include stdio.h
#include math.h/************found************/
double fun( int k )
{ int n; double s, w, p, q;n 1;s 1.0;
/************found************/while ( n k ){ w 2.0 * n;p w - 1.0;q w 1.0;s s * w *w/p/q;n;}
/************found************/return s;
}main ( )
{printf(%f\n, fun (10));getchar();
}
测试