先說題:
共三道題,1.5小時,C語言實現。時間很緊啊....
a、輸入一個字串,然後對每個字元進行奇數同位,最後輸出校正後的位元!(如‘3’,輸出:10110011);
b、設計8個任務函數task0()-task7()只輸出一句話:如task0()輸出“task0 is called!”;設計一個調度函數schedule()輸入一個字串如"012345"然後返回一個函數指標數組和字串的長度作為執行函數execute()的參數進行調度任務函數。主函數只有調度函數。
c、實現一個加法器,保證兩個加數是任意長的整數。
參考程式:
a、
#include<stdio.h><br />#include<stdlib.h><br />int f(int n){<br /> int c;<br /> for(c=0;n!=0;c++)<br /> n=n&(n-1);<br /> return c;<br />}<br />int main(){<br /> char str[1000];<br /> for(;scanf("%s",str)!=EOF;){<br /> for(int i=0;str[i];i++){<br /> int x=f(str[i]);<br /> printf("%d",x&1?0:1);<br /> for(int j=6;j>=0;j--){<br /> printf("%d",(str[i]>>j)&1);<br /> }<br /> }<br /> }<br /> system("pause");<br />}<br />
資料測試:
b、僅供參考。。。
#include<stdio.h><br />#include<string.h><br />#include<stdlib.h><br />typedef void (*ptask)();<br />//8個任務函數;<br />void task0(){<br /> printf("task0 is called!/n");<br />}<br />void task1(){<br /> printf("task1 is called!/n");<br />}<br />void task2(){<br /> printf("task2 is called!/n");<br />}<br />void task3(){<br /> printf("task3 is called!/n");<br />}<br />void task4(){<br /> printf("task4 is called!/n");<br />}<br />void task5(){<br /> printf("task5 is called!/n");<br />}<br />void task6(){<br /> printf("task6 is called!/n");<br />}<br />void task7(){<br /> printf("task7 is called!/n");<br />}<br />ptask fun[9]={task0,task1,task2,task3,task4,task5,task6,task7};</p><p>void execute(ptask* fun,int len){//執行函數<br /> for(int i=0;i<len;i++){<br /> ptask pfun=fun[i];<br /> pfun();<br /> }<br />}</p><p>void schedule(){//調度函數;<br /> ptask fun[100];//定義函數指標數組;<br /> int len;//字串長度;<br /> char s[1000];<br /> printf("請輸入字串:/n");<br /> scanf("%s",s);<br /> len=strlen(s);<br /> for(int i=0;i<len;i++){<br /> int temp;<br /> temp=s[i]-'0';<br /> if(temp==0)fun[i]=task0;<br /> else if(temp==1)fun[i]=task1;<br /> else if(temp==2)fun[i]=task2;<br /> else if(temp==3)fun[i]=task3;<br /> else if(temp==4)fun[i]=task4;<br /> else if(temp==5)fun[i]=task5;<br /> else if(temp==6)fun[i]=task6;<br /> else if(temp==7)fun[i]=task7;<br /> }<br /> execute(fun,len);<br />}</p><p>int main(){<br /> schedule();<br /> system("pause");<br />}<br />
資料測試:
c、
#include <iostream><br />#include <string><br />using namespace std;<br />string Addition(string one, string two);<br />int main()<br />{<br /> int n, i;<br /> string first, second;<br /> cout << "Please enter two numbers: ";<br /> cin >> first >> second;<br /> cout << "The result is: " << Addition(first, second) << endl;<br /> //return 0;<br /> system("pause");<br />}<br />string Addition(string one, string two)<br />{<br /> int j, max;<br /> //分別表示第一,二個字串的長度<br /> int flen, slen;<br /> string sum;<br /> flen = one.size();<br /> slen = two.size();<br /> if(flen >= slen)<br /> {<br /> sum = one;<br /> for(j=0;j<slen;j++)<br /> sum[flen-j-1] = sum[flen-j-1] + two[slen-j-1] - '0';<br /> max = flen;<br /> }<br /> else<br /> {<br /> sum = two;<br /> for(j=0;j<flen;j++)<br /> sum[slen-j-1] = sum[slen-j-1] + one[flen-j-1] - '0';<br /> max = slen;<br /> }<br /> //如果第j位的數大於9,則將其減10,並向上一位進一<br /> for(j=max-1;j>=1;j--)<br /> {<br /> if(sum[j] > '9')<br /> {<br /> sum[j] -= 10;<br /> sum[j-1]++;<br /> }<br /> }<br /> if(sum[0] > '9')<br /> {<br /> sum[0] -= 10;<br /> sum = "1" + sum;<br /> }<br /> return sum;<br />}<br />
資料測試: