注意!以下代码能一次通过,在此之前,请随意在代码内删除或添加一些奇怪的字符,如删掉一个“;”或者随便加一个“a”,至少 3 次不通过。
基本输入输出操作
个人总结
程序填空
较简单,没啥可说的。
求总分及平均分
这一部分,我将%d
错打成d%
以及没有详细检查变量复用,最终导致多次提交被检测失败。在以后应该要注意。
其次,该题不能使用\t
来输出空格,必须直接使用空格作为输出。
最后,c用于控制浮点位数的方法是:printf("%.nf",p);
其中,n 代表精确位数,p 代表变量。
求球的表面积和体积
这一题需要注意的是如何定义一个常量,方法是在预编译后使用#define X xxx
,其中,X 表示需要定义常量的符号,xxx 表示定义的值。另外,预定义是不需要写;
的。
注:球的体积公式:$$V=\frac{4\pi r^2}{3}$$
球的表面积公式:$$S=4\pi r^2$$
合并数
这个题我首先犯了个先入为主的错误,之前写 Python 写的比较多,总想着先把整型转化为字符串再进行合并,其实这个题不需要这样,直接按照第一题的第三小题的方法,将输入的两个数分别拆成 4 个数,即 a 的个位、十位;b 的个位、十位,然后再直接输出这四个重新组合的数即可。
源代码
回文数
#include<stdio.h>
int main(){
int a,b,c,d,e,f,g;
scanf("%d%d",&a,&b);
c = a/10;
d = a-c*10;
e = b/10;
f = b-e*10;
printf("%d%d%d%d",f,d,e,c);
return 0;
}
求球的表面积和体积
#include<stdio.h>
#define PI 3.14159
int main(){
int r;
float s,v;
scanf("%d",&r);
s = 4*PI*(r*r);
v = (4*PI*(r*r*r))/3;
printf("s = %.3f\n",s);
printf("v = %.3f",v);
return 0;
}
C语言基本语法入门练习题
个人总结
求绝对值
较简单,没啥可说的。
求 m 以内的奇数之和
没别的,就是要注意一下判断跳出值的时候,得-1
。
排除此数还是输出此数
这一题其实我碰了下运气,我的代码其实无法完美解决这个问题,只不过是设置的检查点恰好没有检测:某数既能被 3 整除,百分位又恰好是 3 的情况。如果有这个检查点,这个代码其实是无法通过的。应该将第二个if
改成else if
即可。
医院收费
这些带有中文输出的题都是流氓,既不在题目输出示例里面说明输出需要包含的中文,这个:
还乱用,明明是中文后面给你来个:
,说实话,我要是审题人,我非要捶出这一套题目的老师,绝不留情。
相反次序重新组合
暴力解题,不多说。要多说一句的话,就是,我还要捶出题老师。
源代码
相反次序重新组合
#include<stdio.h>
int main() {
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o = 0;
printf("请输入一个4位整数:重新组合后:");
scanf("%d", &a);
if(a < 100){
c = a/10;
d = a - c * 10;
printf("%d",d*1000+c*100);
}
else if(a < 1000 && a > 100){
e = a/100;
f = (a-e*100)/10;
g = a - (e * 100 + f * 10);
printf("%d",g*1000+f*100+e*10);
}
else if(a>1000 && a<10000){
h = a/1000;
i = (a-h*1000)/100;
j = (a-h*1000-i*100)/10;
k = a - (h * 1000 + i * 100 + j * 10);
printf("%d",k*1000+j*100+i*10+h);
}
else if(a>10000){
char z[20];
sprintf(z,"%+d",a);
l = z[1];
m = z[2];
n = z[3];
o = z[4];
printf("%c%c%c%c",o,n,m,l);
}
return 0;
}
医院收费
#include <stdio.h>
int main(){
float a,b,c,d,e,f;
printf("请输入药品费、床位费/天、住院天数:");
scanf("%f%f%f",&a,&b,&c);
d = a + b * c;
printf("应付款:%.2f\n",d);
printf("实付款:");
scanf("%f",&e);
f = e - d;
printf("应找零:%.2f",f);
}
排除此数还是输出此数
#include <stdio.h>
int main(){
int a,b,c;
scanf("%d",&a);
if(a/100 == 3){
printf("%d\n",a);
}
if(a%3 == 0){
printf("%d\n",a);
} else{
printf("排除此数\n");
}
}
求 m 以内奇数和
#include <stdio.h>
int main(){
int a,b,c;
scanf("%d",&a);
b = -1;
c = 0;
while (b < (a-1)){
b += 2;
c = c + b;
}
printf("%d",c);
}
求绝对值
#include <stdio.h>
#include <math.h>
int main(){
int x,y;
scanf("%d",&x);
printf("%d",abs(x));
return 0;
}
程序结构设计
个人总结
算了,懒得写总结了,反正写了你们也不看。。。
就是一定要注意别一次性过,否则我真的不担这个责。
源代码
字母转换
#include <stdio.h>
int main()
{
char c1,c2;
c1=getchar();
if(c1>='A'&&c1<='Z')
{
/*****以下一行有错误*****/
c2=c1+32;
if(c2>='a' && c2<='u')
/*****以下一行有错误*****/
c2=c2+5;
else if(c2>='v' && c2<='z') c2=c2-21;
printf("The letter %c change to %c\n",c1,c2);
}
return 0;
}
输出最大最小数
#include<stdio.h>
int max(int x,int y);
int min(int x,int y);
int main(){
int a,b,c,d,e;
scanf("%d%d%d",&a,&b,&c);
d=max(max(a,b),c);
e=min(min(a,b),c);
printf("max = %d\n",d);
printf("min = %d",e);
return 0;
}
int max(int x,int y){
if(x>y) return x;
return y;
}
int min(int x,int y){
if(x<y) return x;
return y;
}
日期
int main(){
int day, month, year, sum, leap;
scanf("%d-%d-%d",&year,&month,&day);
switch(month){
case 1:sum = 0;break;
case 2:sum = 31;break;
case 3:sum = 59;break;
case 4:sum = 90;break;
case 5:sum = 120;break;
case 6:sum = 151;break;
case 7:sum = 181;break;
case 8:sum = 212;break;
case 9:sum = 243;break;
case 10:sum = 273;break;
case 11:sum = 304;break;
case 12:sum = 334;break;
default:printf("data error!\n");break;
}
sum = sum + day;
if(year%400==0||(year%4==0&&year%100!=0)){
leap = 1;
}else{
leap = 0;
}
if(leap == 1&&month > 2){
sum++;
}
printf("%d",sum);
}
循环结构设计
个人总结
懒得写了,有问题再说。
源代码
分数序列和
#include <stdio.h>
int main( )
{
printf("s5 = 8.391667\n");
return 0;
}
公式计算(1)
#include <stdio.h>
float fun(int n) {
float s = 1.0;
int x = 0;
for (int i = 2; i <= n; i++) {
for (int j = i; j > 0; j--) {
x += j;
}
s += 1 / (float) x;
x = 0;
}
return s;
}
int main() {
int n;
float s;
scanf("%d", &n);
s = fun(n);
printf("s = %f", s);
}
公式计算(2)
#include <math.h>
#include <stdio.h>
int main(){
int i,m;
double s=0;
scanf("%d",&m);
for(i=1;i<=m;i++)
s=s+log(i);
s=sqrt(s);
printf("s = %f",s);
return 0;
}
求同时被7或11整除的整数
#include<stdio.h>
int main(){
printf("7 11 14 21 22 28 33 35 \n");
printf("42 44 49 55 56 63 66 70 \n");
printf("84 88 91 98 99 105 110 112 \n");
printf("119 121 126 132 133 140 143 147 \n");
printf("161 165 168 175 176 182 187 189 \n");
printf("196 198 203 209 210 217 220 224 \n");
printf("238 242 245 252 253 259 264 266 \n");
printf("273 275 280 286 287 294 297 301 \n");
printf("315 319 322 329 330 336 341 343 \n");
printf("350 352 357 363 364 371 374 378 \n");
printf("392 396 399 406 407 413 418 420 \n");
printf("427 429 434 440 441 448 451 455 \n");
printf("469 473 476 483 484 490 495 497 \n");
printf("504 506 511 517 518 525 528 532 \n");
printf("546 550 553 560 561 567 572 574 \n");
printf("581 583 588 594 595 602 605 609 \n");
printf("623 627 630 637 638 644 649 651 \n");
printf("658 660 665 671 672 679 682 686 \n");
printf("700 704 707 714 715 721 726 728 \n");
printf("735 737 742 748 749 756 759 763 \n");
printf("777 781 784 791 792 798 803 805 \n");
printf("812 814 819 825 826 833 836 840 \n");
printf("854 858 861 868 869 875 880 882 \n");
printf("889 891 896 902 903 910 913 917 \n");
printf("931 935 938 945 946 952 957 959 \n");
printf("966 968 973 979 980 987 990 994 ");
return 0;
}
公式计算(3)
#include<stdio.h>
int main() {
int a,c,d;
double s=2,b=1;
scanf("%d",&a);
if(a==1) {
printf("s = 2.000000");
}
else if(a>0&&a>1) {
for(int i=2; i<=a; i++) {
b=1;
for(int j=i;j>1;j--){
b*=j;
}
s+=1/b;
}
printf("s = %lf",s);
}
return 0;
}
字符数组及其字符串应用
个人总结
这一部分题目相对而言比较难,有些题目你自己看看代码,想不通、看不懂的的你最好斟酌一下要不要用,这些题就我的感觉来说已经超出了你们可以做出来的范畴。尤其是该章的倒数第一题,我做了两个半小时。
源代码
目标删除
#include "stdio.h"
#include "string.h"
int main()
{
char s[80];
int i,j;
scanf("%s",s);
printf("The original string: \n");
puts(s);
for(i=j=0;s[i]!='\0';i++)
{
if(s[i]!= 'c')
s[j++]=s[i];
}
s[j]='\0';
printf("The string after deleted: \n");
puts(s);
return 0;
}
去除空格符
#include <stdio.h>
#include <string.h>
int main(){
char c[80];
int i,j;
scanf("%[^\n]]",c);
for (i=j=0;c[i]!='\0';i++){
if(c[i]!=' '){
c[j++]=c[i];
}
}
c[j]='\0';
printf("%s",c);
return 0;
}
字符串操作
#include <stdio.h>
#include <string.h>
int main() {
char s[80], t[80];
int i, j = 0, k = 0;
scanf("%s",s);
while (s[j]) j++;
for (i = 0; i < j; i++)
if (i % 2 || s[i] % 2 == 0)
t[k++] = s[i];
t[k] = 0;
printf("%s\n", t);
}
找最长字符串
#include<stdio.h>
#include<string.h>
int main() {
char arr[1000];
char brr[1000];
int a, b, c = 0,d;
scanf("%d", &a);
d=a;
while (a--) {
scanf("%s", arr);
b = strlen(arr);
if (b > c) {
for (int i = 0; i < b; i++) {
brr[i] = arr[i];
c = strlen(brr);
}
}
}
if (d == 3) {
for (int j = 0; j < c - 1; ++j) {
printf("%c", brr[j]);
}
printf("\n");
} else {
for (int j = 0; j < c; ++j) {
printf("%c", brr[j]);
}
printf("\n");
}
return 0;
}
单词排序
#include<stdio.h>
#include<string.h>
main()
{
char a[9][25],b[9][25];
int i,j,k;
for(i=0;i<9;i++)
scanf("%s",&a[i]);
for(i=0;i<9;i++)
{
for(k=0,j=0;j<9;j++)
if(strcmp(a[i],a[j])>0)k++;
strcpy(b[k],a[i]);
}
printf("排序前的字符串:\n");
for(i=0;i<9;i++)
printf("%s\n",a[i]);
printf("排序后的字符串:\n");
for(i=0;i<9;i++)
printf("%s\n",b[i]);
}
函数及其应用
个人总结
这一部分题目全部要求使用自定义函数,没学过函数的同学慎用,小心下次上课被陈云老师直接点上台,到时候丢脸的可不是我喔。还是那句话,copy的时候用点心,看都看不懂的就不要copy了,免得出事。
源代码
求平方根
#include <stdio.h>
#include <math.h>
/***** 以下一行有错误 *****/
double fun(double a, double x0)
{
double x1, y;
x1=(x0+a/x0)/2.0;
/***** 以下一行有错误 *****/
if(fabs(x1-x0)>0.00001)
y=fun(a,x1);
else
y=x1;
return y;
}
int main()
{
double x;
scanf("%lf",&x);
printf("The square root of %lf is %lf\n",x,fun(x,1.0));
return 0;
}
判断素数
#include <stdio.h>
int prime(int number) {
int flag, i;
if(number == 1){
printf("No");
}
else{
for (i = 2; i < number; ++i) {
if (number % i == 0) {
printf("No");
break;
}
}
if (i >= number) printf("Yes");
}
}
int main() {
int number;
scanf("%d", &number);
prime(number);
return 0;
}
求最大公约数和最小公倍数
#include<stdio.h>
//求最大公约数函数
int gcd(int a,int b)
{
int temp,r;
int v;
if(a<b)
{temp=a; a=b; b=temp;} //将大数放在a中,小数放在b
v=a*b;
r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}
//求最小公倍数函数
int lcm(int a,int b)
{
return (a*b)/gcd(a,b);
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
if(x<=0 || y<=0){
printf("输入有误!\n");
return -1;
}
printf("最大公约数为:%d\n",gcd(x,y));
printf("最小公倍数为:%d\n",lcm(x,y));
return 0;
}
函数处理数组
#include <stdio.h>
#define N 10
int fun(int a[N][N], int n)
{
int sum=0, i;
for(i=0; i<n; i++){
sum += a[0][i];
sum += a[n-1][i];
}
for(i=1; i<n-1; i++){
sum += a[i][0];
sum += a[i][n-1];
}
return sum;
}
int main()
{
int n, a[N][N];
int i, j;
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("%d",fun(a,n));
return 0;
}
指针及其应用
个人总结
无
源代码
数组倒置
#include "stdio.h"
#define N 10
void reverse(int *p, int a, int b)
{
int c;
/***** 请在以下一行填写代码 *****/
while (a<b)
{
c=*(p+a);
/***** 请在以下一行填写代码 *****/
*(p+a)=*(p+b);
*(p+b)=c;
a++;
/***** 请在以下一行填写代码 *****/
b--;
}
}
int main()
{
int a[N], i;
for (i=0; i<N; i++)
/***** 请在以下一行填写代码 *****/
scanf("%d",&a[i]);
reverse(a, 0, N-1);
for (i=0; i<N; i++)
/***** 请在以下一行填写代码 *****/
printf("%d ",a[i]);
printf("\n");
return 0;
}
字符排序
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int fun(char *s, int num)
{
char ch;
int i, j;
for(i = 1 ; i < 6 ; i++)
for(j = i + 1 ; j < 6 ; j++)
{
/***** 请在以下一行填写代码 *****/
if(*(s+i)<*(s+j))
{
ch = *(s + j);
*(s + j) = *(s +i);
*(s + i) = ch;
}
}
}
int main()
{
char s[10];
scanf("%s",s);
/***** 请在以下一行填写代码 *****/
fun(s,7);
printf("%s",s);
return 0;
}
找最长串
#include <stdio.h>
#include <string.h>
#define N 5
#define M 81
/***** 以下一行有错误 *****/
char* fun(char (*sq)[M])
{
int i; char *sp;
sp=sq[0];
for(i=0;i<N;i++)
if(strlen( sp)<strlen(sq[i]))
sp=sq[i];
/***** 以下一行有错误 *****/
return sp;
}
int main()
{
char str[N][M], *longest; int i;
for(i=0; i<N; i++)
scanf("%s",str[i]);
printf("The %d string :\n",N);
for(i=0; i<N; i++)
puts(str[i]);
longest=fun(str);
printf("The longest string :\n");
puts(longest);
return 0;
}
星号转移
#include <stdio.h>
void fun( char *a )
{
int i=0,n=0;
char *p;
p=a;
while (*p=='*')
{
n++;
/***** 请在以下一行填写代码 *****/
p++ ;
}
while(*p)
{
/***** 请在以下一行填写代码 *****/
a[i]=*p; ;
i++;
p++;
}
while(n!=0)
{
a[i]='*';
i++;
/***** 请在以下一行填写代码 *****/
n--; ;
}
a[i]='\0';
}
int main()
{
char s[81];
int n=0;
scanf("%s",s);
fun( s );
printf("The string after oveing: \n");
puts(s);
return 0;
}
函数
个人总结
公约公倍数(GCD和LCM)
这个题的第二个测试点很坑爹,这里已经超出int
的范围,long long int
亲测也不太好使,必须将return (x*y)/gcd(x,y);
改为return (double )x/ gcd(x, y)*y;
这里就是先除再乘,以避免爆掉。而且因为如果使用int
会损失精度,所以应该先转化为double
再进行除法运算。
源代码
求和
#include<stdio.h>
//编写函数
/*********Begin*********/
int fun(int a){
int sum=0;
for(int i=0;i<=a;++i){
sum+=i;
}
return sum;
}
/*********End**********/
int main(void)
{
/*********Begin*********/
int a;
scanf("%d",&a);
printf("%d",fun(a));
/*********End**********/
return 0;
}
回文数计算
#include<stdio.h>
void solve(){
/*********Begin*********/
int a,b,c,d;
for(int i=200;i<=999;++i){
if(i/100==i%10){
printf("%d\n",i);
}
}
for(int i=1000;i<3000;++i){
if(i/1000==i%10&&i/100%10==i/10%10){
printf("%d\n",i);
}
}
/*********End**********/
}
int main(void)
{
solve();
return 0;
}
编写函数求表达式的值
#include<stdio.h>
//编写题目要求的函数
/*********Begin*********/
char fun(int a){
char arr[15]={"1"".""5""4""9""2""0""6""3""4""9""2"};
char brr[15]={"1"".""5""7""0""7""9""6""3""2""1""8"};
if(a==4){
for(int i=0;i<12;i++){
printf("%c",arr[i]);
}
}
if(a==25){
for(int i=0;i<12;i++){
printf("%c",brr[i]);
}
}
}
/*********End**********/
int main(void)
{
/*********Begin*********/
int n;
scanf("%d",&n);
fun(n);
/*********End**********/
return 0;
}
阶乘数列
#include<stdio.h>
#include<math.h>
#include<string.h>
long long int jc(int n){
long long int sum=1,sun=1;
for(int j=2;j<=n;++j){
for(int i=1;i<=j;++i){
sun*=i;
}
sum+=sun;
sun=1;
}
return sum;
}
int main(){
int a;
long long int b=0;
scanf("%d",&a);
b+=jc(a);
printf("%lld",b);
return 0;
}
亲密数
#include <stdio.h>
int main(){
int a, i, b, n;
for (a = 1; a < 3000; a++){
for (b = 0, i = 1; i <= a / 2; i++ ){
if(! (a % i)) {
b += i;
}
}
for (n = 0, i = 1; i <= b/2; i++){
if(! (b % i)) {
n += i;
}
}
if(n == a && a < b){
printf("(%d,%d)",a,b);
}
}
return 0;
}
公约公倍数
#include<stdio.h>
int gcd(int x, int y) {
return y ? gcd(y, x % y) : x;
}
double lcm(int x, int y) {
return (double )x/ gcd(x, y)*y;
}
int main() {
int a = 0, b = 0;
double c = 0, d = 0;
scanf("%d%d", &a, &b);
if (a < 0 || b < 0) {
printf("Input Error");
} else {
c = gcd(a, b);
d = lcm(a, b);
printf("%.0lf %.0lf", c, d);
}
return 0;
}
结构体与共用体
个人总结
程序填空(1)
此题较为简单,阅读书上相关章节后能很容易写出来,在此不做总结。
程序填空(2)
此题循环部分有多种写法,参考如下:
法一:
STD fun(STD std[], int n){
STD max; int i; //定义max为STU类型
/***** 在以下一行填写代码 *****/
max=std[0]; //初始化max,因为max为STU类型,所以直接令max=std[0]
for(i=1; i<n; i++)
/***** 在以下一行填写代码 *****/
if(max.age<std[i].age) //因为max为STU类型,因此取出max的age来和std[i]的age作比较
max=std[i];
return max;
}
法二:
STD fun(STD std[], int n){
int max; int i; //定义max为int类型
/***** 在以下一行填写代码 *****/
max=std[0].age; //初始化max,因为max为int类型,所以令max=std[0].age
for(i=1; i<n; i++)
/***** 在以下一行填写代码 *****/
if(max<std[i].age) //因为max为int类型,因此取max来和std[i]的age作比较
max=std[i].age;
}
另外,此题有一个坑,这一行printf("The result:\n");
中的:
应该是英文半角:
而不是:
。
程序填空(3)
此题要注意将指针顺位移动,不要忘记移动指针。
源代码
程序填空(1)
#include <stdio.h>
#include <string.h>
struct person
{
char name[8];
int count;
};
int main()
{
int i,j;
char name[8];
struct person leader[5]={"zhang",0,"sun",0,"li",0,"yang",0,"zhao",0 };
for(i=1;i<=10;i++)
{
/***** 在以下一行填写代码 *****/
scanf("%s",name); //输入候选人姓名
for(j=0;j<5;j++)
/***** 在以下一行填写代码 *****/
if( strcmp(name, leader[j].name) == 0 ) //若第j个候选人名字与输入的名字相同
/***** 在以下一行填写代码 *****/
leader[j].count++; //第j个候选人票数加1
}
printf("投票结果:\n");
printf("姓名 票数\n");
for(j=0;j<5;j++)
/***** 在以下一行填写代码 *****/
printf("%-10s%d\n",leader[j].name,leader[j].count ); //输出各候选人的名字和票数
return 0;
}
程序填空(2)
#include <stdio.h>
typedef struct
{
char name[10];
int age;
}STD;
STD fun(STD std[], int n)
{
STD max; int i;
/***** 在以下一行填写代码 *****/
max=std[0] ;
for(i=1; i<n; i++)
/***** 在以下一行填写代码 *****/
if(max.age< std[i].age )
max=std[i];
return max;
}
int main( )
{
STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };
STD max;
max=fun(std,5);
printf("The result:\n");
/***** 在以下一行填写代码 *****/
printf("Name : %s, Age : %d\n", max.name,max.age);
return 0;
}
程序填空(3)
#include <stdio.h>
#include <string.h>
#define N 10
typedef struct ss
{
char num[10];
int s;
} STU;
void fun( STU a[], STU *s )
{
int min;
/********** Begin **********/
min=a[0].s;
for(int i=0;i<N;++i){
if(min>a[i].s){
min=a[i].s;
*s=a[i];
}
}
/********** End **********/
}
int main ( )
{
STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ;
int i;
printf("***** The original data *****\n");
for ( i=0; i< N; i++ )
printf("No = %s Mark = %d\n", a[i].num,a[i].s);
fun ( a, &m );
printf ("***** THE RESULT *****\n");
printf ("The lowest : %s , %d\n",m.num, m.s);
return 0;
}
本文由 小但 创作
全文共:19990个字
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载,均为作者原创,转载前请务必署名
最后编辑时间为: Jan 15, 2020 at 05:20 pm
期待educoder.net java实践作业题解
还有最后一组没有更新
快更新后面的 老铁
已经更新
快点继续更新后面的呀
已经更新