c语言的题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言的题目相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
int main()

int n,k=0,m=0;
scanf("%d",&n);
while(n)
m=m*10+n%10;n/=10;k++;
while(k)
printf("%2d",m%10);m/=10;k--;
return 0;

//运行示例截图:

追问

这个输入0的话好像没有输出 请问怎么改呢

追答#include <stdio.h>
int main()

int n,k=0,m=0;
scanf("%d",&n);
while(n)
m=m*10+n%10;n/=10;k++;
if(k==0) printf("%2d",m);
else while(k)
printf("%2d",m%10);m/=10;k--;
return 0;

追问

谢谢

参考技术A // 解决方案1,直接输出
#include <stdio.h>
int main()

  int number;
  scanf("%d", &number);
  char array[100];
  sprintf(array, "%d", number);
  for(int i = 0; array[i] != '\\0'; ++i) 
    printf("%2c", array[i]);
  
  printf("\\n");
  return 0;


// 解决方案2, 递归方法
#include <stdio.h>
void seqPrint(int n) 
    if(n/10)
        seqPrint(n/10);
    printf("%2d", n%10);

int main()

  int number;
  scanf("%d", &number);
  seqPrint(number);
  printf("\\n");
  return 0;

参考技术B #include <stdio.h>

void print(int);

int main()

   int num;
   scanf("%d", &num);
   if (num == 0) 
  printf("%2d", num);   
    else 
      print(num);
   
   return 0;


void print(int num) 
int digits[100];
int factor = 10;
int tmp = num;
int index  = 0;
while (tmp != 0) 
int digit = tmp % factor;
digits[index++] = digit;
tmp /= 10;


for (index = index - 1; index >= 0; index--) 
printf("%2d", digits[index]);

这道题的难点在于如何将一个数字中的所有数字拆分开来,num % 10 获取到的是最后一个数字,num / 10是去掉最后一个数字之后的新数字,这样不断的做直到该数字变成0也就把所有的数字都拆出来了,不过这时候拿到的数字是反过来的,需要从后向前读取。

参考技术C 给你提供思路:先对10取余数,得出最后一位数,然后除去10, 再对10取余得出倒数第二位数,以此类推,当除10等于0时结束。
望采纳
参考技术D int x1, x2; char y1, y2; scanf("%d%c%d%c", &x1, &y1, &x2, &y2); 若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。(注:└┘代表空格) A.10A└┘20B B.10└┘A20B C.10 └┘A└┘20└┘ B D.10A20└┘B >>>>A 若变量已正确说明为float类型, 要通过语句scanf("%f %f%f", &a, &b, &c);给a赋予10.0, b赋予22.0, c赋予33.0, 不正确的输入形式为()。 A.10 B.10.0,22.0,33.0 22 33 C.10.0 D.10 22 22.0 33.0 33 >>>>B 有如下程序,若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。(注:└┘代表空格) int x1, x2; char y1, y2; scanf("%d%d", &x1,&x2); scanf("%c%c", &y1,&y2); A.1020AB B.10└┘20└┘ABC C.10└┘20 D.10└┘20AB AB >>>>D 有如下程序段,对应正确的数据输入是( )。 float x,y; scanf("%f%f", &x,&y); printf("a=%f,b=%f", x,y); A.2.04 B.2.04,5.67 5.67 C.A=2.04,B=5.67 D.2.055.67 >>>>A 规则只有一个, 就是scanf中的格式,和实际输入的格式,必须完全匹配.

一道C语言题目,跪求!!

#include <stdio.h>
#include<string.h>
main()
int i;
char s[10],t[10];
gets(t);
for(i=0;i<2;i++)
gets(s);
if (strcmp(t,s)<0)
strcpy(t,s);

printf("%s\n",t);

程序运行后,从键盘上输入(<CR>代表回车符):CDEF<CR>BADEF<CR>QTHRG<CR>,则程序输出结果为什么??
求高手讲解,答案是QTHRG

这个问题的关键是 int strcmp (const char *str1, const char *str2 ),即【比较字符串函数】的理解。
比较字符串是基于【字符串的字典序】的。给定两个字符串,谁的【字典序】大呢?这就可以通过 strcmp 函数来确定!

strcmp 的内部实现大致是这样的:
int strcmp (const char *str1, const char *str2 )

int i;
for(i=0;i<str1[i] != '\0' && str2[i] != '\0';i++)

// str1 和 str2 对应位置的字符相等,
//比较下一个字符
if(str1[i]==str2[i]) continue;

// str1 和 str2 对应位置的字符中,str1 [i] 的 ascii 码大于 str2 [i] 的 ascii 码,
//认为 str1 > str2,返回 1
else if(str1[i]>str2[i]) return 1;

