### C语言-1 ```c /*------------------------------------------------------------------------------ 【程序设计】输入一个1000以内的三位数,找出小于这个三位数且个位数字与十位数字之和 除以10所得的余数等于百位数字的数,并输出满足条件的数字之和。 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include<stdio.h> int main() { int a,b,c,d,i,j,sum=0; scanf("%d",&j); /**********Program**********/ for(i=100;i<j;i++){ a = i%10;//个位 b = i%100/10;//十位 c = i/100;//百位 d = (a+b)%10;//个位+十位 取模 if(c == d){ sum += i; } } /********** End **********/ printf("%d\n",sum); } ``` ### C语言-2 ```c /*------------------------------------------------------------------------------ 【程序设计】任意一个大于0的正整数,都可以写成若干个2的正整数次幂的和的形式。 例如:7=2^2+2^1+2^0 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include<stdio.h> #include<string.h> #include<math.h> #include<ctype.h> #include<stdlib.h> #define N 4 void binary_power(unsigned int x) { int flag =1; unsigned int s,t,y; printf("%u=",x); /**********Program**********/ t = 1; y = 0; //二进制的权位值 2^2 2^1 2^0 //从末尾开始一直乘 乘到 大于传入的x就停止 同时记录下次方数 while(t <= x){ t*=2; y++; } y--;//2^y 会正好大于x printf("2^%d", y);//最高位 x -= (int)pow(2, y);//求2的y次方 同时对x进行减法运算 y--; while(x > 0){ t = 1; s = (int)pow(2, y); if(x >= s){//当前权位值没有大于需要运算的数据 x -= s; printf("+2^%d", y); } y--; } /********** End **********/ printf("\n"); } int main() { unsigned int n[N]={1,15,32,144}; int i; for(i=0;i<N;++i) binary_power(n[i]); return 0; } ``` ### C语言-3 ```c /*------------------------------------------------------------------------------ 【程序设计】从键盘接收3个无序的整数,将这3个数据都插入到升序排列的数组中,并保持数组仍然有序。 输入输出如下: 4 6 9 12 15 18 23 26 32 39 1 5 6 1 4 5 6 6 9 12 15 18 23 26 32 39 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include<stdio.h> #define N 10 void main( ) { int a[N+5]={4,6,9,12,15,18,23,26,32,39},p,x,i,j; for(i=0;i<N;i++){ printf("%d ",a[i]); } printf("\n"); /**********Program**********/ for(i=N;i<N+3;i++){ scanf("%d", a+i); } for(i=0;i<N+3-1;i++){ for(j=0;j<N+3-1-i;j++){ if(a[j] > a[j+1]){ x = a[j]; a[j] = a[j+1]; a[j+1] = x; } } } /********** End **********/ for(i=0;i<N+3;i++){ printf("%d ",a[i]); } printf("\n"); } ``` ### C语言-4 ```c /*------------------------------------------------------------------------------ 【程序设计】输入一个小于等于10000的整数n,在[100,n]之间打印出各位数字和为5的所有整数的个数. ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include<stdio.h> void main() { int a,b,c,d,k,i,n; k=0; scanf("%d",&n); /**********Program**********/ for(i=100;i<=n;i++){ a = i;//备份一遍i的数据 d = 0; while(a){ d += (a%10); a /= 10; } if(d == 5){ k++; } } /********** End **********/ printf("%d\n",k); } ``` ### C语言-5 ```c /*------------------------------------------------------------------------------ 【程序设计】编写函数rtrim,用来删除字符串尾部的空格,首部和中间的空格不删除。例如:字符串为:" A BC DEF ", 删除后的结果是" A BC DEF"。要求函数形参采用指针变量。 测试输入: A BC DEF 测试输出: A BC DEF 说明:测试输入中,A前有4个空格,F后有5个空格 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include <stdio.h> #include <string.h> void main() { void rtrim(char *p); char s[100]; gets(s); rtrim(s); puts(s); } void rtrim(char *p) { int i; /**********Program**********/ i=0; while(*(p+i) != '\0'){ i++; } while(*(p+i-1) == ' '){ *(p+i-1) = '\0'; i--; } /********** End **********/ } ``` ### C语言-6 ```c /*------------------------------------------------------------------------------ 【程序设计】定义一个函数实现字符串的逆序存放(连续的字符串,中间不包含空格),要求用指针实现。 在主函数中调用函数实现字符串逆序存放。运行程序,输入字符串,输出逆序后的字符串。 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include<stdlib.h> #include<stdio.h> void reversed_str(char *str){ char *p=str,*q=str; int temp; while(*q!='\0'){ q++; } q--; /**********Program**********/ while(p < q){ temp = *p; *p = *q; *q = temp; p++; q--; } /********** End **********/ } int main(){ char s[50]; printf("输入字符串:"); scanf("%s",s); printf("逆序前:%s\n",s); reversed_str(s); printf("逆序后:%s\n",s); return 0; } ``` ### C语言-7 ```c /*------------------------------------------------------------------------------ 【程序设计】从键盘输入一位整数i,计算其各位数字之和。 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include<stdio.h> #include <stdlib.h> int main(){ int i,sum=0,a; scanf("%d",&i); /**********Program**********/ while(i){ sum += i%10; i/=10; } /********** End **********/ printf("%d\n",sum); return 0; } ``` ### C语言-8 ```c /*------------------------------------------------------------------------------ 【程序设计】编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。 所谓回文是指顺读和倒读都一样的字符串。如"XZYKYZX"是回文。 ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,否则不得分。 仅在Program-End之间填入若干语句。不要删除标志否则不得分。 ------------------------------------------------------------------------------*/ #include <stdio.h> #include <string.h> void main() { char s[50]; int hw(char *s); gets(s); if(hw(s)) printf("是回文!\n"); else printf("不是回文!\n"); } int hw(char *s) { int flag=1; char *p,*q; /**********Program**********/ p = s;//指向字符串首元素 q = s+strlen(s)-1;//指向末尾元素 while(p < q){ if(*p != *q){ flag = 0; break; } p++; q--; } return flag; /********** End **********/ } ```