// str1 和 str2 对应位置的字符中,str1 [i] 的 ascii 码小于 str2 [i] 的 ascii 码,
//认为 str1 < str2,返回 -1
else if(str1[i]<str2[i]) return -1;


// 如果执行到这里,说明 str1 和 str2 中至少有一个字符串中的字符已经在比较中用完了,
//即 str1[i] == '\0' 和 str2[i] == '\0' 至少有一个成立

//如果 str1 和 str2 中的字符在比较中同时用完了,并且没有发现对应位置有不同的字符,
//认为 str1 和 str2 相等,返回 0
if(str1[i] == '\0' && str2[i] == '\0') return 0;

//如果 str1 中的字符在比较中同时用完了,并且和 str2 对应位置上没有发现不同字符
//但是 str2 还有多余的字符(比如 str1="abc",str2="abcde",str2比str1多出"de")
//认为 str1 < str2 ,返回 -1
else if(str1[i] == '\0') return -1;

//如果 str2 中的字符在比较中同时用完了,并且和 str1 对应位置上没有发现不同字符
//但是 str1 还有多余的字符(比如 str1="abcde",str2="abc",str1比str2多出"de")
//认为 str1 > str2 ,返回 1
else if(str2[i]== '\0') return 1;


如果理解了 strcmp 函数的含义,那你的程序就容易理解了:

#include <stdio.h>
#include<string.h>
main()
int i;
char s[10],t[10];
// 首先读如一个字符串,保存在 t
gets(t);
for(i=0;i<2;i++)

//继续读入字符串,暂时保存在 s
gets(s);
//比较刚读入的字符串 s 和保存在 t 中的字符串 ,
//如果 t 中的字符串比 s 中的字符串【字典序】【小】
//(你应该已经理解一个字符串比另一个字符串【字典序】【小】的含义了吧?)
//则把 s 字符串中的内容拷贝到 t 字符串中(没错,strcpy 函数就是做这个事情的)
if (strcmp(t,s)<0)
//通过这次拷贝,t 中保存的字符串又成功的变回你【当前已经输入】的字符串中
//【字典序】【最大】的了!!!
strcpy(t,s);


//到这里你应该知道,t 中保存的字符串是你输入的【所有字符串】中【字典序最大】的!!
printf("%s\n",t);
参考技术A gets(t);//第一个输入的字符串CDEF保存在t内
for(i=0;i<2;i++)
gets(s);
if (strcmp(t,s)<0)
strcpy(t,s);
//后面输入的两个字符串保存在s内,比较t,s两个字符串,如果t<s,则strcmp函数返回<0的值,则if条件成立,这时将s赋值给t。
因为CDEF第一个字符为c,BADEF第一个字符为B,在字符串比较中,C>B,所以t>s,所以不执行if中的语句。
而第二次循环中,c<Q,所以QTHRG赋值给t.
最终输出t的值为QTHRG
参考技术B main()
int i;
char s[10],t[10];
gets(t); //输入字符串t
for(i=0;i<2;i++)
gets(s); //输入字符串s,
if (strcmp(t,s)<0) //比较t和s,
strcpy(t,s); //t<s的话,把s拷贝到t中,

printf("%s\n",t);

因为BADEF<CDEF,所以第一次不拷贝
CDEF<QTHRG,这时候会拷贝
所以结果是QTHRG
参考技术C 在第一次循环时,strcmp()函数判断出t不小于s,于是条件为假,不执行。
第二次循环时,t恰小于s,条件为真,于是发生复制,输出为首字母ASCII码较大的字符串,即QTHRG
参考技术D #include <stdio.h>
#include<string.h>
main()
int i;
char s[10],t[10];
gets(t); //t[]=CDEF
for(i=0;i<2;i++)

gets(s); //第一次循环,s[]=BADEF 然后字符串比较,t>s, 不符合if 要求
if (strcmp(t,s)<0) //无操作;第二次循环s[]=QTHRG, 然后字符串比较,t<s,不符合if 要求
strcpy(t,s); //复制t[]=s[]=QTHRG

printf("%s\n",t); //打印,即答案t[]=s[]=QTHRG
第5个回答  2011-02-22 #include <stdio.h>
#include<string.h>
void main()

char s[10];
char t[10];

gets(t);
gets(s);
if (strcmp(t,s)<0)//当t<s时,返回值<0 两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
strcpy(t,s);//把s的ASCII值拷贝到t
printf("%s\n",t);//输出的就是ASCII值较大者

不明白为何要使用循环来判断呢?

以上是关于c语言的题目的主要内容,如果未能解决你的问题,请参考以下文章

一道C语言题目,跪求!!

求助一道C语言设计题目

c语言的题目

高分悬赏C语言题目!!!

C语言的题目

求c语言题目答案。。。。